| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "components/offline_pages/offline_page_storage_manager.h" | 5 #include "components/offline_pages/offline_page_storage_manager.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| 11 #include "base/test/simple_test_clock.h" | 11 #include "base/test/simple_test_clock.h" |
| 12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
| 13 #include "components/offline_pages/archive_manager.h" |
| 13 #include "components/offline_pages/client_policy_controller.h" | 14 #include "components/offline_pages/client_policy_controller.h" |
| 14 #include "components/offline_pages/offline_page_item.h" | 15 #include "components/offline_pages/offline_page_item.h" |
| 15 #include "components/offline_pages/offline_page_storage_manager.h" | 16 #include "components/offline_pages/offline_page_storage_manager.h" |
| 16 #include "components/offline_pages/offline_page_types.h" | 17 #include "components/offline_pages/offline_page_types.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 19 |
| 20 using LifetimePolicy = offline_pages::LifetimePolicy; |
| 21 using ClearStorageResult = |
| 22 offline_pages::OfflinePageStorageManager::ClearStorageResult; |
| 23 using StorageStats = offline_pages::ArchiveManager::StorageStats; |
| 24 |
| 19 namespace offline_pages { | 25 namespace offline_pages { |
| 20 | 26 |
| 21 namespace { | 27 namespace { |
| 22 const char kBookmarkNamespace[] = "bookmark"; | 28 const char kBookmarkNamespace[] = "bookmark"; |
| 23 const char kLastNNamespace[] = "last_n"; | 29 const char kLastNNamespace[] = "last_n"; |
| 24 const GURL kTestUrl("http://example.com"); | 30 const GURL kTestUrl("http://example.com"); |
| 25 const base::FilePath::CharType kFilePath[] = FILE_PATH_LITERAL("TEST_FILEPATH"); | 31 const base::FilePath::CharType kFilePath[] = FILE_PATH_LITERAL("/data"); |
| 26 const int64_t kTestFileSize = 876543LL; | 32 const int64_t kTestFileSize = 500 * (1 << 10); |
| 33 const int64_t kFreeSpaceNormal = 100 * (1 << 20); |
| 27 | 34 |
| 28 enum TestOptions { | 35 enum TestOptions { |
| 29 DEFAULT = 1 << 0, | 36 DEFAULT = 1 << 0, |
| 30 DELETE_FAILED = 1 << 1, | 37 DELETE_FAILURE = 1 << 1, |
| 31 }; | 38 }; |
| 32 | 39 |
| 33 struct PageSettings { | 40 struct PageSettings { |
| 34 std::string name_space; | 41 std::string name_space; |
| 35 int fresh_pages_count; | 42 int fresh_pages_count; |
| 36 int expired_pages_count; | 43 int expired_pages_count; |
| 37 }; | 44 }; |
| 38 } // namespace | 45 } // namespace |
| 39 | 46 |
| 40 class StorageManagerTestClient : public OfflinePageStorageManager::Client { | 47 class StorageManagerTestClient : public OfflinePageStorageManager::Client { |
| 41 public: | 48 public: |
| 42 StorageManagerTestClient(std::vector<PageSettings> page_settings, | 49 StorageManagerTestClient(std::vector<PageSettings> page_settings, |
| 43 base::SimpleTestClock* clock, | 50 base::SimpleTestClock* clock, |
| 44 TestOptions options = TestOptions::DEFAULT) | 51 TestOptions options = TestOptions::DEFAULT) |
| 45 : policy_controller_(new ClientPolicyController()), | 52 : policy_controller_(new ClientPolicyController()), |
| 46 clock_(clock), | 53 clock_(clock), |
| 47 options_(options), | 54 options_(options), |
| 48 next_offline_id_(0) { | 55 next_offline_id_(0) { |
| 49 for (const auto& setting : page_settings) | 56 for (const auto& setting : page_settings) |
| 50 AddPages(setting); | 57 AddPages(setting); |
| 51 } | 58 } |
| 52 | 59 |
| 53 ~StorageManagerTestClient() override; | 60 ~StorageManagerTestClient() override; |
| 54 | 61 |
| 55 void GetAllPages(const MultipleOfflinePageItemCallback& callback) override { | 62 void GetAllPages(const MultipleOfflinePageItemCallback& callback) override { |
| 56 callback.Run(pages_); | 63 callback.Run(pages_); |
| 57 } | 64 } |
| 58 | 65 |
| 59 void DeletePagesByOfflineId(const std::vector<int64_t>& offline_ids, | 66 void DeletePagesByOfflineId(const std::vector<int64_t>& offline_ids, |
| 60 const DeletePageCallback& callback) override { | 67 const DeletePageCallback& callback) override; |
| 61 if (options_ & TestOptions::DELETE_FAILED) { | 68 void AddPages(const PageSettings& setting); |
| 62 callback.Run(DeletePageResult::STORE_FAILURE); | 69 |
| 63 } else { | 70 int64_t GetTotalSize() const; |
| 64 callback.Run(DeletePageResult::SUCCESS); | |
| 65 } | |
| 66 } | |
| 67 | 71 |
| 68 base::SimpleTestClock* clock() { return clock_; } | 72 base::SimpleTestClock* clock() { return clock_; } |
| 69 | 73 |
| 70 private: | 74 private: |
| 71 void AddPages(const PageSettings& setting); | |
| 72 | 75 |
| 73 std::vector<OfflinePageItem> pages_; | 76 std::vector<OfflinePageItem> pages_; |
| 74 | 77 |
| 75 std::unique_ptr<ClientPolicyController> policy_controller_; | 78 std::unique_ptr<ClientPolicyController> policy_controller_; |
| 76 | 79 |
| 77 base::SimpleTestClock* clock_; | 80 base::SimpleTestClock* clock_; |
| 78 | 81 |
| 79 TestOptions options_; | 82 TestOptions options_; |
| 80 | 83 |
| 81 int64_t next_offline_id_; | 84 int64_t next_offline_id_; |
| 82 }; | 85 }; |
| 83 | 86 |
| 87 void StorageManagerTestClient::DeletePagesByOfflineId( |
| 88 const std::vector<int64_t>& offline_ids, |
| 89 const DeletePageCallback& callback) { |
| 90 if (options_ & TestOptions::DELETE_FAILURE) { |
| 91 callback.Run(DeletePageResult::STORE_FAILURE); |
| 92 return; |
| 93 } |
| 94 std::set<int64_t> s(offline_ids.begin(), offline_ids.end()); |
| 95 pages_.erase(std::remove_if(pages_.begin(), pages_.end(), |
| 96 [&s](const OfflinePageItem& page) -> bool { |
| 97 return s.count(page.offline_id) != 0; |
| 98 }), |
| 99 pages_.end()); |
| 100 callback.Run(DeletePageResult::SUCCESS); |
| 101 } |
| 102 |
| 103 int64_t StorageManagerTestClient::GetTotalSize() const { |
| 104 int64_t res = 0; |
| 105 for (const auto& page : pages_) |
| 106 res += page.file_size; |
| 107 return res; |
| 108 } |
| 109 |
| 84 StorageManagerTestClient::~StorageManagerTestClient() {} | 110 StorageManagerTestClient::~StorageManagerTestClient() {} |
| 85 | 111 |
| 86 void StorageManagerTestClient::AddPages(const PageSettings& setting) { | 112 void StorageManagerTestClient::AddPages(const PageSettings& setting) { |
| 87 std::string name_space = setting.name_space; | 113 std::string name_space = setting.name_space; |
| 88 int fresh_pages_count = setting.fresh_pages_count; | 114 int fresh_pages_count = setting.fresh_pages_count; |
| 89 int expired_pages_count = setting.expired_pages_count; | 115 int expired_pages_count = setting.expired_pages_count; |
| 90 base::Time now = clock()->Now(); | 116 base::Time now = clock()->Now(); |
| 91 // Fresh pages. | 117 // Fresh pages. |
| 92 for (int i = 0; i < fresh_pages_count; i++) { | 118 for (int i = 0; i < fresh_pages_count; i++) { |
| 93 OfflinePageItem page = | 119 OfflinePageItem page = |
| (...skipping 11 matching lines...) Expand all Loading... |
| 105 ClientId(name_space, std::to_string(next_offline_id_)), | 131 ClientId(name_space, std::to_string(next_offline_id_)), |
| 106 base::FilePath(kFilePath), kTestFileSize); | 132 base::FilePath(kFilePath), kTestFileSize); |
| 107 next_offline_id_++; | 133 next_offline_id_++; |
| 108 page.last_access_time = now - | 134 page.last_access_time = now - |
| 109 policy_controller_->GetPolicy(name_space) | 135 policy_controller_->GetPolicy(name_space) |
| 110 .lifetime_policy.expiration_period; | 136 .lifetime_policy.expiration_period; |
| 111 pages_.push_back(page); | 137 pages_.push_back(page); |
| 112 } | 138 } |
| 113 } | 139 } |
| 114 | 140 |
| 141 class TestArchiveManager : public ArchiveManager { |
| 142 public: |
| 143 explicit TestArchiveManager(StorageStats stats) : stats_(stats) {} |
| 144 |
| 145 void GetStorageStats(const base::Callback< |
| 146 void(const ArchiveManager::StorageStats& storage_stats)>& |
| 147 callback) const override { |
| 148 callback.Run(stats_); |
| 149 } |
| 150 |
| 151 void SetValues(ArchiveManager::StorageStats stats) { stats_ = stats; } |
| 152 |
| 153 private: |
| 154 StorageStats stats_; |
| 155 }; |
| 156 |
| 115 class OfflinePageStorageManagerTest : public testing::Test { | 157 class OfflinePageStorageManagerTest : public testing::Test { |
| 116 public: | 158 public: |
| 117 OfflinePageStorageManagerTest(); | 159 OfflinePageStorageManagerTest(); |
| 118 OfflinePageStorageManager* manager() { return manager_.get(); } | 160 OfflinePageStorageManager* manager() { return manager_.get(); } |
| 119 OfflinePageStorageManager::Client* client() { return client_.get(); } | 161 StorageManagerTestClient* test_client() { return client_.get(); } |
| 120 ClientPolicyController* policy_controller() { | 162 ClientPolicyController* policy_controller() { |
| 121 return policy_controller_.get(); | 163 return policy_controller_.get(); |
| 122 } | 164 } |
| 123 void OnPagesCleared(int pages_cleared_count, DeletePageResult result); | 165 TestArchiveManager* test_archive_manager() { return archive_manager_.get(); } |
| 166 void OnPagesCleared(int pages_cleared_count, ClearStorageResult result); |
| 124 void Initialize(const std::vector<PageSettings>& settings, | 167 void Initialize(const std::vector<PageSettings>& settings, |
| 168 StorageStats stats = {kFreeSpaceNormal, 0}, |
| 125 TestOptions options = TestOptions::DEFAULT); | 169 TestOptions options = TestOptions::DEFAULT); |
| 170 void TryClearPages(); |
| 126 | 171 |
| 127 // testing::Test | 172 // testing::Test |
| 128 void TearDown() override; | 173 void TearDown() override; |
| 129 | 174 |
| 130 base::SimpleTestClock* clock() { return clock_; } | 175 base::SimpleTestClock* clock() { return clock_; } |
| 131 int last_cleared_page_count() const { return last_cleared_page_count_; } | 176 int last_cleared_page_count() const { return last_cleared_page_count_; } |
| 132 DeletePageResult last_delete_page_result() const { | 177 int total_cleared_times() const { return total_cleared_times_; } |
| 133 return last_delete_page_result_; | 178 ClearStorageResult last_clear_storage_result() const { |
| 179 return last_clear_storage_result_; |
| 134 } | 180 } |
| 135 | 181 |
| 136 private: | 182 private: |
| 137 std::unique_ptr<OfflinePageStorageManager> manager_; | 183 std::unique_ptr<OfflinePageStorageManager> manager_; |
| 138 std::unique_ptr<OfflinePageStorageManager::Client> client_; | 184 std::unique_ptr<StorageManagerTestClient> client_; |
| 139 std::unique_ptr<ClientPolicyController> policy_controller_; | 185 std::unique_ptr<ClientPolicyController> policy_controller_; |
| 186 std::unique_ptr<TestArchiveManager> archive_manager_; |
| 140 | 187 |
| 141 base::SimpleTestClock* clock_; | 188 base::SimpleTestClock* clock_; |
| 142 | 189 |
| 143 int last_cleared_page_count_; | 190 int last_cleared_page_count_; |
| 144 DeletePageResult last_delete_page_result_; | 191 int total_cleared_times_; |
| 192 ClearStorageResult last_clear_storage_result_; |
| 145 }; | 193 }; |
| 146 | 194 |
| 147 OfflinePageStorageManagerTest::OfflinePageStorageManagerTest() | 195 OfflinePageStorageManagerTest::OfflinePageStorageManagerTest() |
| 148 : policy_controller_(new ClientPolicyController()), | 196 : policy_controller_(new ClientPolicyController()), |
| 149 last_cleared_page_count_(0), | 197 last_cleared_page_count_(0), |
| 150 last_delete_page_result_(DeletePageResult::SUCCESS) {} | 198 total_cleared_times_(0), |
| 199 last_clear_storage_result_(ClearStorageResult::SUCCESS) {} |
| 151 | 200 |
| 152 void OfflinePageStorageManagerTest::Initialize( | 201 void OfflinePageStorageManagerTest::Initialize( |
| 153 const std::vector<PageSettings>& page_settings, | 202 const std::vector<PageSettings>& page_settings, |
| 203 StorageStats stats, |
| 154 TestOptions options) { | 204 TestOptions options) { |
| 155 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock()); | 205 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock()); |
| 156 clock_ = clock.get(); | 206 clock_ = clock.get(); |
| 157 clock_->SetNow(base::Time::Now()); | 207 clock_->SetNow(base::Time::Now()); |
| 158 client_.reset(new StorageManagerTestClient(page_settings, clock_, options)); | 208 client_.reset(new StorageManagerTestClient(page_settings, clock_, options)); |
| 159 manager_.reset(new OfflinePageStorageManager(client(), policy_controller())); | 209 |
| 210 if (stats.free_disk_space == 0) |
| 211 stats.free_disk_space = kFreeSpaceNormal; |
| 212 if (stats.total_archives_size == 0) { |
| 213 stats.total_archives_size = client_->GetTotalSize(); |
| 214 } |
| 215 archive_manager_.reset(new TestArchiveManager(stats)); |
| 216 manager_.reset(new OfflinePageStorageManager( |
| 217 client_.get(), policy_controller(), archive_manager_.get())); |
| 160 manager_->SetClockForTesting(std::move(clock)); | 218 manager_->SetClockForTesting(std::move(clock)); |
| 161 } | 219 } |
| 162 | 220 |
| 221 void OfflinePageStorageManagerTest::TryClearPages() { |
| 222 manager()->ClearPagesIfNeeded(base::Bind( |
| 223 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); |
| 224 } |
| 225 |
| 163 void OfflinePageStorageManagerTest::TearDown() { | 226 void OfflinePageStorageManagerTest::TearDown() { |
| 164 manager_.reset(); | 227 manager_.reset(); |
| 165 client_.reset(); | 228 client_.reset(); |
| 166 } | 229 } |
| 167 | 230 |
| 168 void OfflinePageStorageManagerTest::OnPagesCleared(int pages_cleared_count, | 231 void OfflinePageStorageManagerTest::OnPagesCleared(int pages_cleared_count, |
| 169 DeletePageResult result) { | 232 ClearStorageResult result) { |
| 170 last_cleared_page_count_ = pages_cleared_count; | 233 last_cleared_page_count_ = pages_cleared_count; |
| 171 last_delete_page_result_ = result; | 234 total_cleared_times_++; |
| 235 last_clear_storage_result_ = result; |
| 172 } | 236 } |
| 173 | 237 |
| 174 TEST_F(OfflinePageStorageManagerTest, TestClearPagesLessThanLimit) { | 238 TEST_F(OfflinePageStorageManagerTest, TestClearPagesLessThanLimit) { |
| 175 Initialize(std::vector<PageSettings>( | 239 Initialize(std::vector<PageSettings>( |
| 176 {{kBookmarkNamespace, 1, 1}, {kLastNNamespace, 1, 1}})); | 240 {{kBookmarkNamespace, 1, 1}, {kLastNNamespace, 1, 1}})); |
| 177 clock()->Advance(base::TimeDelta::FromMinutes(30)); | 241 clock()->Advance(base::TimeDelta::FromMinutes(30)); |
| 178 manager()->ClearPagesIfNeeded(base::Bind( | 242 TryClearPages(); |
| 179 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); | |
| 180 EXPECT_EQ(2, last_cleared_page_count()); | 243 EXPECT_EQ(2, last_cleared_page_count()); |
| 181 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result()); | 244 EXPECT_EQ(1, total_cleared_times()); |
| 245 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); |
| 182 } | 246 } |
| 183 | 247 |
| 184 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreThanLimit) { | 248 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreThanLimit) { |
| 185 Initialize(std::vector<PageSettings>( | 249 Initialize(std::vector<PageSettings>( |
| 186 {{kBookmarkNamespace, 10, 15}, {kLastNNamespace, 5, 30}})); | 250 {{kBookmarkNamespace, 10, 15}, {kLastNNamespace, 5, 30}})); |
| 187 clock()->Advance(base::TimeDelta::FromMinutes(30)); | 251 clock()->Advance(base::TimeDelta::FromMinutes(30)); |
| 188 manager()->ClearPagesIfNeeded(base::Bind( | 252 TryClearPages(); |
| 189 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); | |
| 190 EXPECT_EQ(45, last_cleared_page_count()); | 253 EXPECT_EQ(45, last_cleared_page_count()); |
| 191 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result()); | 254 EXPECT_EQ(1, total_cleared_times()); |
| 255 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); |
| 192 } | 256 } |
| 193 | 257 |
| 194 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreFreshPages) { | 258 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreFreshPages) { |
| 195 Initialize(std::vector<PageSettings>( | 259 Initialize(std::vector<PageSettings>( |
| 196 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}})); | 260 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}}), |
| 197 clock()->Advance(base::TimeDelta::FromMinutes(30)); | 261 {500 * (1 << 20), 0}); |
| 198 manager()->ClearPagesIfNeeded(base::Bind( | 262 clock()->Advance(base::TimeDelta::FromMinutes(30)); |
| 199 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); | 263 TryClearPages(); |
| 200 int last_n_page_limit = policy_controller() | 264 int last_n_page_limit = policy_controller() |
| 201 ->GetPolicy(kLastNNamespace) | 265 ->GetPolicy(kLastNNamespace) |
| 202 .lifetime_policy.page_limit; | 266 .lifetime_policy.page_limit; |
| 203 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count()); | 267 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count()); |
| 204 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result()); | 268 EXPECT_EQ(1, total_cleared_times()); |
| 205 } | 269 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); |
| 270 } |
| 271 |
| 272 TEST_F(OfflinePageStorageManagerTest, TestDeletionFailed) { |
| 273 Initialize(std::vector<PageSettings>( |
| 274 {{kBookmarkNamespace, 10, 10}, {kLastNNamespace, 10, 10}}), |
| 275 {kFreeSpaceNormal, 0}, TestOptions::DELETE_FAILURE); |
| 276 TryClearPages(); |
| 277 EXPECT_EQ(20, last_cleared_page_count()); |
| 278 EXPECT_EQ(1, total_cleared_times()); |
| 279 EXPECT_EQ(ClearStorageResult::DELETE_FAILURE, last_clear_storage_result()); |
| 280 } |
| 281 |
| 282 TEST_F(OfflinePageStorageManagerTest, TestStorageTimeInterval) { |
| 283 Initialize(std::vector<PageSettings>( |
| 284 {{kBookmarkNamespace, 10, 10}, {kLastNNamespace, 10, 10}})); |
| 285 clock()->Advance(base::TimeDelta::FromMinutes(30)); |
| 286 TryClearPages(); |
| 287 EXPECT_EQ(20, last_cleared_page_count()); |
| 288 EXPECT_EQ(1, total_cleared_times()); |
| 289 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); |
| 290 |
| 291 // Advance clock so we go over the gap, but no expired pages. |
| 292 clock()->Advance(kClearStorageInterval + base::TimeDelta::FromHours(1)); |
| 293 TryClearPages(); |
| 294 EXPECT_EQ(0, last_cleared_page_count()); |
| 295 EXPECT_EQ(2, total_cleared_times()); |
| 296 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); |
| 297 |
| 298 // Advance clock so we are still in the gap, should be unnecessary. |
| 299 clock()->Advance(kClearStorageInterval - base::TimeDelta::FromHours(1)); |
| 300 TryClearPages(); |
| 301 EXPECT_EQ(0, last_cleared_page_count()); |
| 302 EXPECT_EQ(3, total_cleared_times()); |
| 303 EXPECT_EQ(ClearStorageResult::UNNECESSARY, last_clear_storage_result()); |
| 304 } |
| 305 |
| 306 TEST_F(OfflinePageStorageManagerTest, TestClearMultipleTimes) { |
| 307 Initialize(std::vector<PageSettings>( |
| 308 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}}), |
| 309 {500 * (1 << 20), 0}); |
| 310 clock()->Advance(base::TimeDelta::FromMinutes(30)); |
| 311 LifetimePolicy policy = |
| 312 policy_controller()->GetPolicy(kLastNNamespace).lifetime_policy; |
| 313 int last_n_page_limit = policy.page_limit; |
| 314 |
| 315 TryClearPages(); |
| 316 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count()); |
| 317 EXPECT_EQ(1, total_cleared_times()); |
| 318 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); |
| 319 |
| 320 // Advance the clock by expiration period of last_n namespace, should be |
| 321 // deleting all pages left in the namespace. |
| 322 clock()->Advance(policy.expiration_period); |
| 323 TryClearPages(); |
| 324 EXPECT_EQ(last_n_page_limit, last_cleared_page_count()); |
| 325 EXPECT_EQ(2, total_cleared_times()); |
| 326 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); |
| 327 |
| 328 // Only 1 ms passes and no changes in pages, so no need to clear page. |
| 329 clock()->Advance(base::TimeDelta::FromMilliseconds(1)); |
| 330 TryClearPages(); |
| 331 EXPECT_EQ(0, last_cleared_page_count()); |
| 332 EXPECT_EQ(3, total_cleared_times()); |
| 333 EXPECT_EQ(ClearStorageResult::UNNECESSARY, last_clear_storage_result()); |
| 334 |
| 335 // Adding more fresh pages to make it go over limit. |
| 336 clock()->Advance(base::TimeDelta::FromMinutes(5)); |
| 337 test_client()->AddPages({kBookmarkNamespace, 400, 0}); |
| 338 int64_t total_size_before = test_client()->GetTotalSize(); |
| 339 test_archive_manager()->SetValues({300 * (1 << 20), total_size_before}); |
| 340 TryClearPages(); |
| 341 EXPECT_LE(total_size_before * kOfflinePageStorageClearThreshold, |
| 342 test_client()->GetTotalSize()); |
| 343 EXPECT_EQ(4, total_cleared_times()); |
| 344 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); |
| 345 |
| 346 // After more days, all pages should be expired and deleted. |
| 347 clock()->Advance(base::TimeDelta::FromDays(30)); |
| 348 TryClearPages(); |
| 349 EXPECT_EQ(0, test_client()->GetTotalSize()); |
| 350 EXPECT_EQ(5, total_cleared_times()); |
| 351 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); |
| 352 } |
| 353 |
| 206 } // namespace offline_pages | 354 } // namespace offline_pages |
| OLD | NEW |