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 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 // static methods of this class. Then we make our TEST() targets call these | 177 // static methods of this class. Then we make our TEST() targets call these |
178 // static functions. This allows us to run each test in normal mode and | 178 // static functions. This allows us to run each test in normal mode and |
179 // incognito mode without writing the same code twice. | 179 // incognito mode without writing the same code twice. |
180 class DatabaseTracker_TestHelper_Test { | 180 class DatabaseTracker_TestHelper_Test { |
181 public: | 181 public: |
182 static void TestDeleteOpenDatabase(bool incognito_mode) { | 182 static void TestDeleteOpenDatabase(bool incognito_mode) { |
183 // Initialize the tracker database. | 183 // Initialize the tracker database. |
184 ScopedTempDir temp_dir; | 184 ScopedTempDir temp_dir; |
185 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 185 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
186 scoped_refptr<DatabaseTracker> tracker( | 186 scoped_refptr<DatabaseTracker> tracker( |
187 new DatabaseTracker(temp_dir.path(), incognito_mode, | 187 new DatabaseTracker(temp_dir.path(), incognito_mode, false, |
188 new TestSpecialStoragePolicy, | 188 new TestSpecialStoragePolicy, |
189 NULL, NULL)); | 189 NULL, NULL)); |
190 | 190 |
191 // Create and open three databases. | 191 // Create and open three databases. |
192 int64 database_size = 0; | 192 int64 database_size = 0; |
193 const string16 kOrigin1 = | 193 const string16 kOrigin1 = |
194 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); | 194 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); |
195 const string16 kOrigin2 = | 195 const string16 kOrigin2 = |
196 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); | 196 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); |
197 const string16 kDB1 = ASCIIToUTF16("db1"); | 197 const string16 kDB1 = ASCIIToUTF16("db1"); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 | 280 |
281 tracker->DatabaseClosed(kOrigin2, kDB3); | 281 tracker->DatabaseClosed(kOrigin2, kDB3); |
282 tracker->RemoveObserver(&observer); | 282 tracker->RemoveObserver(&observer); |
283 } | 283 } |
284 | 284 |
285 static void TestDatabaseTracker(bool incognito_mode) { | 285 static void TestDatabaseTracker(bool incognito_mode) { |
286 // Initialize the tracker database. | 286 // Initialize the tracker database. |
287 ScopedTempDir temp_dir; | 287 ScopedTempDir temp_dir; |
288 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 288 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
289 scoped_refptr<DatabaseTracker> tracker( | 289 scoped_refptr<DatabaseTracker> tracker( |
290 new DatabaseTracker(temp_dir.path(), incognito_mode, | 290 new DatabaseTracker(temp_dir.path(), incognito_mode, false, |
291 new TestSpecialStoragePolicy, | 291 new TestSpecialStoragePolicy, |
292 NULL, NULL)); | 292 NULL, NULL)); |
293 | 293 |
294 // Add two observers. | 294 // Add two observers. |
295 TestObserver observer1; | 295 TestObserver observer1; |
296 TestObserver observer2; | 296 TestObserver observer2; |
297 tracker->AddObserver(&observer1); | 297 tracker->AddObserver(&observer1); |
298 tracker->AddObserver(&observer2); | 298 tracker->AddObserver(&observer2); |
299 | 299 |
300 // Open three new databases. | 300 // Open three new databases. |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 const string16 kName = ASCIIToUTF16("name"); | 431 const string16 kName = ASCIIToUTF16("name"); |
432 const string16 kDescription = ASCIIToUTF16("description"); | 432 const string16 kDescription = ASCIIToUTF16("description"); |
433 | 433 |
434 ScopedTempDir temp_dir; | 434 ScopedTempDir temp_dir; |
435 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 435 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
436 | 436 |
437 // Initialize the tracker with a QuotaManagerProxy | 437 // Initialize the tracker with a QuotaManagerProxy |
438 scoped_refptr<TestQuotaManagerProxy> test_quota_proxy( | 438 scoped_refptr<TestQuotaManagerProxy> test_quota_proxy( |
439 new TestQuotaManagerProxy); | 439 new TestQuotaManagerProxy); |
440 scoped_refptr<DatabaseTracker> tracker( | 440 scoped_refptr<DatabaseTracker> tracker( |
441 new DatabaseTracker(temp_dir.path(), false /* incognito */, | 441 new DatabaseTracker(temp_dir.path(), false /* incognito */, false, |
442 NULL, test_quota_proxy, NULL)); | 442 NULL, test_quota_proxy, NULL)); |
443 EXPECT_TRUE(test_quota_proxy->registered_client_); | 443 EXPECT_TRUE(test_quota_proxy->registered_client_); |
444 | 444 |
445 // Create a database and modify it a couple of times, close it, | 445 // Create a database and modify it a couple of times, close it, |
446 // then delete it. Observe the tracker notifies accordingly. | 446 // then delete it. Observe the tracker notifies accordingly. |
447 | 447 |
448 int64 database_size = 0; | 448 int64 database_size = 0; |
449 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, | 449 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, |
450 &database_size); | 450 &database_size); |
451 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); | 451 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 DatabaseConnections crashed_renderer_connections; | 509 DatabaseConnections crashed_renderer_connections; |
510 crashed_renderer_connections.AddConnection(kOriginId, kName); | 510 crashed_renderer_connections.AddConnection(kOriginId, kName); |
511 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); | 511 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); |
512 tracker->CloseDatabases(crashed_renderer_connections); | 512 tracker->CloseDatabases(crashed_renderer_connections); |
513 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); | 513 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); |
514 | 514 |
515 // Cleanup. | 515 // Cleanup. |
516 crashed_renderer_connections.RemoveAllConnections(); | 516 crashed_renderer_connections.RemoveAllConnections(); |
517 test_quota_proxy->SimulateQuotaManagerDestroyed(); | 517 test_quota_proxy->SimulateQuotaManagerDestroyed(); |
518 } | 518 } |
| 519 |
| 520 static void DatabaseTrackerClearLocalStateOnExit() { |
| 521 int64 database_size = 0; |
| 522 const string16 kOrigin1 = |
| 523 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); |
| 524 const string16 kOrigin2 = |
| 525 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); |
| 526 const string16 kDB1 = ASCIIToUTF16("db1"); |
| 527 const string16 kDB2 = ASCIIToUTF16("db2"); |
| 528 const string16 kDB3 = ASCIIToUTF16("db3"); |
| 529 const string16 kDescription = ASCIIToUTF16("database_description"); |
| 530 |
| 531 // Initialize the tracker database. |
| 532 ScopedTempDir temp_dir; |
| 533 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 534 { |
| 535 scoped_refptr<DatabaseTracker> tracker( |
| 536 new DatabaseTracker(temp_dir.path(), false, true, |
| 537 new TestSpecialStoragePolicy, |
| 538 NULL, NULL)); |
| 539 |
| 540 // Open three new databases. |
| 541 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 542 &database_size); |
| 543 EXPECT_EQ(0, database_size); |
| 544 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, |
| 545 &database_size); |
| 546 EXPECT_EQ(0, database_size); |
| 547 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, |
| 548 &database_size); |
| 549 EXPECT_EQ(0, database_size); |
| 550 |
| 551 // Write some data to each file. |
| 552 EXPECT_TRUE( |
| 553 file_util::CreateDirectory(tracker->DatabaseDirectory().Append( |
| 554 FilePath::FromWStringHack(UTF16ToWide( |
| 555 tracker->GetOriginDirectory(kOrigin1)))))); |
| 556 EXPECT_TRUE( |
| 557 file_util::CreateDirectory(tracker->DatabaseDirectory().Append( |
| 558 FilePath::FromWStringHack(UTF16ToWide( |
| 559 tracker->GetOriginDirectory(kOrigin2)))))); |
| 560 EXPECT_EQ(1, file_util::WriteFile( |
| 561 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); |
| 562 EXPECT_EQ(2, file_util::WriteFile( |
| 563 tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2)); |
| 564 EXPECT_EQ(4, file_util::WriteFile( |
| 565 tracker->GetFullDBFilePath(kOrigin1, kDB3), "aaaa", 4)); |
| 566 tracker->DatabaseModified(kOrigin1, kDB1); |
| 567 tracker->DatabaseModified(kOrigin2, kDB2); |
| 568 tracker->DatabaseModified(kOrigin1, kDB3); |
| 569 |
| 570 // Close all databases. |
| 571 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 572 tracker->DatabaseClosed(kOrigin2, kDB2); |
| 573 tracker->DatabaseClosed(kOrigin1, kDB3); |
| 574 |
| 575 } |
| 576 |
| 577 // At this point, the database tracker should be gone. Create a new one. |
| 578 scoped_refptr<DatabaseTracker> tracker( |
| 579 new DatabaseTracker(temp_dir.path(), false, false, |
| 580 new TestSpecialStoragePolicy, |
| 581 NULL, NULL)); |
| 582 |
| 583 // Get all data for all origins. |
| 584 std::vector<OriginInfo> origins_info; |
| 585 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| 586 EXPECT_EQ(size_t(1), origins_info.size()); |
| 587 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin()); |
| 588 EXPECT_FALSE( |
| 589 file_util::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); |
| 590 EXPECT_TRUE( |
| 591 file_util::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); |
| 592 EXPECT_FALSE( |
| 593 file_util::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB3))); |
| 594 } |
519 }; | 595 }; |
520 | 596 |
521 TEST(DatabaseTrackerTest, DeleteOpenDatabase) { | 597 TEST(DatabaseTrackerTest, DeleteOpenDatabase) { |
522 DatabaseTracker_TestHelper_Test::TestDeleteOpenDatabase(false); | 598 DatabaseTracker_TestHelper_Test::TestDeleteOpenDatabase(false); |
523 } | 599 } |
524 | 600 |
525 TEST(DatabaseTrackerTest, DeleteOpenDatabaseIncognitoMode) { | 601 TEST(DatabaseTrackerTest, DeleteOpenDatabaseIncognitoMode) { |
526 DatabaseTracker_TestHelper_Test::TestDeleteOpenDatabase(true); | 602 DatabaseTracker_TestHelper_Test::TestDeleteOpenDatabase(true); |
527 } | 603 } |
528 | 604 |
529 TEST(DatabaseTrackerTest, DatabaseTracker) { | 605 TEST(DatabaseTrackerTest, DatabaseTracker) { |
530 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(false); | 606 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(false); |
531 } | 607 } |
532 | 608 |
533 TEST(DatabaseTrackerTest, DatabaseTrackerIncognitoMode) { | 609 TEST(DatabaseTrackerTest, DatabaseTrackerIncognitoMode) { |
534 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(true); | 610 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(true); |
535 } | 611 } |
536 | 612 |
537 TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { | 613 TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { |
538 // There is no difference in behavior between incognito and not. | 614 // There is no difference in behavior between incognito and not. |
539 DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); | 615 DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); |
540 } | 616 } |
541 | 617 |
| 618 TEST(DatabaseTrackerTest, DatabaseTrackerClearLocalStateOnExit) { |
| 619 // Only works for regular mode. |
| 620 DatabaseTracker_TestHelper_Test::DatabaseTrackerClearLocalStateOnExit(); |
| 621 } |
| 622 |
542 } // namespace webkit_database | 623 } // namespace webkit_database |
OLD | NEW |