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_instance.h" | 5 #include "content/browser/service_worker/embedded_worker_instance.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 void NotifyWorkerStopIgnoredOnUI(int worker_process_id, int worker_route_id) { | 50 void NotifyWorkerStopIgnoredOnUI(int worker_process_id, int worker_route_id) { |
51 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 51 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
52 ServiceWorkerDevToolsManager::GetInstance()->WorkerStopIgnored( | 52 ServiceWorkerDevToolsManager::GetInstance()->WorkerStopIgnored( |
53 worker_process_id, worker_route_id); | 53 worker_process_id, worker_route_id); |
54 } | 54 } |
55 | 55 |
56 void RegisterToWorkerDevToolsManagerOnUI( | 56 void RegisterToWorkerDevToolsManagerOnUI( |
57 int process_id, | 57 int process_id, |
58 const ServiceWorkerContextCore* service_worker_context, | 58 const ServiceWorkerContextCore* service_worker_context, |
59 const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak, | 59 const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak, |
60 int64 service_worker_version_id, | 60 std::string service_worker_version_uuid, |
61 const GURL& url, | 61 const GURL& url, |
62 const base::Callback<void(int worker_devtools_agent_route_id, | 62 const base::Callback<void(int worker_devtools_agent_route_id, |
63 bool wait_for_debugger)>& callback) { | 63 bool wait_for_debugger)>& callback) { |
64 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 64 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
65 int worker_devtools_agent_route_id = MSG_ROUTING_NONE; | 65 int worker_devtools_agent_route_id = MSG_ROUTING_NONE; |
66 bool wait_for_debugger = false; | 66 bool wait_for_debugger = false; |
67 if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) { | 67 if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) { |
68 // |rph| may be NULL in unit tests. | 68 // |rph| may be NULL in unit tests. |
69 worker_devtools_agent_route_id = rph->GetNextRoutingID(); | 69 worker_devtools_agent_route_id = rph->GetNextRoutingID(); |
70 wait_for_debugger = | 70 wait_for_debugger = |
71 ServiceWorkerDevToolsManager::GetInstance()->WorkerCreated( | 71 ServiceWorkerDevToolsManager::GetInstance()->WorkerCreated( |
72 process_id, | 72 process_id, worker_devtools_agent_route_id, |
73 worker_devtools_agent_route_id, | |
74 ServiceWorkerDevToolsManager::ServiceWorkerIdentifier( | 73 ServiceWorkerDevToolsManager::ServiceWorkerIdentifier( |
75 service_worker_context, | 74 service_worker_context, service_worker_context_weak, |
76 service_worker_context_weak, | 75 service_worker_version_uuid, url)); |
77 service_worker_version_id, | |
78 url)); | |
79 } | 76 } |
80 BrowserThread::PostTask( | 77 BrowserThread::PostTask( |
81 BrowserThread::IO, | 78 BrowserThread::IO, |
82 FROM_HERE, | 79 FROM_HERE, |
83 base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger)); | 80 base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger)); |
84 } | 81 } |
85 | 82 |
86 } // namespace | 83 } // namespace |
87 | 84 |
88 // Lives on IO thread, proxies notifications to DevToolsManager that lives on | 85 // Lives on IO thread, proxies notifications to DevToolsManager that lives on |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 }; | 122 }; |
126 | 123 |
127 EmbeddedWorkerInstance::~EmbeddedWorkerInstance() { | 124 EmbeddedWorkerInstance::~EmbeddedWorkerInstance() { |
128 DCHECK(status_ == STOPPING || status_ == STOPPED); | 125 DCHECK(status_ == STOPPING || status_ == STOPPED); |
129 devtools_proxy_.reset(); | 126 devtools_proxy_.reset(); |
130 if (context_ && process_id_ != -1) | 127 if (context_ && process_id_ != -1) |
131 context_->process_manager()->ReleaseWorkerProcess(embedded_worker_id_); | 128 context_->process_manager()->ReleaseWorkerProcess(embedded_worker_id_); |
132 registry_->RemoveWorker(process_id_, embedded_worker_id_); | 129 registry_->RemoveWorker(process_id_, embedded_worker_id_); |
133 } | 130 } |
134 | 131 |
135 void EmbeddedWorkerInstance::Start(int64 service_worker_version_id, | 132 void EmbeddedWorkerInstance::Start(std::string service_worker_version_uuid, |
136 const GURL& scope, | 133 const GURL& scope, |
137 const GURL& script_url, | 134 const GURL& script_url, |
138 bool pause_after_download, | 135 bool pause_after_download, |
139 const StatusCallback& callback) { | 136 const StatusCallback& callback) { |
140 if (!context_) { | 137 if (!context_) { |
141 callback.Run(SERVICE_WORKER_ERROR_ABORT); | 138 callback.Run(SERVICE_WORKER_ERROR_ABORT); |
142 return; | 139 return; |
143 } | 140 } |
144 DCHECK(status_ == STOPPED); | 141 DCHECK(status_ == STOPPED); |
145 start_timing_ = base::TimeTicks::Now(); | 142 start_timing_ = base::TimeTicks::Now(); |
146 status_ = STARTING; | 143 status_ = STARTING; |
147 starting_phase_ = ALLOCATING_PROCESS; | 144 starting_phase_ = ALLOCATING_PROCESS; |
148 network_accessed_for_script_ = false; | 145 network_accessed_for_script_ = false; |
149 FOR_EACH_OBSERVER(Listener, listener_list_, OnStarting()); | 146 FOR_EACH_OBSERVER(Listener, listener_list_, OnStarting()); |
150 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( | 147 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
151 new EmbeddedWorkerMsg_StartWorker_Params()); | 148 new EmbeddedWorkerMsg_StartWorker_Params()); |
152 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", | 149 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", |
153 "EmbeddedWorkerInstance::ProcessAllocate", | 150 "EmbeddedWorkerInstance::ProcessAllocate", |
154 params.get(), | 151 params.get(), |
155 "Scope", scope.spec(), | 152 "Scope", scope.spec(), |
156 "Script URL", script_url.spec()); | 153 "Script URL", script_url.spec()); |
157 params->embedded_worker_id = embedded_worker_id_; | 154 params->embedded_worker_id = embedded_worker_id_; |
158 params->service_worker_version_id = service_worker_version_id; | 155 params->service_worker_version_uuid = service_worker_version_uuid; |
159 params->scope = scope; | 156 params->scope = scope; |
160 params->script_url = script_url; | 157 params->script_url = script_url; |
161 params->worker_devtools_agent_route_id = MSG_ROUTING_NONE; | 158 params->worker_devtools_agent_route_id = MSG_ROUTING_NONE; |
162 params->pause_after_download = pause_after_download; | 159 params->pause_after_download = pause_after_download; |
163 params->wait_for_debugger = false; | 160 params->wait_for_debugger = false; |
164 params->v8_cache_options = GetV8CacheOptions(); | 161 params->v8_cache_options = GetV8CacheOptions(); |
165 context_->process_manager()->AllocateWorkerProcess( | 162 context_->process_manager()->AllocateWorkerProcess( |
166 embedded_worker_id_, | 163 embedded_worker_id_, |
167 scope, | 164 scope, |
168 script_url, | 165 script_url, |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 "EmbeddedWorkerInstance::ProcessAllocate", | 260 "EmbeddedWorkerInstance::ProcessAllocate", |
264 params.get(), | 261 params.get(), |
265 "Status", status); | 262 "Status", status); |
266 if (status != SERVICE_WORKER_OK) { | 263 if (status != SERVICE_WORKER_OK) { |
267 Status old_status = status_; | 264 Status old_status = status_; |
268 status_ = STOPPED; | 265 status_ = STOPPED; |
269 callback.Run(status); | 266 callback.Run(status); |
270 FOR_EACH_OBSERVER(Listener, listener_list_, OnStopped(old_status)); | 267 FOR_EACH_OBSERVER(Listener, listener_list_, OnStopped(old_status)); |
271 return; | 268 return; |
272 } | 269 } |
273 const int64 service_worker_version_id = params->service_worker_version_id; | 270 const std::string service_worker_version_uuid = |
| 271 params->service_worker_version_uuid; |
274 process_id_ = process_id; | 272 process_id_ = process_id; |
275 GURL script_url(params->script_url); | 273 GURL script_url(params->script_url); |
276 | 274 |
277 // Register this worker to DevToolsManager on UI thread, then continue to | 275 // Register this worker to DevToolsManager on UI thread, then continue to |
278 // call SendStartWorker on IO thread. | 276 // call SendStartWorker on IO thread. |
279 starting_phase_ = REGISTERING_TO_DEVTOOLS; | 277 starting_phase_ = REGISTERING_TO_DEVTOOLS; |
280 BrowserThread::PostTask( | 278 BrowserThread::PostTask( |
281 BrowserThread::UI, FROM_HERE, | 279 BrowserThread::UI, FROM_HERE, |
282 base::Bind(RegisterToWorkerDevToolsManagerOnUI, process_id_, | 280 base::Bind(RegisterToWorkerDevToolsManagerOnUI, process_id_, |
283 context_.get(), context_, service_worker_version_id, | 281 context_.get(), context_, service_worker_version_uuid, |
284 script_url, | 282 script_url, |
285 base::Bind(&EmbeddedWorkerInstance::SendStartWorker, | 283 base::Bind(&EmbeddedWorkerInstance::SendStartWorker, |
286 weak_factory_.GetWeakPtr(), base::Passed(¶ms), | 284 weak_factory_.GetWeakPtr(), base::Passed(¶ms), |
287 callback, is_new_process))); | 285 callback, is_new_process))); |
288 } | 286 } |
289 | 287 |
290 void EmbeddedWorkerInstance::SendStartWorker( | 288 void EmbeddedWorkerInstance::SendStartWorker( |
291 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, | 289 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, |
292 const StatusCallback& callback, | 290 const StatusCallback& callback, |
293 bool is_new_process, | 291 bool is_new_process, |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 case SCRIPT_EVALUATED: | 491 case SCRIPT_EVALUATED: |
494 return "Script evaluated"; | 492 return "Script evaluated"; |
495 case STARTING_PHASE_MAX_VALUE: | 493 case STARTING_PHASE_MAX_VALUE: |
496 NOTREACHED(); | 494 NOTREACHED(); |
497 } | 495 } |
498 NOTREACHED() << phase; | 496 NOTREACHED() << phase; |
499 return std::string(); | 497 return std::string(); |
500 } | 498 } |
501 | 499 |
502 } // namespace content | 500 } // namespace content |
OLD | NEW |