Chromium Code Reviews| 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/message_loop_proxy.h" | 8 #include "base/message_loop_proxy.h" |
| 9 #include "base/platform_file.h" | 9 #include "base/platform_file.h" |
| 10 #include "base/scoped_temp_dir.h" | 10 #include "base/scoped_temp_dir.h" |
| 11 #include "base/time.h" | 11 #include "base/time.h" |
| 12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
| 13 #include "net/base/net_errors.h" | 13 #include "net/base/net_errors.h" |
| 14 #include "net/base/test_completion_callback.h" | 14 #include "net/base/test_completion_callback.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 #include "webkit/database/database_tracker.h" | 16 #include "webkit/database/database_tracker.h" |
| 17 #include "webkit/database/database_util.h" | 17 #include "webkit/database/database_util.h" |
| 18 #include "webkit/quota/mock_special_storage_policy.h" | |
| 18 #include "webkit/quota/quota_manager.h" | 19 #include "webkit/quota/quota_manager.h" |
| 19 #include "webkit/quota/special_storage_policy.h" | |
| 20 | 20 |
| 21 namespace { | 21 namespace { |
| 22 | 22 |
| 23 const char kOrigin1Url[] = "http://origin1"; | 23 const char kOrigin1Url[] = "http://origin1"; |
| 24 const char kOrigin2Url[] = "http://protected_origin2"; | 24 const char kOrigin2Url[] = "http://protected_origin2"; |
| 25 | 25 |
| 26 class TestSpecialStoragePolicy : public quota::SpecialStoragePolicy { | |
| 27 public: | |
| 28 virtual bool IsStorageProtected(const GURL& origin) { | |
| 29 return origin == GURL(kOrigin2Url); | |
| 30 } | |
| 31 | |
| 32 virtual bool IsStorageUnlimited(const GURL& origin) { | |
| 33 return false; | |
| 34 } | |
| 35 | |
| 36 virtual bool IsFileHandler(const std::string& extension_id) { | |
| 37 return false; | |
| 38 } | |
| 39 }; | |
| 40 | |
| 41 class TestObserver : public webkit_database::DatabaseTracker::Observer { | 26 class TestObserver : public webkit_database::DatabaseTracker::Observer { |
| 42 public: | 27 public: |
| 43 TestObserver() : new_notification_received_(false) {} | 28 TestObserver() : new_notification_received_(false) {} |
| 44 virtual ~TestObserver() {} | 29 virtual ~TestObserver() {} |
| 45 virtual void OnDatabaseSizeChanged(const string16& origin_identifier, | 30 virtual void OnDatabaseSizeChanged(const string16& origin_identifier, |
| 46 const string16& database_name, | 31 const string16& database_name, |
| 47 int64 database_size) { | 32 int64 database_size) { |
| 48 new_notification_received_ = true; | 33 new_notification_received_ = true; |
| 49 origin_identifier_ = origin_identifier; | 34 origin_identifier_ = origin_identifier; |
| 50 database_name_ = database_name; | 35 database_name_ = database_name; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 180 // static functions. This allows us to run each test in normal mode and | 165 // static functions. This allows us to run each test in normal mode and |
| 181 // incognito mode without writing the same code twice. | 166 // incognito mode without writing the same code twice. |
| 182 class DatabaseTracker_TestHelper_Test { | 167 class DatabaseTracker_TestHelper_Test { |
| 183 public: | 168 public: |
| 184 static void TestDeleteOpenDatabase(bool incognito_mode) { | 169 static void TestDeleteOpenDatabase(bool incognito_mode) { |
| 185 // Initialize the tracker database. | 170 // Initialize the tracker database. |
| 186 ScopedTempDir temp_dir; | 171 ScopedTempDir temp_dir; |
| 187 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 172 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 188 scoped_refptr<DatabaseTracker> tracker( | 173 scoped_refptr<DatabaseTracker> tracker( |
| 189 new DatabaseTracker(temp_dir.path(), incognito_mode, false, | 174 new DatabaseTracker(temp_dir.path(), incognito_mode, false, |
| 190 new TestSpecialStoragePolicy, | 175 GetSpecialStoragePolicy(), NULL, NULL)); |
| 191 NULL, NULL)); | |
| 192 | 176 |
| 193 // Create and open three databases. | 177 // Create and open three databases. |
| 194 int64 database_size = 0; | 178 int64 database_size = 0; |
| 195 const string16 kOrigin1 = | 179 const string16 kOrigin1 = |
| 196 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); | 180 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); |
| 197 const string16 kOrigin2 = | 181 const string16 kOrigin2 = |
| 198 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); | 182 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); |
| 199 const string16 kDB1 = ASCIIToUTF16("db1"); | 183 const string16 kDB1 = ASCIIToUTF16("db1"); |
| 200 const string16 kDB2 = ASCIIToUTF16("db2"); | 184 const string16 kDB2 = ASCIIToUTF16("db2"); |
| 201 const string16 kDB3 = ASCIIToUTF16("db3"); | 185 const string16 kDB3 = ASCIIToUTF16("db3"); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 283 tracker->DatabaseClosed(kOrigin2, kDB3); | 267 tracker->DatabaseClosed(kOrigin2, kDB3); |
| 284 tracker->RemoveObserver(&observer); | 268 tracker->RemoveObserver(&observer); |
| 285 } | 269 } |
| 286 | 270 |
| 287 static void TestDatabaseTracker(bool incognito_mode) { | 271 static void TestDatabaseTracker(bool incognito_mode) { |
| 288 // Initialize the tracker database. | 272 // Initialize the tracker database. |
| 289 ScopedTempDir temp_dir; | 273 ScopedTempDir temp_dir; |
| 290 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 274 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 291 scoped_refptr<DatabaseTracker> tracker( | 275 scoped_refptr<DatabaseTracker> tracker( |
| 292 new DatabaseTracker(temp_dir.path(), incognito_mode, false, | 276 new DatabaseTracker(temp_dir.path(), incognito_mode, false, |
| 293 new TestSpecialStoragePolicy, | 277 GetSpecialStoragePolicy(), NULL, NULL)); |
| 294 NULL, NULL)); | |
| 295 | 278 |
| 296 // Add two observers. | 279 // Add two observers. |
| 297 TestObserver observer1; | 280 TestObserver observer1; |
| 298 TestObserver observer2; | 281 TestObserver observer2; |
| 299 tracker->AddObserver(&observer1); | 282 tracker->AddObserver(&observer1); |
| 300 tracker->AddObserver(&observer2); | 283 tracker->AddObserver(&observer2); |
| 301 | 284 |
| 302 // Open three new databases. | 285 // Open three new databases. |
| 303 int64 database_size = 0; | 286 int64 database_size = 0; |
| 304 const string16 kOrigin1 = | 287 const string16 kOrigin1 = |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 531 const string16 kDescription = ASCIIToUTF16("database_description"); | 514 const string16 kDescription = ASCIIToUTF16("database_description"); |
| 532 | 515 |
| 533 // Initialize the tracker database. | 516 // Initialize the tracker database. |
| 534 ScopedTempDir temp_dir; | 517 ScopedTempDir temp_dir; |
| 535 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 518 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 536 FilePath origin1_db_dir; | 519 FilePath origin1_db_dir; |
| 537 { | 520 { |
| 538 scoped_refptr<DatabaseTracker> tracker( | 521 scoped_refptr<DatabaseTracker> tracker( |
| 539 new DatabaseTracker( | 522 new DatabaseTracker( |
| 540 temp_dir.path(), false, true, | 523 temp_dir.path(), false, true, |
| 541 new TestSpecialStoragePolicy, | 524 GetSpecialStoragePolicy(), NULL, |
| 542 NULL, | |
| 543 base::MessageLoopProxy::CreateForCurrentThread())); | 525 base::MessageLoopProxy::CreateForCurrentThread())); |
| 544 | 526 |
| 545 // Open three new databases. | 527 // Open three new databases. |
| 546 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 528 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, |
| 547 &database_size); | 529 &database_size); |
| 548 EXPECT_EQ(0, database_size); | 530 EXPECT_EQ(0, database_size); |
| 549 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | 531 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, |
| 550 &database_size); | 532 &database_size); |
| 551 EXPECT_EQ(0, database_size); | 533 EXPECT_EQ(0, database_size); |
| 552 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, | 534 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 591 | 573 |
| 592 tracker->Shutdown(); | 574 tracker->Shutdown(); |
| 593 | 575 |
| 594 base::ClosePlatformFile(file_handle); | 576 base::ClosePlatformFile(file_handle); |
| 595 tracker->DatabaseClosed(kOrigin1, kDB3); | 577 tracker->DatabaseClosed(kOrigin1, kDB3); |
| 596 } | 578 } |
| 597 | 579 |
| 598 // At this point, the database tracker should be gone. Create a new one. | 580 // At this point, the database tracker should be gone. Create a new one. |
| 599 scoped_refptr<DatabaseTracker> tracker( | 581 scoped_refptr<DatabaseTracker> tracker( |
| 600 new DatabaseTracker(temp_dir.path(), false, false, | 582 new DatabaseTracker(temp_dir.path(), false, false, |
| 601 new TestSpecialStoragePolicy, | 583 GetSpecialStoragePolicy(), NULL, NULL)); |
| 602 NULL, NULL)); | |
| 603 | 584 |
| 604 // Get all data for all origins. | 585 // Get all data for all origins. |
| 605 std::vector<OriginInfo> origins_info; | 586 std::vector<OriginInfo> origins_info; |
| 606 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); | 587 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| 607 EXPECT_EQ(size_t(1), origins_info.size()); | 588 EXPECT_EQ(size_t(1), origins_info.size()); |
| 608 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin()); | 589 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin()); |
| 609 EXPECT_EQ(FilePath(), tracker->GetFullDBFilePath(kOrigin1, kDB1)); | 590 EXPECT_EQ(FilePath(), tracker->GetFullDBFilePath(kOrigin1, kDB1)); |
| 610 EXPECT_TRUE( | 591 EXPECT_TRUE( |
| 611 file_util::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); | 592 file_util::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); |
| 612 EXPECT_EQ(FilePath(), tracker->GetFullDBFilePath(kOrigin1, kDB3)); | 593 EXPECT_EQ(FilePath(), tracker->GetFullDBFilePath(kOrigin1, kDB3)); |
| 613 | 594 |
| 614 // The origin directory should be gone as well. | 595 // The origin directory should be gone as well. |
| 615 EXPECT_FALSE(file_util::PathExists(origin1_db_dir)); | 596 EXPECT_FALSE(file_util::PathExists(origin1_db_dir)); |
| 616 } | 597 } |
| 598 | |
| 599 static quota::SpecialStoragePolicy* GetSpecialStoragePolicy() { | |
| 600 if (!special_storage_policy_.get()) { | |
| 601 special_storage_policy_ = new quota::MockSpecialStoragePolicy; | |
| 602 special_storage_policy_->AddProtected(GURL(kOrigin2Url)); | |
| 603 } | |
| 604 return special_storage_policy_.get(); | |
| 605 } | |
| 606 | |
| 607 private: | |
| 608 static scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy_; | |
|
michaeln
2011/08/12 18:53:52
i would expect valgrind to complain about leaking
marja
2011/08/16 10:54:25
Hmm, why would valgrind complain: the dtor of the
| |
| 617 }; | 609 }; |
| 618 | 610 |
| 611 scoped_refptr<quota::MockSpecialStoragePolicy> | |
| 612 DatabaseTracker_TestHelper_Test::special_storage_policy_; | |
| 613 | |
| 619 TEST(DatabaseTrackerTest, DeleteOpenDatabase) { | 614 TEST(DatabaseTrackerTest, DeleteOpenDatabase) { |
| 620 DatabaseTracker_TestHelper_Test::TestDeleteOpenDatabase(false); | 615 DatabaseTracker_TestHelper_Test::TestDeleteOpenDatabase(false); |
| 621 } | 616 } |
| 622 | 617 |
| 623 TEST(DatabaseTrackerTest, DeleteOpenDatabaseIncognitoMode) { | 618 TEST(DatabaseTrackerTest, DeleteOpenDatabaseIncognitoMode) { |
| 624 DatabaseTracker_TestHelper_Test::TestDeleteOpenDatabase(true); | 619 DatabaseTracker_TestHelper_Test::TestDeleteOpenDatabase(true); |
| 625 } | 620 } |
| 626 | 621 |
| 627 TEST(DatabaseTrackerTest, DatabaseTracker) { | 622 TEST(DatabaseTrackerTest, DatabaseTracker) { |
| 628 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(false); | 623 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(false); |
| 629 } | 624 } |
| 630 | 625 |
| 631 TEST(DatabaseTrackerTest, DatabaseTrackerIncognitoMode) { | 626 TEST(DatabaseTrackerTest, DatabaseTrackerIncognitoMode) { |
| 632 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(true); | 627 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(true); |
| 633 } | 628 } |
| 634 | 629 |
| 635 TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { | 630 TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { |
| 636 // There is no difference in behavior between incognito and not. | 631 // There is no difference in behavior between incognito and not. |
| 637 DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); | 632 DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); |
| 638 } | 633 } |
| 639 | 634 |
| 640 TEST(DatabaseTrackerTest, DatabaseTrackerClearLocalStateOnExit) { | 635 TEST(DatabaseTrackerTest, DatabaseTrackerClearLocalStateOnExit) { |
| 641 // Only works for regular mode. | 636 // Only works for regular mode. |
| 642 DatabaseTracker_TestHelper_Test::DatabaseTrackerClearLocalStateOnExit(); | 637 DatabaseTracker_TestHelper_Test::DatabaseTrackerClearLocalStateOnExit(); |
| 643 } | 638 } |
| 644 | 639 |
| 645 } // namespace webkit_database | 640 } // namespace webkit_database |
| OLD | NEW |