| Index: content/browser/quota/quota_temporary_storage_evictor_unittest.cc
|
| diff --git a/content/browser/quota/quota_temporary_storage_evictor_unittest.cc b/content/browser/quota/quota_temporary_storage_evictor_unittest.cc
|
| index ef417c7080d36cd4837fdf23bda53f64cf6227f6..989c63df3d64f962a8c9d495f8992f6d9a2c42cc 100644
|
| --- a/content/browser/quota/quota_temporary_storage_evictor_unittest.cc
|
| +++ b/content/browser/quota/quota_temporary_storage_evictor_unittest.cc
|
| @@ -21,6 +21,7 @@
|
|
|
| using storage::QuotaTemporaryStorageEvictor;
|
| using storage::StorageType;
|
| +using storage::UsageAndQuota;
|
|
|
| namespace content {
|
|
|
| @@ -30,14 +31,15 @@ namespace {
|
|
|
| class MockQuotaEvictionHandler : public storage::QuotaEvictionHandler {
|
| public:
|
| - explicit MockQuotaEvictionHandler(QuotaTemporaryStorageEvictorTest* test)
|
| - : available_space_(0),
|
| + explicit MockQuotaEvictionHandler(QuotaTemporaryStorageEvictorTest *test)
|
| + : quota_(0),
|
| + available_space_(0),
|
| error_on_evict_origin_data_(false),
|
| error_on_get_usage_and_quota_(false) {}
|
|
|
| void EvictOriginData(const GURL& origin,
|
| StorageType type,
|
| - const storage::StatusCallback& callback) override {
|
| + const EvictOriginDataCallback& callback) override {
|
| if (error_on_evict_origin_data_) {
|
| callback.Run(storage::kQuotaErrorInvalidModification);
|
| return;
|
| @@ -48,17 +50,22 @@ class MockQuotaEvictionHandler : public storage::QuotaEvictionHandler {
|
| callback.Run(storage::kQuotaStatusOk);
|
| }
|
|
|
| - void GetEvictionRoundInfo(
|
| - const EvictionRoundInfoCallback& callback) override {
|
| + void AsyncGetVolumeInfo(const VolumeInfoCallback& callback) override {
|
| + uint64_t available = static_cast<uint64_t>(available_space_);
|
| + uint64_t total = (1024 * 1024 * 1024) + (2 * available); // 1G plus some.
|
| + callback.Run(true, available, total);
|
| + }
|
| +
|
| + void GetUsageAndQuotaForEviction(
|
| + const UsageAndQuotaCallback& callback) override {
|
| if (error_on_get_usage_and_quota_) {
|
| - callback.Run(storage::kQuotaErrorAbort, storage::QuotaSettings(), 0, 0, 0,
|
| - false);
|
| + callback.Run(storage::kQuotaErrorInvalidAccess, UsageAndQuota());
|
| return;
|
| }
|
| if (!task_for_get_usage_and_quota_.is_null())
|
| task_for_get_usage_and_quota_.Run();
|
| - callback.Run(storage::kQuotaStatusOk, settings_, available_space_,
|
| - available_space_ * 2, GetUsage(), true);
|
| + UsageAndQuota quota_and_usage(-1, GetUsage(), quota_, available_space_);
|
| + callback.Run(storage::kQuotaStatusOk, quota_and_usage);
|
| }
|
|
|
| void GetEvictionOrigin(StorageType type,
|
| @@ -79,13 +86,7 @@ class MockQuotaEvictionHandler : public storage::QuotaEvictionHandler {
|
| return total_usage;
|
| }
|
|
|
| - const storage::QuotaSettings& settings() const { return settings_; }
|
| - void SetPoolSize(int64_t pool_size) {
|
| - settings_.pool_size = pool_size;
|
| - settings_.per_host_quota = pool_size / 5;
|
| - settings_.must_remain_available = pool_size / 5;
|
| - settings_.refresh_interval = base::TimeDelta::Max();
|
| - }
|
| + void set_quota(int64_t quota) { quota_ = quota; }
|
| void set_available_space(int64_t available_space) {
|
| available_space_ = available_space;
|
| }
|
| @@ -129,7 +130,7 @@ class MockQuotaEvictionHandler : public storage::QuotaEvictionHandler {
|
| return origin_usage;
|
| }
|
|
|
| - storage::QuotaSettings settings_;
|
| + int64_t quota_;
|
| int64_t available_space_;
|
| std::list<GURL> origin_order_;
|
| std::map<GURL, int64_t> origins_;
|
| @@ -168,20 +169,20 @@ class QuotaTemporaryStorageEvictorTest : public testing::Test {
|
| int expected_usage_after_second) {
|
| EXPECT_GE(4, num_get_usage_and_quota_for_eviction_);
|
| switch (num_get_usage_and_quota_for_eviction_) {
|
| - case 2:
|
| - EXPECT_EQ(expected_usage_after_first,
|
| - quota_eviction_handler()->GetUsage());
|
| - if (!origin_to_be_added.first.is_empty())
|
| - quota_eviction_handler()->AddOrigin(origin_to_be_added.first,
|
| - origin_to_be_added.second);
|
| - if (!origin_to_be_accessed.is_empty())
|
| - quota_eviction_handler()->AccessOrigin(origin_to_be_accessed);
|
| - break;
|
| - case 3:
|
| - EXPECT_EQ(expected_usage_after_second,
|
| - quota_eviction_handler()->GetUsage());
|
| - temporary_storage_evictor()->timer_disabled_for_testing_ = true;
|
| - break;
|
| + case 2:
|
| + EXPECT_EQ(expected_usage_after_first,
|
| + quota_eviction_handler()->GetUsage());
|
| + if (!origin_to_be_added.first.is_empty())
|
| + quota_eviction_handler()->AddOrigin(origin_to_be_added.first,
|
| + origin_to_be_added.second);
|
| + if (!origin_to_be_accessed.is_empty())
|
| + quota_eviction_handler()->AccessOrigin(origin_to_be_accessed);
|
| + break;
|
| + case 3:
|
| + EXPECT_EQ(expected_usage_after_second,
|
| + quota_eviction_handler()->GetUsage());
|
| + temporary_storage_evictor()->set_repeated_eviction(false);
|
| + break;
|
| }
|
| ++num_get_usage_and_quota_for_eviction_;
|
| }
|
| @@ -200,19 +201,36 @@ class QuotaTemporaryStorageEvictorTest : public testing::Test {
|
| return temporary_storage_evictor()->statistics_;
|
| }
|
|
|
| - void disable_timer_for_testing() const {
|
| - temporary_storage_evictor_->timer_disabled_for_testing_ = true;
|
| + void set_repeated_eviction(bool repeated_eviction) const {
|
| + return temporary_storage_evictor_->set_repeated_eviction(repeated_eviction);
|
| }
|
|
|
| int num_get_usage_and_quota_for_eviction() const {
|
| return num_get_usage_and_quota_for_eviction_;
|
| }
|
|
|
| + int64_t default_min_available_disk_space_to_start_eviction() const {
|
| + return 1000 * 1000 * 500;
|
| + }
|
| +
|
| + void set_min_available_disk_space_to_start_eviction(int64_t value) const {
|
| + temporary_storage_evictor_->set_min_available_disk_space_to_start_eviction(
|
| + value);
|
| + }
|
| +
|
| + void reset_min_available_disk_space_to_start_eviction() const {
|
| + temporary_storage_evictor_->
|
| + reset_min_available_disk_space_to_start_eviction();
|
| + }
|
| +
|
| base::MessageLoop message_loop_;
|
| std::unique_ptr<MockQuotaEvictionHandler> quota_eviction_handler_;
|
| std::unique_ptr<QuotaTemporaryStorageEvictor> temporary_storage_evictor_;
|
| +
|
| int num_get_usage_and_quota_for_eviction_;
|
| +
|
| base::WeakPtrFactory<QuotaTemporaryStorageEvictorTest> weak_factory_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(QuotaTemporaryStorageEvictorTest);
|
| };
|
|
|
| @@ -220,10 +238,10 @@ TEST_F(QuotaTemporaryStorageEvictorTest, SimpleEvictionTest) {
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 3000);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.y.com"), 200);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 500);
|
| - quota_eviction_handler()->SetPoolSize(4000);
|
| + quota_eviction_handler()->set_quota(4000);
|
| quota_eviction_handler()->set_available_space(1000000000);
|
| EXPECT_EQ(3000 + 200 + 500, quota_eviction_handler()->GetUsage());
|
| - disable_timer_for_testing();
|
| + set_repeated_eviction(false);
|
| temporary_storage_evictor()->Start();
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(200 + 500, quota_eviction_handler()->GetUsage());
|
| @@ -240,10 +258,10 @@ TEST_F(QuotaTemporaryStorageEvictorTest, MultipleEvictionTest) {
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.y.com"), 2900);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 450);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.w.com"), 400);
|
| - quota_eviction_handler()->SetPoolSize(4000);
|
| + quota_eviction_handler()->set_quota(4000);
|
| quota_eviction_handler()->set_available_space(1000000000);
|
| EXPECT_EQ(20 + 2900 + 450 + 400, quota_eviction_handler()->GetUsage());
|
| - disable_timer_for_testing();
|
| + set_repeated_eviction(false);
|
| temporary_storage_evictor()->Start();
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(450 + 400, quota_eviction_handler()->GetUsage());
|
| @@ -267,7 +285,7 @@ TEST_F(QuotaTemporaryStorageEvictorTest, RepeatedEvictionTest) {
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.c.com"), c_size);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.b.com"), b_size);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.a.com"), a_size);
|
| - quota_eviction_handler()->SetPoolSize(1000);
|
| + quota_eviction_handler()->set_quota(1000);
|
| quota_eviction_handler()->set_available_space(1000000000);
|
| quota_eviction_handler()->set_task_for_get_usage_and_quota(
|
| base::Bind(&QuotaTemporaryStorageEvictorTest::TaskForRepeatedEvictionTest,
|
| @@ -300,14 +318,14 @@ TEST_F(QuotaTemporaryStorageEvictorTest, RepeatedEvictionSkippedTest) {
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.c.com"), c_size);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.b.com"), b_size);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.a.com"), a_size);
|
| - quota_eviction_handler()->SetPoolSize(1000);
|
| + quota_eviction_handler()->set_quota(1000);
|
| quota_eviction_handler()->set_available_space(1000000000);
|
| quota_eviction_handler()->set_task_for_get_usage_and_quota(
|
| base::Bind(&QuotaTemporaryStorageEvictorTest::TaskForRepeatedEvictionTest,
|
| weak_factory_.GetWeakPtr(), std::make_pair(GURL(), 0), GURL(),
|
| initial_total_size - d_size, initial_total_size - d_size));
|
| EXPECT_EQ(initial_total_size, quota_eviction_handler()->GetUsage());
|
| - // disable_timer_for_testing();
|
| + set_repeated_eviction(true);
|
| temporary_storage_evictor()->Start();
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(initial_total_size - d_size, quota_eviction_handler()->GetUsage());
|
| @@ -332,7 +350,7 @@ TEST_F(QuotaTemporaryStorageEvictorTest, RepeatedEvictionWithAccessOriginTest) {
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.c.com"), c_size);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.b.com"), b_size);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.a.com"), a_size);
|
| - quota_eviction_handler()->SetPoolSize(1000);
|
| + quota_eviction_handler()->set_quota(1000);
|
| quota_eviction_handler()->set_available_space(1000000000);
|
| quota_eviction_handler()->set_task_for_get_usage_and_quota(
|
| base::Bind(&QuotaTemporaryStorageEvictorTest::TaskForRepeatedEvictionTest,
|
| @@ -356,18 +374,17 @@ TEST_F(QuotaTemporaryStorageEvictorTest, RepeatedEvictionWithAccessOriginTest) {
|
| }
|
|
|
| TEST_F(QuotaTemporaryStorageEvictorTest, DiskSpaceNonEvictionTest) {
|
| - // If we're using so little that evicting all of it wouldn't
|
| - // do enough to alleviate a diskspace shortage, we don't evict.
|
| - quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 10);
|
| - quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 20);
|
| - quota_eviction_handler()->SetPoolSize(10000);
|
| + quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 414);
|
| + quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 450);
|
| + quota_eviction_handler()->set_quota(10000);
|
| quota_eviction_handler()->set_available_space(
|
| - quota_eviction_handler()->settings().must_remain_available - 350);
|
| - EXPECT_EQ(10 + 20, quota_eviction_handler()->GetUsage());
|
| - disable_timer_for_testing();
|
| + default_min_available_disk_space_to_start_eviction() - 350);
|
| + EXPECT_EQ(414 + 450, quota_eviction_handler()->GetUsage());
|
| + reset_min_available_disk_space_to_start_eviction();
|
| + set_repeated_eviction(false);
|
| temporary_storage_evictor()->Start();
|
| base::RunLoop().RunUntilIdle();
|
| - EXPECT_EQ(10 + 20, quota_eviction_handler()->GetUsage());
|
| + EXPECT_EQ(414 + 450, quota_eviction_handler()->GetUsage());
|
|
|
| EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
|
| EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
|
| @@ -381,11 +398,13 @@ TEST_F(QuotaTemporaryStorageEvictorTest, DiskSpaceEvictionTest) {
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.y.com"), 120);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 150);
|
| quota_eviction_handler()->AddOrigin(GURL("http://www.w.com"), 300);
|
| - quota_eviction_handler()->SetPoolSize(10000);
|
| + quota_eviction_handler()->set_quota(10000);
|
| quota_eviction_handler()->set_available_space(
|
| - quota_eviction_handler()->settings().must_remain_available - 350);
|
| + default_min_available_disk_space_to_start_eviction() - 350);
|
| EXPECT_EQ(294 + 120 + 150 + 300, quota_eviction_handler()->GetUsage());
|
| - disable_timer_for_testing();
|
| + set_min_available_disk_space_to_start_eviction(
|
| + default_min_available_disk_space_to_start_eviction());
|
| + set_repeated_eviction(false);
|
| temporary_storage_evictor()->Start();
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(150 + 300, quota_eviction_handler()->GetUsage());
|
|
|