| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <iterator> | 6 #include <iterator> |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 | 299 |
| 300 void OriginLastEvicted(const base::FilePath& kDbFile) { | 300 void OriginLastEvicted(const base::FilePath& kDbFile) { |
| 301 QuotaDatabase db(kDbFile); | 301 QuotaDatabase db(kDbFile); |
| 302 ASSERT_TRUE(db.LazyOpen(true)); | 302 ASSERT_TRUE(db.LazyOpen(true)); |
| 303 | 303 |
| 304 const GURL kOrigin1("http://a/"); | 304 const GURL kOrigin1("http://a/"); |
| 305 const GURL kOrigin2("http://b/"); | 305 const GURL kOrigin2("http://b/"); |
| 306 const GURL kOrigin3("http://c/"); | 306 const GURL kOrigin3("http://c/"); |
| 307 | 307 |
| 308 base::Time last_eviction_time; | 308 base::Time last_eviction_time; |
| 309 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary, | 309 EXPECT_FALSE(db.GetOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary, |
| 310 &last_eviction_time)); | 310 &last_eviction_time)); |
| 311 EXPECT_EQ(base::Time(), last_eviction_time); | 311 EXPECT_EQ(base::Time(), last_eviction_time); |
| 312 | 312 |
| 313 // Report last eviction time for the test origins. | 313 // Report last eviction time for the test origins. |
| 314 EXPECT_TRUE(db.SetOriginLastEvictionTime( | 314 EXPECT_TRUE(db.SetOriginLastEvictionTime( |
| 315 kOrigin1, kStorageTypeTemporary, base::Time::FromInternalValue(10))); | 315 kOrigin1, kStorageTypeTemporary, base::Time::FromInternalValue(10))); |
| 316 EXPECT_TRUE(db.SetOriginLastEvictionTime( | 316 EXPECT_TRUE(db.SetOriginLastEvictionTime( |
| 317 kOrigin2, kStorageTypeTemporary, base::Time::FromInternalValue(20))); | 317 kOrigin2, kStorageTypeTemporary, base::Time::FromInternalValue(20))); |
| 318 EXPECT_TRUE(db.SetOriginLastEvictionTime( | 318 EXPECT_TRUE(db.SetOriginLastEvictionTime( |
| 319 kOrigin3, kStorageTypeTemporary, base::Time::FromInternalValue(30))); | 319 kOrigin3, kStorageTypeTemporary, base::Time::FromInternalValue(30))); |
| 320 | 320 |
| 321 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary, | 321 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary, |
| 322 &last_eviction_time)); | 322 &last_eviction_time)); |
| 323 EXPECT_EQ(base::Time::FromInternalValue(10), last_eviction_time); | 323 EXPECT_EQ(base::Time::FromInternalValue(10), last_eviction_time); |
| 324 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin2, kStorageTypeTemporary, | 324 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin2, kStorageTypeTemporary, |
| 325 &last_eviction_time)); | 325 &last_eviction_time)); |
| 326 EXPECT_EQ(base::Time::FromInternalValue(20), last_eviction_time); | 326 EXPECT_EQ(base::Time::FromInternalValue(20), last_eviction_time); |
| 327 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin3, kStorageTypeTemporary, | 327 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin3, kStorageTypeTemporary, |
| 328 &last_eviction_time)); | 328 &last_eviction_time)); |
| 329 EXPECT_EQ(base::Time::FromInternalValue(30), last_eviction_time); | 329 EXPECT_EQ(base::Time::FromInternalValue(30), last_eviction_time); |
| 330 | 330 |
| 331 // Delete last eviction times for the test origins. | 331 // Delete last eviction times for the test origins. |
| 332 EXPECT_TRUE( | 332 EXPECT_TRUE( |
| 333 db.DeleteOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary)); | 333 db.DeleteOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary)); |
| 334 EXPECT_TRUE( | 334 EXPECT_TRUE( |
| 335 db.DeleteOriginLastEvictionTime(kOrigin2, kStorageTypeTemporary)); | 335 db.DeleteOriginLastEvictionTime(kOrigin2, kStorageTypeTemporary)); |
| 336 EXPECT_TRUE( | 336 EXPECT_TRUE( |
| 337 db.DeleteOriginLastEvictionTime(kOrigin3, kStorageTypeTemporary)); | 337 db.DeleteOriginLastEvictionTime(kOrigin3, kStorageTypeTemporary)); |
| 338 | 338 |
| 339 last_eviction_time = base::Time(); | 339 last_eviction_time = base::Time(); |
| 340 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary, | 340 EXPECT_FALSE(db.GetOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary, |
| 341 &last_eviction_time)); | 341 &last_eviction_time)); |
| 342 EXPECT_EQ(base::Time(), last_eviction_time); | 342 EXPECT_EQ(base::Time(), last_eviction_time); |
| 343 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin2, kStorageTypeTemporary, | 343 EXPECT_FALSE(db.GetOriginLastEvictionTime(kOrigin2, kStorageTypeTemporary, |
| 344 &last_eviction_time)); | 344 &last_eviction_time)); |
| 345 EXPECT_EQ(base::Time(), last_eviction_time); | 345 EXPECT_EQ(base::Time(), last_eviction_time); |
| 346 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin3, kStorageTypeTemporary, | 346 EXPECT_FALSE(db.GetOriginLastEvictionTime(kOrigin3, kStorageTypeTemporary, |
| 347 &last_eviction_time)); | 347 &last_eviction_time)); |
| 348 EXPECT_EQ(base::Time(), last_eviction_time); | 348 EXPECT_EQ(base::Time(), last_eviction_time); |
| 349 | 349 |
| 350 // Deleting an origin that is not present should not fail. | 350 // Deleting an origin that is not present should not fail. |
| 351 EXPECT_TRUE(db.DeleteOriginLastEvictionTime(GURL("http://notpresent.com"), | 351 EXPECT_TRUE(db.DeleteOriginLastEvictionTime(GURL("http://notpresent.com"), |
| 352 kStorageTypeTemporary)); | 352 kStorageTypeTemporary)); |
| 353 } | 353 } |
| 354 | 354 |
| 355 void RegisterInitialOriginInfo(const base::FilePath& kDbFile) { | 355 void RegisterInitialOriginInfo(const base::FilePath& kDbFile) { |
| 356 QuotaDatabase db(kDbFile); | 356 QuotaDatabase db(kDbFile); |
| 357 | 357 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 AssignOriginInfoTable(db.db_.get(), begin, end); | 438 AssignOriginInfoTable(db.db_.get(), begin, end); |
| 439 db.Commit(); | 439 db.Commit(); |
| 440 | 440 |
| 441 typedef EntryVerifier<Entry> Verifier; | 441 typedef EntryVerifier<Entry> Verifier; |
| 442 Verifier verifier(begin, end); | 442 Verifier verifier(begin, end); |
| 443 EXPECT_TRUE(db.DumpOriginInfoTable( | 443 EXPECT_TRUE(db.DumpOriginInfoTable( |
| 444 base::Bind(&Verifier::Run, base::Unretained(&verifier)))); | 444 base::Bind(&Verifier::Run, base::Unretained(&verifier)))); |
| 445 EXPECT_TRUE(verifier.table.empty()); | 445 EXPECT_TRUE(verifier.table.empty()); |
| 446 } | 446 } |
| 447 | 447 |
| 448 void GetOriginInfo(const base::FilePath& kDbFile) { |
| 449 const GURL kOrigin = GURL("http://go/"); |
| 450 typedef QuotaDatabase::OriginInfoTableEntry Entry; |
| 451 Entry kTableEntries[] = { |
| 452 Entry(kOrigin, kStorageTypeTemporary, 100, base::Time(), base::Time())}; |
| 453 Entry* begin = kTableEntries; |
| 454 Entry* end = kTableEntries + arraysize(kTableEntries); |
| 455 |
| 456 QuotaDatabase db(kDbFile); |
| 457 EXPECT_TRUE(db.LazyOpen(true)); |
| 458 AssignOriginInfoTable(db.db_.get(), begin, end); |
| 459 db.Commit(); |
| 460 |
| 461 { |
| 462 Entry entry; |
| 463 EXPECT_TRUE(db.GetOriginInfo(kOrigin, kStorageTypeTemporary, &entry)); |
| 464 EXPECT_EQ(kTableEntries[0].type, entry.type); |
| 465 EXPECT_EQ(kTableEntries[0].origin, entry.origin); |
| 466 EXPECT_EQ(kTableEntries[0].used_count, entry.used_count); |
| 467 EXPECT_EQ(kTableEntries[0].last_access_time, entry.last_access_time); |
| 468 EXPECT_EQ(kTableEntries[0].last_modified_time, entry.last_modified_time); |
| 469 } |
| 470 |
| 471 { |
| 472 Entry entry; |
| 473 EXPECT_FALSE(db.GetOriginInfo(GURL("http://notpresent.org/"), |
| 474 kStorageTypeTemporary, &entry)); |
| 475 } |
| 476 } |
| 477 |
| 448 private: | 478 private: |
| 449 template <typename Iterator> | 479 template <typename Iterator> |
| 450 void AssignQuotaTable(sql::Connection* db, Iterator itr, Iterator end) { | 480 void AssignQuotaTable(sql::Connection* db, Iterator itr, Iterator end) { |
| 451 ASSERT_NE(db, (sql::Connection*)NULL); | 481 ASSERT_NE(db, (sql::Connection*)NULL); |
| 452 for (; itr != end; ++itr) { | 482 for (; itr != end; ++itr) { |
| 453 const char* kSql = | 483 const char* kSql = |
| 454 "INSERT INTO HostQuotaTable" | 484 "INSERT INTO HostQuotaTable" |
| 455 " (host, type, quota)" | 485 " (host, type, quota)" |
| 456 " VALUES (?, ?, ?)"; | 486 " VALUES (?, ?, ?)"; |
| 457 sql::Statement statement; | 487 sql::Statement statement; |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 638 } | 668 } |
| 639 | 669 |
| 640 TEST_F(QuotaDatabaseTest, DumpOriginInfoTable) { | 670 TEST_F(QuotaDatabaseTest, DumpOriginInfoTable) { |
| 641 base::ScopedTempDir data_dir; | 671 base::ScopedTempDir data_dir; |
| 642 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); | 672 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); |
| 643 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); | 673 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); |
| 644 DumpOriginInfoTable(kDbFile); | 674 DumpOriginInfoTable(kDbFile); |
| 645 DumpOriginInfoTable(base::FilePath()); | 675 DumpOriginInfoTable(base::FilePath()); |
| 646 } | 676 } |
| 647 | 677 |
| 678 TEST_F(QuotaDatabaseTest, GetOriginInfo) { |
| 679 GetOriginInfo(base::FilePath()); |
| 680 } |
| 681 |
| 648 TEST_F(QuotaDatabaseTest, OpenCorruptedDatabase) { | 682 TEST_F(QuotaDatabaseTest, OpenCorruptedDatabase) { |
| 649 base::ScopedTempDir data_dir; | 683 base::ScopedTempDir data_dir; |
| 650 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); | 684 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); |
| 651 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); | 685 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); |
| 652 LazyOpen(kDbFile); | 686 LazyOpen(kDbFile); |
| 653 ASSERT_TRUE(sql::test::CorruptSizeInHeader(kDbFile)); | 687 ASSERT_TRUE(sql::test::CorruptSizeInHeader(kDbFile)); |
| 654 sql::ScopedErrorIgnorer ignore_errors; | 688 sql::ScopedErrorIgnorer ignore_errors; |
| 655 ignore_errors.IgnoreError(SQLITE_CORRUPT); | 689 ignore_errors.IgnoreError(SQLITE_CORRUPT); |
| 656 Reopen(kDbFile); | 690 Reopen(kDbFile); |
| 657 EXPECT_TRUE(ignore_errors.CheckIgnoredErrors()); | 691 EXPECT_TRUE(ignore_errors.CheckIgnoredErrors()); |
| 658 } | 692 } |
| 659 | 693 |
| 660 } // namespace content | 694 } // namespace content |
| OLD | NEW |