Chromium Code Reviews| Index: content/renderer/service_worker/embedded_worker_context_client.cc |
| diff --git a/content/renderer/service_worker/embedded_worker_context_client.cc b/content/renderer/service_worker/embedded_worker_context_client.cc |
| index 3ff7d0f796f06978a0a8a8ebb23258433a64fad9..02a0b6e923c0d21825f9a30d31297683b92704ad 100644 |
| --- a/content/renderer/service_worker/embedded_worker_context_client.cc |
| +++ b/content/renderer/service_worker/embedded_worker_context_client.cc |
| @@ -97,9 +97,6 @@ EmbeddedWorkerContextClient::EmbeddedWorkerContextClient( |
| } |
| EmbeddedWorkerContextClient::~EmbeddedWorkerContextClient() { |
| - // g_worker_client_tls.Pointer()->Get() could be NULL if this gets |
| - // deleted before workerContextStarted() is called. |
| - g_worker_client_tls.Pointer()->Set(NULL); |
| } |
| bool EmbeddedWorkerContextClient::OnMessageReceived( |
| @@ -145,6 +142,8 @@ void EmbeddedWorkerContextClient::workerContextStarted( |
| DCHECK_NE(0, WorkerTaskRunner::Instance()->CurrentWorkerId()); |
| DCHECK(g_worker_client_tls.Pointer()->Get() == NULL); |
| DCHECK(!script_context_); |
| + // g_worker_client_tls.Pointer()->Get() could return NULL if this context |
|
michaeln
2014/05/22 19:23:52
this comment seems out of place here, two lines up
kinuko
2014/05/23 02:47:48
Done.
|
| + // gets deleted before workerContextStarted() is called. |
| g_worker_client_tls.Pointer()->Set(this); |
| script_context_.reset(new ServiceWorkerScriptContext(this, proxy)); |
| @@ -164,9 +163,15 @@ void EmbeddedWorkerContextClient::willDestroyWorkerContext() { |
| // worker_task_runner_->RunsTasksOnCurrentThread() returns false |
| // (while we're still on the worker thread). |
| script_context_.reset(); |
| + |
| + // This also lets the message filter stop dispatching messages to |
| + // this client. |
| + g_worker_client_tls.Pointer()->Set(NULL); |
| } |
| void EmbeddedWorkerContextClient::workerContextDestroyed() { |
| + DCHECK(g_worker_client_tls.Pointer()->Get() == NULL); |
| + |
| // Now we should be able to free the WebEmbeddedWorker container on the |
| // main thread. |
| main_thread_proxy_->PostTask( |