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 |