| 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 EXPECT_TRUE(kDbFile.empty() || base::PathExists(kDbFile)); | 49 EXPECT_TRUE(kDbFile.empty() || base::PathExists(kDbFile)); |
| 50 } | 50 } |
| 51 | 51 |
| 52 void Reopen(const base::FilePath& kDbFile) { | 52 void Reopen(const base::FilePath& kDbFile) { |
| 53 QuotaDatabase db(kDbFile); | 53 QuotaDatabase db(kDbFile); |
| 54 ASSERT_TRUE(db.LazyOpen(false)); | 54 ASSERT_TRUE(db.LazyOpen(false)); |
| 55 EXPECT_TRUE(db.db_.get()); | 55 EXPECT_TRUE(db.db_.get()); |
| 56 EXPECT_TRUE(kDbFile.empty() || base::PathExists(kDbFile)); | 56 EXPECT_TRUE(kDbFile.empty() || base::PathExists(kDbFile)); |
| 57 } | 57 } |
| 58 | 58 |
| 59 void UpgradeSchemaV2toV3(const base::FilePath& kDbFile) { | 59 void UpgradeSchemaV2toV5(const base::FilePath& kDbFile) { |
| 60 const QuotaTableEntry entries[] = { | 60 const QuotaTableEntry entries[] = { |
| 61 QuotaTableEntry("a", kStorageTypeTemporary, 1), | 61 QuotaTableEntry("a", kStorageTypeTemporary, 1), |
| 62 QuotaTableEntry("b", kStorageTypeTemporary, 2), | 62 QuotaTableEntry("b", kStorageTypeTemporary, 2), |
| 63 QuotaTableEntry("c", kStorageTypePersistent, 3), | 63 QuotaTableEntry("c", kStorageTypePersistent, 3), |
| 64 }; | 64 }; |
| 65 | 65 |
| 66 CreateV2Database(kDbFile, entries, arraysize(entries)); | 66 CreateV2Database(kDbFile, entries, arraysize(entries)); |
| 67 | 67 |
| 68 QuotaDatabase db(kDbFile); | 68 QuotaDatabase db(kDbFile); |
| 69 EXPECT_TRUE(db.LazyOpen(true)); | 69 EXPECT_TRUE(db.LazyOpen(true)); |
| 70 EXPECT_TRUE(db.db_.get()); | 70 EXPECT_TRUE(db.db_.get()); |
| 71 | 71 |
| 72 typedef EntryVerifier<QuotaTableEntry> Verifier; | 72 typedef EntryVerifier<QuotaTableEntry> Verifier; |
| 73 Verifier verifier(entries, entries + arraysize(entries)); | 73 Verifier verifier(entries, entries + arraysize(entries)); |
| 74 EXPECT_TRUE(db.DumpQuotaTable( | 74 EXPECT_TRUE(db.DumpQuotaTable( |
| 75 base::Bind(&Verifier::Run, base::Unretained(&verifier)))); | 75 base::Bind(&Verifier::Run, base::Unretained(&verifier)))); |
| 76 EXPECT_TRUE(verifier.table.empty()); | 76 EXPECT_TRUE(verifier.table.empty()); |
| 77 |
| 78 EXPECT_TRUE(db.db_->DoesTableExist("EvictionInfoTable")); |
| 79 EXPECT_TRUE(db.db_->DoesIndexExist("sqlite_autoindex_EvictionInfoTable_1")); |
| 77 } | 80 } |
| 78 | 81 |
| 79 void HostQuota(const base::FilePath& kDbFile) { | 82 void HostQuota(const base::FilePath& kDbFile) { |
| 80 QuotaDatabase db(kDbFile); | 83 QuotaDatabase db(kDbFile); |
| 81 ASSERT_TRUE(db.LazyOpen(true)); | 84 ASSERT_TRUE(db.LazyOpen(true)); |
| 82 | 85 |
| 83 const char* kHost = "foo.com"; | 86 const char* kHost = "foo.com"; |
| 84 const int kQuota1 = 13579; | 87 const int kQuota1 = 13579; |
| 85 const int kQuota2 = kQuota1 + 1024; | 88 const int kQuota2 = kQuota1 + 1024; |
| 86 | 89 |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 EXPECT_EQ(0U, origins.count(kOrigin3)); | 290 EXPECT_EQ(0U, origins.count(kOrigin3)); |
| 288 | 291 |
| 289 EXPECT_TRUE(db.GetOriginsModifiedSince( | 292 EXPECT_TRUE(db.GetOriginsModifiedSince( |
| 290 kStorageTypePersistent, &origins, base::Time::FromInternalValue(35))); | 293 kStorageTypePersistent, &origins, base::Time::FromInternalValue(35))); |
| 291 EXPECT_EQ(1U, origins.size()); | 294 EXPECT_EQ(1U, origins.size()); |
| 292 EXPECT_EQ(0U, origins.count(kOrigin1)); | 295 EXPECT_EQ(0U, origins.count(kOrigin1)); |
| 293 EXPECT_EQ(1U, origins.count(kOrigin2)); | 296 EXPECT_EQ(1U, origins.count(kOrigin2)); |
| 294 EXPECT_EQ(0U, origins.count(kOrigin3)); | 297 EXPECT_EQ(0U, origins.count(kOrigin3)); |
| 295 } | 298 } |
| 296 | 299 |
| 300 void OriginLastEvicted(const base::FilePath& kDbFile) { |
| 301 QuotaDatabase db(kDbFile); |
| 302 ASSERT_TRUE(db.LazyOpen(true)); |
| 303 |
| 304 const GURL kOrigin1("http://a/"); |
| 305 const GURL kOrigin2("http://b/"); |
| 306 const GURL kOrigin3("http://c/"); |
| 307 |
| 308 base::Time last_eviction_time; |
| 309 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary, |
| 310 &last_eviction_time)); |
| 311 EXPECT_EQ(base::Time(), last_eviction_time); |
| 312 |
| 313 // Report last eviction time for the test origins. |
| 314 EXPECT_TRUE(db.SetOriginLastEvictionTime( |
| 315 kOrigin1, kStorageTypeTemporary, base::Time::FromInternalValue(10))); |
| 316 EXPECT_TRUE(db.SetOriginLastEvictionTime( |
| 317 kOrigin2, kStorageTypeTemporary, base::Time::FromInternalValue(20))); |
| 318 EXPECT_TRUE(db.SetOriginLastEvictionTime( |
| 319 kOrigin3, kStorageTypeTemporary, base::Time::FromInternalValue(30))); |
| 320 |
| 321 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary, |
| 322 &last_eviction_time)); |
| 323 EXPECT_EQ(base::Time::FromInternalValue(10), last_eviction_time); |
| 324 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin2, kStorageTypeTemporary, |
| 325 &last_eviction_time)); |
| 326 EXPECT_EQ(base::Time::FromInternalValue(20), last_eviction_time); |
| 327 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin3, kStorageTypeTemporary, |
| 328 &last_eviction_time)); |
| 329 EXPECT_EQ(base::Time::FromInternalValue(30), last_eviction_time); |
| 330 |
| 331 // Delete last eviction times for the test origins. |
| 332 EXPECT_TRUE( |
| 333 db.DeleteOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary)); |
| 334 EXPECT_TRUE( |
| 335 db.DeleteOriginLastEvictionTime(kOrigin2, kStorageTypeTemporary)); |
| 336 EXPECT_TRUE( |
| 337 db.DeleteOriginLastEvictionTime(kOrigin3, kStorageTypeTemporary)); |
| 338 |
| 339 last_eviction_time = base::Time(); |
| 340 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin1, kStorageTypeTemporary, |
| 341 &last_eviction_time)); |
| 342 EXPECT_EQ(base::Time(), last_eviction_time); |
| 343 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin2, kStorageTypeTemporary, |
| 344 &last_eviction_time)); |
| 345 EXPECT_EQ(base::Time(), last_eviction_time); |
| 346 EXPECT_TRUE(db.GetOriginLastEvictionTime(kOrigin3, kStorageTypeTemporary, |
| 347 &last_eviction_time)); |
| 348 EXPECT_EQ(base::Time(), last_eviction_time); |
| 349 |
| 350 // Deleting an origin that is not present should not fail. |
| 351 EXPECT_TRUE(db.DeleteOriginLastEvictionTime(GURL("http://notpresent.com"), |
| 352 kStorageTypeTemporary)); |
| 353 } |
| 354 |
| 297 void RegisterInitialOriginInfo(const base::FilePath& kDbFile) { | 355 void RegisterInitialOriginInfo(const base::FilePath& kDbFile) { |
| 298 QuotaDatabase db(kDbFile); | 356 QuotaDatabase db(kDbFile); |
| 299 | 357 |
| 300 const GURL kOrigins[] = { | 358 const GURL kOrigins[] = { |
| 301 GURL("http://a/"), | 359 GURL("http://a/"), |
| 302 GURL("http://b/"), | 360 GURL("http://b/"), |
| 303 GURL("http://c/") }; | 361 GURL("http://c/") }; |
| 304 std::set<GURL> origins(kOrigins, kOrigins + arraysize(kOrigins)); | 362 std::set<GURL> origins(kOrigins, kOrigins + arraysize(kOrigins)); |
| 305 | 363 |
| 306 EXPECT_TRUE(db.RegisterInitialOriginInfo(origins, kStorageTypeTemporary)); | 364 EXPECT_TRUE(db.RegisterInitialOriginInfo(origins, kStorageTypeTemporary)); |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 499 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); | 557 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); |
| 500 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); | 558 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); |
| 501 LazyOpen(kDbFile); | 559 LazyOpen(kDbFile); |
| 502 LazyOpen(base::FilePath()); | 560 LazyOpen(base::FilePath()); |
| 503 } | 561 } |
| 504 | 562 |
| 505 TEST_F(QuotaDatabaseTest, UpgradeSchema) { | 563 TEST_F(QuotaDatabaseTest, UpgradeSchema) { |
| 506 base::ScopedTempDir data_dir; | 564 base::ScopedTempDir data_dir; |
| 507 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); | 565 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); |
| 508 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); | 566 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); |
| 509 UpgradeSchemaV2toV3(kDbFile); | 567 UpgradeSchemaV2toV5(kDbFile); |
| 510 } | 568 } |
| 511 | 569 |
| 512 TEST_F(QuotaDatabaseTest, HostQuota) { | 570 TEST_F(QuotaDatabaseTest, HostQuota) { |
| 513 base::ScopedTempDir data_dir; | 571 base::ScopedTempDir data_dir; |
| 514 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); | 572 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); |
| 515 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); | 573 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); |
| 516 HostQuota(kDbFile); | 574 HostQuota(kDbFile); |
| 517 HostQuota(base::FilePath()); | 575 HostQuota(base::FilePath()); |
| 518 } | 576 } |
| 519 | 577 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 534 } | 592 } |
| 535 | 593 |
| 536 TEST_F(QuotaDatabaseTest, OriginLastModifiedSince) { | 594 TEST_F(QuotaDatabaseTest, OriginLastModifiedSince) { |
| 537 base::ScopedTempDir data_dir; | 595 base::ScopedTempDir data_dir; |
| 538 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); | 596 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); |
| 539 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); | 597 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); |
| 540 OriginLastModifiedSince(kDbFile); | 598 OriginLastModifiedSince(kDbFile); |
| 541 OriginLastModifiedSince(base::FilePath()); | 599 OriginLastModifiedSince(base::FilePath()); |
| 542 } | 600 } |
| 543 | 601 |
| 602 TEST_F(QuotaDatabaseTest, OriginLastEvicted) { |
| 603 base::ScopedTempDir data_dir; |
| 604 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); |
| 605 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); |
| 606 OriginLastEvicted(kDbFile); |
| 607 OriginLastEvicted(base::FilePath()); |
| 608 } |
| 609 |
| 544 TEST_F(QuotaDatabaseTest, BootstrapFlag) { | 610 TEST_F(QuotaDatabaseTest, BootstrapFlag) { |
| 545 base::ScopedTempDir data_dir; | 611 base::ScopedTempDir data_dir; |
| 546 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); | 612 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); |
| 547 | 613 |
| 548 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); | 614 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); |
| 549 QuotaDatabase db(kDbFile); | 615 QuotaDatabase db(kDbFile); |
| 550 | 616 |
| 551 EXPECT_FALSE(db.IsOriginDatabaseBootstrapped()); | 617 EXPECT_FALSE(db.IsOriginDatabaseBootstrapped()); |
| 552 EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(true)); | 618 EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(true)); |
| 553 EXPECT_TRUE(db.IsOriginDatabaseBootstrapped()); | 619 EXPECT_TRUE(db.IsOriginDatabaseBootstrapped()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); | 651 const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName); |
| 586 LazyOpen(kDbFile); | 652 LazyOpen(kDbFile); |
| 587 ASSERT_TRUE(sql::test::CorruptSizeInHeader(kDbFile)); | 653 ASSERT_TRUE(sql::test::CorruptSizeInHeader(kDbFile)); |
| 588 sql::ScopedErrorIgnorer ignore_errors; | 654 sql::ScopedErrorIgnorer ignore_errors; |
| 589 ignore_errors.IgnoreError(SQLITE_CORRUPT); | 655 ignore_errors.IgnoreError(SQLITE_CORRUPT); |
| 590 Reopen(kDbFile); | 656 Reopen(kDbFile); |
| 591 EXPECT_TRUE(ignore_errors.CheckIgnoredErrors()); | 657 EXPECT_TRUE(ignore_errors.CheckIgnoredErrors()); |
| 592 } | 658 } |
| 593 | 659 |
| 594 } // namespace content | 660 } // namespace content |
| OLD | NEW |