Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Side by Side Diff: webkit/glue/webworkerclient_impl.h

Issue 337057: Move webworker{client}_impl.{h,cc} into webkit/api/src (Closed)
Patch Set: mulitple workers per process comment fixed Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webkit/glue/webworker_impl.cc ('k') | webkit/glue/webworkerclient_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef WEBKIT_GLUE_WEBWORKERCLIENT_IMPL_H_
6 #define WEBKIT_GLUE_WEBWORKERCLIENT_IMPL_H_
7
8 #if ENABLE(WORKERS)
9
10 #include "webkit/api/public/WebWorkerClient.h"
11
12 #include "WorkerContextProxy.h"
13 #include <wtf/PassOwnPtr.h>
14 #include <wtf/RefPtr.h>
15
16 namespace WebCore {
17 class ScriptExecutionContext;
18 }
19 namespace WebKit {
20 class WebWorker;
21 }
22
23 // The purpose of this class is to provide a WorkerContextProxy
24 // implementation that we can give to WebKit. Internally, it converts the
25 // data types to Chrome compatible ones so that renderer code can use it over
26 // IPC.
27 class WebWorkerClientImpl : public WebCore::WorkerContextProxy,
28 public WebKit::WebWorkerClient {
29 public:
30 WebWorkerClientImpl(WebCore::Worker* worker);
31
32 // WebCore::WorkerContextProxy Factory.
33 static WebCore::WorkerContextProxy* createWorkerContextProxy(
34 WebCore::Worker* worker);
35
36 void set_webworker(WebKit::WebWorker* webworker);
37
38 // WebCore::WorkerContextProxy methods:
39 // These are called on the thread that created the worker. In the renderer
40 // process, this will be the main WebKit thread. In the worker process, this
41 // will be the thread of the executing worker (not the main WebKit thread).
42 virtual void startWorkerContext(const WebCore::KURL& script_url,
43 const WebCore::String& user_agent,
44 const WebCore::String& source_code);
45 virtual void terminateWorkerContext();
46 virtual void postMessageToWorkerContext(
47 WTF::PassRefPtr<WebCore::SerializedScriptValue> message,
48 WTF::PassOwnPtr<WebCore::MessagePortChannelArray> channels);
49 virtual bool hasPendingActivity() const;
50 virtual void workerObjectDestroyed();
51
52 // WebWorkerClient methods:
53 // These are called on the main WebKit thread.
54 virtual void postMessageToWorkerObject(
55 const WebKit::WebString& message,
56 const WebKit::WebMessagePortChannelArray& channels);
57 virtual void postExceptionToWorkerObject(
58 const WebKit::WebString& error_message,
59 int line_number,
60 const WebKit::WebString& source_url);
61 virtual void postConsoleMessageToWorkerObject(
62 int destination_id,
63 int source_id,
64 int message_type,
65 int message_level,
66 const WebKit::WebString& message,
67 int line_number,
68 const WebKit::WebString& source_url);
69 virtual void confirmMessageFromWorkerObject(bool has_pending_activity);
70 virtual void reportPendingActivity(bool has_pending_activity);
71 virtual void workerContextDestroyed();
72 virtual WebKit::WebWorker* createWorker(WebKit::WebWorkerClient* client) {
73 return NULL;
74 }
75 virtual WebKit::WebNotificationPresenter* notificationPresenter() {
76 // TODO(johnnyg): Notifications not yet supported in workers.
77 // Coming soon.
78 return NULL;
79 }
80
81 private:
82 virtual ~WebWorkerClientImpl();
83
84 // Methods used to support WebWorkerClientImpl being constructed on worker
85 // threads.
86 // These tasks are dispatched on the WebKit thread.
87 static void StartWorkerContextTask(
88 WebCore::ScriptExecutionContext* context,
89 WebWorkerClientImpl* this_ptr,
90 const WebCore::String& script_url,
91 const WebCore::String& user_agent,
92 const WebCore::String& source_code);
93 static void TerminateWorkerContextTask(
94 WebCore::ScriptExecutionContext* context,
95 WebWorkerClientImpl* this_ptr);
96 static void PostMessageToWorkerContextTask(
97 WebCore::ScriptExecutionContext* context,
98 WebWorkerClientImpl* this_ptr,
99 const WebCore::String& message,
100 WTF::PassOwnPtr<WebCore::MessagePortChannelArray> channels);
101 static void WorkerObjectDestroyedTask(
102 WebCore::ScriptExecutionContext* context,
103 WebWorkerClientImpl* this_ptr);
104
105 // These tasks are dispatched on the thread that created the worker (i.e.
106 // main WebKit thread in renderer process, and the worker thread in the worker
107 // process).
108 static void PostMessageToWorkerObjectTask(
109 WebCore::ScriptExecutionContext* context,
110 WebWorkerClientImpl* this_ptr,
111 const WebCore::String& message,
112 WTF::PassOwnPtr<WebCore::MessagePortChannelArray> channels);
113 static void PostExceptionToWorkerObjectTask(
114 WebCore::ScriptExecutionContext* context,
115 WebWorkerClientImpl* this_ptr,
116 const WebCore::String& error_message,
117 int line_number,
118 const WebCore::String& source_url);
119 static void PostConsoleMessageToWorkerObjectTask(
120 WebCore::ScriptExecutionContext* context,
121 WebWorkerClientImpl* this_ptr,
122 int destination_id,
123 int source_id,
124 int message_type,
125 int message_level,
126 const WebCore::String& message,
127 int line_number,
128 const WebCore::String& source_url);
129 static void ConfirmMessageFromWorkerObjectTask(
130 WebCore::ScriptExecutionContext* context,
131 WebWorkerClientImpl* this_ptr);
132 static void ReportPendingActivityTask(
133 WebCore::ScriptExecutionContext* context,
134 WebWorkerClientImpl* this_ptr,
135 bool has_pending_activity);
136
137 // Guard against context from being destroyed before a worker exits.
138 WTF::RefPtr<WebCore::ScriptExecutionContext> script_execution_context_;
139
140 WebCore::Worker* worker_;
141 WebKit::WebWorker* webworker_;
142 bool asked_to_terminate_;
143 uint32 unconfirmed_message_count_;
144 bool worker_context_had_pending_activity_;
145 WTF::ThreadIdentifier worker_thread_id_;
146 };
147
148 #endif
149
150 #endif // WEBKIT_GLUE_WEBWORKERCLIENT_IMPL_H_
OLDNEW
« no previous file with comments | « webkit/glue/webworker_impl.cc ('k') | webkit/glue/webworkerclient_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698