| 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 |