Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1238)

Side by Side Diff: content/child/service_worker/service_worker_dispatcher.cc

Issue 182863004: Wire provider_id into scriptable API provider to start listening events (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressed comments Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/child/service_worker/service_worker_dispatcher.h" 5 #include "content/child/service_worker/service_worker_dispatcher.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/threading/thread_local.h" 8 #include "base/threading/thread_local.h"
9 #include "content/child/service_worker/web_service_worker_impl.h" 9 #include "content/child/service_worker/web_service_worker_impl.h"
10 #include "content/child/thread_safe_sender.h" 10 #include "content/child/thread_safe_sender.h"
(...skipping 15 matching lines...) Expand all
26 reinterpret_cast<ServiceWorkerDispatcher*>(0x1); 26 reinterpret_cast<ServiceWorkerDispatcher*>(0x1);
27 27
28 int CurrentWorkerId() { 28 int CurrentWorkerId() {
29 return WorkerTaskRunner::Instance()->CurrentWorkerId(); 29 return WorkerTaskRunner::Instance()->CurrentWorkerId();
30 } 30 }
31 31
32 } // namespace 32 } // namespace
33 33
34 ServiceWorkerDispatcher::ServiceWorkerDispatcher( 34 ServiceWorkerDispatcher::ServiceWorkerDispatcher(
35 ThreadSafeSender* thread_safe_sender) 35 ThreadSafeSender* thread_safe_sender)
36 : thread_safe_sender_(thread_safe_sender) { 36 : thread_safe_sender_(thread_safe_sender),
37 client_(NULL) {
michaeln 2014/03/07 02:24:09 ditto stale
kinuko 2014/03/07 02:37:13 Done.
37 g_dispatcher_tls.Pointer()->Set(this); 38 g_dispatcher_tls.Pointer()->Set(this);
38 } 39 }
39 40
40 ServiceWorkerDispatcher::~ServiceWorkerDispatcher() { 41 ServiceWorkerDispatcher::~ServiceWorkerDispatcher() {
41 g_dispatcher_tls.Pointer()->Set(kHasBeenDeleted); 42 g_dispatcher_tls.Pointer()->Set(kHasBeenDeleted);
42 } 43 }
43 44
44 void ServiceWorkerDispatcher::OnMessageReceived(const IPC::Message& msg) { 45 void ServiceWorkerDispatcher::OnMessageReceived(const IPC::Message& msg) {
45 bool handled = true; 46 bool handled = true;
46 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg) 47 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg)
(...skipping 23 matching lines...) Expand all
70 71
71 void ServiceWorkerDispatcher::UnregisterServiceWorker( 72 void ServiceWorkerDispatcher::UnregisterServiceWorker(
72 const GURL& pattern, 73 const GURL& pattern,
73 WebServiceWorkerProvider::WebServiceWorkerCallbacks* callbacks) { 74 WebServiceWorkerProvider::WebServiceWorkerCallbacks* callbacks) {
74 DCHECK(callbacks); 75 DCHECK(callbacks);
75 int request_id = pending_callbacks_.Add(callbacks); 76 int request_id = pending_callbacks_.Add(callbacks);
76 thread_safe_sender_->Send(new ServiceWorkerHostMsg_UnregisterServiceWorker( 77 thread_safe_sender_->Send(new ServiceWorkerHostMsg_UnregisterServiceWorker(
77 CurrentWorkerId(), request_id, pattern)); 78 CurrentWorkerId(), request_id, pattern));
78 } 79 }
79 80
81 void ServiceWorkerDispatcher::AddScriptClient(
82 int provider_id,
83 blink::WebServiceWorkerProviderClient* client) {
84 DCHECK(client);
85 DCHECK(!ContainsKey(script_clients_, provider_id));
86 script_clients_[provider_id] = client;
87 thread_safe_sender_->Send(new ServiceWorkerHostMsg_AddScriptClient(
88 CurrentWorkerId(), provider_id));
89 }
90
91 void ServiceWorkerDispatcher::RemoveScriptClient(int provider_id) {
92 // This could be possibly called multiple times to ensure termination.
93 if (ContainsKey(script_clients_, provider_id)) {
94 script_clients_.erase(provider_id);
95 thread_safe_sender_->Send(new ServiceWorkerHostMsg_RemoveScriptClient(
96 CurrentWorkerId(), provider_id));
97 }
98 }
99
80 ServiceWorkerDispatcher* ServiceWorkerDispatcher::ThreadSpecificInstance( 100 ServiceWorkerDispatcher* ServiceWorkerDispatcher::ThreadSpecificInstance(
81 ThreadSafeSender* thread_safe_sender) { 101 ThreadSafeSender* thread_safe_sender) {
82 if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) { 102 if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) {
83 NOTREACHED() << "Re-instantiating TLS ServiceWorkerDispatcher."; 103 NOTREACHED() << "Re-instantiating TLS ServiceWorkerDispatcher.";
84 g_dispatcher_tls.Pointer()->Set(NULL); 104 g_dispatcher_tls.Pointer()->Set(NULL);
85 } 105 }
86 if (g_dispatcher_tls.Pointer()->Get()) 106 if (g_dispatcher_tls.Pointer()->Get())
87 return g_dispatcher_tls.Pointer()->Get(); 107 return g_dispatcher_tls.Pointer()->Get();
88 108
89 ServiceWorkerDispatcher* dispatcher = 109 ServiceWorkerDispatcher* dispatcher =
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 160
141 scoped_ptr<WebServiceWorkerError> error( 161 scoped_ptr<WebServiceWorkerError> error(
142 new WebServiceWorkerError(error_type, message)); 162 new WebServiceWorkerError(error_type, message));
143 callbacks->onError(error.release()); 163 callbacks->onError(error.release());
144 pending_callbacks_.Remove(request_id); 164 pending_callbacks_.Remove(request_id);
145 } 165 }
146 166
147 void ServiceWorkerDispatcher::OnWorkerRunLoopStopped() { delete this; } 167 void ServiceWorkerDispatcher::OnWorkerRunLoopStopped() { delete this; }
148 168
149 } // namespace content 169 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698