| 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/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 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 GetWorkerForMessage(process_id, embedded_worker_id); | 133 GetWorkerForMessage(process_id, embedded_worker_id); |
| 134 if (!worker) | 134 if (!worker) |
| 135 return; | 135 return; |
| 136 | 136 |
| 137 if (!base::ContainsKey(worker_process_map_, process_id) || | 137 if (!base::ContainsKey(worker_process_map_, process_id) || |
| 138 !base::ContainsKey(worker_process_map_[process_id], embedded_worker_id)) { | 138 !base::ContainsKey(worker_process_map_[process_id], embedded_worker_id)) { |
| 139 return; | 139 return; |
| 140 } | 140 } |
| 141 | 141 |
| 142 worker->OnStarted(); | 142 worker->OnStarted(); |
| 143 lifetime_tracker_.StartTiming(embedded_worker_id); |
| 143 } | 144 } |
| 144 | 145 |
| 145 void EmbeddedWorkerRegistry::OnWorkerStopped( | 146 void EmbeddedWorkerRegistry::OnWorkerStopped( |
| 146 int process_id, int embedded_worker_id) { | 147 int process_id, int embedded_worker_id) { |
| 147 EmbeddedWorkerInstance* worker = | 148 EmbeddedWorkerInstance* worker = |
| 148 GetWorkerForMessage(process_id, embedded_worker_id); | 149 GetWorkerForMessage(process_id, embedded_worker_id); |
| 149 if (!worker) | 150 if (!worker) |
| 150 return; | 151 return; |
| 151 worker_process_map_[process_id].erase(embedded_worker_id); | 152 worker_process_map_[process_id].erase(embedded_worker_id); |
| 152 worker->OnStopped(); | 153 worker->OnStopped(); |
| 154 lifetime_tracker_.StopTiming(embedded_worker_id); |
| 153 } | 155 } |
| 154 | 156 |
| 155 void EmbeddedWorkerRegistry::OnReportException( | 157 void EmbeddedWorkerRegistry::OnReportException( |
| 156 int embedded_worker_id, | 158 int embedded_worker_id, |
| 157 const base::string16& error_message, | 159 const base::string16& error_message, |
| 158 int line_number, | 160 int line_number, |
| 159 int column_number, | 161 int column_number, |
| 160 const GURL& source_url) { | 162 const GURL& source_url) { |
| 161 EmbeddedWorkerInstance* worker = GetWorker(embedded_worker_id); | 163 EmbeddedWorkerInstance* worker = GetWorker(embedded_worker_id); |
| 162 if (!worker) | 164 if (!worker) |
| 163 return; | 165 return; |
| 164 worker->OnReportException(error_message, line_number, column_number, | 166 worker->OnReportException(error_message, line_number, column_number, |
| 165 source_url); | 167 source_url); |
| 166 } | 168 } |
| 167 | 169 |
| 168 void EmbeddedWorkerRegistry::OnReportConsoleMessage( | 170 void EmbeddedWorkerRegistry::OnReportConsoleMessage( |
| 169 int embedded_worker_id, | 171 int embedded_worker_id, |
| 170 int source_identifier, | 172 int source_identifier, |
| 171 int message_level, | 173 int message_level, |
| 172 const base::string16& message, | 174 const base::string16& message, |
| 173 int line_number, | 175 int line_number, |
| 174 const GURL& source_url) { | 176 const GURL& source_url) { |
| 175 EmbeddedWorkerInstance* worker = GetWorker(embedded_worker_id); | 177 EmbeddedWorkerInstance* worker = GetWorker(embedded_worker_id); |
| 176 if (!worker) | 178 if (!worker) |
| 177 return; | 179 return; |
| 178 worker->OnReportConsoleMessage(source_identifier, message_level, message, | 180 worker->OnReportConsoleMessage(source_identifier, message_level, message, |
| 179 line_number, source_url); | 181 line_number, source_url); |
| 180 } | 182 } |
| 181 | 183 |
| 184 void EmbeddedWorkerRegistry::OnDevToolsAttached(int embedded_worker_id) { |
| 185 lifetime_tracker_.AbortTiming(embedded_worker_id); |
| 186 } |
| 187 |
| 182 void EmbeddedWorkerRegistry::RemoveProcess(int process_id) { | 188 void EmbeddedWorkerRegistry::RemoveProcess(int process_id) { |
| 183 std::map<int, std::set<int> >::iterator found = | 189 std::map<int, std::set<int> >::iterator found = |
| 184 worker_process_map_.find(process_id); | 190 worker_process_map_.find(process_id); |
| 185 if (found != worker_process_map_.end()) { | 191 if (found != worker_process_map_.end()) { |
| 186 const std::set<int>& worker_set = worker_process_map_[process_id]; | 192 const std::set<int>& worker_set = worker_process_map_[process_id]; |
| 187 for (std::set<int>::const_iterator it = worker_set.begin(); | 193 for (std::set<int>::const_iterator it = worker_set.begin(); |
| 188 it != worker_set.end(); | 194 it != worker_set.end(); |
| 189 ++it) { | 195 ++it) { |
| 190 int embedded_worker_id = *it; | 196 int embedded_worker_id = *it; |
| 191 DCHECK(base::ContainsKey(worker_map_, embedded_worker_id)); | 197 DCHECK(base::ContainsKey(worker_map_, embedded_worker_id)); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 } | 268 } |
| 263 | 269 |
| 264 void EmbeddedWorkerRegistry::DetachWorker(int process_id, | 270 void EmbeddedWorkerRegistry::DetachWorker(int process_id, |
| 265 int embedded_worker_id) { | 271 int embedded_worker_id) { |
| 266 DCHECK(base::ContainsKey(worker_map_, embedded_worker_id)); | 272 DCHECK(base::ContainsKey(worker_map_, embedded_worker_id)); |
| 267 if (!base::ContainsKey(worker_process_map_, process_id)) | 273 if (!base::ContainsKey(worker_process_map_, process_id)) |
| 268 return; | 274 return; |
| 269 worker_process_map_[process_id].erase(embedded_worker_id); | 275 worker_process_map_[process_id].erase(embedded_worker_id); |
| 270 if (worker_process_map_[process_id].empty()) | 276 if (worker_process_map_[process_id].empty()) |
| 271 worker_process_map_.erase(process_id); | 277 worker_process_map_.erase(process_id); |
| 278 lifetime_tracker_.StopTiming(embedded_worker_id); |
| 272 } | 279 } |
| 273 | 280 |
| 274 EmbeddedWorkerInstance* EmbeddedWorkerRegistry::GetWorkerForMessage( | 281 EmbeddedWorkerInstance* EmbeddedWorkerRegistry::GetWorkerForMessage( |
| 275 int process_id, | 282 int process_id, |
| 276 int embedded_worker_id) { | 283 int embedded_worker_id) { |
| 277 EmbeddedWorkerInstance* worker = GetWorker(embedded_worker_id); | 284 EmbeddedWorkerInstance* worker = GetWorker(embedded_worker_id); |
| 278 if (!worker || worker->process_id() != process_id) { | 285 if (!worker || worker->process_id() != process_id) { |
| 279 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.WorkerForMessageFound", false); | 286 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.WorkerForMessageFound", false); |
| 280 return nullptr; | 287 return nullptr; |
| 281 } | 288 } |
| 282 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.WorkerForMessageFound", true); | 289 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.WorkerForMessageFound", true); |
| 283 return worker; | 290 return worker; |
| 284 } | 291 } |
| 285 | 292 |
| 286 } // namespace content | 293 } // namespace content |
| OLD | NEW |