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

Side by Side Diff: content/child/push_messaging/push_provider.cc

Issue 1210283005: Introduce the PushSubscription.curve25519dh attribute (2/3) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: android fix 2 Created 5 years, 5 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
« no previous file with comments | « content/child/push_messaging/push_provider.h ('k') | content/common/push_messaging_messages.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/push_messaging/push_provider.h" 5 #include "content/child/push_messaging/push_provider.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/threading/thread_local.h" 10 #include "base/threading/thread_local.h"
11 #include "content/child/push_messaging/push_dispatcher.h" 11 #include "content/child/push_messaging/push_dispatcher.h"
12 #include "content/child/service_worker/web_service_worker_registration_impl.h" 12 #include "content/child/service_worker/web_service_worker_registration_impl.h"
13 #include "content/child/thread_safe_sender.h" 13 #include "content/child/thread_safe_sender.h"
14 #include "content/child/worker_task_runner.h" 14 #include "content/child/worker_task_runner.h"
15 #include "content/common/push_messaging_messages.h" 15 #include "content/common/push_messaging_messages.h"
16 #include "third_party/WebKit/public/platform/WebString.h" 16 #include "third_party/WebKit/public/platform/WebString.h"
17 #include "third_party/WebKit/public/platform/modules/push_messaging/WebPushSubsc ription.h" 17 #include "third_party/WebKit/public/platform/modules/push_messaging/WebPushSubsc ription.h"
18 #include "third_party/WebKit/public/platform/modules/push_messaging/WebPushSubsc riptionOptions.h" 18 #include "third_party/WebKit/public/platform/modules/push_messaging/WebPushSubsc riptionOptions.h"
19 19
20 namespace content { 20 namespace content {
21 namespace { 21 namespace {
22 22
23 int CurrentWorkerId() { 23 int CurrentWorkerId() {
24 return WorkerTaskRunner::Instance()->CurrentWorkerId(); 24 return WorkerTaskRunner::Instance()->CurrentWorkerId();
25 } 25 }
26 26
27 // Returns the id of the given |service_worker_registration|, which 27 // Returns the id of the given |service_worker_registration|, which
28 // is only available on the implementation of the interface. 28 // is only available on the implementation of the interface.
29 int64 GetServiceWorkerRegistrationId( 29 int64_t GetServiceWorkerRegistrationId(
30 blink::WebServiceWorkerRegistration* service_worker_registration) { 30 blink::WebServiceWorkerRegistration* service_worker_registration) {
31 return static_cast<WebServiceWorkerRegistrationImpl*>( 31 return static_cast<WebServiceWorkerRegistrationImpl*>(
32 service_worker_registration)->registration_id(); 32 service_worker_registration)->registration_id();
33 } 33 }
34 34
35 } // namespace 35 } // namespace
36 36
37 static base::LazyInstance<base::ThreadLocalPointer<PushProvider>>::Leaky 37 static base::LazyInstance<base::ThreadLocalPointer<PushProvider>>::Leaky
38 g_push_provider_tls = LAZY_INSTANCE_INITIALIZER; 38 g_push_provider_tls = LAZY_INSTANCE_INITIALIZER;
39 39
(...skipping 26 matching lines...) Expand all
66 } 66 }
67 67
68 void PushProvider::subscribe( 68 void PushProvider::subscribe(
69 blink::WebServiceWorkerRegistration* service_worker_registration, 69 blink::WebServiceWorkerRegistration* service_worker_registration,
70 const blink::WebPushSubscriptionOptions& options, 70 const blink::WebPushSubscriptionOptions& options,
71 blink::WebPushSubscriptionCallbacks* callbacks) { 71 blink::WebPushSubscriptionCallbacks* callbacks) {
72 DCHECK(service_worker_registration); 72 DCHECK(service_worker_registration);
73 DCHECK(callbacks); 73 DCHECK(callbacks);
74 int request_id = push_dispatcher_->GenerateRequestId(CurrentWorkerId()); 74 int request_id = push_dispatcher_->GenerateRequestId(CurrentWorkerId());
75 subscription_callbacks_.AddWithID(callbacks, request_id); 75 subscription_callbacks_.AddWithID(callbacks, request_id);
76 int64 service_worker_registration_id = 76 int64_t service_worker_registration_id =
77 GetServiceWorkerRegistrationId(service_worker_registration); 77 GetServiceWorkerRegistrationId(service_worker_registration);
78 thread_safe_sender_->Send(new PushMessagingHostMsg_SubscribeFromWorker( 78 thread_safe_sender_->Send(new PushMessagingHostMsg_SubscribeFromWorker(
79 request_id, service_worker_registration_id, options.userVisibleOnly)); 79 request_id, service_worker_registration_id, options.userVisibleOnly));
80 } 80 }
81 81
82 void PushProvider::unsubscribe( 82 void PushProvider::unsubscribe(
83 blink::WebServiceWorkerRegistration* service_worker_registration, 83 blink::WebServiceWorkerRegistration* service_worker_registration,
84 blink::WebPushUnsubscribeCallbacks* callbacks) { 84 blink::WebPushUnsubscribeCallbacks* callbacks) {
85 DCHECK(service_worker_registration); 85 DCHECK(service_worker_registration);
86 DCHECK(callbacks); 86 DCHECK(callbacks);
87 87
88 int request_id = push_dispatcher_->GenerateRequestId(CurrentWorkerId()); 88 int request_id = push_dispatcher_->GenerateRequestId(CurrentWorkerId());
89 unsubscribe_callbacks_.AddWithID(callbacks, request_id); 89 unsubscribe_callbacks_.AddWithID(callbacks, request_id);
90 90
91 int64 service_worker_registration_id = 91 int64_t service_worker_registration_id =
92 GetServiceWorkerRegistrationId(service_worker_registration); 92 GetServiceWorkerRegistrationId(service_worker_registration);
93 thread_safe_sender_->Send(new PushMessagingHostMsg_Unsubscribe( 93 thread_safe_sender_->Send(new PushMessagingHostMsg_Unsubscribe(
94 request_id, service_worker_registration_id)); 94 request_id, service_worker_registration_id));
95 } 95 }
96 96
97 void PushProvider::getSubscription( 97 void PushProvider::getSubscription(
98 blink::WebServiceWorkerRegistration* service_worker_registration, 98 blink::WebServiceWorkerRegistration* service_worker_registration,
99 blink::WebPushSubscriptionCallbacks* callbacks) { 99 blink::WebPushSubscriptionCallbacks* callbacks) {
100 DCHECK(service_worker_registration); 100 DCHECK(service_worker_registration);
101 DCHECK(callbacks); 101 DCHECK(callbacks);
102 int request_id = push_dispatcher_->GenerateRequestId(CurrentWorkerId()); 102 int request_id = push_dispatcher_->GenerateRequestId(CurrentWorkerId());
103 subscription_callbacks_.AddWithID(callbacks, request_id); 103 subscription_callbacks_.AddWithID(callbacks, request_id);
104 int64 service_worker_registration_id = 104 int64_t service_worker_registration_id =
105 GetServiceWorkerRegistrationId(service_worker_registration); 105 GetServiceWorkerRegistrationId(service_worker_registration);
106 thread_safe_sender_->Send(new PushMessagingHostMsg_GetRegistration( 106 thread_safe_sender_->Send(new PushMessagingHostMsg_GetRegistration(
107 request_id, service_worker_registration_id)); 107 request_id, service_worker_registration_id));
108 } 108 }
109 109
110 void PushProvider::getPermissionStatus( 110 void PushProvider::getPermissionStatus(
111 blink::WebServiceWorkerRegistration* service_worker_registration, 111 blink::WebServiceWorkerRegistration* service_worker_registration,
112 const blink::WebPushSubscriptionOptions& options, 112 const blink::WebPushSubscriptionOptions& options,
113 blink::WebPushPermissionStatusCallbacks* callbacks) { 113 blink::WebPushPermissionStatusCallbacks* callbacks) {
114 DCHECK(service_worker_registration); 114 DCHECK(service_worker_registration);
115 DCHECK(callbacks); 115 DCHECK(callbacks);
116 int request_id = push_dispatcher_->GenerateRequestId(CurrentWorkerId()); 116 int request_id = push_dispatcher_->GenerateRequestId(CurrentWorkerId());
117 permission_status_callbacks_.AddWithID(callbacks, request_id); 117 permission_status_callbacks_.AddWithID(callbacks, request_id);
118 int64 service_worker_registration_id = 118 int64_t service_worker_registration_id =
119 GetServiceWorkerRegistrationId(service_worker_registration); 119 GetServiceWorkerRegistrationId(service_worker_registration);
120 thread_safe_sender_->Send(new PushMessagingHostMsg_GetPermissionStatus( 120 thread_safe_sender_->Send(new PushMessagingHostMsg_GetPermissionStatus(
121 request_id, service_worker_registration_id, options.userVisibleOnly)); 121 request_id, service_worker_registration_id, options.userVisibleOnly));
122 } 122 }
123 123
124 bool PushProvider::OnMessageReceived(const IPC::Message& message) { 124 bool PushProvider::OnMessageReceived(const IPC::Message& message) {
125 bool handled = true; 125 bool handled = true;
126 IPC_BEGIN_MESSAGE_MAP(PushProvider, message) 126 IPC_BEGIN_MESSAGE_MAP(PushProvider, message)
127 IPC_MESSAGE_HANDLER(PushMessagingMsg_SubscribeFromWorkerSuccess, 127 IPC_MESSAGE_HANDLER(PushMessagingMsg_SubscribeFromWorkerSuccess,
128 OnSubscribeFromWorkerSuccess); 128 OnSubscribeFromWorkerSuccess);
(...skipping 12 matching lines...) Expand all
141 IPC_MESSAGE_HANDLER(PushMessagingMsg_GetPermissionStatusError, 141 IPC_MESSAGE_HANDLER(PushMessagingMsg_GetPermissionStatusError,
142 OnGetPermissionStatusError); 142 OnGetPermissionStatusError);
143 IPC_MESSAGE_UNHANDLED(handled = false) 143 IPC_MESSAGE_UNHANDLED(handled = false)
144 IPC_END_MESSAGE_MAP() 144 IPC_END_MESSAGE_MAP()
145 145
146 return handled; 146 return handled;
147 } 147 }
148 148
149 void PushProvider::OnSubscribeFromWorkerSuccess( 149 void PushProvider::OnSubscribeFromWorkerSuccess(
150 int request_id, 150 int request_id,
151 const GURL& endpoint) { 151 const GURL& endpoint,
152 const std::vector<uint8_t>& curve25519dh) {
152 blink::WebPushSubscriptionCallbacks* callbacks = 153 blink::WebPushSubscriptionCallbacks* callbacks =
153 subscription_callbacks_.Lookup(request_id); 154 subscription_callbacks_.Lookup(request_id);
154 if (!callbacks) 155 if (!callbacks)
155 return; 156 return;
156 157
157 scoped_ptr<blink::WebPushSubscription> subscription( 158 scoped_ptr<blink::WebPushSubscription> subscription(
158 new blink::WebPushSubscription(endpoint)); 159 new blink::WebPushSubscription(endpoint, curve25519dh));
159 callbacks->onSuccess(subscription.release()); 160 callbacks->onSuccess(subscription.release());
160 161
161 subscription_callbacks_.Remove(request_id); 162 subscription_callbacks_.Remove(request_id);
162 } 163 }
163 164
164 void PushProvider::OnSubscribeFromWorkerError(int request_id, 165 void PushProvider::OnSubscribeFromWorkerError(int request_id,
165 PushRegistrationStatus status) { 166 PushRegistrationStatus status) {
166 blink::WebPushSubscriptionCallbacks* callbacks = 167 blink::WebPushSubscriptionCallbacks* callbacks =
167 subscription_callbacks_.Lookup(request_id); 168 subscription_callbacks_.Lookup(request_id);
168 if (!callbacks) 169 if (!callbacks)
(...skipping 29 matching lines...) Expand all
198 199
199 scoped_ptr<blink::WebPushError> error(new blink::WebPushError( 200 scoped_ptr<blink::WebPushError> error(new blink::WebPushError(
200 error_type, blink::WebString::fromUTF8(error_message))); 201 error_type, blink::WebString::fromUTF8(error_message)));
201 callbacks->onError(error.release()); 202 callbacks->onError(error.release());
202 203
203 unsubscribe_callbacks_.Remove(request_id); 204 unsubscribe_callbacks_.Remove(request_id);
204 } 205 }
205 206
206 void PushProvider::OnGetRegistrationSuccess( 207 void PushProvider::OnGetRegistrationSuccess(
207 int request_id, 208 int request_id,
208 const GURL& endpoint) { 209 const GURL& endpoint,
210 const std::vector<uint8_t>& curve25519dh) {
209 blink::WebPushSubscriptionCallbacks* callbacks = 211 blink::WebPushSubscriptionCallbacks* callbacks =
210 subscription_callbacks_.Lookup(request_id); 212 subscription_callbacks_.Lookup(request_id);
211 if (!callbacks) 213 if (!callbacks)
212 return; 214 return;
213 215
214 scoped_ptr<blink::WebPushSubscription> subscription( 216 scoped_ptr<blink::WebPushSubscription> subscription(
215 new blink::WebPushSubscription(endpoint)); 217 new blink::WebPushSubscription(endpoint, curve25519dh));
216 callbacks->onSuccess(subscription.release()); 218 callbacks->onSuccess(subscription.release());
217 219
218 subscription_callbacks_.Remove(request_id); 220 subscription_callbacks_.Remove(request_id);
219 } 221 }
220 222
221 void PushProvider::OnGetRegistrationError( 223 void PushProvider::OnGetRegistrationError(
222 int request_id, 224 int request_id,
223 PushGetRegistrationStatus status) { 225 PushGetRegistrationStatus status) {
224 blink::WebPushSubscriptionCallbacks* callbacks = 226 blink::WebPushSubscriptionCallbacks* callbacks =
225 subscription_callbacks_.Lookup(request_id); 227 subscription_callbacks_.Lookup(request_id);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 264
263 scoped_ptr<blink::WebPushError> web_error(new blink::WebPushError( 265 scoped_ptr<blink::WebPushError> web_error(new blink::WebPushError(
264 error, blink::WebString::fromUTF8(error_message))); 266 error, blink::WebString::fromUTF8(error_message)));
265 267
266 callbacks->onError(web_error.release()); 268 callbacks->onError(web_error.release());
267 269
268 permission_status_callbacks_.Remove(request_id); 270 permission_status_callbacks_.Remove(request_id);
269 } 271 }
270 272
271 } // namespace content 273 } // namespace content
OLDNEW
« no previous file with comments | « content/child/push_messaging/push_provider.h ('k') | content/common/push_messaging_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698