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

Side by Side Diff: chrome/browser/push_messaging/push_messaging_notification_manager.cc

Issue 1462923002: PushMessagingNotificationManager: utility function to get StoragePartition. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename to GetStoragePartition. Created 5 years, 1 month 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "chrome/browser/push_messaging/push_messaging_notification_manager.h" 5 #include "chrome/browser/push_messaging/push_messaging_notification_manager.h"
6 6
7 #include <bitset> 7 #include <bitset>
8 8
9 #include "base/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 30 matching lines...) Expand all
41 using content::BrowserThread; 41 using content::BrowserThread;
42 42
43 namespace { 43 namespace {
44 44
45 void RecordUserVisibleStatus(content::PushUserVisibleStatus status) { 45 void RecordUserVisibleStatus(content::PushUserVisibleStatus status) {
46 UMA_HISTOGRAM_ENUMERATION("PushMessaging.UserVisibleStatus", 46 UMA_HISTOGRAM_ENUMERATION("PushMessaging.UserVisibleStatus",
47 status, 47 status,
48 content::PUSH_USER_VISIBLE_STATUS_LAST + 1); 48 content::PUSH_USER_VISIBLE_STATUS_LAST + 1);
49 } 49 }
50 50
51 content::StoragePartition* GetStoragePartition(Profile* profile,
52 const GURL& origin) {
53 return content::BrowserContext::GetStoragePartitionForSite(profile, origin);
54 }
55
51 } // namespace 56 } // namespace
52 57
53 PushMessagingNotificationManager::PushMessagingNotificationManager( 58 PushMessagingNotificationManager::PushMessagingNotificationManager(
54 Profile* profile) 59 Profile* profile)
55 : profile_(profile), 60 : profile_(profile),
56 weak_factory_(this) {} 61 weak_factory_(this) {}
57 62
58 PushMessagingNotificationManager::~PushMessagingNotificationManager() {} 63 PushMessagingNotificationManager::~PushMessagingNotificationManager() {}
59 64
60 void PushMessagingNotificationManager::EnforceUserVisibleOnlyRequirements( 65 void PushMessagingNotificationManager::EnforceUserVisibleOnlyRequirements(
61 const GURL& requesting_origin, int64_t service_worker_registration_id, 66 const GURL& requesting_origin, int64_t service_worker_registration_id,
62 const base::Closure& message_handled_closure) { 67 const base::Closure& message_handled_closure) {
63 DCHECK_CURRENTLY_ON(BrowserThread::UI); 68 DCHECK_CURRENTLY_ON(BrowserThread::UI);
64 // TODO(johnme): Relax this heuristic slightly. 69 // TODO(johnme): Relax this heuristic slightly.
65 scoped_refptr<content::PlatformNotificationContext> notification_context = 70 scoped_refptr<content::PlatformNotificationContext> notification_context =
66 content::BrowserContext::GetStoragePartitionForSite( 71 GetStoragePartition(profile_, requesting_origin)
67 profile_, requesting_origin)->GetPlatformNotificationContext(); 72 ->GetPlatformNotificationContext();
68 BrowserThread::PostTask( 73 BrowserThread::PostTask(
69 BrowserThread::IO, FROM_HERE, 74 BrowserThread::IO, FROM_HERE,
70 base::Bind( 75 base::Bind(
71 &content::PlatformNotificationContext 76 &content::PlatformNotificationContext
72 ::ReadAllNotificationDataForServiceWorkerRegistration, 77 ::ReadAllNotificationDataForServiceWorkerRegistration,
73 notification_context, 78 notification_context,
74 requesting_origin, service_worker_registration_id, 79 requesting_origin, service_worker_registration_id,
75 base::Bind( 80 base::Bind(
76 &PushMessagingNotificationManager 81 &PushMessagingNotificationManager
77 ::DidGetNotificationsFromDatabaseIOProxy, 82 ::DidGetNotificationsFromDatabaseIOProxy,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 notification_database_data.origin, false /* by_user */); 179 notification_database_data.origin, false /* by_user */);
175 180
176 break; 181 break;
177 } 182 }
178 } 183 }
179 184
180 // Don't track push messages that didn't show a notification but were exempt 185 // Don't track push messages that didn't show a notification but were exempt
181 // from needing to do so. 186 // from needing to do so.
182 if (notification_shown || notification_needed) { 187 if (notification_shown || notification_needed) {
183 content::ServiceWorkerContext* service_worker_context = 188 content::ServiceWorkerContext* service_worker_context =
184 content::BrowserContext::GetStoragePartitionForSite( 189 GetStoragePartition(profile_, requesting_origin)
185 profile_, requesting_origin)->GetServiceWorkerContext(); 190 ->GetServiceWorkerContext();
186 191
187 content::PushMessagingService::GetNotificationsShownByLastFewPushes( 192 content::PushMessagingService::GetNotificationsShownByLastFewPushes(
188 service_worker_context, service_worker_registration_id, 193 service_worker_context, service_worker_registration_id,
189 base::Bind(&PushMessagingNotificationManager 194 base::Bind(&PushMessagingNotificationManager
190 ::DidGetNotificationsShownAndNeeded, 195 ::DidGetNotificationsShownAndNeeded,
191 weak_factory_.GetWeakPtr(), 196 weak_factory_.GetWeakPtr(),
192 requesting_origin, service_worker_registration_id, 197 requesting_origin, service_worker_registration_id,
193 notification_shown, notification_needed, 198 notification_shown, notification_needed,
194 message_handled_closure)); 199 message_handled_closure));
195 } else { 200 } else {
196 RecordUserVisibleStatus( 201 RecordUserVisibleStatus(
197 content::PUSH_USER_VISIBLE_STATUS_NOT_REQUIRED_AND_NOT_SHOWN); 202 content::PUSH_USER_VISIBLE_STATUS_NOT_REQUIRED_AND_NOT_SHOWN);
198 message_handled_closure.Run(); 203 message_handled_closure.Run();
199 } 204 }
200 } 205 }
201 206
202 static void IgnoreResult(bool unused) { 207 static void IgnoreResult(bool unused) {
203 } 208 }
204 209
205 void PushMessagingNotificationManager::DidGetNotificationsShownAndNeeded( 210 void PushMessagingNotificationManager::DidGetNotificationsShownAndNeeded(
206 const GURL& requesting_origin, int64_t service_worker_registration_id, 211 const GURL& requesting_origin, int64_t service_worker_registration_id,
207 bool notification_shown, bool notification_needed, 212 bool notification_shown, bool notification_needed,
208 const base::Closure& message_handled_closure, 213 const base::Closure& message_handled_closure,
209 const std::string& data, bool success, bool not_found) { 214 const std::string& data, bool success, bool not_found) {
210 DCHECK_CURRENTLY_ON(BrowserThread::UI); 215 DCHECK_CURRENTLY_ON(BrowserThread::UI);
211 content::ServiceWorkerContext* service_worker_context = 216 content::ServiceWorkerContext* service_worker_context =
212 content::BrowserContext::GetStoragePartitionForSite( 217 GetStoragePartition(profile_, requesting_origin)
213 profile_, requesting_origin)->GetServiceWorkerContext(); 218 ->GetServiceWorkerContext();
214 219
215 // We remember whether the last (up to) 10 pushes showed notifications. 220 // We remember whether the last (up to) 10 pushes showed notifications.
216 const size_t MISSED_NOTIFICATIONS_LENGTH = 10; 221 const size_t MISSED_NOTIFICATIONS_LENGTH = 10;
217 // data is a string like "0001000", where '0' means shown, and '1' means 222 // data is a string like "0001000", where '0' means shown, and '1' means
218 // needed but not shown. We manipulate it in bitset form. 223 // needed but not shown. We manipulate it in bitset form.
219 std::bitset<MISSED_NOTIFICATIONS_LENGTH> missed_notifications(data); 224 std::bitset<MISSED_NOTIFICATIONS_LENGTH> missed_notifications(data);
220 225
221 DCHECK(notification_shown || notification_needed); // Caller must ensure this 226 DCHECK(notification_shown || notification_needed); // Caller must ensure this
222 bool needed_but_not_shown = notification_needed && !notification_shown; 227 bool needed_but_not_shown = notification_needed && !notification_shown;
223 228
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 notification_data.icon = GURL(); 279 notification_data.icon = GURL();
275 notification_data.silent = true; 280 notification_data.silent = true;
276 281
277 content::NotificationDatabaseData database_data; 282 content::NotificationDatabaseData database_data;
278 database_data.origin = requesting_origin; 283 database_data.origin = requesting_origin;
279 database_data.service_worker_registration_id = 284 database_data.service_worker_registration_id =
280 service_worker_registration_id; 285 service_worker_registration_id;
281 database_data.notification_data = notification_data; 286 database_data.notification_data = notification_data;
282 287
283 scoped_refptr<content::PlatformNotificationContext> notification_context = 288 scoped_refptr<content::PlatformNotificationContext> notification_context =
284 content::BrowserContext::GetStoragePartitionForSite( 289 GetStoragePartition(profile_, requesting_origin)
285 profile_, requesting_origin)->GetPlatformNotificationContext(); 290 ->GetPlatformNotificationContext();
286 BrowserThread::PostTask( 291 BrowserThread::PostTask(
287 BrowserThread::IO, FROM_HERE, 292 BrowserThread::IO, FROM_HERE,
288 base::Bind( 293 base::Bind(
289 &content::PlatformNotificationContext::WriteNotificationData, 294 &content::PlatformNotificationContext::WriteNotificationData,
290 notification_context, 295 notification_context,
291 requesting_origin, database_data, 296 requesting_origin, database_data,
292 base::Bind(&PushMessagingNotificationManager 297 base::Bind(&PushMessagingNotificationManager
293 ::DidWriteNotificationDataIOProxy, 298 ::DidWriteNotificationDataIOProxy,
294 weak_factory_.GetWeakPtr(), 299 weak_factory_.GetWeakPtr(),
295 requesting_origin, notification_data, 300 requesting_origin, notification_data,
(...skipping 30 matching lines...) Expand all
326 return; 331 return;
327 } 332 }
328 PlatformNotificationServiceImpl::GetInstance()->DisplayPersistentNotification( 333 PlatformNotificationServiceImpl::GetInstance()->DisplayPersistentNotification(
329 profile_, 334 profile_,
330 persistent_notification_id, 335 persistent_notification_id,
331 requesting_origin, 336 requesting_origin,
332 SkBitmap() /* icon */, 337 SkBitmap() /* icon */,
333 notification_data); 338 notification_data);
334 message_handled_closure.Run(); 339 message_handled_closure.Run();
335 } 340 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698