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

Side by Side Diff: chrome/worker/webworkerclient_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/worker/webworkerclient_proxy.h ('k') | chrome/worker/worker.scons » ('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/worker/webworkerclient_proxy.h"
6
7 #include "chrome/common/ipc_logging.h"
8 #include "chrome/common/worker_messages.h"
9 #include "chrome/worker/worker_process.h"
10 #include "chrome/worker/worker_thread.h"
11 #include "webkit/glue/webworker.h"
12
13
14 WebWorkerClientProxy::WebWorkerClientProxy(const GURL& url, int route_id)
15 : url_(url),
16 route_id_(route_id),
17 started_worker_(false),
18 ALLOW_THIS_IN_INITIALIZER_LIST(impl_(WebWorker::Create(this))) {
19 WorkerThread::current()->AddRoute(route_id_, this);
20 WorkerProcess::current()->AddRefProcess();
21 }
22
23 WebWorkerClientProxy::~WebWorkerClientProxy() {
24 WorkerThread::current()->RemoveRoute(route_id_);
25 WorkerProcess::current()->ReleaseProcess();
26 }
27
28 void WebWorkerClientProxy::PostMessageToWorkerObject(const string16& message) {
29 Send(new WorkerHostMsg_PostMessageToWorkerObject(route_id_, message));
30 }
31
32 void WebWorkerClientProxy::PostExceptionToWorkerObject(
33 const string16& error_message,
34 int line_number,
35 const string16& source_url) {
36 Send(new WorkerHostMsg_PostExceptionToWorkerObject(
37 route_id_, error_message, line_number, source_url));
38 }
39
40 void WebWorkerClientProxy::PostConsoleMessageToWorkerObject(
41 int destination,
42 int source,
43 int level,
44 const string16& message,
45 int line_number,
46 const string16& source_url) {
47 Send(new WorkerHostMsg_PostConsoleMessageToWorkerObject(
48 route_id_, destination, source, level,message, line_number, source_url));
49 }
50
51 void WebWorkerClientProxy::ConfirmMessageFromWorkerObject(bool has_pending_activ ity) {
52 Send(new WorkerHostMsg_ConfirmMessageFromWorkerObject(
53 route_id_, has_pending_activity));
54 }
55
56 void WebWorkerClientProxy::ReportPendingActivity(bool has_pending_activity) {
57 Send(new WorkerHostMsg_ReportPendingActivity(
58 route_id_, has_pending_activity));
59 }
60
61 void WebWorkerClientProxy::WorkerContextDestroyed() {
62 Send(new WorkerHostMsg_WorkerContextDestroyed(route_id_));
63 }
64
65 bool WebWorkerClientProxy::Send(IPC::Message* message) {
66 return WorkerThread::current()->Send(message);
67 }
68
69 void WebWorkerClientProxy::OnMessageReceived(const IPC::Message& message) {
70 if (!started_worker_ &&
71 message.type() != WorkerMsg_StartWorkerContext::ID) {
72 queued_messages_.push_back(new IPC::Message(message));
73 return;
74 }
75
76 WebWorker* worker = impl_.get();
77 IPC_BEGIN_MESSAGE_MAP(WebWorkerClientProxy, message)
78 IPC_MESSAGE_FORWARD(WorkerMsg_StartWorkerContext, worker,
79 WebWorker::StartWorkerContext)
80 IPC_MESSAGE_FORWARD(WorkerMsg_TerminateWorkerContext, worker,
81 WebWorker::TerminateWorkerContext)
82 IPC_MESSAGE_FORWARD(WorkerMsg_PostMessageToWorkerContext, worker,
83 WebWorker::PostMessageToWorkerContext)
84 IPC_MESSAGE_FORWARD(WorkerMsg_WorkerObjectDestroyed, worker,
85 WebWorker::WorkerObjectDestroyed)
86 IPC_END_MESSAGE_MAP()
87
88 if (message.type() == WorkerMsg_StartWorkerContext::ID) {
89 started_worker_ = true;
90 for (size_t i = 0; i < queued_messages_.size(); ++i)
91 OnMessageReceived(*queued_messages_[i]);
92
93 queued_messages_.clear();
94 }
95 }
OLDNEW
« no previous file with comments | « chrome/worker/webworkerclient_proxy.h ('k') | chrome/worker/worker.scons » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698