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

Side by Side Diff: content/child/notifications/notification_manager.cc

Issue 1071203002: Consistently handle persistent notification ids as int64_t (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@n-db-Integrate
Patch Set: rebase Created 5 years, 8 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
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/notifications/notification_manager.h" 5 #include "content/child/notifications/notification_manager.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
13 #include "base/thread_task_runner_handle.h" 12 #include "base/thread_task_runner_handle.h"
14 #include "base/threading/thread_local.h" 13 #include "base/threading/thread_local.h"
15 #include "content/child/notifications/notification_data_conversions.h" 14 #include "content/child/notifications/notification_data_conversions.h"
16 #include "content/child/notifications/notification_dispatcher.h" 15 #include "content/child/notifications/notification_dispatcher.h"
17 #include "content/child/service_worker/web_service_worker_registration_impl.h" 16 #include "content/child/service_worker/web_service_worker_registration_impl.h"
18 #include "content/child/thread_safe_sender.h" 17 #include "content/child/thread_safe_sender.h"
19 #include "content/child/worker_task_runner.h" 18 #include "content/child/worker_task_runner.h"
20 #include "content/public/common/platform_notification_data.h" 19 #include "content/public/common/platform_notification_data.h"
21 #include "third_party/WebKit/public/platform/WebSerializedOrigin.h" 20 #include "third_party/WebKit/public/platform/WebSerializedOrigin.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 notification_data, 85 notification_data,
87 delegate)); 86 delegate));
88 } 87 }
89 88
90 void NotificationManager::showPersistent( 89 void NotificationManager::showPersistent(
91 const blink::WebSerializedOrigin& origin, 90 const blink::WebSerializedOrigin& origin,
92 const blink::WebNotificationData& notification_data, 91 const blink::WebNotificationData& notification_data,
93 blink::WebServiceWorkerRegistration* service_worker_registration, 92 blink::WebServiceWorkerRegistration* service_worker_registration,
94 blink::WebNotificationShowCallbacks* callbacks) { 93 blink::WebNotificationShowCallbacks* callbacks) {
95 DCHECK(service_worker_registration); 94 DCHECK(service_worker_registration);
96 int64 service_worker_registration_id = 95 int64_t service_worker_registration_id =
97 static_cast<WebServiceWorkerRegistrationImpl*>( 96 static_cast<WebServiceWorkerRegistrationImpl*>(
98 service_worker_registration)->registration_id(); 97 service_worker_registration)->registration_id();
99 98
100 scoped_ptr<blink::WebNotificationShowCallbacks> owned_callbacks(callbacks); 99 scoped_ptr<blink::WebNotificationShowCallbacks> owned_callbacks(callbacks);
101 100
102 // Verify that the author-provided payload size does not exceed our limit. 101 // Verify that the author-provided payload size does not exceed our limit.
103 // This is an implementation-defined limit to prevent abuse of notification 102 // This is an implementation-defined limit to prevent abuse of notification
104 // data as a storage mechanism. A UMA histogram records the requested sizes, 103 // data as a storage mechanism. A UMA histogram records the requested sizes,
105 // which enables us to track how much data authors are attempting to store. 104 // which enables us to track how much data authors are attempting to store.
106 // 105 //
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 blink::WebServiceWorkerRegistration* service_worker_registration, 139 blink::WebServiceWorkerRegistration* service_worker_registration,
141 blink::WebNotificationGetCallbacks* callbacks) { 140 blink::WebNotificationGetCallbacks* callbacks) {
142 DCHECK(service_worker_registration); 141 DCHECK(service_worker_registration);
143 DCHECK(callbacks); 142 DCHECK(callbacks);
144 143
145 WebServiceWorkerRegistrationImpl* service_worker_registration_impl = 144 WebServiceWorkerRegistrationImpl* service_worker_registration_impl =
146 static_cast<WebServiceWorkerRegistrationImpl*>( 145 static_cast<WebServiceWorkerRegistrationImpl*>(
147 service_worker_registration); 146 service_worker_registration);
148 147
149 GURL origin = GURL(service_worker_registration_impl->scope()).GetOrigin(); 148 GURL origin = GURL(service_worker_registration_impl->scope()).GetOrigin();
150 int64 service_worker_registration_id = 149 int64_t service_worker_registration_id =
151 service_worker_registration_impl->registration_id(); 150 service_worker_registration_impl->registration_id();
152 151
153 // TODO(peter): GenerateNotificationId is more of a request id. Consider 152 // TODO(peter): GenerateNotificationId is more of a request id. Consider
154 // renaming the method in the NotificationDispatcher if this makes sense. 153 // renaming the method in the NotificationDispatcher if this makes sense.
155 int request_id = 154 int request_id =
156 notification_dispatcher_->GenerateNotificationId(CurrentWorkerId()); 155 notification_dispatcher_->GenerateNotificationId(CurrentWorkerId());
157 156
158 pending_get_notification_requests_.AddWithID(callbacks, request_id); 157 pending_get_notification_requests_.AddWithID(callbacks, request_id);
159 158
160 thread_safe_sender_->Send( 159 thread_safe_sender_->Send(
(...skipping 18 matching lines...) Expand all
179 return; 178 return;
180 } 179 }
181 180
182 // It should not be possible for Blink to call close() on a Notification which 181 // It should not be possible for Blink to call close() on a Notification which
183 // does not exist in either the pending or active notification lists. 182 // does not exist in either the pending or active notification lists.
184 NOTREACHED(); 183 NOTREACHED();
185 } 184 }
186 185
187 void NotificationManager::closePersistent( 186 void NotificationManager::closePersistent(
188 const blink::WebSerializedOrigin& origin, 187 const blink::WebSerializedOrigin& origin,
189 const blink::WebString& persistent_notification_id_string) { 188 int64_t persistent_notification_id) {
190 // TODO(peter): Blink should store the persistent_notification_id as an
191 // int64_t instead of a string. The id, created by Chromium, is a decimal
192 // number that fits in an int64_t, so convert it until the API updates.
193 base::string16 string_value = persistent_notification_id_string;
194
195 int64_t persistent_notification_id = 0;
196 if (!base::StringToInt64(string_value,
197 &persistent_notification_id)) {
198 NOTREACHED() << "Unable to close persistent notification; invalid id: "
199 << string_value;
200 return;
201 }
202
203 thread_safe_sender_->Send(new PlatformNotificationHostMsg_ClosePersistent( 189 thread_safe_sender_->Send(new PlatformNotificationHostMsg_ClosePersistent(
204 GURL(origin.string()), 190 GURL(origin.string()),
205 persistent_notification_id)); 191 persistent_notification_id));
206 } 192 }
207 193
208 void NotificationManager::notifyDelegateDestroyed( 194 void NotificationManager::notifyDelegateDestroyed(
209 blink::WebNotificationDelegate* delegate) { 195 blink::WebNotificationDelegate* delegate) {
210 if (pending_notifications_.CancelPageNotificationFetches(delegate)) 196 if (pending_notifications_.CancelPageNotificationFetches(delegate))
211 return; 197 return;
212 198
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 DCHECK(callbacks); 280 DCHECK(callbacks);
295 if (!callbacks) 281 if (!callbacks)
296 return; 282 return;
297 283
298 scoped_ptr<blink::WebVector<blink::WebPersistentNotificationInfo>> 284 scoped_ptr<blink::WebVector<blink::WebPersistentNotificationInfo>>
299 notifications(new blink::WebVector<blink::WebPersistentNotificationInfo>( 285 notifications(new blink::WebVector<blink::WebPersistentNotificationInfo>(
300 notification_infos.size())); 286 notification_infos.size()));
301 287
302 for (size_t i = 0; i < notification_infos.size(); ++i) { 288 for (size_t i = 0; i < notification_infos.size(); ++i) {
303 blink::WebPersistentNotificationInfo web_notification_info; 289 blink::WebPersistentNotificationInfo web_notification_info;
304 web_notification_info.persistentNotificationId = 290 web_notification_info.persistentId = notification_infos[i].first;
305 blink::WebString::fromUTF8(notification_infos[i].first);
306 web_notification_info.data = 291 web_notification_info.data =
307 ToWebNotificationData(notification_infos[i].second); 292 ToWebNotificationData(notification_infos[i].second);
308 293
309 (*notifications)[i] = web_notification_info; 294 (*notifications)[i] = web_notification_info;
310 } 295 }
311 296
312 callbacks->onSuccess(notifications.release()); 297 callbacks->onSuccess(notifications.release());
313 298
314 pending_get_notification_requests_.Remove(request_id); 299 pending_get_notification_requests_.Remove(request_id);
315 } 300 }
(...skipping 11 matching lines...) Expand all
327 new PlatformNotificationHostMsg_Show( 312 new PlatformNotificationHostMsg_Show(
328 notification_id, 313 notification_id,
329 GURL(origin.string()), 314 GURL(origin.string()),
330 icon, 315 icon,
331 ToPlatformNotificationData(notification_data))); 316 ToPlatformNotificationData(notification_data)));
332 } 317 }
333 318
334 void NotificationManager::DisplayPersistentNotification( 319 void NotificationManager::DisplayPersistentNotification(
335 const blink::WebSerializedOrigin& origin, 320 const blink::WebSerializedOrigin& origin,
336 const blink::WebNotificationData& notification_data, 321 const blink::WebNotificationData& notification_data,
337 int64 service_worker_registration_id, 322 int64_t service_worker_registration_id,
338 scoped_ptr<blink::WebNotificationShowCallbacks> callbacks, 323 scoped_ptr<blink::WebNotificationShowCallbacks> callbacks,
339 const SkBitmap& icon) { 324 const SkBitmap& icon) {
340 // TODO(peter): GenerateNotificationId is more of a request id. Consider 325 // TODO(peter): GenerateNotificationId is more of a request id. Consider
341 // renaming the method in the NotificationDispatcher if this makes sense. 326 // renaming the method in the NotificationDispatcher if this makes sense.
342 int request_id = 327 int request_id =
343 notification_dispatcher_->GenerateNotificationId(CurrentWorkerId()); 328 notification_dispatcher_->GenerateNotificationId(CurrentWorkerId());
344 329
345 pending_show_notification_requests_.AddWithID(callbacks.release(), 330 pending_show_notification_requests_.AddWithID(callbacks.release(),
346 request_id); 331 request_id);
347 332
348 thread_safe_sender_->Send( 333 thread_safe_sender_->Send(
349 new PlatformNotificationHostMsg_ShowPersistent( 334 new PlatformNotificationHostMsg_ShowPersistent(
350 request_id, 335 request_id,
351 service_worker_registration_id, 336 service_worker_registration_id,
352 GURL(origin.string()), 337 GURL(origin.string()),
353 icon, 338 icon,
354 ToPlatformNotificationData(notification_data))); 339 ToPlatformNotificationData(notification_data)));
355 } 340 }
356 341
357 } // namespace content 342 } // namespace content
OLDNEW
« no previous file with comments | « content/child/notifications/notification_manager.h ('k') | content/common/platform_notification_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698