| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/file_path.h" | 5 #include "base/file_path.h" |
| 6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/scoped_temp_dir.h" | 8 #include "base/scoped_temp_dir.h" |
| 9 #include "base/time.h" | 9 #include "base/time.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 } | 36 } |
| 37 }; | 37 }; |
| 38 | 38 |
| 39 class TestObserver : public webkit_database::DatabaseTracker::Observer { | 39 class TestObserver : public webkit_database::DatabaseTracker::Observer { |
| 40 public: | 40 public: |
| 41 TestObserver() : new_notification_received_(false) {} | 41 TestObserver() : new_notification_received_(false) {} |
| 42 virtual ~TestObserver() {} | 42 virtual ~TestObserver() {} |
| 43 virtual void OnDatabaseSizeChanged(const string16& origin_identifier, | 43 virtual void OnDatabaseSizeChanged(const string16& origin_identifier, |
| 44 const string16& database_name, | 44 const string16& database_name, |
| 45 int64 database_size, | 45 int64 database_size, |
| 46 int64 space_available) { | 46 int64 space_available_not_used) { |
| 47 new_notification_received_ = true; | 47 new_notification_received_ = true; |
| 48 origin_identifier_ = origin_identifier; | 48 origin_identifier_ = origin_identifier; |
| 49 database_name_ = database_name; | 49 database_name_ = database_name; |
| 50 database_size_ = database_size; | 50 database_size_ = database_size; |
| 51 space_available_ = space_available; | |
| 52 } | 51 } |
| 53 virtual void OnDatabaseScheduledForDeletion(const string16& origin_identifier, | 52 virtual void OnDatabaseScheduledForDeletion(const string16& origin_identifier, |
| 54 const string16& database_name) { | 53 const string16& database_name) { |
| 55 new_notification_received_ = true; | 54 new_notification_received_ = true; |
| 56 origin_identifier_ = origin_identifier; | 55 origin_identifier_ = origin_identifier; |
| 57 database_name_ = database_name; | 56 database_name_ = database_name; |
| 58 } | 57 } |
| 59 bool DidReceiveNewNotification() { | 58 bool DidReceiveNewNotification() { |
| 60 bool temp_new_notification_received = new_notification_received_; | 59 bool temp_new_notification_received = new_notification_received_; |
| 61 new_notification_received_ = false; | 60 new_notification_received_ = false; |
| 62 return temp_new_notification_received; | 61 return temp_new_notification_received; |
| 63 } | 62 } |
| 64 string16 GetNotificationOriginIdentifier() { return origin_identifier_; } | 63 string16 GetNotificationOriginIdentifier() { return origin_identifier_; } |
| 65 string16 GetNotificationDatabaseName() { return database_name_; } | 64 string16 GetNotificationDatabaseName() { return database_name_; } |
| 66 int64 GetNotificationDatabaseSize() { return database_size_; } | 65 int64 GetNotificationDatabaseSize() { return database_size_; } |
| 67 int64 GetNotificationSpaceAvailable() { return space_available_; } | |
| 68 | 66 |
| 69 private: | 67 private: |
| 70 bool new_notification_received_; | 68 bool new_notification_received_; |
| 71 string16 origin_identifier_; | 69 string16 origin_identifier_; |
| 72 string16 database_name_; | 70 string16 database_name_; |
| 73 int64 database_size_; | 71 int64 database_size_; |
| 74 int64 space_available_; | |
| 75 }; | 72 }; |
| 76 | 73 |
| 77 void CheckNotificationReceived(TestObserver* observer, | 74 void CheckNotificationReceived(TestObserver* observer, |
| 78 const string16& expected_origin_identifier, | 75 const string16& expected_origin_identifier, |
| 79 const string16& expected_database_name, | 76 const string16& expected_database_name, |
| 80 int64 expected_database_size, | 77 int64 expected_database_size) { |
| 81 int64 expected_space_available) { | |
| 82 EXPECT_TRUE(observer->DidReceiveNewNotification()); | 78 EXPECT_TRUE(observer->DidReceiveNewNotification()); |
| 83 EXPECT_EQ(expected_origin_identifier, | 79 EXPECT_EQ(expected_origin_identifier, |
| 84 observer->GetNotificationOriginIdentifier()); | 80 observer->GetNotificationOriginIdentifier()); |
| 85 EXPECT_EQ(expected_database_name, | 81 EXPECT_EQ(expected_database_name, |
| 86 observer->GetNotificationDatabaseName()); | 82 observer->GetNotificationDatabaseName()); |
| 87 EXPECT_EQ(expected_database_size, | 83 EXPECT_EQ(expected_database_size, |
| 88 observer->GetNotificationDatabaseSize()); | 84 observer->GetNotificationDatabaseSize()); |
| 89 EXPECT_EQ(expected_space_available, | |
| 90 observer->GetNotificationSpaceAvailable()); | |
| 91 } | 85 } |
| 92 | 86 |
| 93 class TestQuotaManagerProxy : public quota::QuotaManagerProxy { | 87 class TestQuotaManagerProxy : public quota::QuotaManagerProxy { |
| 94 public: | 88 public: |
| 95 TestQuotaManagerProxy() | 89 TestQuotaManagerProxy() |
| 96 : QuotaManagerProxy(NULL, NULL), | 90 : QuotaManagerProxy(NULL, NULL), |
| 97 registered_client_(NULL) { | 91 registered_client_(NULL) { |
| 98 } | 92 } |
| 99 | 93 |
| 100 virtual ~TestQuotaManagerProxy() { | 94 virtual ~TestQuotaManagerProxy() { |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 // Initialize the tracker database. | 184 // Initialize the tracker database. |
| 191 ScopedTempDir temp_dir; | 185 ScopedTempDir temp_dir; |
| 192 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 186 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 193 scoped_refptr<DatabaseTracker> tracker( | 187 scoped_refptr<DatabaseTracker> tracker( |
| 194 new DatabaseTracker(temp_dir.path(), incognito_mode, | 188 new DatabaseTracker(temp_dir.path(), incognito_mode, |
| 195 new TestSpecialStoragePolicy, | 189 new TestSpecialStoragePolicy, |
| 196 NULL, NULL)); | 190 NULL, NULL)); |
| 197 | 191 |
| 198 // Create and open three databases. | 192 // Create and open three databases. |
| 199 int64 database_size = 0; | 193 int64 database_size = 0; |
| 200 int64 space_available = 0; | 194 int64 space_available_not_used = 0; |
| 201 const string16 kOrigin1 = | 195 const string16 kOrigin1 = |
| 202 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); | 196 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); |
| 203 const string16 kOrigin2 = | 197 const string16 kOrigin2 = |
| 204 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); | 198 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); |
| 205 const string16 kDB1 = ASCIIToUTF16("db1"); | 199 const string16 kDB1 = ASCIIToUTF16("db1"); |
| 206 const string16 kDB2 = ASCIIToUTF16("db2"); | 200 const string16 kDB2 = ASCIIToUTF16("db2"); |
| 207 const string16 kDB3 = ASCIIToUTF16("db3"); | 201 const string16 kDB3 = ASCIIToUTF16("db3"); |
| 208 const string16 kDescription = ASCIIToUTF16("database_description"); | 202 const string16 kDescription = ASCIIToUTF16("database_description"); |
| 209 | 203 |
| 210 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 204 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 211 &database_size, &space_available); | 205 &database_size, &space_available_not_used); |
| 212 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | 206 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, |
| 213 &database_size, &space_available); | 207 &database_size, &space_available_not_used); |
| 214 tracker->DatabaseOpened(kOrigin2, kDB3, kDescription, 0, | 208 tracker->DatabaseOpened(kOrigin2, kDB3, kDescription, 0, |
| 215 &database_size, &space_available); | 209 &database_size, &space_available_not_used); |
| 216 | 210 |
| 217 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( | 211 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( |
| 218 FilePath::FromWStringHack(UTF16ToWide( | 212 FilePath::FromWStringHack(UTF16ToWide( |
| 219 tracker->GetOriginDirectory(kOrigin1)))))); | 213 tracker->GetOriginDirectory(kOrigin1)))))); |
| 220 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( | 214 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( |
| 221 FilePath::FromWStringHack(UTF16ToWide( | 215 FilePath::FromWStringHack(UTF16ToWide( |
| 222 tracker->GetOriginDirectory(kOrigin2)))))); | 216 tracker->GetOriginDirectory(kOrigin2)))))); |
| 223 EXPECT_EQ(1, file_util::WriteFile( | 217 EXPECT_EQ(1, file_util::WriteFile( |
| 224 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); | 218 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); |
| 225 EXPECT_EQ(2, file_util::WriteFile( | 219 EXPECT_EQ(2, file_util::WriteFile( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 241 EXPECT_EQ(kOrigin1, observer.GetNotificationOriginIdentifier()); | 235 EXPECT_EQ(kOrigin1, observer.GetNotificationOriginIdentifier()); |
| 242 EXPECT_EQ(kDB1, observer.GetNotificationDatabaseName()); | 236 EXPECT_EQ(kDB1, observer.GetNotificationDatabaseName()); |
| 243 tracker->DatabaseClosed(kOrigin1, kDB1); | 237 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 244 result = callback.GetResult(result); | 238 result = callback.GetResult(result); |
| 245 EXPECT_EQ(net::OK, result); | 239 EXPECT_EQ(net::OK, result); |
| 246 EXPECT_FALSE(file_util::PathExists(tracker->DatabaseDirectory().Append( | 240 EXPECT_FALSE(file_util::PathExists(tracker->DatabaseDirectory().Append( |
| 247 FilePath::FromWStringHack(UTF16ToWide(kOrigin1))))); | 241 FilePath::FromWStringHack(UTF16ToWide(kOrigin1))))); |
| 248 | 242 |
| 249 // Recreate db1. | 243 // Recreate db1. |
| 250 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 244 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 251 &database_size, &space_available); | 245 &database_size, &space_available_not_used); |
| 252 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( | 246 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( |
| 253 FilePath::FromWStringHack(UTF16ToWide( | 247 FilePath::FromWStringHack(UTF16ToWide( |
| 254 tracker->GetOriginDirectory(kOrigin1)))))); | 248 tracker->GetOriginDirectory(kOrigin1)))))); |
| 255 EXPECT_EQ(1, file_util::WriteFile( | 249 EXPECT_EQ(1, file_util::WriteFile( |
| 256 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); | 250 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); |
| 257 tracker->DatabaseModified(kOrigin1, kDB1); | 251 tracker->DatabaseModified(kOrigin1, kDB1); |
| 258 | 252 |
| 259 // Setup file modification times. db1 and db2 are modified now, db3 three | 253 // Setup file modification times. db1 and db2 are modified now, db3 three |
| 260 // days ago. | 254 // days ago. |
| 261 EXPECT_TRUE(file_util::SetLastModifiedTime( | 255 EXPECT_TRUE(file_util::SetLastModifiedTime( |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 NULL, NULL)); | 294 NULL, NULL)); |
| 301 | 295 |
| 302 // Add two observers. | 296 // Add two observers. |
| 303 TestObserver observer1; | 297 TestObserver observer1; |
| 304 TestObserver observer2; | 298 TestObserver observer2; |
| 305 tracker->AddObserver(&observer1); | 299 tracker->AddObserver(&observer1); |
| 306 tracker->AddObserver(&observer2); | 300 tracker->AddObserver(&observer2); |
| 307 | 301 |
| 308 // Open three new databases. | 302 // Open three new databases. |
| 309 int64 database_size = 0; | 303 int64 database_size = 0; |
| 310 int64 space_available = 0; | 304 int64 space_available_not_used = 0; |
| 311 const string16 kOrigin1 = | 305 const string16 kOrigin1 = |
| 312 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); | 306 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); |
| 313 const string16 kOrigin2 = | 307 const string16 kOrigin2 = |
| 314 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); | 308 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); |
| 315 const string16 kDB1 = ASCIIToUTF16("db1"); | 309 const string16 kDB1 = ASCIIToUTF16("db1"); |
| 316 const string16 kDB2 = ASCIIToUTF16("db2"); | 310 const string16 kDB2 = ASCIIToUTF16("db2"); |
| 317 const string16 kDB3 = ASCIIToUTF16("db3"); | 311 const string16 kDB3 = ASCIIToUTF16("db3"); |
| 318 const string16 kDescription = ASCIIToUTF16("database_description"); | 312 const string16 kDescription = ASCIIToUTF16("database_description"); |
| 319 | 313 |
| 320 // Get the quota for kOrigin1 and kOrigin2 | 314 // Get the quota for kOrigin1 and kOrigin2 |
| 321 DatabaseTracker::CachedOriginInfo* origin1_info = | 315 DatabaseTracker::CachedOriginInfo* origin1_info = |
| 322 tracker->GetCachedOriginInfo(kOrigin1); | 316 tracker->GetCachedOriginInfo(kOrigin1); |
| 323 DatabaseTracker::CachedOriginInfo* origin2_info = | 317 DatabaseTracker::CachedOriginInfo* origin2_info = |
| 324 tracker->GetCachedOriginInfo(kOrigin1); | 318 tracker->GetCachedOriginInfo(kOrigin1); |
| 325 EXPECT_TRUE(origin1_info); | 319 EXPECT_TRUE(origin1_info); |
| 326 EXPECT_TRUE(origin2_info); | 320 EXPECT_TRUE(origin2_info); |
| 327 int64 origin1_quota = origin1_info->Quota(); | 321 int64 origin1_quota = origin1_info->Quota(); |
| 328 int64 origin2_quota = origin2_info->Quota(); | 322 int64 origin2_quota = origin2_info->Quota(); |
| 329 EXPECT_EQ(origin1_quota, tracker->GetOriginSpaceAvailable(kOrigin1)); | |
| 330 EXPECT_EQ(origin2_quota, tracker->GetOriginSpaceAvailable(kOrigin2)); | |
| 331 | 323 |
| 332 // Set a new quota for kOrigin1 | 324 // Set a new quota for kOrigin1 |
| 333 origin1_quota *= 2; | 325 origin1_quota *= 2; |
| 334 tracker->SetOriginQuota(kOrigin1, origin1_quota); | 326 tracker->SetOriginQuota(kOrigin1, origin1_quota); |
| 335 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); | 327 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); |
| 336 EXPECT_TRUE(origin1_info); | 328 EXPECT_TRUE(origin1_info); |
| 337 EXPECT_EQ(origin1_quota, origin1_info->Quota()); | 329 EXPECT_EQ(origin1_quota, origin1_info->Quota()); |
| 338 | 330 |
| 339 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 331 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 340 &database_size, &space_available); | 332 &database_size, &space_available_not_used); |
| 341 EXPECT_EQ(0, database_size); | 333 EXPECT_EQ(0, database_size); |
| 342 EXPECT_EQ(origin1_quota, space_available); | |
| 343 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | 334 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, |
| 344 &database_size, &space_available); | 335 &database_size, &space_available_not_used); |
| 345 EXPECT_EQ(0, database_size); | 336 EXPECT_EQ(0, database_size); |
| 346 EXPECT_EQ(origin2_quota, space_available); | |
| 347 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, | 337 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, |
| 348 &database_size, &space_available); | 338 &database_size, &space_available_not_used); |
| 349 EXPECT_EQ(0, database_size); | 339 EXPECT_EQ(0, database_size); |
| 350 EXPECT_EQ(origin1_quota, space_available); | |
| 351 | |
| 352 // Tell the tracker that a database has changed. | |
| 353 // Even though nothing has changed, the observers should be notified. | |
| 354 tracker->DatabaseModified(kOrigin1, kDB1); | |
| 355 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 0, origin1_quota); | |
| 356 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 0, origin1_quota); | |
| 357 | 340 |
| 358 // Write some data to each file and check that the listeners are | 341 // Write some data to each file and check that the listeners are |
| 359 // called with the appropriate values. | 342 // called with the appropriate values. |
| 360 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( | 343 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( |
| 361 FilePath::FromWStringHack(UTF16ToWide( | 344 FilePath::FromWStringHack(UTF16ToWide( |
| 362 tracker->GetOriginDirectory(kOrigin1)))))); | 345 tracker->GetOriginDirectory(kOrigin1)))))); |
| 363 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( | 346 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( |
| 364 FilePath::FromWStringHack(UTF16ToWide( | 347 FilePath::FromWStringHack(UTF16ToWide( |
| 365 tracker->GetOriginDirectory(kOrigin2)))))); | 348 tracker->GetOriginDirectory(kOrigin2)))))); |
| 366 EXPECT_EQ(1, file_util::WriteFile( | 349 EXPECT_EQ(1, file_util::WriteFile( |
| 367 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); | 350 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); |
| 368 EXPECT_EQ(2, file_util::WriteFile( | 351 EXPECT_EQ(2, file_util::WriteFile( |
| 369 tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2)); | 352 tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2)); |
| 370 EXPECT_EQ(4, file_util::WriteFile( | 353 EXPECT_EQ(4, file_util::WriteFile( |
| 371 tracker->GetFullDBFilePath(kOrigin1, kDB3), "aaaa", 4)); | 354 tracker->GetFullDBFilePath(kOrigin1, kDB3), "aaaa", 4)); |
| 372 tracker->DatabaseModified(kOrigin1, kDB1); | 355 tracker->DatabaseModified(kOrigin1, kDB1); |
| 373 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, origin1_quota - 1); | 356 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1); |
| 374 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, origin1_quota - 1); | 357 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1); |
| 375 tracker->DatabaseModified(kOrigin2, kDB2); | 358 tracker->DatabaseModified(kOrigin2, kDB2); |
| 376 CheckNotificationReceived(&observer1, kOrigin2, kDB2, 2, origin2_quota - 2); | 359 CheckNotificationReceived(&observer1, kOrigin2, kDB2, 2); |
| 377 CheckNotificationReceived(&observer2, kOrigin2, kDB2, 2, origin2_quota - 2); | 360 CheckNotificationReceived(&observer2, kOrigin2, kDB2, 2); |
| 378 tracker->DatabaseModified(kOrigin1, kDB3); | 361 tracker->DatabaseModified(kOrigin1, kDB3); |
| 379 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 4, origin1_quota - 5); | 362 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 4); |
| 380 CheckNotificationReceived(&observer2, kOrigin1, kDB3, 4, origin1_quota - 5); | 363 CheckNotificationReceived(&observer2, kOrigin1, kDB3, 4); |
| 381 | |
| 382 // Make sure the available space for kOrigin1 and kOrigin2 changed too. | |
| 383 EXPECT_EQ(origin1_quota - 5, tracker->GetOriginSpaceAvailable(kOrigin1)); | |
| 384 EXPECT_EQ(origin2_quota - 2, tracker->GetOriginSpaceAvailable(kOrigin2)); | |
| 385 | 364 |
| 386 // Close all databases | 365 // Close all databases |
| 387 tracker->DatabaseClosed(kOrigin1, kDB1); | 366 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 388 tracker->DatabaseClosed(kOrigin2, kDB2); | 367 tracker->DatabaseClosed(kOrigin2, kDB2); |
| 389 tracker->DatabaseClosed(kOrigin1, kDB3); | 368 tracker->DatabaseClosed(kOrigin1, kDB3); |
| 390 | 369 |
| 391 // Open an existing database and check the reported size | 370 // Open an existing database and check the reported size |
| 392 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 371 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 393 &database_size, &space_available); | 372 &database_size, &space_available_not_used); |
| 394 EXPECT_EQ(1, database_size); | 373 EXPECT_EQ(1, database_size); |
| 395 EXPECT_EQ(origin1_quota - 5, space_available); | |
| 396 | |
| 397 // Make sure that the observers are notified even if | |
| 398 // the size of the database hasn't changed. | |
| 399 EXPECT_EQ(1, file_util::WriteFile( | |
| 400 tracker->GetFullDBFilePath(kOrigin1, kDB1), "b", 1)); | |
| 401 tracker->DatabaseModified(kOrigin1, kDB1); | |
| 402 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, origin1_quota - 5); | |
| 403 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, origin1_quota - 5); | |
| 404 tracker->DatabaseClosed(kOrigin1, kDB1); | 374 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 405 | 375 |
| 406 // Remove an observer; this should clear all caches. | 376 // Remove an observer; this should clear all caches. |
| 407 tracker->RemoveObserver(&observer2); | 377 tracker->RemoveObserver(&observer2); |
| 408 | 378 |
| 409 // Change kDB1's and kDB3's size and call tracker->DatabaseModified() | |
| 410 // for kDB1 only. If the caches were indeed cleared, then calling | |
| 411 // tracker->DatabaseModified() should re-populate the cache for | |
| 412 // kOrigin1 == kOrigin1, and thus, should pick up kDB3's size change too. | |
| 413 EXPECT_EQ(5, file_util::WriteFile( | |
| 414 tracker->GetFullDBFilePath(kOrigin1, kDB1), "ccccc", 5)); | |
| 415 EXPECT_EQ(6, file_util::WriteFile( | |
| 416 tracker->GetFullDBFilePath(kOrigin1, kDB3), "dddddd", 6)); | |
| 417 tracker->DatabaseModified(kOrigin1, kDB1); | |
| 418 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 5, | |
| 419 origin1_quota - 11); | |
| 420 EXPECT_FALSE(observer2.DidReceiveNewNotification()); | |
| 421 EXPECT_EQ(origin1_quota - 11, tracker->GetOriginSpaceAvailable(kOrigin1)); | |
| 422 | |
| 423 // Close the tracker database and clear all caches. | 379 // Close the tracker database and clear all caches. |
| 424 // Then make sure that DatabaseOpened() still returns the correct result. | 380 // Then make sure that DatabaseOpened() still returns the correct result. |
| 425 tracker->CloseTrackerDatabaseAndClearCaches(); | 381 tracker->CloseTrackerDatabaseAndClearCaches(); |
| 426 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 382 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 427 &database_size, &space_available); | 383 &database_size, &space_available_not_used); |
| 428 EXPECT_EQ(5, database_size); | 384 EXPECT_EQ(1, database_size); |
| 429 EXPECT_EQ(origin1_quota - 11, space_available); | |
| 430 | |
| 431 // Close the tracker database and clear all caches. Then make sure that | |
| 432 // DatabaseModified() still calls the observers with correct values. | |
| 433 tracker->CloseTrackerDatabaseAndClearCaches(); | |
| 434 tracker->DatabaseModified(kOrigin1, kDB3); | |
| 435 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 6, | |
| 436 origin1_quota - 11); | |
| 437 tracker->DatabaseClosed(kOrigin1, kDB1); | 385 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 438 | 386 |
| 439 // Remove all observers. | 387 // Remove all observers. |
| 440 tracker->RemoveObserver(&observer1); | 388 tracker->RemoveObserver(&observer1); |
| 441 | 389 |
| 442 // Trying to delete a database in use should fail | 390 // Trying to delete a database in use should fail |
| 443 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, | 391 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, |
| 444 &database_size, &space_available); | 392 &database_size, &space_available_not_used); |
| 445 EXPECT_FALSE(tracker->DeleteClosedDatabase(kOrigin1, kDB3)); | 393 EXPECT_FALSE(tracker->DeleteClosedDatabase(kOrigin1, kDB3)); |
| 446 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); | 394 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); |
| 447 EXPECT_TRUE(origin1_info); | 395 EXPECT_TRUE(origin1_info); |
| 448 EXPECT_EQ(6, origin1_info->GetDatabaseSize(kDB3)); | 396 EXPECT_EQ(4, origin1_info->GetDatabaseSize(kDB3)); |
| 449 tracker->DatabaseClosed(kOrigin1, kDB3); | 397 tracker->DatabaseClosed(kOrigin1, kDB3); |
| 450 | 398 |
| 451 // Delete a database and make sure the space used by that origin is updated | 399 // Delete a database and make sure the space used by that origin is updated |
| 452 EXPECT_TRUE(tracker->DeleteClosedDatabase(kOrigin1, kDB3)); | 400 EXPECT_TRUE(tracker->DeleteClosedDatabase(kOrigin1, kDB3)); |
| 453 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); | 401 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); |
| 454 EXPECT_TRUE(origin1_info); | 402 EXPECT_TRUE(origin1_info); |
| 455 EXPECT_EQ(origin1_quota - 5, tracker->GetOriginSpaceAvailable(kOrigin1)); | 403 EXPECT_EQ(1, origin1_info->GetDatabaseSize(kDB1)); |
| 456 EXPECT_EQ(5, origin1_info->GetDatabaseSize(kDB1)); | |
| 457 EXPECT_EQ(0, origin1_info->GetDatabaseSize(kDB3)); | 404 EXPECT_EQ(0, origin1_info->GetDatabaseSize(kDB3)); |
| 458 | 405 |
| 459 // Get all data for all origins | 406 // Get all data for all origins |
| 460 std::vector<OriginInfo> origins_info; | 407 std::vector<OriginInfo> origins_info; |
| 461 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); | 408 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| 462 EXPECT_EQ(size_t(2), origins_info.size()); | 409 EXPECT_EQ(size_t(2), origins_info.size()); |
| 463 EXPECT_EQ(kOrigin1, origins_info[0].GetOrigin()); | 410 EXPECT_EQ(kOrigin1, origins_info[0].GetOrigin()); |
| 464 EXPECT_EQ(5, origins_info[0].TotalSize()); | 411 EXPECT_EQ(1, origins_info[0].TotalSize()); |
| 465 EXPECT_EQ(origin1_quota, origins_info[0].Quota()); | 412 EXPECT_EQ(origin1_quota, origins_info[0].Quota()); |
| 466 EXPECT_EQ(5, origins_info[0].GetDatabaseSize(kDB1)); | 413 EXPECT_EQ(1, origins_info[0].GetDatabaseSize(kDB1)); |
| 467 EXPECT_EQ(0, origins_info[0].GetDatabaseSize(kDB3)); | 414 EXPECT_EQ(0, origins_info[0].GetDatabaseSize(kDB3)); |
| 468 | 415 |
| 469 EXPECT_EQ(kOrigin2, origins_info[1].GetOrigin()); | 416 EXPECT_EQ(kOrigin2, origins_info[1].GetOrigin()); |
| 470 EXPECT_EQ(2, origins_info[1].TotalSize()); | 417 EXPECT_EQ(2, origins_info[1].TotalSize()); |
| 471 EXPECT_EQ(origin2_quota, origins_info[1].Quota()); | 418 EXPECT_EQ(origin2_quota, origins_info[1].Quota()); |
| 472 | 419 |
| 473 // Trying to delete an origin with databases in use should fail | 420 // Trying to delete an origin with databases in use should fail |
| 474 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 421 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 475 &database_size, &space_available); | 422 &database_size, &space_available_not_used); |
| 476 EXPECT_FALSE(tracker->DeleteOrigin(kOrigin1)); | 423 EXPECT_FALSE(tracker->DeleteOrigin(kOrigin1)); |
| 477 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); | 424 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); |
| 478 EXPECT_TRUE(origin1_info); | 425 EXPECT_TRUE(origin1_info); |
| 479 EXPECT_EQ(5, origin1_info->GetDatabaseSize(kDB1)); | 426 EXPECT_EQ(1, origin1_info->GetDatabaseSize(kDB1)); |
| 480 tracker->DatabaseClosed(kOrigin1, kDB1); | 427 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 481 | 428 |
| 482 // Delete an origin that doesn't have any database in use | 429 // Delete an origin that doesn't have any database in use |
| 483 EXPECT_TRUE(tracker->DeleteOrigin(kOrigin1)); | 430 EXPECT_TRUE(tracker->DeleteOrigin(kOrigin1)); |
| 484 origins_info.clear(); | 431 origins_info.clear(); |
| 485 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); | 432 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| 486 EXPECT_EQ(size_t(1), origins_info.size()); | 433 EXPECT_EQ(size_t(1), origins_info.size()); |
| 487 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin()); | 434 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin()); |
| 488 | 435 |
| 489 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); | 436 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); |
| 490 EXPECT_TRUE(origin1_info); | 437 EXPECT_TRUE(origin1_info); |
| 491 EXPECT_EQ(origin1_quota, origin1_info->Quota()); | 438 EXPECT_EQ(origin1_quota, origin1_info->Quota()); |
| 492 EXPECT_EQ(0, origin1_info->TotalSize()); | 439 EXPECT_EQ(0, origin1_info->TotalSize()); |
| 493 EXPECT_EQ(origin1_quota, tracker->GetOriginSpaceAvailable(kOrigin1)); | |
| 494 } | 440 } |
| 495 | 441 |
| 496 static void DatabaseTrackerQuotaIntegration() { | 442 static void DatabaseTrackerQuotaIntegration() { |
| 497 const GURL kOrigin(kOrigin1Url); | 443 const GURL kOrigin(kOrigin1Url); |
| 498 const string16 kOriginId = DatabaseUtil::GetOriginIdentifier(kOrigin); | 444 const string16 kOriginId = DatabaseUtil::GetOriginIdentifier(kOrigin); |
| 499 const string16 kName = ASCIIToUTF16("name"); | 445 const string16 kName = ASCIIToUTF16("name"); |
| 500 const string16 kDescription = ASCIIToUTF16("description"); | 446 const string16 kDescription = ASCIIToUTF16("description"); |
| 501 | 447 |
| 502 ScopedTempDir temp_dir; | 448 ScopedTempDir temp_dir; |
| 503 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 449 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 504 | 450 |
| 505 // Initialize the tracker with a QuotaManagerProxy | 451 // Initialize the tracker with a QuotaManagerProxy |
| 506 scoped_refptr<TestQuotaManagerProxy> test_quota_proxy( | 452 scoped_refptr<TestQuotaManagerProxy> test_quota_proxy( |
| 507 new TestQuotaManagerProxy); | 453 new TestQuotaManagerProxy); |
| 508 scoped_refptr<DatabaseTracker> tracker( | 454 scoped_refptr<DatabaseTracker> tracker( |
| 509 new DatabaseTracker(temp_dir.path(), false /* incognito */, | 455 new DatabaseTracker(temp_dir.path(), false /* incognito */, |
| 510 NULL, test_quota_proxy, NULL)); | 456 NULL, test_quota_proxy, NULL)); |
| 511 EXPECT_TRUE(test_quota_proxy->registered_client_); | 457 EXPECT_TRUE(test_quota_proxy->registered_client_); |
| 512 | 458 |
| 513 // Create a database and modify it a couple of times, close it, | 459 // Create a database and modify it a couple of times, close it, |
| 514 // then delete it. Observe the tracker notifies accordingly. | 460 // then delete it. Observe the tracker notifies accordingly. |
| 515 | 461 |
| 516 int64 database_size = 0; | 462 int64 database_size = 0; |
| 517 int64 space_available = 0; | 463 int64 space_available_not_used = 0; |
| 518 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, | 464 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, |
| 519 &database_size, &space_available); | 465 &database_size, &space_available_not_used); |
| 520 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); | 466 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 521 test_quota_proxy->reset(); | 467 test_quota_proxy->reset(); |
| 522 | 468 |
| 523 FilePath db_file(tracker->GetFullDBFilePath(kOriginId, kName)); | 469 FilePath db_file(tracker->GetFullDBFilePath(kOriginId, kName)); |
| 524 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); | 470 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); |
| 525 EXPECT_TRUE(EnsureFileOfSize(db_file, 10)); | 471 EXPECT_TRUE(EnsureFileOfSize(db_file, 10)); |
| 526 tracker->DatabaseModified(kOriginId, kName); | 472 tracker->DatabaseModified(kOriginId, kName); |
| 527 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 10)); | 473 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 10)); |
| 528 test_quota_proxy->reset(); | 474 test_quota_proxy->reset(); |
| 529 | 475 |
| 530 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); | 476 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); |
| 531 tracker->DatabaseModified(kOriginId, kName); | 477 tracker->DatabaseModified(kOriginId, kName); |
| 532 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 90)); | 478 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 90)); |
| 533 test_quota_proxy->reset(); | 479 test_quota_proxy->reset(); |
| 534 | 480 |
| 535 tracker->DatabaseClosed(kOriginId, kName); | 481 tracker->DatabaseClosed(kOriginId, kName); |
| 482 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 536 EXPECT_EQ(net::OK, tracker->DeleteDatabase(kOriginId, kName, NULL)); | 483 EXPECT_EQ(net::OK, tracker->DeleteDatabase(kOriginId, kName, NULL)); |
| 537 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); | 484 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); |
| 485 test_quota_proxy->reset(); |
| 538 | 486 |
| 539 // Create a database and modify it, try to delete it while open, | 487 // Create a database and modify it, try to delete it while open, |
| 540 // then close it (at which time deletion will actually occur). | 488 // then close it (at which time deletion will actually occur). |
| 541 // Observe the tracker notifies accordingly. | 489 // Observe the tracker notifies accordingly. |
| 542 | 490 |
| 543 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, | 491 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, |
| 544 &database_size, &space_available); | 492 &database_size, &space_available_not_used); |
| 545 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); | 493 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 546 test_quota_proxy->reset(); | 494 test_quota_proxy->reset(); |
| 547 | 495 |
| 548 db_file = tracker->GetFullDBFilePath(kOriginId, kName); | 496 db_file = tracker->GetFullDBFilePath(kOriginId, kName); |
| 549 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); | 497 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); |
| 550 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); | 498 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); |
| 551 tracker->DatabaseModified(kOriginId, kName); | 499 tracker->DatabaseModified(kOriginId, kName); |
| 552 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); | 500 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); |
| 553 test_quota_proxy->reset(); | 501 test_quota_proxy->reset(); |
| 554 | 502 |
| 555 EXPECT_EQ(net::ERR_IO_PENDING, | 503 EXPECT_EQ(net::ERR_IO_PENDING, |
| 556 tracker->DeleteDatabase(kOriginId, kName, NULL)); | 504 tracker->DeleteDatabase(kOriginId, kName, NULL)); |
| 557 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); | 505 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); |
| 558 | 506 |
| 559 tracker->DatabaseClosed(kOriginId, kName); | 507 tracker->DatabaseClosed(kOriginId, kName); |
| 508 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 560 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); | 509 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); |
| 510 test_quota_proxy->reset(); |
| 561 | 511 |
| 562 // Create a database and up the file size without telling | 512 // Create a database and up the file size without telling |
| 563 // the tracker about the modification, than simulate a | 513 // the tracker about the modification, than simulate a |
| 564 // a renderer crash. | 514 // a renderer crash. |
| 565 // Observe the tracker notifies accordingly. | 515 // Observe the tracker notifies accordingly. |
| 566 | 516 |
| 567 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, | 517 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, |
| 568 &database_size, &space_available); | 518 &database_size, &space_available_not_used); |
| 569 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); | 519 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 570 test_quota_proxy->reset(); | 520 test_quota_proxy->reset(); |
| 571 db_file = tracker->GetFullDBFilePath(kOriginId, kName); | 521 db_file = tracker->GetFullDBFilePath(kOriginId, kName); |
| 572 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); | 522 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); |
| 573 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); | 523 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); |
| 574 DatabaseConnections crashed_renderer_connections; | 524 DatabaseConnections crashed_renderer_connections; |
| 575 crashed_renderer_connections.AddConnection(kOriginId, kName); | 525 crashed_renderer_connections.AddConnection(kOriginId, kName); |
| 576 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); | 526 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); |
| 577 tracker->CloseDatabases(crashed_renderer_connections); | 527 tracker->CloseDatabases(crashed_renderer_connections); |
| 578 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); | 528 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 598 TEST(DatabaseTrackerTest, DatabaseTrackerIncognitoMode) { | 548 TEST(DatabaseTrackerTest, DatabaseTrackerIncognitoMode) { |
| 599 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(true); | 549 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(true); |
| 600 } | 550 } |
| 601 | 551 |
| 602 TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { | 552 TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { |
| 603 // There is no difference in behavior between incognito and not. | 553 // There is no difference in behavior between incognito and not. |
| 604 DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); | 554 DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); |
| 605 } | 555 } |
| 606 | 556 |
| 607 } // namespace webkit_database | 557 } // namespace webkit_database |
| OLD | NEW |