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

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

Issue 2484223005: Store original request URL in offline page metadata table (Closed)
Patch Set: Add and update tests Created 4 years, 1 month 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_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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 void FastForwardBy(base::TimeDelta delta); 118 void FastForwardBy(base::TimeDelta delta);
119 void ResetResults(); 119 void ResetResults();
120 120
121 OfflinePageTestStore* GetStore(); 121 OfflinePageTestStore* GetStore();
122 122
123 MultipleOfflinePageItemResult GetAllPages(); 123 MultipleOfflinePageItemResult GetAllPages();
124 MultipleOfflinePageItemResult GetPagesByClientIds( 124 MultipleOfflinePageItemResult GetPagesByClientIds(
125 const std::vector<ClientId>& client_ids); 125 const std::vector<ClientId>& client_ids);
126 void DeletePagesByClientIds(const std::vector<ClientId>& client_ids); 126 void DeletePagesByClientIds(const std::vector<ClientId>& client_ids);
127 127
128 // Saves the page without waiting for it to finish.
129 void AsyncSavePageWithArchiver(
fgorski 2016/11/10 23:56:13 nit: I like to put Async/Sync at the end. (Sorts b
jianli 2016/11/16 01:25:40 Done.
130 const GURL& url,
131 const ClientId& client_id,
132 const GURL& original_url,
133 std::unique_ptr<OfflinePageArchiver> archiver);
134
135 // All 3 methods below will wait for the save to finish.
136 void SavePageWithArchiver(
137 const GURL& url,
138 const ClientId& client_id,
139 std::unique_ptr<OfflinePageArchiver> archiver);
140 void SavePageWithArchiverResult(const GURL& url,
141 const ClientId& client_id,
142 OfflinePageArchiver::ArchiverResult result);
128 // Returns the offline ID of the saved page. 143 // Returns the offline ID of the saved page.
129 std::pair<SavePageResult, int64_t> SavePage(const GURL& url, 144 std::pair<SavePageResult, int64_t> SavePage(const GURL& url,
130 ClientId client_id); 145 const ClientId& client_id);
131
132 void SavePageWithArchiverResult(const GURL& url,
133 ClientId client_id,
134 OfflinePageArchiver::ArchiverResult result);
135 146
136 void DeletePage(int64_t offline_id, const DeletePageCallback& callback) { 147 void DeletePage(int64_t offline_id, const DeletePageCallback& callback) {
137 std::vector<int64_t> offline_ids; 148 std::vector<int64_t> offline_ids;
138 offline_ids.push_back(offline_id); 149 offline_ids.push_back(offline_id);
139 model()->DeletePagesByOfflineId(offline_ids, callback); 150 model()->DeletePagesByOfflineId(offline_ids, callback);
140 } 151 }
141 152
142 bool HasPages(std::string name_space); 153 bool HasPages(std::string name_space);
143 154
144 CheckPagesExistOfflineResult CheckPagesExistOffline(std::set<GURL>); 155 CheckPagesExistOfflineResult CheckPagesExistOffline(std::set<GURL>);
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 last_delete_result_ = DeletePageResult::CANCELLED; 310 last_delete_result_ = DeletePageResult::CANCELLED;
300 last_archiver_path_.clear(); 311 last_archiver_path_.clear();
301 last_pages_exist_result_.clear(); 312 last_pages_exist_result_.clear();
302 last_cleared_pages_count_ = 0; 313 last_cleared_pages_count_ = 0;
303 } 314 }
304 315
305 OfflinePageTestStore* OfflinePageModelImplTest::GetStore() { 316 OfflinePageTestStore* OfflinePageModelImplTest::GetStore() {
306 return static_cast<OfflinePageTestStore*>(model()->GetStoreForTesting()); 317 return static_cast<OfflinePageTestStore*>(model()->GetStoreForTesting());
307 } 318 }
308 319
309 std::pair<SavePageResult, int64_t> OfflinePageModelImplTest::SavePage( 320 void OfflinePageModelImplTest::AsyncSavePageWithArchiver(
310 const GURL& url, 321 const GURL& url,
311 ClientId client_id) { 322 const ClientId& client_id,
323 const GURL& original_url,
324 std::unique_ptr<OfflinePageArchiver> archiver) {
325 OfflinePageModel::SavePageInfo save_page_info;
326 save_page_info.url = url;
327 save_page_info.client_id = client_id;
328 save_page_info.original_url = original_url;
329 model()->SavePage(
330 save_page_info,
331 std::move(archiver),
332 base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr()));
333 }
334
335 void OfflinePageModelImplTest::SavePageWithArchiver(
336 const GURL& url,
337 const ClientId& client_id,
338 std::unique_ptr<OfflinePageArchiver> archiver) {
339 AsyncSavePageWithArchiver(url, client_id, GURL(), std::move(archiver));
340 PumpLoop();
341 }
342
343 void OfflinePageModelImplTest::SavePageWithArchiverResult(
344 const GURL& url,
345 const ClientId& client_id,
346 OfflinePageArchiver::ArchiverResult result) {
347 std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(url, result));
348 SavePageWithArchiver(url, client_id, std::move(archiver));
fgorski 2016/11/10 23:56:13 please don't chain methods like that. It is better
jianli 2016/11/16 01:25:40 Done.
349 }
350
351 std::pair<SavePageResult, int64_t>
352 OfflinePageModelImplTest::SavePage(const GURL& url, const ClientId& client_id) {
312 SavePageWithArchiverResult( 353 SavePageWithArchiverResult(
fgorski 2016/11/10 23:56:14 Same here. Please update.
jianli 2016/11/16 01:25:40 Done.
313 url, client_id, 354 url,
355 client_id,
314 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED); 356 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED);
315 return std::make_pair(last_save_result_, last_save_offline_id_); 357 return std::make_pair(last_save_result_, last_save_offline_id_);
316 } 358 }
317 359
318 void OfflinePageModelImplTest::SavePageWithArchiverResult(
319 const GURL& url,
320 ClientId client_id,
321 OfflinePageArchiver::ArchiverResult result) {
322 std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(url, result));
323 model()->SavePage(
324 url, client_id, 0l, std::move(archiver),
325 base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr()));
326 PumpLoop();
327 }
328
329 MultipleOfflinePageItemResult OfflinePageModelImplTest::GetAllPages() { 360 MultipleOfflinePageItemResult OfflinePageModelImplTest::GetAllPages() {
330 MultipleOfflinePageItemResult result; 361 MultipleOfflinePageItemResult result;
331 model()->GetAllPages( 362 model()->GetAllPages(
332 base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult, 363 base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult,
333 AsWeakPtr(), base::Unretained(&result))); 364 AsWeakPtr(), base::Unretained(&result)));
334 PumpLoop(); 365 PumpLoop();
335 return result; 366 return result;
336 } 367 }
337 368
338 MultipleOfflinePageItemResult OfflinePageModelImplTest::GetPagesByClientIds( 369 MultipleOfflinePageItemResult OfflinePageModelImplTest::GetPagesByClientIds(
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 for (const auto& page : all_pages) { 459 for (const auto& page : all_pages) {
429 if (page.client_id.name_space == name_space) 460 if (page.client_id.name_space == name_space)
430 return true; 461 return true;
431 } 462 }
432 463
433 return false; 464 return false;
434 } 465 }
435 466
436 TEST_F(OfflinePageModelImplTest, SavePageSuccessful) { 467 TEST_F(OfflinePageModelImplTest, SavePageSuccessful) {
437 EXPECT_FALSE(HasPages(kTestClientNamespace)); 468 EXPECT_FALSE(HasPages(kTestClientNamespace));
438 SavePage(kTestUrl, kTestClientId1); 469
470 std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
471 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
472 AsyncSavePageWithArchiver(
473 kTestUrl, kTestClientId1, kTestUrl2, std::move(archiver));
474 PumpLoop();
439 EXPECT_TRUE(HasPages(kTestClientNamespace)); 475 EXPECT_TRUE(HasPages(kTestClientNamespace));
440 476
441 OfflinePageTestStore* store = GetStore(); 477 OfflinePageTestStore* store = GetStore();
442 EXPECT_EQ(kTestUrl, store->last_saved_page().url); 478 EXPECT_EQ(kTestUrl, store->last_saved_page().url);
443 EXPECT_EQ(kTestClientId1.id, store->last_saved_page().client_id.id); 479 EXPECT_EQ(kTestClientId1.id, store->last_saved_page().client_id.id);
444 EXPECT_EQ(kTestClientId1.name_space, 480 EXPECT_EQ(kTestClientId1.name_space,
445 store->last_saved_page().client_id.name_space); 481 store->last_saved_page().client_id.name_space);
446 // Save last_archiver_path since it will be referred to later. 482 // Save last_archiver_path since it will be referred to later.
447 base::FilePath archiver_path = last_archiver_path(); 483 base::FilePath archiver_path = last_archiver_path();
448 EXPECT_EQ(archiver_path, store->last_saved_page().file_path); 484 EXPECT_EQ(archiver_path, store->last_saved_page().file_path);
449 EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size); 485 EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size);
450 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); 486 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result());
451 ResetResults(); 487 ResetResults();
452 488
453 const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); 489 const std::vector<OfflinePageItem>& offline_pages = GetAllPages();
454 490
455 EXPECT_EQ(1UL, offline_pages.size()); 491 ASSERT_EQ(1UL, offline_pages.size());
fgorski 2016/11/10 23:56:13 Good!
jianli 2016/11/16 01:25:40 Acknowledged.
456 EXPECT_EQ(kTestUrl, offline_pages[0].url); 492 EXPECT_EQ(kTestUrl, offline_pages[0].url);
457 EXPECT_EQ(kTestClientId1.id, offline_pages[0].client_id.id); 493 EXPECT_EQ(kTestClientId1.id, offline_pages[0].client_id.id);
458 EXPECT_EQ(kTestClientId1.name_space, offline_pages[0].client_id.name_space); 494 EXPECT_EQ(kTestClientId1.name_space, offline_pages[0].client_id.name_space);
459 EXPECT_EQ(archiver_path, offline_pages[0].file_path); 495 EXPECT_EQ(archiver_path, offline_pages[0].file_path);
460 EXPECT_EQ(kTestFileSize, offline_pages[0].file_size); 496 EXPECT_EQ(kTestFileSize, offline_pages[0].file_size);
461 EXPECT_EQ(0, offline_pages[0].access_count); 497 EXPECT_EQ(0, offline_pages[0].access_count);
462 EXPECT_EQ(0, offline_pages[0].flags); 498 EXPECT_EQ(0, offline_pages[0].flags);
463 EXPECT_EQ(kTestTitle, offline_pages[0].title); 499 EXPECT_EQ(kTestTitle, offline_pages[0].title);
500 EXPECT_EQ(kTestUrl2, offline_pages[0].original_url);
464 } 501 }
465 502
466 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverCancelled) { 503 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverCancelled) {
467 SavePageWithArchiverResult( 504 SavePageWithArchiverResult(
468 kTestUrl, kTestClientId1, 505 kTestUrl, kTestClientId1,
469 OfflinePageArchiver::ArchiverResult::ERROR_CANCELED); 506 OfflinePageArchiver::ArchiverResult::ERROR_CANCELED);
470 EXPECT_EQ(SavePageResult::CANCELLED, last_save_result()); 507 EXPECT_EQ(SavePageResult::CANCELLED, last_save_result());
471 } 508 }
472 509
473 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverDeviceFull) { 510 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverDeviceFull) {
(...skipping 14 matching lines...) Expand all
488 SavePageWithArchiverResult( 525 SavePageWithArchiverResult(
489 kTestUrl, kTestClientId1, 526 kTestUrl, kTestClientId1,
490 OfflinePageArchiver::ArchiverResult::ERROR_ARCHIVE_CREATION_FAILED); 527 OfflinePageArchiver::ArchiverResult::ERROR_ARCHIVE_CREATION_FAILED);
491 EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result()); 528 EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result());
492 } 529 }
493 530
494 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverReturnedWrongUrl) { 531 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverReturnedWrongUrl) {
495 std::unique_ptr<OfflinePageTestArchiver> archiver( 532 std::unique_ptr<OfflinePageTestArchiver> archiver(
496 BuildArchiver(GURL("http://other.random.url.com"), 533 BuildArchiver(GURL("http://other.random.url.com"),
497 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); 534 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
498 model()->SavePage( 535 SavePageWithArchiver(kTestUrl, kTestClientId1, std::move(archiver));
499 kTestUrl, kTestClientId1, 0l, std::move(archiver),
500 base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr()));
501 PumpLoop();
502 EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result()); 536 EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result());
503 } 537 }
504 538
505 TEST_F(OfflinePageModelImplTest, SavePageOfflineCreationStoreWriteFailure) { 539 TEST_F(OfflinePageModelImplTest, SavePageOfflineCreationStoreWriteFailure) {
506 GetStore()->set_test_scenario( 540 GetStore()->set_test_scenario(
507 OfflinePageTestStore::TestScenario::WRITE_FAILED); 541 OfflinePageTestStore::TestScenario::WRITE_FAILED);
508 SavePage(kTestUrl, kTestClientId1); 542 SavePageWithArchiverResult(
543 kTestUrl, kTestClientId1,
544 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED);
509 EXPECT_EQ(SavePageResult::STORE_FAILURE, last_save_result()); 545 EXPECT_EQ(SavePageResult::STORE_FAILURE, last_save_result());
510 } 546 }
511 547
512 TEST_F(OfflinePageModelImplTest, SavePageLocalFileFailed) { 548 TEST_F(OfflinePageModelImplTest, SavePageLocalFileFailed) {
513 // Don't create archiver since it will not be needed for pages that are not 549 // Don't create archiver since it will not be needed for pages that are not
514 // going to be saved. 550 // going to be saved.
515 model()->SavePage( 551 SavePageWithArchiver(
516 kFileUrl, kTestClientId1, 0l, std::unique_ptr<OfflinePageTestArchiver>(), 552 kFileUrl, kTestClientId1, std::unique_ptr<OfflinePageTestArchiver>());
517 base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr()));
518 PumpLoop();
519 EXPECT_EQ(SavePageResult::SKIPPED, last_save_result()); 553 EXPECT_EQ(SavePageResult::SKIPPED, last_save_result());
520 } 554 }
521 555
522 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverTwoPages) { 556 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverTwoPages) {
523 std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( 557 std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
524 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); 558 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
525 // archiver_ptr will be valid until after first PumpLoop() call after 559 // archiver_ptr will be valid until after first PumpLoop() call after
526 // CompleteCreateArchive() is called. 560 // CompleteCreateArchive() is called.
527 OfflinePageTestArchiver* archiver_ptr = archiver.get(); 561 OfflinePageTestArchiver* archiver_ptr = archiver.get();
528 archiver_ptr->set_delayed(true); 562 archiver_ptr->set_delayed(true);
529 model()->SavePage( 563 AsyncSavePageWithArchiver(
530 kTestUrl, kTestClientId1, 0l, std::move(archiver), 564 kTestUrl, kTestClientId1, GURL(), std::move(archiver));
531 base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr()));
532 EXPECT_TRUE(archiver_ptr->create_archive_called()); 565 EXPECT_TRUE(archiver_ptr->create_archive_called());
533 566
534 // Request to save another page. 567 // Request to save another page.
535 SavePage(kTestUrl2, kTestClientId2); 568 SavePage(kTestUrl2, kTestClientId2);
536 569
537 OfflinePageTestStore* store = GetStore(); 570 OfflinePageTestStore* store = GetStore();
538 571
539 EXPECT_EQ(kTestUrl2, store->last_saved_page().url); 572 EXPECT_EQ(kTestUrl2, store->last_saved_page().url);
540 EXPECT_EQ(kTestClientId2, store->last_saved_page().client_id); 573 EXPECT_EQ(kTestClientId2, store->last_saved_page().client_id);
541 base::FilePath archiver_path2 = last_archiver_path(); 574 base::FilePath archiver_path2 = last_archiver_path();
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 PumpLoop(); 868 PumpLoop();
836 869
837 EXPECT_EQ(0UL, GetAllPages().size()); 870 EXPECT_EQ(0UL, GetAllPages().size());
838 EXPECT_FALSE(base::PathExists(path)); 871 EXPECT_FALSE(base::PathExists(path));
839 } 872 }
840 873
841 TEST_F(OfflinePageModelImplTest, DeleteMultiplePages) { 874 TEST_F(OfflinePageModelImplTest, DeleteMultiplePages) {
842 OfflinePageTestStore* store = GetStore(); 875 OfflinePageTestStore* store = GetStore();
843 876
844 // Save 3 pages. 877 // Save 3 pages.
845 std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( 878 SavePage(kTestUrl, kTestClientId1);
846 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
847 model()->SavePage(
848 kTestUrl, kTestClientId1, 0l, std::move(archiver),
849 base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr()));
850 PumpLoop();
851 int64_t offline1 = last_save_offline_id(); 879 int64_t offline1 = last_save_offline_id();
852 880
853 std::unique_ptr<OfflinePageTestArchiver> archiver2(BuildArchiver( 881 SavePage(kTestUrl2, kTestClientId2);
854 kTestUrl2, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
855 model()->SavePage(
856 kTestUrl2, kTestClientId2, 0l, std::move(archiver2),
857 base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr()));
858 PumpLoop();
859 int64_t offline2 = last_save_offline_id(); 882 int64_t offline2 = last_save_offline_id();
860 883
861 std::unique_ptr<OfflinePageTestArchiver> archiver3(BuildArchiver( 884 SavePage(kTestUrl3, kTestClientId3);
862 kTestUrl3, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
863 model()->SavePage(
864 kTestUrl3, kTestClientId3, 0l, std::move(archiver3),
865 base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr()));
866 PumpLoop(); 885 PumpLoop();
867 886
868 EXPECT_EQ(3u, store->GetAllPages().size()); 887 EXPECT_EQ(3u, store->GetAllPages().size());
869 888
870 // Delete multiple pages. 889 // Delete multiple pages.
871 std::vector<int64_t> ids_to_delete; 890 std::vector<int64_t> ids_to_delete;
872 ids_to_delete.push_back(offline2); 891 ids_to_delete.push_back(offline2);
873 ids_to_delete.push_back(offline1); 892 ids_to_delete.push_back(offline1);
874 ids_to_delete.push_back(23434LL); // Non-existent ID. 893 ids_to_delete.push_back(23434LL); // Non-existent ID.
875 model()->DeletePagesByOfflineId( 894 model()->DeletePagesByOfflineId(
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 // Check if feature is correctly enabled by command-line flag. 1245 // Check if feature is correctly enabled by command-line flag.
1227 scoped_feature_list.reset(new base::test::ScopedFeatureList); 1246 scoped_feature_list.reset(new base::test::ScopedFeatureList);
1228 scoped_feature_list->InitFromCommandLine( 1247 scoped_feature_list->InitFromCommandLine(
1229 std::string(kOfflineBookmarksFeature.name) + "," + 1248 std::string(kOfflineBookmarksFeature.name) + "," +
1230 kOfflinePagesSharingFeature.name, 1249 kOfflinePagesSharingFeature.name,
1231 ""); 1250 "");
1232 EXPECT_TRUE(offline_pages::IsOfflinePagesSharingEnabled()); 1251 EXPECT_TRUE(offline_pages::IsOfflinePagesSharingEnabled());
1233 } 1252 }
1234 1253
1235 } // namespace offline_pages 1254 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698