| Index: content/browser/notifications/notification_database_unittest.cc
|
| diff --git a/content/browser/notifications/notification_database_unittest.cc b/content/browser/notifications/notification_database_unittest.cc
|
| index 2f6f207a91c45740aa6555ca70582e4b5c3d60b0..207b238cd3846f1b542d0483415f20a88f4a38ce 100644
|
| --- a/content/browser/notifications/notification_database_unittest.cc
|
| +++ b/content/browser/notifications/notification_database_unittest.cc
|
| @@ -16,6 +16,21 @@
|
|
|
| namespace content {
|
|
|
| +const int kExampleServiceWorkerRegistrationId = 42;
|
| +
|
| +const struct {
|
| + const char* origin;
|
| + int64_t service_worker_registration_id;
|
| +} kExampleNotificationData[] = {
|
| + { "https://example.com", 0 },
|
| + { "https://example.com", kExampleServiceWorkerRegistrationId },
|
| + { "https://example.com", kExampleServiceWorkerRegistrationId },
|
| + { "https://example.com", kExampleServiceWorkerRegistrationId + 1 },
|
| + { "https://chrome.com", 0 },
|
| + { "https://chrome.com", 0 },
|
| + { "https://chrome.com", kExampleServiceWorkerRegistrationId }
|
| +};
|
| +
|
| class NotificationDatabaseTest : public ::testing::Test {
|
| protected:
|
| // Creates a new NotificationDatabase instance in memory.
|
| @@ -29,6 +44,37 @@ class NotificationDatabaseTest : public ::testing::Test {
|
| return new NotificationDatabase(path);
|
| }
|
|
|
| + // Creates a new notification for |service_worker_registration_id| belonging
|
| + // to |origin| and writes it to the database. The written notification id
|
| + // will be stored in |notification_id|.
|
| + void CreateAndWriteNotification(NotificationDatabase* database,
|
| + const GURL& origin,
|
| + int64_t service_worker_registration_id,
|
| + int64_t* notification_id) {
|
| + NotificationDatabaseData database_data;
|
| + database_data.origin = origin;
|
| + database_data.service_worker_registration_id =
|
| + service_worker_registration_id;
|
| +
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->WriteNotificationData(origin,
|
| + database_data,
|
| + notification_id));
|
| + }
|
| +
|
| + // Populates |database| with a series of example notifications that differ in
|
| + // their origin and Service Worker registration id.
|
| + void PopulateDatabaseWithExampleData(NotificationDatabase* database) {
|
| + int64_t notification_id;
|
| + for (size_t i = 0; i < arraysize(kExampleNotificationData); ++i) {
|
| + ASSERT_NO_FATAL_FAILURE(CreateAndWriteNotification(
|
| + database,
|
| + GURL(kExampleNotificationData[i].origin),
|
| + kExampleNotificationData[i].service_worker_registration_id,
|
| + ¬ification_id));
|
| + }
|
| + }
|
| +
|
| // Returns if |database| has been opened.
|
| bool IsDatabaseOpen(NotificationDatabase* database) {
|
| return database->IsOpen();
|
| @@ -130,21 +176,16 @@ TEST_F(NotificationDatabaseTest, NotificationIdIncrements) {
|
|
|
| GURL origin("https://example.com");
|
|
|
| - NotificationDatabaseData database_data;
|
| int64_t notification_id = 0;
|
|
|
| // Verify that getting two ids on the same database instance results in
|
| // incrementing values. Notification ids will start at 1.
|
| - ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| - database->WriteNotificationData(origin,
|
| - database_data,
|
| - ¬ification_id));
|
| + ASSERT_NO_FATAL_FAILURE(CreateAndWriteNotification(
|
| + database.get(), origin, 0 /* sw_registration_id */, ¬ification_id));
|
| EXPECT_EQ(notification_id, 1);
|
|
|
| - ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| - database->WriteNotificationData(origin,
|
| - database_data,
|
| - ¬ification_id));
|
| + ASSERT_NO_FATAL_FAILURE(CreateAndWriteNotification(
|
| + database.get(), origin, 0 /* sw_registration_id */, ¬ification_id));
|
| EXPECT_EQ(notification_id, 2);
|
|
|
| database.reset(CreateDatabaseOnFileSystem(database_dir.path()));
|
| @@ -153,10 +194,8 @@ TEST_F(NotificationDatabaseTest, NotificationIdIncrements) {
|
|
|
| // Verify that the next notification id was stored in the database, and
|
| // continues where we expect it to be, even after closing and opening it.
|
| - ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| - database->WriteNotificationData(origin,
|
| - database_data,
|
| - ¬ification_id));
|
| + ASSERT_NO_FATAL_FAILURE(CreateAndWriteNotification(
|
| + database.get(), origin, 0 /* sw_registration_id */, ¬ification_id));
|
| EXPECT_EQ(notification_id, 3);
|
| }
|
|
|
| @@ -305,23 +344,19 @@ TEST_F(NotificationDatabaseTest, ReadWriteMultipleNotificationData) {
|
| ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| database->Open(true /* create_if_missing */));
|
|
|
| - NotificationDatabaseData database_data;
|
| GURL origin("https://example.com");
|
| + int64_t notification_id = 0;
|
|
|
| // Write ten notifications to the database, each with a unique title and
|
| // notification id (it is the responsibility of the user to increment this).
|
| for (int i = 1; i <= 10; ++i) {
|
| - database_data.notification_id = i;
|
| - database_data.notification_data.title = base::IntToString16(i);
|
| -
|
| - int64_t notification_id = 0;
|
| - ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| - database->WriteNotificationData(origin,
|
| - database_data,
|
| - ¬ification_id));
|
| + ASSERT_NO_FATAL_FAILURE(CreateAndWriteNotification(
|
| + database.get(), origin, i /* sw_registration_id */, ¬ification_id));
|
| EXPECT_EQ(notification_id, i);
|
| }
|
|
|
| + NotificationDatabaseData database_data;
|
| +
|
| // Read the ten notifications from the database, and verify that the titles
|
| // of each of them matches with how they were created.
|
| for (int i = 1; i <= 10; ++i) {
|
| @@ -330,7 +365,7 @@ TEST_F(NotificationDatabaseTest, ReadWriteMultipleNotificationData) {
|
| origin,
|
| &database_data));
|
|
|
| - EXPECT_EQ(base::IntToString16(i), database_data.notification_data.title);
|
| + EXPECT_EQ(i, database_data.service_worker_registration_id);
|
| }
|
| }
|
|
|
| @@ -405,4 +440,128 @@ TEST_F(NotificationDatabaseTest, DeleteNotificationDataDifferentOrigin) {
|
| &database_data));
|
| }
|
|
|
| +TEST_F(NotificationDatabaseTest, ReadAllNotificationData) {
|
| + scoped_ptr<NotificationDatabase> database(CreateDatabaseInMemory());
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->Open(true /* create_if_missing */));
|
| +
|
| + ASSERT_NO_FATAL_FAILURE(PopulateDatabaseWithExampleData(database.get()));
|
| +
|
| + std::vector<NotificationDatabaseData> notifications;
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->ReadAllNotificationData(¬ifications));
|
| +
|
| + EXPECT_EQ(arraysize(kExampleNotificationData), notifications.size());
|
| +}
|
| +
|
| +TEST_F(NotificationDatabaseTest, ReadAllNotificationDataEmpty) {
|
| + scoped_ptr<NotificationDatabase> database(CreateDatabaseInMemory());
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->Open(true /* create_if_missing */));
|
| +
|
| + std::vector<NotificationDatabaseData> notifications;
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->ReadAllNotificationData(¬ifications));
|
| +
|
| + EXPECT_EQ(0u, notifications.size());
|
| +}
|
| +
|
| +TEST_F(NotificationDatabaseTest, ReadAllNotificationDataForOrigin) {
|
| + scoped_ptr<NotificationDatabase> database(CreateDatabaseInMemory());
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->Open(true /* create_if_missing */));
|
| +
|
| + ASSERT_NO_FATAL_FAILURE(PopulateDatabaseWithExampleData(database.get()));
|
| +
|
| + GURL origin("https://example.com");
|
| +
|
| + std::vector<NotificationDatabaseData> notifications;
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->ReadAllNotificationDataForOrigin(origin, ¬ifications));
|
| +
|
| + EXPECT_EQ(4u, notifications.size());
|
| +}
|
| +
|
| +TEST_F(NotificationDatabaseTest,
|
| + ReadAllNotificationDataForServiceWorkerRegistration) {
|
| + scoped_ptr<NotificationDatabase> database(CreateDatabaseInMemory());
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->Open(true /* create_if_missing */));
|
| +
|
| + ASSERT_NO_FATAL_FAILURE(PopulateDatabaseWithExampleData(database.get()));
|
| +
|
| + GURL origin("https://example.com:443");
|
| +
|
| + std::vector<NotificationDatabaseData> notifications;
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->ReadAllNotificationDataForServiceWorkerRegistration(
|
| + origin, kExampleServiceWorkerRegistrationId, ¬ifications));
|
| +
|
| + EXPECT_EQ(2u, notifications.size());
|
| +}
|
| +
|
| +TEST_F(NotificationDatabaseTest, DeleteAllNotificationDataForOrigin) {
|
| + scoped_ptr<NotificationDatabase> database(CreateDatabaseInMemory());
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->Open(true /* create_if_missing */));
|
| +
|
| + ASSERT_NO_FATAL_FAILURE(PopulateDatabaseWithExampleData(database.get()));
|
| +
|
| + GURL origin("https://example.com:443");
|
| +
|
| + std::set<int64_t> deleted_notification_set;
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->DeleteAllNotificationDataForOrigin(
|
| + origin, &deleted_notification_set));
|
| +
|
| + EXPECT_EQ(4u, deleted_notification_set.size());
|
| +
|
| + std::vector<NotificationDatabaseData> notifications;
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->ReadAllNotificationDataForOrigin(origin, ¬ifications));
|
| +
|
| + EXPECT_EQ(0u, notifications.size());
|
| +}
|
| +
|
| +TEST_F(NotificationDatabaseTest, DeleteAllNotificationDataForOriginEmpty) {
|
| + scoped_ptr<NotificationDatabase> database(CreateDatabaseInMemory());
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->Open(true /* create_if_missing */));
|
| +
|
| + GURL origin("https://example.com");
|
| +
|
| + std::set<int64_t> deleted_notification_set;
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->DeleteAllNotificationDataForOrigin(
|
| + origin, &deleted_notification_set));
|
| +
|
| + EXPECT_EQ(0u, deleted_notification_set.size());
|
| +}
|
| +
|
| +TEST_F(NotificationDatabaseTest,
|
| + DeleteAllNotificationDataForServiceWorkerRegistration) {
|
| + scoped_ptr<NotificationDatabase> database(CreateDatabaseInMemory());
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->Open(true /* create_if_missing */));
|
| +
|
| + ASSERT_NO_FATAL_FAILURE(PopulateDatabaseWithExampleData(database.get()));
|
| +
|
| + GURL origin("https://example.com:443");
|
| + std::set<int64_t> deleted_notification_set;
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->DeleteAllNotificationDataForServiceWorkerRegistration(
|
| + origin,
|
| + kExampleServiceWorkerRegistrationId,
|
| + &deleted_notification_set));
|
| +
|
| + EXPECT_EQ(2u, deleted_notification_set.size());
|
| +
|
| + std::vector<NotificationDatabaseData> notifications;
|
| + ASSERT_EQ(NotificationDatabase::STATUS_OK,
|
| + database->ReadAllNotificationDataForServiceWorkerRegistration(
|
| + origin, kExampleServiceWorkerRegistrationId, ¬ifications));
|
| +
|
| + EXPECT_EQ(0u, notifications.size());
|
| +}
|
| +
|
| } // namespace content
|
|
|