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

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

Powered by Google App Engine
This is Rietveld 408576698