| Index: webkit/database/database_tracker_unittest.cc
|
| ===================================================================
|
| --- webkit/database/database_tracker_unittest.cc (revision 35502)
|
| +++ webkit/database/database_tracker_unittest.cc (working copy)
|
| @@ -70,9 +70,6 @@
|
| EXPECT_TRUE(temp_dir.CreateUniqueTempDir());
|
| scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker(temp_dir.path()));
|
|
|
| - // Get the default quota for all origins.
|
| - const int64 kDefaultQuota = tracker->GetOriginQuota(EmptyString16());
|
| -
|
| // Add two observers.
|
| TestObserver observer1;
|
| TestObserver observer2;
|
| @@ -89,24 +86,43 @@
|
| const string16 kDB3 = ASCIIToUTF16("db3");
|
| const string16 kDescription = ASCIIToUTF16("database_description");
|
|
|
| + // Get the quota for kOrigin1 and kOrigin2
|
| + DatabaseTracker::CachedOriginInfo* origin1_info =
|
| + tracker->GetCachedOriginInfo(kOrigin1);
|
| + DatabaseTracker::CachedOriginInfo* origin2_info =
|
| + tracker->GetCachedOriginInfo(kOrigin1);
|
| + EXPECT_TRUE(origin1_info);
|
| + EXPECT_TRUE(origin2_info);
|
| + int64 origin1_quota = origin1_info->Quota();
|
| + int64 origin2_quota = origin2_info->Quota();
|
| + EXPECT_EQ(origin1_quota, tracker->GetOriginSpaceAvailable(kOrigin1));
|
| + EXPECT_EQ(origin2_quota, tracker->GetOriginSpaceAvailable(kOrigin2));
|
| +
|
| + // Set a new quota for kOrigin1
|
| + origin1_quota *= 2;
|
| + tracker->SetOriginQuota(kOrigin1, origin1_quota);
|
| + origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
|
| + EXPECT_TRUE(origin1_info);
|
| + EXPECT_EQ(origin1_quota, origin1_info->Quota());
|
| +
|
| tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
|
| &database_size, &space_available);
|
| EXPECT_EQ(0, database_size);
|
| - EXPECT_EQ(kDefaultQuota, space_available);
|
| + EXPECT_EQ(origin1_quota, space_available);
|
| tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0,
|
| &database_size, &space_available);
|
| EXPECT_EQ(0, database_size);
|
| - EXPECT_EQ(kDefaultQuota, space_available);
|
| + EXPECT_EQ(origin2_quota, space_available);
|
| tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0,
|
| &database_size, &space_available);
|
| EXPECT_EQ(0, database_size);
|
| - EXPECT_EQ(kDefaultQuota, space_available);
|
| + EXPECT_EQ(origin1_quota, space_available);
|
|
|
| // Tell the tracker that a database has changed.
|
| // Even though nothing has changed, the observers should be notified.
|
| tracker->DatabaseModified(kOrigin1, kDB1);
|
| - CheckNotificationReceived(&observer1, kOrigin1, kDB1, 0, kDefaultQuota);
|
| - CheckNotificationReceived(&observer2, kOrigin1, kDB1, 0, kDefaultQuota);
|
| + CheckNotificationReceived(&observer1, kOrigin1, kDB1, 0, origin1_quota);
|
| + CheckNotificationReceived(&observer2, kOrigin1, kDB1, 0, origin1_quota);
|
|
|
| // Write some data to each file and check that the listeners are
|
| // called with the appropriate values.
|
| @@ -121,28 +137,38 @@
|
| EXPECT_EQ(4, file_util::WriteFile(
|
| tracker->GetFullDBFilePath(kOrigin1, kDB3), "aaaa", 4));
|
| tracker->DatabaseModified(kOrigin1, kDB1);
|
| - CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, kDefaultQuota - 1);
|
| - CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, kDefaultQuota - 1);
|
| + CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, origin1_quota - 1);
|
| + CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, origin1_quota - 1);
|
| tracker->DatabaseModified(kOrigin2, kDB2);
|
| - CheckNotificationReceived(&observer1, kOrigin2, kDB2, 2, kDefaultQuota - 2);
|
| - CheckNotificationReceived(&observer2, kOrigin2, kDB2, 2, kDefaultQuota - 2);
|
| + CheckNotificationReceived(&observer1, kOrigin2, kDB2, 2, origin2_quota - 2);
|
| + CheckNotificationReceived(&observer2, kOrigin2, kDB2, 2, origin2_quota - 2);
|
| tracker->DatabaseModified(kOrigin1, kDB3);
|
| - CheckNotificationReceived(&observer1, kOrigin1, kDB3, 4, kDefaultQuota - 5);
|
| - CheckNotificationReceived(&observer2, kOrigin1, kDB3, 4, kDefaultQuota - 5);
|
| + CheckNotificationReceived(&observer1, kOrigin1, kDB3, 4, origin1_quota - 5);
|
| + CheckNotificationReceived(&observer2, kOrigin1, kDB3, 4, origin1_quota - 5);
|
|
|
| + // Make sure the available space for kOrigin1 and kOrigin2 changed accordingly
|
| + EXPECT_EQ(origin1_quota - 5, tracker->GetOriginSpaceAvailable(kOrigin1));
|
| + EXPECT_EQ(origin2_quota - 2, tracker->GetOriginSpaceAvailable(kOrigin2));
|
| +
|
| + // Close all databases
|
| + tracker->DatabaseClosed(kOrigin1, kDB1);
|
| + tracker->DatabaseClosed(kOrigin2, kDB2);
|
| + tracker->DatabaseClosed(kOrigin1, kDB3);
|
| +
|
| // Open an existing database and check the reported size
|
| tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
|
| &database_size, &space_available);
|
| EXPECT_EQ(1, database_size);
|
| - EXPECT_EQ(kDefaultQuota - 5, space_available);
|
| + EXPECT_EQ(origin1_quota - 5, space_available);
|
|
|
| // Make sure that the observers are notified even if
|
| // the size of the database hasn't changed.
|
| EXPECT_EQ(1, file_util::WriteFile(
|
| tracker->GetFullDBFilePath(kOrigin1, kDB1), "b", 1));
|
| tracker->DatabaseModified(kOrigin1, kDB1);
|
| - CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, kDefaultQuota - 5);
|
| - CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, kDefaultQuota - 5);
|
| + CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, origin1_quota - 5);
|
| + CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, origin1_quota - 5);
|
| + tracker->DatabaseClosed(kOrigin1, kDB1);
|
|
|
| // Remove an observer; this should clear all caches.
|
| tracker->RemoveObserver(&observer2);
|
| @@ -156,8 +182,9 @@
|
| EXPECT_EQ(6, file_util::WriteFile(
|
| tracker->GetFullDBFilePath(kOrigin1, kDB3), "dddddd", 6));
|
| tracker->DatabaseModified(kOrigin1, kDB1);
|
| - CheckNotificationReceived(&observer1, kOrigin1, kDB1, 5, kDefaultQuota - 11);
|
| + CheckNotificationReceived(&observer1, kOrigin1, kDB1, 5, origin1_quota - 11);
|
| EXPECT_FALSE(observer2.DidReceiveNewNotification());
|
| + EXPECT_EQ(origin1_quota - 11, tracker->GetOriginSpaceAvailable(kOrigin1));
|
|
|
| // Close the tracker database and clear all caches.
|
| // Then make sure that DatabaseOpened() still returns the correct result.
|
| @@ -165,16 +192,70 @@
|
| tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
|
| &database_size, &space_available);
|
| EXPECT_EQ(5, database_size);
|
| - EXPECT_EQ(kDefaultQuota - 11, space_available);
|
| + EXPECT_EQ(origin1_quota - 11, space_available);
|
|
|
| // Close the tracker database and clear all caches. Then make sure that
|
| // DatabaseModified() still calls the observers with correct values.
|
| tracker->CloseTrackerDatabaseAndClearCaches();
|
| tracker->DatabaseModified(kOrigin1, kDB3);
|
| - CheckNotificationReceived(&observer1, kOrigin1, kDB3, 6, kDefaultQuota - 11);
|
| + CheckNotificationReceived(&observer1, kOrigin1, kDB3, 6, origin1_quota - 11);
|
| + tracker->DatabaseClosed(kOrigin1, kDB1);
|
|
|
| - // Clean up.
|
| + // Remove all observers.
|
| tracker->RemoveObserver(&observer1);
|
| +
|
| + // Trying to delete a database in use should fail
|
| + tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0,
|
| + &database_size, &space_available);
|
| + EXPECT_FALSE(tracker->DeleteDatabase(kOrigin1, kDB3));
|
| + origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
|
| + EXPECT_TRUE(origin1_info);
|
| + EXPECT_EQ(6, origin1_info->GetDatabaseSize(kDB3));
|
| + tracker->DatabaseClosed(kOrigin1, kDB3);
|
| +
|
| + // Delete a database and make sure the space used by that origin is updated
|
| + EXPECT_TRUE(tracker->DeleteDatabase(kOrigin1, kDB3));
|
| + origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
|
| + EXPECT_TRUE(origin1_info);
|
| + EXPECT_EQ(origin1_quota - 5, tracker->GetOriginSpaceAvailable(kOrigin1));
|
| + EXPECT_EQ(5, origin1_info->GetDatabaseSize(kDB1));
|
| + EXPECT_EQ(0, origin1_info->GetDatabaseSize(kDB3));
|
| +
|
| + // Get all data for all origins
|
| + std::vector<OriginInfo> origins_info;
|
| + EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info));
|
| + EXPECT_EQ(size_t(2), origins_info.size());
|
| + EXPECT_EQ(kOrigin1, origins_info[0].GetOrigin());
|
| + EXPECT_EQ(5, origins_info[0].TotalSize());
|
| + EXPECT_EQ(origin1_quota, origins_info[0].Quota());
|
| + EXPECT_EQ(5, origins_info[0].GetDatabaseSize(kDB1));
|
| + EXPECT_EQ(0, origins_info[0].GetDatabaseSize(kDB3));
|
| +
|
| + EXPECT_EQ(kOrigin2, origins_info[1].GetOrigin());
|
| + EXPECT_EQ(2, origins_info[1].TotalSize());
|
| + EXPECT_EQ(origin2_quota, origins_info[1].Quota());
|
| +
|
| + // Trying to delete an origin with databases in use should fail
|
| + tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
|
| + &database_size, &space_available);
|
| + EXPECT_FALSE(tracker->DeleteOrigin(kOrigin1));
|
| + origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
|
| + EXPECT_TRUE(origin1_info);
|
| + EXPECT_EQ(5, origin1_info->GetDatabaseSize(kDB1));
|
| + tracker->DatabaseClosed(kOrigin1, kDB1);
|
| +
|
| + // Delete an origin that doesn't have any database in use
|
| + EXPECT_TRUE(tracker->DeleteOrigin(kOrigin1));
|
| + origins_info.clear();
|
| + EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info));
|
| + EXPECT_EQ(size_t(1), origins_info.size());
|
| + EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin());
|
| +
|
| + origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
|
| + EXPECT_TRUE(origin1_info);
|
| + EXPECT_EQ(origin1_quota, origin1_info->Quota());
|
| + EXPECT_EQ(0, origin1_info->TotalSize());
|
| + EXPECT_EQ(origin1_quota, tracker->GetOriginSpaceAvailable(kOrigin1));
|
| }
|
|
|
| } // namespace webkit_database
|
|
|