OLD | NEW |
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_impl.h" | 5 #include "components/offline_pages/offline_page_model_impl.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 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 // queue. | 112 // queue. |
113 void PumpLoop(); | 113 void PumpLoop(); |
114 // Fast-forwards virtual time by |delta|, causing tasks with a remaining | 114 // Fast-forwards virtual time by |delta|, causing tasks with a remaining |
115 // delay less than or equal to |delta| to be executed. | 115 // delay less than or equal to |delta| to be executed. |
116 void FastForwardBy(base::TimeDelta delta); | 116 void FastForwardBy(base::TimeDelta delta); |
117 void ResetResults(); | 117 void ResetResults(); |
118 | 118 |
119 OfflinePageTestStore* GetStore(); | 119 OfflinePageTestStore* GetStore(); |
120 | 120 |
121 MultipleOfflinePageItemResult GetAllPages(); | 121 MultipleOfflinePageItemResult GetAllPages(); |
| 122 MultipleOfflinePageItemResult GetPagesByClientIds( |
| 123 const std::vector<ClientId>& client_ids); |
| 124 void DeletePagesByClientIds(const std::vector<ClientId>& client_ids); |
122 | 125 |
123 // Returns the offline ID of the saved page. | 126 // Returns the offline ID of the saved page. |
124 std::pair<SavePageResult, int64_t> SavePage(const GURL& url, | 127 std::pair<SavePageResult, int64_t> SavePage(const GURL& url, |
125 ClientId client_id); | 128 ClientId client_id); |
126 | 129 |
127 void SavePageWithArchiverResult(const GURL& url, | 130 void SavePageWithArchiverResult(const GURL& url, |
128 ClientId client_id, | 131 ClientId client_id, |
129 OfflinePageArchiver::ArchiverResult result); | 132 OfflinePageArchiver::ArchiverResult result); |
130 | 133 |
131 void DeletePage(int64_t offline_id, const DeletePageCallback& callback) { | 134 void DeletePage(int64_t offline_id, const DeletePageCallback& callback) { |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 | 326 |
324 MultipleOfflinePageItemResult OfflinePageModelImplTest::GetAllPages() { | 327 MultipleOfflinePageItemResult OfflinePageModelImplTest::GetAllPages() { |
325 MultipleOfflinePageItemResult result; | 328 MultipleOfflinePageItemResult result; |
326 model()->GetAllPages( | 329 model()->GetAllPages( |
327 base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult, | 330 base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult, |
328 AsWeakPtr(), base::Unretained(&result))); | 331 AsWeakPtr(), base::Unretained(&result))); |
329 PumpLoop(); | 332 PumpLoop(); |
330 return result; | 333 return result; |
331 } | 334 } |
332 | 335 |
| 336 MultipleOfflinePageItemResult OfflinePageModelImplTest::GetPagesByClientIds( |
| 337 const std::vector<ClientId>& client_ids) { |
| 338 MultipleOfflinePageItemResult result; |
| 339 model()->GetPagesByClientIds( |
| 340 client_ids, |
| 341 base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult, |
| 342 AsWeakPtr(), base::Unretained(&result))); |
| 343 PumpLoop(); |
| 344 return result; |
| 345 } |
| 346 |
| 347 void OfflinePageModelImplTest::DeletePagesByClientIds( |
| 348 const std::vector<ClientId>& client_ids) { |
| 349 model()->DeletePagesByClientIds( |
| 350 client_ids, |
| 351 base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); |
| 352 PumpLoop(); |
| 353 } |
| 354 |
333 CheckPagesExistOfflineResult OfflinePageModelImplTest::CheckPagesExistOffline( | 355 CheckPagesExistOfflineResult OfflinePageModelImplTest::CheckPagesExistOffline( |
334 std::set<GURL> pages) { | 356 std::set<GURL> pages) { |
335 model()->CheckPagesExistOffline( | 357 model()->CheckPagesExistOffline( |
336 pages, base::Bind(&OfflinePageModelImplTest::OnCheckPagesExistOfflineDone, | 358 pages, base::Bind(&OfflinePageModelImplTest::OnCheckPagesExistOfflineDone, |
337 AsWeakPtr())); | 359 AsWeakPtr())); |
338 PumpLoop(); | 360 PumpLoop(); |
339 return last_pages_exist_result_; | 361 return last_pages_exist_result_; |
340 } | 362 } |
341 | 363 |
342 MultipleOfflineIdResult OfflinePageModelImplTest::GetOfflineIdsForClientId( | 364 MultipleOfflineIdResult OfflinePageModelImplTest::GetOfflineIdsForClientId( |
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1029 PumpLoop(); | 1051 PumpLoop(); |
1030 // No change when we delete the last page. | 1052 // No change when we delete the last page. |
1031 histograms().ExpectTotalCount( | 1053 histograms().ExpectTotalCount( |
1032 "OfflinePages.DownloadDeletedPageDuplicateCount", 2); | 1054 "OfflinePages.DownloadDeletedPageDuplicateCount", 2); |
1033 histograms().ExpectBucketCount( | 1055 histograms().ExpectBucketCount( |
1034 "OfflinePages.DownloadDeletedPageDuplicateCount", 1, 1); | 1056 "OfflinePages.DownloadDeletedPageDuplicateCount", 1, 1); |
1035 histograms().ExpectBucketCount( | 1057 histograms().ExpectBucketCount( |
1036 "OfflinePages.DownloadDeletedPageDuplicateCount", 2, 1); | 1058 "OfflinePages.DownloadDeletedPageDuplicateCount", 2, 1); |
1037 } | 1059 } |
1038 | 1060 |
1039 TEST_F(OfflinePageModelImplTest, GetBestPage) { | |
1040 // We will save 3 pages - two for the same URL, and one for a different URL. | |
1041 // Correct behavior will pick the most recently saved page for the correct | |
1042 // URL. | |
1043 std::pair<SavePageResult, int64_t> saved_pages[3]; | |
1044 saved_pages[0] = SavePage(kTestUrl, kTestClientId1); | |
1045 saved_pages[1] = SavePage(kTestUrl, kTestClientId1); | |
1046 saved_pages[2] = SavePage(kTestUrl2, kTestClientId2); | |
1047 | |
1048 for (const auto& save_result : saved_pages) { | |
1049 ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, | |
1050 std::get<0>(save_result)); | |
1051 } | |
1052 | |
1053 const OfflinePageItem* offline_page = | |
1054 model()->MaybeGetBestPageForOnlineURL(kTestUrl); | |
1055 ASSERT_TRUE(nullptr != offline_page); | |
1056 | |
1057 EXPECT_EQ(std::get<1>(saved_pages[1]), offline_page->offline_id); | |
1058 } | |
1059 | |
1060 TEST_F(OfflinePageModelImplTest, ExpirePages) { | 1061 TEST_F(OfflinePageModelImplTest, ExpirePages) { |
1061 // We will save 3 pages and then expire 2 of them. | 1062 // We will save 3 pages and then expire 2 of them. |
1062 std::pair<SavePageResult, int64_t> saved_pages[3]; | 1063 std::pair<SavePageResult, int64_t> saved_pages[3]; |
1063 saved_pages[0] = SavePage(kTestUrl, kTestClientId1); | 1064 saved_pages[0] = SavePage(kTestUrl, kTestClientId1); |
1064 saved_pages[1] = SavePage(kTestUrl2, kTestClientId2); | 1065 saved_pages[1] = SavePage(kTestUrl2, kTestClientId2); |
1065 saved_pages[2] = SavePage(kTestUrl3, kTestClientId3); | 1066 saved_pages[2] = SavePage(kTestUrl3, kTestClientId3); |
1066 | 1067 |
1067 for (const auto& save_result : saved_pages) { | 1068 for (const auto& save_result : saved_pages) { |
1068 ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, | 1069 ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, |
1069 std::get<0>(save_result)); | 1070 std::get<0>(save_result)); |
(...skipping 18 matching lines...) Expand all Loading... |
1088 EXPECT_EQ(expiration_time, offline_page.expiration_time); | 1089 EXPECT_EQ(expiration_time, offline_page.expiration_time); |
1089 EXPECT_TRUE(offline_page.IsExpired()); | 1090 EXPECT_TRUE(offline_page.IsExpired()); |
1090 } else { | 1091 } else { |
1091 EXPECT_EQ(base::Time(), offline_page.expiration_time); | 1092 EXPECT_EQ(base::Time(), offline_page.expiration_time); |
1092 EXPECT_FALSE(offline_page.IsExpired()); | 1093 EXPECT_FALSE(offline_page.IsExpired()); |
1093 } | 1094 } |
1094 } | 1095 } |
1095 EXPECT_TRUE(last_expire_page_result()); | 1096 EXPECT_TRUE(last_expire_page_result()); |
1096 } | 1097 } |
1097 | 1098 |
| 1099 TEST_F(OfflinePageModelImplTest, GetPagesByClientIds) { |
| 1100 // We will save 3 pages. One will be expired. |
| 1101 std::pair<SavePageResult, int64_t> saved_pages[3]; |
| 1102 saved_pages[0] = SavePage(kTestUrl, kTestClientId1); |
| 1103 saved_pages[1] = SavePage(kTestUrl2, kTestClientId2); |
| 1104 saved_pages[2] = SavePage(kTestUrl3, kTestClientId3); |
| 1105 |
| 1106 for (const auto& save_result : saved_pages) { |
| 1107 ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, |
| 1108 std::get<0>(save_result)); |
| 1109 } |
| 1110 |
| 1111 std::vector<int64_t> pages_to_expire = {std::get<1>(saved_pages[0])}; |
| 1112 // Pages are marked as expired if they have an expiration_time set. |
| 1113 base::Time expiration_time = |
| 1114 base::Time::Now() + base::TimeDelta::FromMinutes(5); |
| 1115 model()->ExpirePages( |
| 1116 pages_to_expire, expiration_time, |
| 1117 base::Bind(&OfflinePageModelImplTest::OnPagesExpired, AsWeakPtr())); |
| 1118 PumpLoop(); |
| 1119 |
| 1120 std::vector<ClientId> client_ids = {kTestClientId1, kTestClientId2}; |
| 1121 std::vector<OfflinePageItem> offline_pages = GetPagesByClientIds(client_ids); |
| 1122 EXPECT_EQ(1U, offline_pages.size()); |
| 1123 |
| 1124 const OfflinePageItem& item = offline_pages[0]; |
| 1125 EXPECT_EQ(kTestClientId2.name_space, item.client_id.name_space); |
| 1126 EXPECT_EQ(kTestClientId2.id, item.client_id.id); |
| 1127 EXPECT_EQ(kTestUrl2, item.url); |
| 1128 } |
| 1129 |
| 1130 TEST_F(OfflinePageModelImplTest, DeletePagesByClientIds) { |
| 1131 // We will save 3 pages. |
| 1132 std::pair<SavePageResult, int64_t> saved_pages[3]; |
| 1133 saved_pages[0] = SavePage(kTestUrl, kTestClientId1); |
| 1134 saved_pages[1] = SavePage(kTestUrl2, kTestClientId2); |
| 1135 saved_pages[2] = SavePage(kTestUrl3, kTestClientId3); |
| 1136 |
| 1137 for (const auto& save_result : saved_pages) { |
| 1138 ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, |
| 1139 std::get<0>(save_result)); |
| 1140 } |
| 1141 |
| 1142 std::vector<ClientId> client_ids = {kTestClientId1, kTestClientId2}; |
| 1143 DeletePagesByClientIds(client_ids); |
| 1144 std::vector<OfflinePageItem> offline_pages = GetAllPages(); |
| 1145 ASSERT_EQ(1U, offline_pages.size()); |
| 1146 |
| 1147 const OfflinePageItem& item = offline_pages[0]; |
| 1148 EXPECT_EQ(kTestClientId3.name_space, item.client_id.name_space); |
| 1149 EXPECT_EQ(kTestClientId3.id, item.client_id.id); |
| 1150 EXPECT_EQ(kTestUrl3, item.url); |
| 1151 } |
| 1152 |
1098 TEST_F(OfflinePageModelImplTest, CustomTabsNamespace) { | 1153 TEST_F(OfflinePageModelImplTest, CustomTabsNamespace) { |
1099 SavePage(kTestUrl, ClientId(kCCTNamespace, "123")); | 1154 SavePage(kTestUrl, ClientId(kCCTNamespace, "123")); |
1100 std::string histogram_name = "OfflinePages.SavePageResult."; | 1155 std::string histogram_name = "OfflinePages.SavePageResult."; |
1101 histogram_name += kCCTNamespace; | 1156 histogram_name += kCCTNamespace; |
1102 | 1157 |
1103 histograms().ExpectUniqueSample(histogram_name, | 1158 histograms().ExpectUniqueSample(histogram_name, |
1104 static_cast<int>(SavePageResult::SUCCESS), 1); | 1159 static_cast<int>(SavePageResult::SUCCESS), 1); |
1105 } | 1160 } |
1106 | 1161 |
1107 TEST_F(OfflinePageModelImplTest, DownloadNamespace) { | 1162 TEST_F(OfflinePageModelImplTest, DownloadNamespace) { |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1183 // Check if feature is correctly enabled by command-line flag. | 1238 // Check if feature is correctly enabled by command-line flag. |
1184 scoped_feature_list.reset(new base::test::ScopedFeatureList); | 1239 scoped_feature_list.reset(new base::test::ScopedFeatureList); |
1185 scoped_feature_list->InitFromCommandLine( | 1240 scoped_feature_list->InitFromCommandLine( |
1186 std::string(kOfflineBookmarksFeature.name) + "," + | 1241 std::string(kOfflineBookmarksFeature.name) + "," + |
1187 kOfflinePagesSharingFeature.name, | 1242 kOfflinePagesSharingFeature.name, |
1188 ""); | 1243 ""); |
1189 EXPECT_TRUE(offline_pages::IsOfflinePagesSharingEnabled()); | 1244 EXPECT_TRUE(offline_pages::IsOfflinePagesSharingEnabled()); |
1190 } | 1245 } |
1191 | 1246 |
1192 } // namespace offline_pages | 1247 } // namespace offline_pages |
OLD | NEW |