Chromium Code Reviews| 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 25 matching lines...) Expand all Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |