OLD | NEW |
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 "content/browser/notifications/platform_notification_context_impl.h" | 5 #include "content/browser/notifications/platform_notification_context_impl.h" |
6 | 6 |
7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "base/metrics/histogram_macros.h" | 10 #include "base/metrics/histogram_macros.h" |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 LazyInitialize( | 164 LazyInitialize( |
165 base::Bind(&PlatformNotificationContextImpl::DoReadNotificationData, this, | 165 base::Bind(&PlatformNotificationContextImpl::DoReadNotificationData, this, |
166 notification_id, origin, callback), | 166 notification_id, origin, callback), |
167 base::Bind(callback, false /* success */, NotificationDatabaseData())); | 167 base::Bind(callback, false /* success */, NotificationDatabaseData())); |
168 } | 168 } |
169 | 169 |
170 void PlatformNotificationContextImpl::DoReadNotificationData( | 170 void PlatformNotificationContextImpl::DoReadNotificationData( |
171 const std::string& notification_id, | 171 const std::string& notification_id, |
172 const GURL& origin, | 172 const GURL& origin, |
173 const ReadResultCallback& callback) { | 173 const ReadResultCallback& callback) { |
174 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 174 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
175 | 175 |
176 NotificationDatabaseData database_data; | 176 NotificationDatabaseData database_data; |
177 NotificationDatabase::Status status = | 177 NotificationDatabase::Status status = |
178 database_->ReadNotificationData(notification_id, origin, &database_data); | 178 database_->ReadNotificationData(notification_id, origin, &database_data); |
179 | 179 |
180 UMA_HISTOGRAM_ENUMERATION("Notifications.Database.ReadResult", status, | 180 UMA_HISTOGRAM_ENUMERATION("Notifications.Database.ReadResult", status, |
181 NotificationDatabase::STATUS_COUNT); | 181 NotificationDatabase::STATUS_COUNT); |
182 | 182 |
183 if (status == NotificationDatabase::STATUS_OK) { | 183 if (status == NotificationDatabase::STATUS_OK) { |
184 BrowserThread::PostTask( | 184 BrowserThread::PostTask( |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 this, origin, service_worker_registration_id, callback))); | 262 this, origin, service_worker_registration_id, callback))); |
263 } | 263 } |
264 | 264 |
265 void PlatformNotificationContextImpl:: | 265 void PlatformNotificationContextImpl:: |
266 DoReadAllNotificationDataForServiceWorkerRegistration( | 266 DoReadAllNotificationDataForServiceWorkerRegistration( |
267 const GURL& origin, | 267 const GURL& origin, |
268 int64_t service_worker_registration_id, | 268 int64_t service_worker_registration_id, |
269 const ReadAllResultCallback& callback, | 269 const ReadAllResultCallback& callback, |
270 std::unique_ptr<std::set<std::string>> displayed_notifications, | 270 std::unique_ptr<std::set<std::string>> displayed_notifications, |
271 bool supports_synchronization) { | 271 bool supports_synchronization) { |
272 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 272 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
273 DCHECK(displayed_notifications); | 273 DCHECK(displayed_notifications); |
274 | 274 |
275 std::vector<NotificationDatabaseData> notification_datas; | 275 std::vector<NotificationDatabaseData> notification_datas; |
276 | 276 |
277 NotificationDatabase::Status status = | 277 NotificationDatabase::Status status = |
278 database_->ReadAllNotificationDataForServiceWorkerRegistration( | 278 database_->ReadAllNotificationDataForServiceWorkerRegistration( |
279 origin, service_worker_registration_id, ¬ification_datas); | 279 origin, service_worker_registration_id, ¬ification_datas); |
280 | 280 |
281 UMA_HISTOGRAM_ENUMERATION("Notifications.Database.ReadForServiceWorkerResult", | 281 UMA_HISTOGRAM_ENUMERATION("Notifications.Database.ReadForServiceWorkerResult", |
282 status, NotificationDatabase::STATUS_COUNT); | 282 status, NotificationDatabase::STATUS_COUNT); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 LazyInitialize( | 321 LazyInitialize( |
322 base::Bind(&PlatformNotificationContextImpl::DoWriteNotificationData, | 322 base::Bind(&PlatformNotificationContextImpl::DoWriteNotificationData, |
323 this, origin, database_data, callback), | 323 this, origin, database_data, callback), |
324 base::Bind(callback, false /* success */, "" /* notification_id */)); | 324 base::Bind(callback, false /* success */, "" /* notification_id */)); |
325 } | 325 } |
326 | 326 |
327 void PlatformNotificationContextImpl::DoWriteNotificationData( | 327 void PlatformNotificationContextImpl::DoWriteNotificationData( |
328 const GURL& origin, | 328 const GURL& origin, |
329 const NotificationDatabaseData& database_data, | 329 const NotificationDatabaseData& database_data, |
330 const WriteResultCallback& callback) { | 330 const WriteResultCallback& callback) { |
331 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 331 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
332 DCHECK(database_data.notification_id.empty()); | 332 DCHECK(database_data.notification_id.empty()); |
333 | 333 |
334 // Eagerly delete data for replaced notifications from the database. | 334 // Eagerly delete data for replaced notifications from the database. |
335 if (!database_data.notification_data.tag.empty()) { | 335 if (!database_data.notification_data.tag.empty()) { |
336 std::set<std::string> deleted_notification_ids; | 336 std::set<std::string> deleted_notification_ids; |
337 NotificationDatabase::Status delete_status = | 337 NotificationDatabase::Status delete_status = |
338 database_->DeleteAllNotificationDataForOrigin( | 338 database_->DeleteAllNotificationDataForOrigin( |
339 origin, database_data.notification_data.tag, | 339 origin, database_data.notification_data.tag, |
340 &deleted_notification_ids); | 340 &deleted_notification_ids); |
341 | 341 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 LazyInitialize( | 395 LazyInitialize( |
396 base::Bind(&PlatformNotificationContextImpl::DoDeleteNotificationData, | 396 base::Bind(&PlatformNotificationContextImpl::DoDeleteNotificationData, |
397 this, notification_id, origin, callback), | 397 this, notification_id, origin, callback), |
398 base::Bind(callback, false /* success */)); | 398 base::Bind(callback, false /* success */)); |
399 } | 399 } |
400 | 400 |
401 void PlatformNotificationContextImpl::DoDeleteNotificationData( | 401 void PlatformNotificationContextImpl::DoDeleteNotificationData( |
402 const std::string& notification_id, | 402 const std::string& notification_id, |
403 const GURL& origin, | 403 const GURL& origin, |
404 const DeleteResultCallback& callback) { | 404 const DeleteResultCallback& callback) { |
405 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 405 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
406 | 406 |
407 NotificationDatabase::Status status = | 407 NotificationDatabase::Status status = |
408 database_->DeleteNotificationData(notification_id, origin); | 408 database_->DeleteNotificationData(notification_id, origin); |
409 | 409 |
410 UMA_HISTOGRAM_ENUMERATION("Notifications.Database.DeleteResult", status, | 410 UMA_HISTOGRAM_ENUMERATION("Notifications.Database.DeleteResult", status, |
411 NotificationDatabase::STATUS_COUNT); | 411 NotificationDatabase::STATUS_COUNT); |
412 | 412 |
413 bool success = status == NotificationDatabase::STATUS_OK; | 413 bool success = status == NotificationDatabase::STATUS_OK; |
414 | 414 |
415 // Blow away the database if deleting data failed due to corruption. Following | 415 // Blow away the database if deleting data failed due to corruption. Following |
(...skipping 16 matching lines...) Expand all Loading... |
432 base::Bind(&PlatformNotificationContextImpl:: | 432 base::Bind(&PlatformNotificationContextImpl:: |
433 DoDeleteNotificationsForServiceWorkerRegistration, | 433 DoDeleteNotificationsForServiceWorkerRegistration, |
434 this, pattern.GetOrigin(), registration_id), | 434 this, pattern.GetOrigin(), registration_id), |
435 base::Bind(&DoNothing)); | 435 base::Bind(&DoNothing)); |
436 } | 436 } |
437 | 437 |
438 void PlatformNotificationContextImpl:: | 438 void PlatformNotificationContextImpl:: |
439 DoDeleteNotificationsForServiceWorkerRegistration( | 439 DoDeleteNotificationsForServiceWorkerRegistration( |
440 const GURL& origin, | 440 const GURL& origin, |
441 int64_t service_worker_registration_id) { | 441 int64_t service_worker_registration_id) { |
442 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 442 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
443 | 443 |
444 std::set<std::string> deleted_notification_ids; | 444 std::set<std::string> deleted_notification_ids; |
445 NotificationDatabase::Status status = | 445 NotificationDatabase::Status status = |
446 database_->DeleteAllNotificationDataForServiceWorkerRegistration( | 446 database_->DeleteAllNotificationDataForServiceWorkerRegistration( |
447 origin, service_worker_registration_id, &deleted_notification_ids); | 447 origin, service_worker_registration_id, &deleted_notification_ids); |
448 | 448 |
449 UMA_HISTOGRAM_ENUMERATION( | 449 UMA_HISTOGRAM_ENUMERATION( |
450 "Notifications.Database.DeleteServiceWorkerRegistrationResult", status, | 450 "Notifications.Database.DeleteServiceWorkerRegistrationResult", status, |
451 NotificationDatabase::STATUS_COUNT); | 451 NotificationDatabase::STATUS_COUNT); |
452 | 452 |
(...skipping 27 matching lines...) Expand all Loading... |
480 } | 480 } |
481 | 481 |
482 task_runner_->PostTask( | 482 task_runner_->PostTask( |
483 FROM_HERE, base::Bind(&PlatformNotificationContextImpl::OpenDatabase, | 483 FROM_HERE, base::Bind(&PlatformNotificationContextImpl::OpenDatabase, |
484 this, success_closure, failure_closure)); | 484 this, success_closure, failure_closure)); |
485 } | 485 } |
486 | 486 |
487 void PlatformNotificationContextImpl::OpenDatabase( | 487 void PlatformNotificationContextImpl::OpenDatabase( |
488 const base::Closure& success_closure, | 488 const base::Closure& success_closure, |
489 const base::Closure& failure_closure) { | 489 const base::Closure& failure_closure) { |
490 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 490 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
491 | 491 |
492 if (database_) { | 492 if (database_) { |
493 success_closure.Run(); | 493 success_closure.Run(); |
494 return; | 494 return; |
495 } | 495 } |
496 | 496 |
497 database_.reset(new NotificationDatabase(GetDatabasePath())); | 497 database_.reset(new NotificationDatabase(GetDatabasePath())); |
498 NotificationDatabase::Status status = | 498 NotificationDatabase::Status status = |
499 database_->Open(true /* create_if_missing */); | 499 database_->Open(true /* create_if_missing */); |
500 | 500 |
(...skipping 29 matching lines...) Expand all Loading... |
530 success_closure.Run(); | 530 success_closure.Run(); |
531 return; | 531 return; |
532 } | 532 } |
533 | 533 |
534 database_.reset(); | 534 database_.reset(); |
535 | 535 |
536 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, failure_closure); | 536 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, failure_closure); |
537 } | 537 } |
538 | 538 |
539 bool PlatformNotificationContextImpl::DestroyDatabase() { | 539 bool PlatformNotificationContextImpl::DestroyDatabase() { |
540 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 540 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
541 DCHECK(database_); | 541 DCHECK(database_); |
542 | 542 |
543 NotificationDatabase::Status status = database_->Destroy(); | 543 NotificationDatabase::Status status = database_->Destroy(); |
544 UMA_HISTOGRAM_ENUMERATION("Notifications.Database.DestroyResult", status, | 544 UMA_HISTOGRAM_ENUMERATION("Notifications.Database.DestroyResult", status, |
545 NotificationDatabase::STATUS_COUNT); | 545 NotificationDatabase::STATUS_COUNT); |
546 | 546 |
547 database_.reset(); | 547 database_.reset(); |
548 | 548 |
549 // TODO(peter): Close any existing persistent notifications on the platform. | 549 // TODO(peter): Close any existing persistent notifications on the platform. |
550 | 550 |
(...skipping 12 matching lines...) Expand all Loading... |
563 | 563 |
564 return path_.Append(kPlatformNotificationsDirectory); | 564 return path_.Append(kPlatformNotificationsDirectory); |
565 } | 565 } |
566 | 566 |
567 void PlatformNotificationContextImpl::SetTaskRunnerForTesting( | 567 void PlatformNotificationContextImpl::SetTaskRunnerForTesting( |
568 const scoped_refptr<base::SequencedTaskRunner>& task_runner) { | 568 const scoped_refptr<base::SequencedTaskRunner>& task_runner) { |
569 task_runner_ = task_runner; | 569 task_runner_ = task_runner; |
570 } | 570 } |
571 | 571 |
572 } // namespace content | 572 } // namespace content |
OLD | NEW |