Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(387)

Side by Side Diff: components/offline_pages/offline_page_model_unittest.cc

Issue 1947323002: [Offline Pages] Implement OfflinePageStorageManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix rebasing Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_model.h" 5 #include "components/offline_pages/offline_page_model.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/feature_list.h" 13 #include "base/feature_list.h"
14 #include "base/files/file_util.h" 14 #include "base/files/file_util.h"
15 #include "base/files/scoped_temp_dir.h" 15 #include "base/files/scoped_temp_dir.h"
16 #include "base/optional.h" 16 #include "base/optional.h"
17 #include "base/run_loop.h" 17 #include "base/run_loop.h"
18 #include "base/single_thread_task_runner.h" 18 #include "base/single_thread_task_runner.h"
19 #include "base/strings/string_number_conversions.h" 19 #include "base/strings/string_number_conversions.h"
20 #include "base/strings/utf_string_conversions.h" 20 #include "base/strings/utf_string_conversions.h"
21 #include "base/test/test_mock_time_task_runner.h" 21 #include "base/test/test_mock_time_task_runner.h"
22 #include "base/thread_task_runner_handle.h" 22 #include "base/thread_task_runner_handle.h"
23 #include "base/time/time.h" 23 #include "base/time/time.h"
24 #include "components/offline_pages/client_policy_controller.h"
25 #include "components/offline_pages/offline_page_client_policy.h"
24 #include "components/offline_pages/offline_page_feature.h" 26 #include "components/offline_pages/offline_page_feature.h"
25 #include "components/offline_pages/offline_page_item.h" 27 #include "components/offline_pages/offline_page_item.h"
28 #include "components/offline_pages/offline_page_storage_manager.h"
26 #include "components/offline_pages/offline_page_test_archiver.h" 29 #include "components/offline_pages/offline_page_test_archiver.h"
27 #include "components/offline_pages/offline_page_test_store.h" 30 #include "components/offline_pages/offline_page_test_store.h"
28 #include "testing/gtest/include/gtest/gtest.h" 31 #include "testing/gtest/include/gtest/gtest.h"
29 #include "url/gurl.h" 32 #include "url/gurl.h"
30 33
31 using SavePageResult = offline_pages::OfflinePageModel::SavePageResult; 34 using SavePageResult = offline_pages::OfflinePageModel::SavePageResult;
32 using DeletePageResult = offline_pages::OfflinePageModel::DeletePageResult; 35 using DeletePageResult = offline_pages::OfflinePageModel::DeletePageResult;
33 using SingleOfflinePageItemResult = 36 using SingleOfflinePageItemResult =
34 offline_pages::OfflinePageModel::SingleOfflinePageItemResult; 37 offline_pages::OfflinePageModel::SingleOfflinePageItemResult;
35 using MultipleOfflinePageItemResult = 38 using MultipleOfflinePageItemResult =
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 void OnCheckPagesExistOfflineDone(const CheckPagesExistOfflineResult& result); 90 void OnCheckPagesExistOfflineDone(const CheckPagesExistOfflineResult& result);
88 void OnClearAllDone(); 91 void OnClearAllDone();
89 void OnGetOfflineIdsForClientIdDone(MultipleOfflineIdResult* storage, 92 void OnGetOfflineIdsForClientIdDone(MultipleOfflineIdResult* storage,
90 const MultipleOfflineIdResult& result); 93 const MultipleOfflineIdResult& result);
91 void OnGetSingleOfflinePageItemResult( 94 void OnGetSingleOfflinePageItemResult(
92 SingleOfflinePageItemResult* storage, 95 SingleOfflinePageItemResult* storage,
93 const SingleOfflinePageItemResult& result); 96 const SingleOfflinePageItemResult& result);
94 void OnGetMultipleOfflinePageItemsResult( 97 void OnGetMultipleOfflinePageItemsResult(
95 MultipleOfflinePageItemResult* storage, 98 MultipleOfflinePageItemResult* storage,
96 const MultipleOfflinePageItemResult& result); 99 const MultipleOfflinePageItemResult& result);
100 void OnClearPageByStorageManager(int pages_cleared, DeletePageResult result);
97 101
98 // OfflinePageMetadataStore callbacks. 102 // OfflinePageMetadataStore callbacks.
99 void OnStoreUpdateDone(bool /* success */); 103 void OnStoreUpdateDone(bool /* success */);
100 104
101 std::unique_ptr<OfflinePageTestArchiver> BuildArchiver( 105 std::unique_ptr<OfflinePageTestArchiver> BuildArchiver(
102 const GURL& url, 106 const GURL& url,
103 OfflinePageArchiver::ArchiverResult result); 107 OfflinePageArchiver::ArchiverResult result);
104 std::unique_ptr<OfflinePageMetadataStore> BuildStore(); 108 std::unique_ptr<OfflinePageMetadataStore> BuildStore();
105 std::unique_ptr<OfflinePageModel> BuildModel( 109 std::unique_ptr<OfflinePageModel> BuildModel(
106 std::unique_ptr<OfflinePageMetadataStore> store); 110 std::unique_ptr<OfflinePageMetadataStore> store);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 DeletePageResult last_delete_result() const { 159 DeletePageResult last_delete_result() const {
156 return last_delete_result_; 160 return last_delete_result_;
157 } 161 }
158 162
159 int64_t last_deleted_offline_id() const { return last_deleted_offline_id_; } 163 int64_t last_deleted_offline_id() const { return last_deleted_offline_id_; }
160 164
161 ClientId last_deleted_client_id() const { return last_deleted_client_id_; } 165 ClientId last_deleted_client_id() const { return last_deleted_client_id_; }
162 166
163 const base::FilePath& last_archiver_path() { return last_archiver_path_; } 167 const base::FilePath& last_archiver_path() { return last_archiver_path_; }
164 168
169 int last_cleared_pages_count() const { return last_cleared_pages_count_; }
170
171 DeletePageResult last_clear_page_result() const {
172 return last_clear_page_result_;
173 }
174
165 private: 175 private:
166 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; 176 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
167 base::ThreadTaskRunnerHandle task_runner_handle_; 177 base::ThreadTaskRunnerHandle task_runner_handle_;
168 base::ScopedTempDir temp_dir_; 178 base::ScopedTempDir temp_dir_;
169 179
170 std::unique_ptr<OfflinePageModel> model_; 180 std::unique_ptr<OfflinePageModel> model_;
171 SavePageResult last_save_result_; 181 SavePageResult last_save_result_;
172 int64_t last_save_offline_id_; 182 int64_t last_save_offline_id_;
173 DeletePageResult last_delete_result_; 183 DeletePageResult last_delete_result_;
174 base::FilePath last_archiver_path_; 184 base::FilePath last_archiver_path_;
175 int64_t last_deleted_offline_id_; 185 int64_t last_deleted_offline_id_;
176 ClientId last_deleted_client_id_; 186 ClientId last_deleted_client_id_;
177 bool last_has_pages_result_; 187 bool last_has_pages_result_;
178 CheckPagesExistOfflineResult last_pages_exist_result_; 188 CheckPagesExistOfflineResult last_pages_exist_result_;
189 int last_cleared_pages_count_;
190 DeletePageResult last_clear_page_result_;
179 }; 191 };
180 192
181 OfflinePageModelTest::OfflinePageModelTest() 193 OfflinePageModelTest::OfflinePageModelTest()
182 : task_runner_(new base::TestMockTimeTaskRunner), 194 : task_runner_(new base::TestMockTimeTaskRunner),
183 task_runner_handle_(task_runner_), 195 task_runner_handle_(task_runner_),
184 last_save_result_(SavePageResult::CANCELLED), 196 last_save_result_(SavePageResult::CANCELLED),
185 last_save_offline_id_(-1), 197 last_save_offline_id_(-1),
186 last_delete_result_(DeletePageResult::CANCELLED), 198 last_delete_result_(DeletePageResult::CANCELLED),
187 last_deleted_offline_id_(-1) {} 199 last_deleted_offline_id_(-1) {}
188 200
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 294
283 void OfflinePageModelTest::FastForwardBy(base::TimeDelta delta) { 295 void OfflinePageModelTest::FastForwardBy(base::TimeDelta delta) {
284 task_runner_->FastForwardBy(delta); 296 task_runner_->FastForwardBy(delta);
285 } 297 }
286 298
287 void OfflinePageModelTest::ResetResults() { 299 void OfflinePageModelTest::ResetResults() {
288 last_save_result_ = SavePageResult::CANCELLED; 300 last_save_result_ = SavePageResult::CANCELLED;
289 last_delete_result_ = DeletePageResult::CANCELLED; 301 last_delete_result_ = DeletePageResult::CANCELLED;
290 last_archiver_path_.clear(); 302 last_archiver_path_.clear();
291 last_pages_exist_result_.clear(); 303 last_pages_exist_result_.clear();
304 last_cleared_pages_count_ = 0;
292 } 305 }
293 306
294 OfflinePageTestStore* OfflinePageModelTest::GetStore() { 307 OfflinePageTestStore* OfflinePageModelTest::GetStore() {
295 return static_cast<OfflinePageTestStore*>(model()->GetStoreForTesting()); 308 return static_cast<OfflinePageTestStore*>(model()->GetStoreForTesting());
296 } 309 }
297 310
298 void OfflinePageModelTest::SavePage(const GURL& url, ClientId client_id) { 311 void OfflinePageModelTest::SavePage(const GURL& url, ClientId client_id) {
299 SavePageWithArchiverResult( 312 SavePageWithArchiverResult(
300 url, client_id, 313 url, client_id,
301 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED); 314 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 const SingleOfflinePageItemResult& result) { 387 const SingleOfflinePageItemResult& result) {
375 *storage = result; 388 *storage = result;
376 } 389 }
377 390
378 void OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult( 391 void OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult(
379 MultipleOfflinePageItemResult* storage, 392 MultipleOfflinePageItemResult* storage,
380 const MultipleOfflinePageItemResult& result) { 393 const MultipleOfflinePageItemResult& result) {
381 *storage = result; 394 *storage = result;
382 } 395 }
383 396
397 void OfflinePageModelTest::OnClearPageByStorageManager(
398 int pages_cleared,
399 DeletePageResult result) {
400 last_cleared_pages_count_ = pages_cleared;
401 last_clear_page_result_ = result;
402 }
403
384 base::Optional<OfflinePageItem> OfflinePageModelTest::GetPagesByOnlineURL( 404 base::Optional<OfflinePageItem> OfflinePageModelTest::GetPagesByOnlineURL(
385 const GURL& online_url) { 405 const GURL& online_url) {
386 MultipleOfflinePageItemResult result; 406 MultipleOfflinePageItemResult result;
387 model()->GetPagesByOnlineURL( 407 model()->GetPagesByOnlineURL(
388 online_url, 408 online_url,
389 base::Bind(&OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult, 409 base::Bind(&OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult,
390 AsWeakPtr(), base::Unretained(&result))); 410 AsWeakPtr(), base::Unretained(&result)));
391 PumpLoop(); 411 PumpLoop();
392 if (result.size() > 0) 412 if (result.size() > 0)
393 return base::make_optional(result[0]); 413 return base::make_optional(result[0]);
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 942
923 std::set<int64_t> id_set; 943 std::set<int64_t> id_set;
924 for (size_t i = 0; i < ids.size(); i++) { 944 for (size_t i = 0; i < ids.size(); i++) {
925 id_set.insert(ids[i]); 945 id_set.insert(ids[i]);
926 } 946 }
927 947
928 EXPECT_TRUE(id_set.find(offline1) != id_set.end()); 948 EXPECT_TRUE(id_set.find(offline1) != id_set.end());
929 EXPECT_TRUE(id_set.find(offline2) != id_set.end()); 949 EXPECT_TRUE(id_set.find(offline2) != id_set.end());
930 } 950 }
931 951
952 TEST_F(OfflinePageModelTest, ClearPagesFromOneSource) {
953 base::Time now = base::Time::Now();
954 base::TimeDelta expiration_period = model()
955 ->GetPolicyController()
956 ->GetPolicy(kTestClientNamespace)
957 .lifetime_policy.expiration_period;
958
959 SavePage(kTestUrl, kTestClientId1);
960 GetStore()->UpdateLastAccessTime(
961 last_save_offline_id(),
962 now - base::TimeDelta::FromDays(10) - expiration_period);
963 SavePage(kTestUrl2, kTestClientId2);
964 GetStore()->UpdateLastAccessTime(
965 last_save_offline_id(),
966 now - base::TimeDelta::FromDays(1) - expiration_period);
967 SavePage(kTestUrl3, kTestClientId3);
968 GetStore()->UpdateLastAccessTime(last_save_offline_id(), now);
969
970 ResetModel();
971
972 // Only first two pages are expired.
973 model()->GetStorageManager()->ClearPagesIfNeeded(base::Bind(
974 &OfflinePageModelTest::OnClearPageByStorageManager, AsWeakPtr()));
975
976 PumpLoop();
977
978 std::vector<OfflinePageItem> offline_pages = GetAllPages();
979
980 EXPECT_EQ(1UL, offline_pages.size());
981 EXPECT_EQ(1UL, GetStore()->GetAllPages().size());
982 EXPECT_EQ(2, last_cleared_pages_count());
983 EXPECT_EQ(DeletePageResult::SUCCESS, last_clear_page_result());
984 }
985
932 TEST(CommandLineFlagsTest, OfflineBookmarks) { 986 TEST(CommandLineFlagsTest, OfflineBookmarks) {
933 // Disabled by default. 987 // Disabled by default.
934 EXPECT_FALSE(offline_pages::IsOfflineBookmarksEnabled()); 988 EXPECT_FALSE(offline_pages::IsOfflineBookmarksEnabled());
935 989
936 // Check if feature is correctly enabled by command-line flag. 990 // Check if feature is correctly enabled by command-line flag.
937 base::FeatureList::ClearInstanceForTesting(); 991 base::FeatureList::ClearInstanceForTesting();
938 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); 992 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
939 feature_list->InitializeFromCommandLine( 993 feature_list->InitializeFromCommandLine(
940 offline_pages::kOfflineBookmarksFeature.name, ""); 994 offline_pages::kOfflineBookmarksFeature.name, "");
941 base::FeatureList::SetInstance(std::move(feature_list)); 995 base::FeatureList::SetInstance(std::move(feature_list));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 std::unique_ptr<base::FeatureList> feature_list2(new base::FeatureList); 1036 std::unique_ptr<base::FeatureList> feature_list2(new base::FeatureList);
983 feature_list2->InitializeFromCommandLine( 1037 feature_list2->InitializeFromCommandLine(
984 std::string(offline_pages::kOfflineBookmarksFeature.name) + "," + 1038 std::string(offline_pages::kOfflineBookmarksFeature.name) + "," +
985 offline_pages::kOfflinePagesBackgroundLoadingFeature.name, 1039 offline_pages::kOfflinePagesBackgroundLoadingFeature.name,
986 ""); 1040 "");
987 base::FeatureList::SetInstance(std::move(feature_list2)); 1041 base::FeatureList::SetInstance(std::move(feature_list2));
988 EXPECT_TRUE(offline_pages::IsOfflinePagesBackgroundLoadingEnabled()); 1042 EXPECT_TRUE(offline_pages::IsOfflinePagesBackgroundLoadingEnabled());
989 } 1043 }
990 1044
991 } // namespace offline_pages 1045 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/offline_page_model.cc ('k') | components/offline_pages/offline_page_storage_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698