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

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: 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) {
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::SetScriptClient(
82 int provider_id,
83 blink::WebServiceWorkerProviderClient* client) {
84 if (client) {
85 DCHECK(!client_);
86 thread_safe_sender_->Send(new ServiceWorkerHostMsg_AddScriptClient(
87 CurrentWorkerId(), provider_id));
88 } else {
89 DCHECK(client_);
90 thread_safe_sender_->Send(new ServiceWorkerHostMsg_RemoveScriptClient(
91 CurrentWorkerId(), provider_id));
92 }
93 client_ = client;
michaeln 2014/03/07 01:26:23 This class is used on the main thread where we'll
kinuko 2014/03/07 02:02:17 Oops, that's right, I have focused too much on wor
94 }
95
80 ServiceWorkerDispatcher* ServiceWorkerDispatcher::ThreadSpecificInstance( 96 ServiceWorkerDispatcher* ServiceWorkerDispatcher::ThreadSpecificInstance(
81 ThreadSafeSender* thread_safe_sender) { 97 ThreadSafeSender* thread_safe_sender) {
82 if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) { 98 if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) {
83 NOTREACHED() << "Re-instantiating TLS ServiceWorkerDispatcher."; 99 NOTREACHED() << "Re-instantiating TLS ServiceWorkerDispatcher.";
84 g_dispatcher_tls.Pointer()->Set(NULL); 100 g_dispatcher_tls.Pointer()->Set(NULL);
85 } 101 }
86 if (g_dispatcher_tls.Pointer()->Get()) 102 if (g_dispatcher_tls.Pointer()->Get())
87 return g_dispatcher_tls.Pointer()->Get(); 103 return g_dispatcher_tls.Pointer()->Get();
88 104
89 ServiceWorkerDispatcher* dispatcher = 105 ServiceWorkerDispatcher* dispatcher =
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 156
141 scoped_ptr<WebServiceWorkerError> error( 157 scoped_ptr<WebServiceWorkerError> error(
142 new WebServiceWorkerError(error_type, message)); 158 new WebServiceWorkerError(error_type, message));
143 callbacks->onError(error.release()); 159 callbacks->onError(error.release());
144 pending_callbacks_.Remove(request_id); 160 pending_callbacks_.Remove(request_id);
145 } 161 }
146 162
147 void ServiceWorkerDispatcher::OnWorkerRunLoopStopped() { delete this; } 163 void ServiceWorkerDispatcher::OnWorkerRunLoopStopped() { delete this; }
148 164
149 } // namespace content 165 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698