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_dispatcher.h" | 5 #include "content/renderer/service_worker/embedded_worker_dispatcher.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
11 #include "base/metrics/histogram_macros.h" | 11 #include "base/metrics/histogram_macros.h" |
12 #include "base/strings/string16.h" | 12 #include "base/strings/string16.h" |
13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
14 #include "content/child/child_process.h" | 14 #include "content/child/child_process.h" |
15 #include "content/child/thread_safe_sender.h" | 15 #include "content/child/thread_safe_sender.h" |
16 #include "content/child/worker_thread_registry.h" | 16 #include "content/child/worker_thread_registry.h" |
17 #include "content/common/devtools_messages.h" | 17 #include "content/common/devtools_messages.h" |
18 #include "content/common/service_worker/embedded_worker_messages.h" | 18 #include "content/common/service_worker/embedded_worker_messages.h" |
19 #include "content/public/common/content_client.h" | 19 #include "content/public/common/content_client.h" |
20 #include "content/renderer/render_thread_impl.h" | 20 #include "content/renderer/render_thread_impl.h" |
21 #include "content/renderer/service_worker/embedded_worker_devtools_agent.h" | 21 #include "content/renderer/service_worker/embedded_worker_devtools_agent.h" |
22 #include "content/renderer/service_worker/embedded_worker_instance_client_impl.h " | 22 #include "content/renderer/service_worker/embedded_worker_instance_client_impl.h " |
23 #include "content/renderer/service_worker/service_worker_context_client.h" | 23 #include "content/renderer/service_worker/service_worker_context_client.h" |
24 #include "third_party/WebKit/public/platform/WebString.h" | 24 #include "third_party/WebKit/public/platform/WebString.h" |
25 #include "third_party/WebKit/public/platform/WebURL.h" | 25 #include "third_party/WebKit/public/platform/WebURL.h" |
26 #include "third_party/WebKit/public/web/WebConsoleMessage.h" | 26 #include "third_party/WebKit/public/web/WebConsoleMessage.h" |
falken
2017/01/18 03:57:38
nit: I think this WebConsoleMessage can be removed
shimazu
2017/01/18 05:00:46
Done.
| |
27 #include "third_party/WebKit/public/web/WebEmbeddedWorker.h" | 27 #include "third_party/WebKit/public/web/WebEmbeddedWorker.h" |
28 #include "third_party/WebKit/public/web/WebEmbeddedWorkerStartData.h" | 28 #include "third_party/WebKit/public/web/WebEmbeddedWorkerStartData.h" |
29 | 29 |
30 namespace content { | 30 namespace content { |
31 | 31 |
32 EmbeddedWorkerDispatcher::WorkerWrapper::WorkerWrapper( | 32 EmbeddedWorkerDispatcher::WorkerWrapper::WorkerWrapper( |
33 blink::WebEmbeddedWorker* worker, | 33 blink::WebEmbeddedWorker* worker, |
34 int devtools_agent_route_id) | 34 int devtools_agent_route_id) |
35 : worker_(worker), | 35 : worker_(worker), |
36 devtools_agent_( | 36 devtools_agent_( |
37 new EmbeddedWorkerDevToolsAgent(worker, devtools_agent_route_id)) {} | 37 new EmbeddedWorkerDevToolsAgent(worker, devtools_agent_route_id)) {} |
38 | 38 |
39 EmbeddedWorkerDispatcher::WorkerWrapper::~WorkerWrapper() {} | 39 EmbeddedWorkerDispatcher::WorkerWrapper::~WorkerWrapper() {} |
40 | 40 |
41 EmbeddedWorkerDispatcher::EmbeddedWorkerDispatcher() : weak_factory_(this) {} | 41 EmbeddedWorkerDispatcher::EmbeddedWorkerDispatcher() : weak_factory_(this) {} |
42 | 42 |
43 EmbeddedWorkerDispatcher::~EmbeddedWorkerDispatcher() {} | 43 EmbeddedWorkerDispatcher::~EmbeddedWorkerDispatcher() {} |
44 | 44 |
45 bool EmbeddedWorkerDispatcher::OnMessageReceived( | 45 bool EmbeddedWorkerDispatcher::OnMessageReceived( |
46 const IPC::Message& message) { | 46 const IPC::Message& message) { |
47 bool handled = true; | 47 bool handled = true; |
48 IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerDispatcher, message) | 48 IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerDispatcher, message) |
49 IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StopWorker, OnStopWorker) | 49 IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StopWorker, OnStopWorker) |
50 IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_ResumeAfterDownload, | |
51 OnResumeAfterDownload) | |
52 IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_AddMessageToConsole, | |
53 OnAddMessageToConsole) | |
54 IPC_MESSAGE_UNHANDLED(handled = false) | 50 IPC_MESSAGE_UNHANDLED(handled = false) |
55 IPC_END_MESSAGE_MAP() | 51 IPC_END_MESSAGE_MAP() |
56 return handled; | 52 return handled; |
57 } | 53 } |
58 | 54 |
59 void EmbeddedWorkerDispatcher::WorkerContextDestroyed( | 55 void EmbeddedWorkerDispatcher::WorkerContextDestroyed( |
60 int embedded_worker_id) { | 56 int embedded_worker_id) { |
61 RenderThreadImpl::current()->thread_safe_sender()->Send( | 57 RenderThreadImpl::current()->thread_safe_sender()->Send( |
62 new EmbeddedWorkerHostMsg_WorkerStopped(embedded_worker_id)); | 58 new EmbeddedWorkerHostMsg_WorkerStopped(embedded_worker_id)); |
63 UnregisterWorker(embedded_worker_id); | 59 UnregisterWorker(embedded_worker_id); |
64 } | 60 } |
65 | 61 |
66 void EmbeddedWorkerDispatcher::OnStopWorker(int embedded_worker_id) { | 62 void EmbeddedWorkerDispatcher::OnStopWorker(int embedded_worker_id) { |
67 TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerDispatcher::OnStopWorker"); | 63 TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerDispatcher::OnStopWorker"); |
68 WorkerWrapper* wrapper = workers_.Lookup(embedded_worker_id); | 64 WorkerWrapper* wrapper = workers_.Lookup(embedded_worker_id); |
69 // OnStopWorker is possible to be called twice. | 65 // OnStopWorker is possible to be called twice. |
70 if (!wrapper) { | 66 if (!wrapper) { |
71 LOG(WARNING) << "Got OnStopWorker for nonexistent worker"; | 67 LOG(WARNING) << "Got OnStopWorker for nonexistent worker"; |
72 return; | 68 return; |
73 } | 69 } |
74 // This should eventually call WorkerContextDestroyed. (We may need to post | 70 // This should eventually call WorkerContextDestroyed. (We may need to post |
75 // a delayed task to forcibly abort the worker context if we find it | 71 // a delayed task to forcibly abort the worker context if we find it |
76 // necessary) | 72 // necessary) |
77 stop_worker_times_[embedded_worker_id] = base::TimeTicks::Now(); | 73 stop_worker_times_[embedded_worker_id] = base::TimeTicks::Now(); |
78 wrapper->worker()->terminateWorkerContext(); | 74 wrapper->worker()->terminateWorkerContext(); |
79 } | 75 } |
80 | 76 |
81 void EmbeddedWorkerDispatcher::OnResumeAfterDownload(int embedded_worker_id) { | |
82 TRACE_EVENT0("ServiceWorker", | |
83 "EmbeddedWorkerDispatcher::OnResumeAfterDownload"); | |
84 WorkerWrapper* wrapper = workers_.Lookup(embedded_worker_id); | |
85 if (!wrapper) { | |
86 LOG(WARNING) << "Got OnResumeAfterDownload for nonexistent worker"; | |
87 return; | |
88 } | |
89 wrapper->worker()->resumeAfterDownload(); | |
90 } | |
91 | |
92 void EmbeddedWorkerDispatcher::OnAddMessageToConsole( | |
93 int embedded_worker_id, | |
94 ConsoleMessageLevel level, | |
95 const std::string& message) { | |
96 WorkerWrapper* wrapper = workers_.Lookup(embedded_worker_id); | |
97 if (!wrapper) | |
98 return; | |
99 blink::WebConsoleMessage::Level target_level = | |
100 blink::WebConsoleMessage::LevelLog; | |
101 switch (level) { | |
102 case CONSOLE_MESSAGE_LEVEL_DEBUG: | |
103 target_level = blink::WebConsoleMessage::LevelDebug; | |
104 break; | |
105 case CONSOLE_MESSAGE_LEVEL_LOG: | |
106 target_level = blink::WebConsoleMessage::LevelLog; | |
107 break; | |
108 case CONSOLE_MESSAGE_LEVEL_WARNING: | |
109 target_level = blink::WebConsoleMessage::LevelWarning; | |
110 break; | |
111 case CONSOLE_MESSAGE_LEVEL_ERROR: | |
112 target_level = blink::WebConsoleMessage::LevelError; | |
113 break; | |
114 } | |
115 wrapper->worker()->addMessageToConsole(blink::WebConsoleMessage( | |
116 target_level, blink::WebString::fromUTF8(message))); | |
117 } | |
118 | |
119 std::unique_ptr<EmbeddedWorkerDispatcher::WorkerWrapper> | 77 std::unique_ptr<EmbeddedWorkerDispatcher::WorkerWrapper> |
120 EmbeddedWorkerDispatcher::StartWorkerContext( | 78 EmbeddedWorkerDispatcher::StartWorkerContext( |
121 const EmbeddedWorkerStartParams& params, | 79 const EmbeddedWorkerStartParams& params, |
122 std::unique_ptr<ServiceWorkerContextClient> context_client) { | 80 std::unique_ptr<ServiceWorkerContextClient> context_client) { |
123 std::unique_ptr<WorkerWrapper> wrapper(new WorkerWrapper( | 81 std::unique_ptr<WorkerWrapper> wrapper(new WorkerWrapper( |
124 blink::WebEmbeddedWorker::create(context_client.release(), nullptr), | 82 blink::WebEmbeddedWorker::create(context_client.release(), nullptr), |
125 params.worker_devtools_agent_route_id)); | 83 params.worker_devtools_agent_route_id)); |
126 | 84 |
127 blink::WebEmbeddedWorkerStartData start_data; | 85 blink::WebEmbeddedWorkerStartData start_data; |
128 start_data.scriptURL = params.script_url; | 86 start_data.scriptURL = params.script_url; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
163 void EmbeddedWorkerDispatcher::RecordStopWorkerTimer(int embedded_worker_id) { | 121 void EmbeddedWorkerDispatcher::RecordStopWorkerTimer(int embedded_worker_id) { |
164 WorkerWrapper* wrapper = workers_.Lookup(embedded_worker_id); | 122 WorkerWrapper* wrapper = workers_.Lookup(embedded_worker_id); |
165 DCHECK(wrapper); | 123 DCHECK(wrapper); |
166 // This should eventually call WorkerContextDestroyed. (We may need to post | 124 // This should eventually call WorkerContextDestroyed. (We may need to post |
167 // a delayed task to forcibly abort the worker context if we find it | 125 // a delayed task to forcibly abort the worker context if we find it |
168 // necessary) | 126 // necessary) |
169 stop_worker_times_[embedded_worker_id] = base::TimeTicks::Now(); | 127 stop_worker_times_[embedded_worker_id] = base::TimeTicks::Now(); |
170 } | 128 } |
171 | 129 |
172 } // namespace content | 130 } // namespace content |
OLD | NEW |