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

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: More comments. 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"
24 #include "components/offline_pages/offline_page_feature.h" 25 #include "components/offline_pages/offline_page_feature.h"
25 #include "components/offline_pages/offline_page_item.h" 26 #include "components/offline_pages/offline_page_item.h"
27 #include "components/offline_pages/offline_page_storage_manager.h"
26 #include "components/offline_pages/offline_page_test_archiver.h" 28 #include "components/offline_pages/offline_page_test_archiver.h"
27 #include "components/offline_pages/offline_page_test_store.h" 29 #include "components/offline_pages/offline_page_test_store.h"
28 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
29 #include "url/gurl.h" 31 #include "url/gurl.h"
30 32
31 using SavePageResult = offline_pages::OfflinePageModel::SavePageResult; 33 using SavePageResult = offline_pages::OfflinePageModel::SavePageResult;
32 using DeletePageResult = offline_pages::OfflinePageModel::DeletePageResult; 34 using DeletePageResult = offline_pages::OfflinePageModel::DeletePageResult;
33 using SingleOfflinePageItemResult = 35 using SingleOfflinePageItemResult =
34 offline_pages::OfflinePageModel::SingleOfflinePageItemResult; 36 offline_pages::OfflinePageModel::SingleOfflinePageItemResult;
35 using MultipleOfflinePageItemResult = 37 using MultipleOfflinePageItemResult =
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 void OnCheckPagesExistOfflineDone(const CheckPagesExistOfflineResult& result); 89 void OnCheckPagesExistOfflineDone(const CheckPagesExistOfflineResult& result);
88 void OnClearAllDone(); 90 void OnClearAllDone();
89 void OnGetOfflineIdsForClientIdDone(MultipleOfflineIdResult* storage, 91 void OnGetOfflineIdsForClientIdDone(MultipleOfflineIdResult* storage,
90 const MultipleOfflineIdResult& result); 92 const MultipleOfflineIdResult& result);
91 void OnGetSingleOfflinePageItemResult( 93 void OnGetSingleOfflinePageItemResult(
92 SingleOfflinePageItemResult* storage, 94 SingleOfflinePageItemResult* storage,
93 const SingleOfflinePageItemResult& result); 95 const SingleOfflinePageItemResult& result);
94 void OnGetMultipleOfflinePageItemsResult( 96 void OnGetMultipleOfflinePageItemsResult(
95 MultipleOfflinePageItemResult* storage, 97 MultipleOfflinePageItemResult* storage,
96 const MultipleOfflinePageItemResult& result); 98 const MultipleOfflinePageItemResult& result);
99 void OnClearPageByStorageManager(int pages_cleared, DeletePageResult result);
97 100
98 // OfflinePageMetadataStore callbacks. 101 // OfflinePageMetadataStore callbacks.
99 void OnStoreUpdateDone(bool /* success */); 102 void OnStoreUpdateDone(bool /* success */);
100 103
101 std::unique_ptr<OfflinePageTestArchiver> BuildArchiver( 104 std::unique_ptr<OfflinePageTestArchiver> BuildArchiver(
102 const GURL& url, 105 const GURL& url,
103 OfflinePageArchiver::ArchiverResult result); 106 OfflinePageArchiver::ArchiverResult result);
104 std::unique_ptr<OfflinePageMetadataStore> BuildStore(); 107 std::unique_ptr<OfflinePageMetadataStore> BuildStore();
105 std::unique_ptr<OfflinePageModel> BuildModel( 108 std::unique_ptr<OfflinePageModel> BuildModel(
106 std::unique_ptr<OfflinePageMetadataStore> store); 109 std::unique_ptr<OfflinePageMetadataStore> store);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 DeletePageResult last_delete_result() const { 158 DeletePageResult last_delete_result() const {
156 return last_delete_result_; 159 return last_delete_result_;
157 } 160 }
158 161
159 int64_t last_deleted_offline_id() const { return last_deleted_offline_id_; } 162 int64_t last_deleted_offline_id() const { return last_deleted_offline_id_; }
160 163
161 ClientId last_deleted_client_id() const { return last_deleted_client_id_; } 164 ClientId last_deleted_client_id() const { return last_deleted_client_id_; }
162 165
163 const base::FilePath& last_archiver_path() { return last_archiver_path_; } 166 const base::FilePath& last_archiver_path() { return last_archiver_path_; }
164 167
168 int last_cleared_pages_count() const { return last_cleared_pages_count_; }
169
170 DeletePageResult last_clear_page_result() const {
171 return last_clear_page_result_;
172 }
173
165 private: 174 private:
166 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; 175 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
167 base::ThreadTaskRunnerHandle task_runner_handle_; 176 base::ThreadTaskRunnerHandle task_runner_handle_;
168 base::ScopedTempDir temp_dir_; 177 base::ScopedTempDir temp_dir_;
169 178
170 std::unique_ptr<OfflinePageModel> model_; 179 std::unique_ptr<OfflinePageModel> model_;
171 SavePageResult last_save_result_; 180 SavePageResult last_save_result_;
172 int64_t last_save_offline_id_; 181 int64_t last_save_offline_id_;
173 DeletePageResult last_delete_result_; 182 DeletePageResult last_delete_result_;
174 base::FilePath last_archiver_path_; 183 base::FilePath last_archiver_path_;
175 int64_t last_deleted_offline_id_; 184 int64_t last_deleted_offline_id_;
176 ClientId last_deleted_client_id_; 185 ClientId last_deleted_client_id_;
177 bool last_has_pages_result_; 186 bool last_has_pages_result_;
178 CheckPagesExistOfflineResult last_pages_exist_result_; 187 CheckPagesExistOfflineResult last_pages_exist_result_;
188 int last_cleared_pages_count_;
189 DeletePageResult last_clear_page_result_;
179 }; 190 };
180 191
181 OfflinePageModelTest::OfflinePageModelTest() 192 OfflinePageModelTest::OfflinePageModelTest()
182 : task_runner_(new base::TestMockTimeTaskRunner), 193 : task_runner_(new base::TestMockTimeTaskRunner),
183 task_runner_handle_(task_runner_), 194 task_runner_handle_(task_runner_),
184 last_save_result_(SavePageResult::CANCELLED), 195 last_save_result_(SavePageResult::CANCELLED),
185 last_save_offline_id_(-1), 196 last_save_offline_id_(-1),
186 last_delete_result_(DeletePageResult::CANCELLED), 197 last_delete_result_(DeletePageResult::CANCELLED),
187 last_deleted_offline_id_(-1) {} 198 last_deleted_offline_id_(-1) {}
188 199
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 293
283 void OfflinePageModelTest::FastForwardBy(base::TimeDelta delta) { 294 void OfflinePageModelTest::FastForwardBy(base::TimeDelta delta) {
284 task_runner_->FastForwardBy(delta); 295 task_runner_->FastForwardBy(delta);
285 } 296 }
286 297
287 void OfflinePageModelTest::ResetResults() { 298 void OfflinePageModelTest::ResetResults() {
288 last_save_result_ = SavePageResult::CANCELLED; 299 last_save_result_ = SavePageResult::CANCELLED;
289 last_delete_result_ = DeletePageResult::CANCELLED; 300 last_delete_result_ = DeletePageResult::CANCELLED;
290 last_archiver_path_.clear(); 301 last_archiver_path_.clear();
291 last_pages_exist_result_.clear(); 302 last_pages_exist_result_.clear();
303 last_cleared_pages_count_ = 0;
292 } 304 }
293 305
294 OfflinePageTestStore* OfflinePageModelTest::GetStore() { 306 OfflinePageTestStore* OfflinePageModelTest::GetStore() {
295 return static_cast<OfflinePageTestStore*>(model()->GetStoreForTesting()); 307 return static_cast<OfflinePageTestStore*>(model()->GetStoreForTesting());
296 } 308 }
297 309
298 void OfflinePageModelTest::SavePage(const GURL& url, ClientId client_id) { 310 void OfflinePageModelTest::SavePage(const GURL& url, ClientId client_id) {
299 SavePageWithArchiverResult( 311 SavePageWithArchiverResult(
300 url, client_id, 312 url, client_id,
301 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED); 313 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 const SingleOfflinePageItemResult& result) { 386 const SingleOfflinePageItemResult& result) {
375 *storage = result; 387 *storage = result;
376 } 388 }
377 389
378 void OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult( 390 void OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult(
379 MultipleOfflinePageItemResult* storage, 391 MultipleOfflinePageItemResult* storage,
380 const MultipleOfflinePageItemResult& result) { 392 const MultipleOfflinePageItemResult& result) {
381 *storage = result; 393 *storage = result;
382 } 394 }
383 395
396 void OfflinePageModelTest::OnClearPageByStorageManager(
397 int pages_cleared,
398 DeletePageResult result) {
399 last_cleared_pages_count_ = pages_cleared;
400 last_clear_page_result_ = result;
401 }
402
384 base::Optional<OfflinePageItem> OfflinePageModelTest::GetPagesByOnlineURL( 403 base::Optional<OfflinePageItem> OfflinePageModelTest::GetPagesByOnlineURL(
385 const GURL& online_url) { 404 const GURL& online_url) {
386 MultipleOfflinePageItemResult result; 405 MultipleOfflinePageItemResult result;
387 model()->GetPagesByOnlineURL( 406 model()->GetPagesByOnlineURL(
388 online_url, 407 online_url,
389 base::Bind(&OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult, 408 base::Bind(&OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult,
390 AsWeakPtr(), base::Unretained(&result))); 409 AsWeakPtr(), base::Unretained(&result)));
391 PumpLoop(); 410 PumpLoop();
392 if (result.size() > 0) 411 if (result.size() > 0)
393 return base::make_optional(result[0]); 412 return base::make_optional(result[0]);
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 941
923 std::set<int64_t> id_set; 942 std::set<int64_t> id_set;
924 for (size_t i = 0; i < ids.size(); i++) { 943 for (size_t i = 0; i < ids.size(); i++) {
925 id_set.insert(ids[i]); 944 id_set.insert(ids[i]);
926 } 945 }
927 946
928 EXPECT_TRUE(id_set.find(offline1) != id_set.end()); 947 EXPECT_TRUE(id_set.find(offline1) != id_set.end());
929 EXPECT_TRUE(id_set.find(offline2) != id_set.end()); 948 EXPECT_TRUE(id_set.find(offline2) != id_set.end());
930 } 949 }
931 950
951 TEST_F(OfflinePageModelTest, ClearPagesFromOneSource) {
952 base::Time now = base::Time::Now();
953 base::TimeDelta expiration_period = model()
954 ->GetPolicyController()
955 ->GetPolicy(kTestClientNamespace)
956 .lifetime_policy.expiration_period;
957
958 SavePage(kTestUrl, kTestClientId1);
959 GetStore()->UpdateLastAccessTime(
960 last_save_offline_id(),
961 now - base::TimeDelta::FromDays(10) - expiration_period);
962 SavePage(kTestUrl2, kTestClientId2);
963 GetStore()->UpdateLastAccessTime(
964 last_save_offline_id(),
965 now - base::TimeDelta::FromDays(1) - expiration_period);
966 SavePage(kTestUrl3, kTestClientId3);
967 GetStore()->UpdateLastAccessTime(last_save_offline_id(), now);
968
969 ResetModel();
970
971 // Only first two pages are expired.
972 model()->GetStorageManager()->ClearPagesIfNeeded(base::Bind(
973 &OfflinePageModelTest::OnClearPageByStorageManager, AsWeakPtr()));
974
975 PumpLoop();
976
977 std::vector<OfflinePageItem> offline_pages = GetAllPages();
978
979 EXPECT_EQ(1UL, offline_pages.size());
980 EXPECT_EQ(1UL, GetStore()->GetAllPages().size());
981 EXPECT_EQ(2, last_cleared_pages_count());
982 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result());
fgorski 2016/05/06 05:57:24 last_clear_page_result()
romax 2016/05/07 02:22:42 Done.
983 }
984
932 TEST(CommandLineFlagsTest, OfflineBookmarks) { 985 TEST(CommandLineFlagsTest, OfflineBookmarks) {
933 // Disabled by default. 986 // Disabled by default.
934 EXPECT_FALSE(offline_pages::IsOfflineBookmarksEnabled()); 987 EXPECT_FALSE(offline_pages::IsOfflineBookmarksEnabled());
935 988
936 // Check if feature is correctly enabled by command-line flag. 989 // Check if feature is correctly enabled by command-line flag.
937 base::FeatureList::ClearInstanceForTesting(); 990 base::FeatureList::ClearInstanceForTesting();
938 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); 991 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
939 feature_list->InitializeFromCommandLine( 992 feature_list->InitializeFromCommandLine(
940 offline_pages::kOfflineBookmarksFeature.name, ""); 993 offline_pages::kOfflineBookmarksFeature.name, "");
941 base::FeatureList::SetInstance(std::move(feature_list)); 994 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); 1035 std::unique_ptr<base::FeatureList> feature_list2(new base::FeatureList);
983 feature_list2->InitializeFromCommandLine( 1036 feature_list2->InitializeFromCommandLine(
984 std::string(offline_pages::kOfflineBookmarksFeature.name) + "," + 1037 std::string(offline_pages::kOfflineBookmarksFeature.name) + "," +
985 offline_pages::kOfflinePagesBackgroundLoadingFeature.name, 1038 offline_pages::kOfflinePagesBackgroundLoadingFeature.name,
986 ""); 1039 "");
987 base::FeatureList::SetInstance(std::move(feature_list2)); 1040 base::FeatureList::SetInstance(std::move(feature_list2));
988 EXPECT_TRUE(offline_pages::IsOfflinePagesBackgroundLoadingEnabled()); 1041 EXPECT_TRUE(offline_pages::IsOfflinePagesBackgroundLoadingEnabled());
989 } 1042 }
990 1043
991 } // namespace offline_pages 1044 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698