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

Side by Side Diff: content/browser/service_worker/embedded_worker_registry.cc

Issue 2787883003: [ServiceWorker] Add EmbeddedWorkerInstanceHost Interface. (Closed)
Patch Set: Address comments from shimazu@ Created 3 years, 8 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
OLDNEW
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/browser/service_worker/embedded_worker_registry.h" 5 #include "content/browser/service_worker/embedded_worker_registry.h"
6 6
7 #include "base/bind_helpers.h" 7 #include "base/bind_helpers.h"
8 #include "base/metrics/histogram_macros.h" 8 #include "base/metrics/histogram_macros.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "content/browser/renderer_host/render_widget_helper.h" 10 #include "content/browser/renderer_host/render_widget_helper.h"
(...skipping 25 matching lines...) Expand all
36 return registry; 36 return registry;
37 } 37 }
38 38
39 std::unique_ptr<EmbeddedWorkerInstance> EmbeddedWorkerRegistry::CreateWorker() { 39 std::unique_ptr<EmbeddedWorkerInstance> EmbeddedWorkerRegistry::CreateWorker() {
40 std::unique_ptr<EmbeddedWorkerInstance> worker( 40 std::unique_ptr<EmbeddedWorkerInstance> worker(
41 new EmbeddedWorkerInstance(context_, next_embedded_worker_id_)); 41 new EmbeddedWorkerInstance(context_, next_embedded_worker_id_));
42 worker_map_[next_embedded_worker_id_++] = worker.get(); 42 worker_map_[next_embedded_worker_id_++] = worker.get();
43 return worker; 43 return worker;
44 } 44 }
45 45
46 ServiceWorkerStatusCode EmbeddedWorkerRegistry::StopWorker(
47 int process_id, int embedded_worker_id) {
48 return Send(process_id,
49 new EmbeddedWorkerMsg_StopWorker(embedded_worker_id));
50 }
51
52 bool EmbeddedWorkerRegistry::OnMessageReceived(const IPC::Message& message, 46 bool EmbeddedWorkerRegistry::OnMessageReceived(const IPC::Message& message,
53 int process_id) { 47 int process_id) {
54 // TODO(kinuko): Move all EmbeddedWorker message handling from 48 // TODO(kinuko): Move all EmbeddedWorker message handling from
55 // ServiceWorkerDispatcherHost. 49 // ServiceWorkerDispatcherHost.
56 50
57 EmbeddedWorkerInstance* worker = 51 EmbeddedWorkerInstance* worker =
58 GetWorkerForMessage(process_id, message.routing_id()); 52 GetWorkerForMessage(process_id, message.routing_id());
59 if (!worker) { 53 if (!worker) {
60 // Assume this is from a detached worker, return true to indicate we're 54 // Assume this is from a detached worker, return true to indicate we're
61 // purposely handling the message as no-op. 55 // purposely handling the message as no-op.
(...skipping 10 matching lines...) Expand all
72 } 66 }
73 67
74 void EmbeddedWorkerRegistry::Shutdown() { 68 void EmbeddedWorkerRegistry::Shutdown() {
75 for (WorkerInstanceMap::iterator it = worker_map_.begin(); 69 for (WorkerInstanceMap::iterator it = worker_map_.begin();
76 it != worker_map_.end(); 70 it != worker_map_.end();
77 ++it) { 71 ++it) {
78 it->second->Stop(); 72 it->second->Stop();
79 } 73 }
80 } 74 }
81 75
82 void EmbeddedWorkerRegistry::OnWorkerReadyForInspection( 76 bool EmbeddedWorkerRegistry::OnWorkerStarted(int process_id,
83 int process_id, 77 int embedded_worker_id) {
84 int embedded_worker_id) { 78 if (!base::ContainsKey(worker_process_map_, process_id) ||
85 EmbeddedWorkerInstance* worker = 79 !base::ContainsKey(worker_process_map_[process_id], embedded_worker_id)) {
86 GetWorkerForMessage(process_id, embedded_worker_id); 80 return false;
87 if (!worker) 81 }
88 return; 82
89 worker->OnReadyForInspection(); 83 lifetime_tracker_.StartTiming(embedded_worker_id);
84 return true;
90 } 85 }
91 86
92 void EmbeddedWorkerRegistry::OnWorkerScriptLoaded(int process_id, 87 void EmbeddedWorkerRegistry::OnWorkerStoppedd(int process_id,
shimazu 2017/04/10 05:09:22 nit: Stopped
leonhsl(Using Gerrit) 2017/04/10 06:10:36 Acknowledged. And thanks!
93 int embedded_worker_id) { 88 int embedded_worker_id) {
94 EmbeddedWorkerInstance* worker =
95 GetWorkerForMessage(process_id, embedded_worker_id);
96 if (!worker)
97 return;
98 worker->OnScriptLoaded();
99 }
100
101 void EmbeddedWorkerRegistry::OnWorkerThreadStarted(int process_id,
102 int thread_id,
103 int embedded_worker_id) {
104 EmbeddedWorkerInstance* worker =
105 GetWorkerForMessage(process_id, embedded_worker_id);
106 if (!worker)
107 return;
108 worker->OnThreadStarted(thread_id);
109 }
110
111 void EmbeddedWorkerRegistry::OnWorkerScriptLoadFailed(int process_id,
112 int embedded_worker_id) {
113 EmbeddedWorkerInstance* worker =
114 GetWorkerForMessage(process_id, embedded_worker_id);
115 if (!worker)
116 return;
117 worker->OnScriptLoadFailed();
118 }
119
120 void EmbeddedWorkerRegistry::OnWorkerScriptEvaluated(int process_id,
121 int embedded_worker_id,
122 bool success) {
123 EmbeddedWorkerInstance* worker =
124 GetWorkerForMessage(process_id, embedded_worker_id);
125 if (!worker)
126 return;
127 worker->OnScriptEvaluated(success);
128 }
129
130 void EmbeddedWorkerRegistry::OnWorkerStarted(
131 int process_id, int embedded_worker_id) {
132 EmbeddedWorkerInstance* worker =
133 GetWorkerForMessage(process_id, embedded_worker_id);
134 if (!worker)
135 return;
136
137 if (!base::ContainsKey(worker_process_map_, process_id) ||
138 !base::ContainsKey(worker_process_map_[process_id], embedded_worker_id)) {
139 return;
140 }
141
142 worker->OnStarted();
143 lifetime_tracker_.StartTiming(embedded_worker_id);
144 }
145
146 void EmbeddedWorkerRegistry::OnWorkerStopped(
147 int process_id, int embedded_worker_id) {
148 EmbeddedWorkerInstance* worker =
149 GetWorkerForMessage(process_id, embedded_worker_id);
150 if (!worker)
151 return;
152 worker_process_map_[process_id].erase(embedded_worker_id); 89 worker_process_map_[process_id].erase(embedded_worker_id);
153 worker->OnStopped();
154 lifetime_tracker_.StopTiming(embedded_worker_id); 90 lifetime_tracker_.StopTiming(embedded_worker_id);
155 } 91 }
156 92
157 void EmbeddedWorkerRegistry::OnReportException(
158 int embedded_worker_id,
159 const base::string16& error_message,
160 int line_number,
161 int column_number,
162 const GURL& source_url) {
163 EmbeddedWorkerInstance* worker = GetWorker(embedded_worker_id);
164 if (!worker)
165 return;
166 worker->OnReportException(error_message, line_number, column_number,
167 source_url);
168 }
169
170 void EmbeddedWorkerRegistry::OnReportConsoleMessage(
171 int embedded_worker_id,
172 int source_identifier,
173 int message_level,
174 const base::string16& message,
175 int line_number,
176 const GURL& source_url) {
177 EmbeddedWorkerInstance* worker = GetWorker(embedded_worker_id);
178 if (!worker)
179 return;
180 worker->OnReportConsoleMessage(source_identifier, message_level, message,
181 line_number, source_url);
182 }
183
184 void EmbeddedWorkerRegistry::OnDevToolsAttached(int embedded_worker_id) { 93 void EmbeddedWorkerRegistry::OnDevToolsAttached(int embedded_worker_id) {
185 lifetime_tracker_.AbortTiming(embedded_worker_id); 94 lifetime_tracker_.AbortTiming(embedded_worker_id);
186 } 95 }
187 96
188 void EmbeddedWorkerRegistry::RemoveProcess(int process_id) { 97 void EmbeddedWorkerRegistry::RemoveProcess(int process_id) {
189 std::map<int, std::set<int> >::iterator found = 98 std::map<int, std::set<int> >::iterator found =
190 worker_process_map_.find(process_id); 99 worker_process_map_.find(process_id);
191 if (found != worker_process_map_.end()) { 100 if (found != worker_process_map_.end()) {
192 const std::set<int>& worker_set = worker_process_map_[process_id]; 101 const std::set<int>& worker_set = worker_process_map_[process_id];
193 for (std::set<int>::const_iterator it = worker_set.begin(); 102 for (std::set<int>::const_iterator it = worker_set.begin();
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 EmbeddedWorkerInstance* worker = GetWorker(embedded_worker_id); 193 EmbeddedWorkerInstance* worker = GetWorker(embedded_worker_id);
285 if (!worker || worker->process_id() != process_id) { 194 if (!worker || worker->process_id() != process_id) {
286 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.WorkerForMessageFound", false); 195 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.WorkerForMessageFound", false);
287 return nullptr; 196 return nullptr;
288 } 197 }
289 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.WorkerForMessageFound", true); 198 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.WorkerForMessageFound", true);
290 return worker; 199 return worker;
291 } 200 }
292 201
293 } // namespace content 202 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698