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

Side by Side Diff: chrome/renderer/webworker_proxy.cc

Issue 27157: Initial checkin of the out of process worker implementation.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 months 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 | Annotate | Revision Log
« no previous file with comments | « chrome/renderer/webworker_proxy.h ('k') | chrome/worker/webworkerclient_proxy.h » ('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 #include "chrome/renderer/webworker_proxy.h"
6
7 #include "chrome/common/render_messages.h"
8 #include "chrome/common/worker_messages.h"
9 #include "chrome/renderer/render_thread.h"
10 #include "webkit/glue/webworkerclient.h"
11
12 WebWorkerProxy::WebWorkerProxy(
13 IPC::Message::Sender* sender, WebWorkerClient* client)
14 : sender_(sender),
15 route_id_(MSG_ROUTING_NONE),
16 client_(client) {
17 }
18
19 WebWorkerProxy::~WebWorkerProxy() {
20 }
21
22 void WebWorkerProxy::StartWorkerContext(
23 const GURL& script_url,
24 const string16& user_agent,
25 const string16& source_code) {
26 sender_->Send(
27 new ViewHostMsg_CreateDedicatedWorker(script_url, &route_id_));
28 if (route_id_ == MSG_ROUTING_NONE)
29 return;
30
31 RenderThread::current()->AddRoute(route_id_, this);
32 Send(new WorkerMsg_StartWorkerContext(
33 route_id_, script_url, user_agent, source_code));
34 }
35
36 void WebWorkerProxy::TerminateWorkerContext() {
37 if (route_id_ != MSG_ROUTING_NONE) {
38 Send(new WorkerMsg_TerminateWorkerContext(route_id_));
39 RenderThread::current()->RemoveRoute(route_id_);
40 route_id_ = MSG_ROUTING_NONE;
41 }
42 }
43
44 void WebWorkerProxy::PostMessageToWorkerContext(
45 const string16& message) {
46 Send(new WorkerMsg_PostMessageToWorkerContext(route_id_, message));
47 }
48
49 void WebWorkerProxy::WorkerObjectDestroyed() {
50 client_ = NULL;
51 Send(new WorkerMsg_WorkerObjectDestroyed(route_id_));
52 }
53
54 bool WebWorkerProxy::Send(IPC::Message* message) {
55 if (route_id_ == MSG_ROUTING_NONE) {
56 delete message;
57 return false;
58 }
59
60 // For now we proxy all messages to the worker process through the browser.
61 // Revisit if we find this slow.
62 // TODO(jabdelmalek): handle sync messages if we need them.
63 IPC::Message* wrapped_msg = new ViewHostMsg_ForwardToWorker(*message);
64 delete message;
65 return sender_->Send(wrapped_msg);
66 }
67
68 void WebWorkerProxy::OnMessageReceived(const IPC::Message& message) {
69 if (!client_)
70 return;
71
72 IPC_BEGIN_MESSAGE_MAP(WebWorkerProxy, message)
73 IPC_MESSAGE_FORWARD(WorkerHostMsg_PostMessageToWorkerObject,
74 client_,
75 WebWorkerClient::PostMessageToWorkerObject)
76 IPC_MESSAGE_FORWARD(WorkerHostMsg_PostExceptionToWorkerObject,
77 client_,
78 WebWorkerClient::PostExceptionToWorkerObject)
79 IPC_MESSAGE_FORWARD(WorkerHostMsg_PostConsoleMessageToWorkerObject,
80 client_,
81 WebWorkerClient::PostConsoleMessageToWorkerObject)
82 IPC_MESSAGE_FORWARD(WorkerHostMsg_ConfirmMessageFromWorkerObject,
83 client_,
84 WebWorkerClient::ConfirmMessageFromWorkerObject)
85 IPC_MESSAGE_FORWARD(WorkerHostMsg_ReportPendingActivity,
86 client_,
87 WebWorkerClient::ReportPendingActivity)
88 IPC_MESSAGE_FORWARD(WorkerHostMsg_WorkerContextDestroyed,
89 client_,
90 WebWorkerClient::WorkerContextDestroyed)
91 IPC_END_MESSAGE_MAP()
92 }
OLDNEW
« no previous file with comments | « chrome/renderer/webworker_proxy.h ('k') | chrome/worker/webworkerclient_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698