| Index: content/renderer/service_worker/embedded_worker_dispatcher.cc
|
| diff --git a/content/renderer/service_worker/embedded_worker_dispatcher.cc b/content/renderer/service_worker/embedded_worker_dispatcher.cc
|
| index a05224b026d9b3e6132df761479199890d9b6255..3a892c23ffe085b7e68f63c2b5caea7e2edcf403 100644
|
| --- a/content/renderer/service_worker/embedded_worker_dispatcher.cc
|
| +++ b/content/renderer/service_worker/embedded_worker_dispatcher.cc
|
| @@ -17,6 +17,7 @@
|
| #include "content/public/common/content_client.h"
|
| #include "content/renderer/render_thread_impl.h"
|
| #include "content/renderer/service_worker/embedded_worker_devtools_agent.h"
|
| +#include "content/renderer/service_worker/embedded_worker_instance_client_impl.h"
|
| #include "content/renderer/service_worker/service_worker_context_client.h"
|
| #include "third_party/WebKit/public/platform/WebString.h"
|
| #include "third_party/WebKit/public/platform/WebURL.h"
|
| @@ -56,16 +57,9 @@ bool EmbeddedWorkerDispatcher::OnMessageReceived(
|
|
|
| void EmbeddedWorkerDispatcher::WorkerContextDestroyed(
|
| int embedded_worker_id) {
|
| - if (ContainsKey(stop_worker_times_, embedded_worker_id)) {
|
| - base::TimeTicks stop_time = stop_worker_times_[embedded_worker_id];
|
| - UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.TerminateThread.Time",
|
| - base::TimeTicks::Now() - stop_time);
|
| - stop_worker_times_.erase(embedded_worker_id);
|
| - }
|
| -
|
| + UnregisterWorker(embedded_worker_id);
|
| RenderThreadImpl::current()->thread_safe_sender()->Send(
|
| new EmbeddedWorkerHostMsg_WorkerStopped(embedded_worker_id));
|
| - workers_.Remove(embedded_worker_id);
|
| }
|
|
|
| void EmbeddedWorkerDispatcher::OnStartWorker(
|
| @@ -74,10 +68,10 @@ void EmbeddedWorkerDispatcher::OnStartWorker(
|
| TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerDispatcher::OnStartWorker");
|
| std::unique_ptr<WorkerWrapper> wrapper(new WorkerWrapper(
|
| blink::WebEmbeddedWorker::create(
|
| - new ServiceWorkerContextClient(params.embedded_worker_id,
|
| - params.service_worker_version_id,
|
| - params.scope, params.script_url,
|
| - params.worker_devtools_agent_route_id),
|
| + new ServiceWorkerContextClient(
|
| + params.embedded_worker_id, params.service_worker_version_id,
|
| + params.scope, params.script_url,
|
| + params.worker_devtools_agent_route_id, nullptr),
|
| NULL),
|
| params.worker_devtools_agent_route_id));
|
|
|
| @@ -159,4 +153,27 @@ void EmbeddedWorkerDispatcher::RegisterWorker(
|
| workers_.AddWithID(wrapper.release(), embedded_worker_id);
|
| }
|
|
|
| +void EmbeddedWorkerDispatcher::UnregisterWorker(int embedded_worker_id) {
|
| + if (ContainsKey(stop_worker_times_, embedded_worker_id)) {
|
| + base::TimeTicks stop_time = stop_worker_times_[embedded_worker_id];
|
| + UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.TerminateThread.Time",
|
| + base::TimeTicks::Now() - stop_time);
|
| + stop_worker_times_.erase(embedded_worker_id);
|
| + }
|
| + workers_.Remove(embedded_worker_id);
|
| +}
|
| +
|
| +bool EmbeddedWorkerDispatcher::SetStopWorkerTimer(int embedded_worker_id) {
|
| + WorkerWrapper* wrapper = workers_.Lookup(embedded_worker_id);
|
| + if (!wrapper) {
|
| + LOG(WARNING) << "Got OnStopWorker for nonexistent worker";
|
| + return false;
|
| + }
|
| + // This should eventually call WorkerContextDestroyed. (We may need to post
|
| + // a delayed task to forcibly abort the worker context if we find it
|
| + // necessary)
|
| + stop_worker_times_[embedded_worker_id] = base::TimeTicks::Now();
|
| + return true;
|
| +}
|
| +
|
| } // namespace content
|
|
|