OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/service_worker/embedded_worker_context_client.h" | 5 #include "content/renderer/service_worker/embedded_worker_context_client.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
| 10 #include "base/debug/trace_event.h" |
10 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
11 #include "base/message_loop/message_loop_proxy.h" | 12 #include "base/message_loop/message_loop_proxy.h" |
12 #include "base/pickle.h" | 13 #include "base/pickle.h" |
13 #include "base/strings/string16.h" | 14 #include "base/strings/string16.h" |
14 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
15 #include "base/threading/thread_local.h" | 16 #include "base/threading/thread_local.h" |
16 #include "content/child/request_extra_data.h" | 17 #include "content/child/request_extra_data.h" |
17 #include "content/child/service_worker/service_worker_network_provider.h" | 18 #include "content/child/service_worker/service_worker_network_provider.h" |
18 #include "content/child/thread_safe_sender.h" | 19 #include "content/child/thread_safe_sender.h" |
19 #include "content/child/worker_task_runner.h" | 20 #include "content/child/worker_task_runner.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 const GURL& script_url, | 93 const GURL& script_url, |
93 int worker_devtools_agent_route_id) | 94 int worker_devtools_agent_route_id) |
94 : embedded_worker_id_(embedded_worker_id), | 95 : embedded_worker_id_(embedded_worker_id), |
95 service_worker_version_id_(service_worker_version_id), | 96 service_worker_version_id_(service_worker_version_id), |
96 service_worker_scope_(service_worker_scope), | 97 service_worker_scope_(service_worker_scope), |
97 script_url_(script_url), | 98 script_url_(script_url), |
98 worker_devtools_agent_route_id_(worker_devtools_agent_route_id), | 99 worker_devtools_agent_route_id_(worker_devtools_agent_route_id), |
99 sender_(ChildThread::current()->thread_safe_sender()), | 100 sender_(ChildThread::current()->thread_safe_sender()), |
100 main_thread_proxy_(base::MessageLoopProxy::current()), | 101 main_thread_proxy_(base::MessageLoopProxy::current()), |
101 weak_factory_(this) { | 102 weak_factory_(this) { |
| 103 TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker", |
| 104 "EmbeddedWorkerContextClient::StartingWorkerContext", |
| 105 this); |
| 106 TRACE_EVENT_ASYNC_STEP_INTO0( |
| 107 "ServiceWorker", |
| 108 "EmbeddedWorkerContextClient::StartingWorkerContext", |
| 109 this, |
| 110 "PrepareWorker"); |
102 } | 111 } |
103 | 112 |
104 EmbeddedWorkerContextClient::~EmbeddedWorkerContextClient() { | 113 EmbeddedWorkerContextClient::~EmbeddedWorkerContextClient() { |
105 } | 114 } |
106 | 115 |
107 bool EmbeddedWorkerContextClient::OnMessageReceived( | 116 bool EmbeddedWorkerContextClient::OnMessageReceived( |
108 const IPC::Message& msg) { | 117 const IPC::Message& msg) { |
109 bool handled = true; | 118 bool handled = true; |
110 IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerContextClient, msg) | 119 IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerContextClient, msg) |
111 IPC_MESSAGE_HANDLER(EmbeddedWorkerContextMsg_MessageToWorker, | 120 IPC_MESSAGE_HANDLER(EmbeddedWorkerContextMsg_MessageToWorker, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 embedded_worker_id_, | 178 embedded_worker_id_, |
170 WorkerTaskRunner::Instance()->CurrentWorkerId())); | 179 WorkerTaskRunner::Instance()->CurrentWorkerId())); |
171 | 180 |
172 // Schedule a task to send back WorkerStarted asynchronously, | 181 // Schedule a task to send back WorkerStarted asynchronously, |
173 // so that at the time we send it we can be sure that the worker | 182 // so that at the time we send it we can be sure that the worker |
174 // script has been evaluated and worker run loop has been started. | 183 // script has been evaluated and worker run loop has been started. |
175 worker_task_runner_->PostTask( | 184 worker_task_runner_->PostTask( |
176 FROM_HERE, | 185 FROM_HERE, |
177 base::Bind(&EmbeddedWorkerContextClient::SendWorkerStarted, | 186 base::Bind(&EmbeddedWorkerContextClient::SendWorkerStarted, |
178 weak_factory_.GetWeakPtr())); | 187 weak_factory_.GetWeakPtr())); |
| 188 TRACE_EVENT_ASYNC_STEP_INTO0( |
| 189 "ServiceWorker", |
| 190 "EmbeddedWorkerContextClient::StartingWorkerContext", |
| 191 this, |
| 192 "ExecuteScript"); |
179 } | 193 } |
180 | 194 |
181 void EmbeddedWorkerContextClient::willDestroyWorkerContext() { | 195 void EmbeddedWorkerContextClient::willDestroyWorkerContext() { |
182 // At this point OnWorkerRunLoopStopped is already called, so | 196 // At this point OnWorkerRunLoopStopped is already called, so |
183 // worker_task_runner_->RunsTasksOnCurrentThread() returns false | 197 // worker_task_runner_->RunsTasksOnCurrentThread() returns false |
184 // (while we're still on the worker thread). | 198 // (while we're still on the worker thread). |
185 script_context_.reset(); | 199 script_context_.reset(); |
186 | 200 |
187 // This also lets the message filter stop dispatching messages to | 201 // This also lets the message filter stop dispatching messages to |
188 // this client. | 202 // this client. |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 int embedded_worker_id, | 337 int embedded_worker_id, |
324 const IPC::Message& message) { | 338 const IPC::Message& message) { |
325 if (!script_context_) | 339 if (!script_context_) |
326 return; | 340 return; |
327 DCHECK_EQ(embedded_worker_id_, embedded_worker_id); | 341 DCHECK_EQ(embedded_worker_id_, embedded_worker_id); |
328 script_context_->OnMessageReceived(message); | 342 script_context_->OnMessageReceived(message); |
329 } | 343 } |
330 | 344 |
331 void EmbeddedWorkerContextClient::SendWorkerStarted() { | 345 void EmbeddedWorkerContextClient::SendWorkerStarted() { |
332 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 346 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
| 347 TRACE_EVENT_ASYNC_END0("ServiceWorker", |
| 348 "EmbeddedWorkerContextClient::StartingWorkerContext", |
| 349 this); |
333 Send(new EmbeddedWorkerHostMsg_WorkerStarted(embedded_worker_id_)); | 350 Send(new EmbeddedWorkerHostMsg_WorkerStarted(embedded_worker_id_)); |
334 } | 351 } |
335 | 352 |
336 } // namespace content | 353 } // namespace content |
OLD | NEW |