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

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

Issue 1904613005: [Offline pages] Removing bookmarks dependency from offline pages component (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix unit tests compilation Created 4 years, 8 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
« no previous file with comments | « components/offline_pages/offline_page_model.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/run_loop.h" 16 #include "base/run_loop.h"
17 #include "base/single_thread_task_runner.h" 17 #include "base/single_thread_task_runner.h"
18 #include "base/strings/string_number_conversions.h" 18 #include "base/strings/string_number_conversions.h"
19 #include "base/strings/utf_string_conversions.h" 19 #include "base/strings/utf_string_conversions.h"
20 #include "base/test/test_mock_time_task_runner.h" 20 #include "base/test/test_mock_time_task_runner.h"
21 #include "base/thread_task_runner_handle.h" 21 #include "base/thread_task_runner_handle.h"
22 #include "base/time/time.h" 22 #include "base/time/time.h"
23 #include "components/bookmarks/browser/bookmark_client.h"
24 #include "components/bookmarks/browser/bookmark_model.h"
25 #include "components/bookmarks/browser/bookmark_node.h"
26 #include "components/bookmarks/browser/bookmark_storage.h"
27 #include "components/bookmarks/browser/bookmark_undo_delegate.h"
28 #include "components/bookmarks/browser/bookmark_undo_provider.h"
29 #include "components/bookmarks/test/test_bookmark_client.h"
30 #include "components/offline_pages/offline_page_bookmark_bridge.h"
31 #include "components/offline_pages/offline_page_feature.h" 23 #include "components/offline_pages/offline_page_feature.h"
32 #include "components/offline_pages/offline_page_item.h" 24 #include "components/offline_pages/offline_page_item.h"
33 #include "components/offline_pages/offline_page_switches.h" 25 #include "components/offline_pages/offline_page_switches.h"
34 #include "components/offline_pages/offline_page_test_archiver.h" 26 #include "components/offline_pages/offline_page_test_archiver.h"
35 #include "components/offline_pages/offline_page_test_store.h" 27 #include "components/offline_pages/offline_page_test_store.h"
36 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
37 #include "url/gurl.h" 29 #include "url/gurl.h"
38 30
39 using SavePageResult = offline_pages::OfflinePageModel::SavePageResult; 31 using SavePageResult = offline_pages::OfflinePageModel::SavePageResult;
40 using DeletePageResult = offline_pages::OfflinePageModel::DeletePageResult; 32 using DeletePageResult = offline_pages::OfflinePageModel::DeletePageResult;
41 using GetAllPagesResult = offline_pages::OfflinePageModel::GetAllPagesResult; 33 using GetAllPagesResult = offline_pages::OfflinePageModel::GetAllPagesResult;
42 34
43 namespace offline_pages { 35 namespace offline_pages {
44 36
45 namespace { 37 namespace {
38 const char kTestClientNamespace[] = "CLIENT_NAMESPACE";
46 const GURL kTestUrl("http://example.com"); 39 const GURL kTestUrl("http://example.com");
47 const ClientId kTestPageBookmarkId1(BOOKMARK_NAMESPACE, "1234");
48 const GURL kTestUrl2("http://other.page.com"); 40 const GURL kTestUrl2("http://other.page.com");
49 const GURL kTestUrl3("http://test.xyz"); 41 const GURL kTestUrl3("http://test.xyz");
50 const GURL kFileUrl("file:///foo"); 42 const GURL kFileUrl("file:///foo");
51 const ClientId kTestPageBookmarkId2(BOOKMARK_NAMESPACE, "5678"); 43 const ClientId kTestClientId1(kTestClientNamespace, "1234");
52 const ClientId kTestPageBookmarkId3(BOOKMARK_NAMESPACE, "42"); 44 const ClientId kTestClientId2(kTestClientNamespace, "5678");
45 const ClientId kTestClientId3(kTestClientNamespace, "42");
53 const int64_t kTestFileSize = 876543LL; 46 const int64_t kTestFileSize = 876543LL;
54 47
55 bool URLSpecContains(std::string contains_value, const GURL& url) { 48 bool URLSpecContains(std::string contains_value, const GURL& url) {
56 std::string spec = url.spec(); 49 std::string spec = url.spec();
57 return spec.find(contains_value) != std::string::npos; 50 return spec.find(contains_value) != std::string::npos;
58 } 51 }
59 52
60 } // namespace 53 } // namespace
61 54
62 class OfflinePageModelTest 55 class OfflinePageModelTest
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 293
301 bool OfflinePageModelTest::HasPages(std::string name_space) { 294 bool OfflinePageModelTest::HasPages(std::string name_space) {
302 model()->HasPages( 295 model()->HasPages(
303 name_space, 296 name_space,
304 base::Bind(&OfflinePageModelTest::OnHasPagesDone, AsWeakPtr())); 297 base::Bind(&OfflinePageModelTest::OnHasPagesDone, AsWeakPtr()));
305 PumpLoop(); 298 PumpLoop();
306 return last_has_pages_result_; 299 return last_has_pages_result_;
307 } 300 }
308 301
309 TEST_F(OfflinePageModelTest, SavePageSuccessful) { 302 TEST_F(OfflinePageModelTest, SavePageSuccessful) {
310 EXPECT_FALSE(HasPages(BOOKMARK_NAMESPACE)); 303 EXPECT_FALSE(HasPages(kTestClientNamespace));
311 SavePage(kTestUrl, kTestPageBookmarkId1); 304 SavePage(kTestUrl, kTestClientId1);
312 EXPECT_TRUE(HasPages(BOOKMARK_NAMESPACE)); 305 EXPECT_TRUE(HasPages(kTestClientNamespace));
313 306
314 OfflinePageTestStore* store = GetStore(); 307 OfflinePageTestStore* store = GetStore();
315 EXPECT_EQ(kTestUrl, store->last_saved_page().url); 308 EXPECT_EQ(kTestUrl, store->last_saved_page().url);
316 EXPECT_EQ(kTestPageBookmarkId1.id, store->last_saved_page().client_id.id); 309 EXPECT_EQ(kTestClientId1.id, store->last_saved_page().client_id.id);
317 EXPECT_EQ(kTestPageBookmarkId1.name_space, 310 EXPECT_EQ(kTestClientId1.name_space,
318 store->last_saved_page().client_id.name_space); 311 store->last_saved_page().client_id.name_space);
319 // Save last_archiver_path since it will be referred to later. 312 // Save last_archiver_path since it will be referred to later.
320 base::FilePath archiver_path = last_archiver_path(); 313 base::FilePath archiver_path = last_archiver_path();
321 EXPECT_EQ(archiver_path, store->last_saved_page().file_path); 314 EXPECT_EQ(archiver_path, store->last_saved_page().file_path);
322 EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size); 315 EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size);
323 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); 316 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result());
324 ResetResults(); 317 ResetResults();
325 318
326 const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); 319 const std::vector<OfflinePageItem>& offline_pages = GetAllPages();
327 320
328 EXPECT_EQ(1UL, offline_pages.size()); 321 EXPECT_EQ(1UL, offline_pages.size());
329 EXPECT_EQ(kTestUrl, offline_pages[0].url); 322 EXPECT_EQ(kTestUrl, offline_pages[0].url);
330 EXPECT_EQ(kTestPageBookmarkId1.id, offline_pages[0].client_id.id); 323 EXPECT_EQ(kTestClientId1.id, offline_pages[0].client_id.id);
331 EXPECT_EQ(kTestPageBookmarkId1.name_space, 324 EXPECT_EQ(kTestClientId1.name_space, offline_pages[0].client_id.name_space);
332 offline_pages[0].client_id.name_space);
333 EXPECT_EQ(archiver_path, offline_pages[0].file_path); 325 EXPECT_EQ(archiver_path, offline_pages[0].file_path);
334 EXPECT_EQ(kTestFileSize, offline_pages[0].file_size); 326 EXPECT_EQ(kTestFileSize, offline_pages[0].file_size);
335 EXPECT_EQ(0, offline_pages[0].access_count); 327 EXPECT_EQ(0, offline_pages[0].access_count);
336 EXPECT_EQ(0, offline_pages[0].flags); 328 EXPECT_EQ(0, offline_pages[0].flags);
337 } 329 }
338 330
339 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverCancelled) { 331 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverCancelled) {
340 SavePageWithArchiverResult( 332 SavePageWithArchiverResult(
341 kTestUrl, 333 kTestUrl, kTestClientId1,
342 kTestPageBookmarkId1,
343 OfflinePageArchiver::ArchiverResult::ERROR_CANCELED); 334 OfflinePageArchiver::ArchiverResult::ERROR_CANCELED);
344 EXPECT_EQ(SavePageResult::CANCELLED, last_save_result()); 335 EXPECT_EQ(SavePageResult::CANCELLED, last_save_result());
345 } 336 }
346 337
347 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverDeviceFull) { 338 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverDeviceFull) {
348 SavePageWithArchiverResult( 339 SavePageWithArchiverResult(
349 kTestUrl, 340 kTestUrl, kTestClientId1,
350 kTestPageBookmarkId1,
351 OfflinePageArchiver::ArchiverResult::ERROR_DEVICE_FULL); 341 OfflinePageArchiver::ArchiverResult::ERROR_DEVICE_FULL);
352 EXPECT_EQ(SavePageResult::DEVICE_FULL, last_save_result()); 342 EXPECT_EQ(SavePageResult::DEVICE_FULL, last_save_result());
353 } 343 }
354 344
355 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverContentUnavailable) { 345 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverContentUnavailable) {
356 SavePageWithArchiverResult( 346 SavePageWithArchiverResult(
357 kTestUrl, 347 kTestUrl, kTestClientId1,
358 kTestPageBookmarkId1,
359 OfflinePageArchiver::ArchiverResult::ERROR_CONTENT_UNAVAILABLE); 348 OfflinePageArchiver::ArchiverResult::ERROR_CONTENT_UNAVAILABLE);
360 EXPECT_EQ(SavePageResult::CONTENT_UNAVAILABLE, last_save_result()); 349 EXPECT_EQ(SavePageResult::CONTENT_UNAVAILABLE, last_save_result());
361 } 350 }
362 351
363 TEST_F(OfflinePageModelTest, SavePageOfflineCreationFailed) { 352 TEST_F(OfflinePageModelTest, SavePageOfflineCreationFailed) {
364 SavePageWithArchiverResult( 353 SavePageWithArchiverResult(
365 kTestUrl, 354 kTestUrl, kTestClientId1,
366 kTestPageBookmarkId1,
367 OfflinePageArchiver::ArchiverResult::ERROR_ARCHIVE_CREATION_FAILED); 355 OfflinePageArchiver::ArchiverResult::ERROR_ARCHIVE_CREATION_FAILED);
368 EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result()); 356 EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result());
369 } 357 }
370 358
371 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverReturnedWrongUrl) { 359 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverReturnedWrongUrl) {
372 scoped_ptr<OfflinePageTestArchiver> archiver( 360 scoped_ptr<OfflinePageTestArchiver> archiver(
373 BuildArchiver(GURL("http://other.random.url.com"), 361 BuildArchiver(GURL("http://other.random.url.com"),
374 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); 362 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
375 model()->SavePage( 363 model()->SavePage(
376 kTestUrl, kTestPageBookmarkId1, std::move(archiver), 364 kTestUrl, kTestClientId1, std::move(archiver),
377 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); 365 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
378 PumpLoop(); 366 PumpLoop();
379 EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result()); 367 EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result());
380 } 368 }
381 369
382 TEST_F(OfflinePageModelTest, SavePageOfflineCreationStoreWriteFailure) { 370 TEST_F(OfflinePageModelTest, SavePageOfflineCreationStoreWriteFailure) {
383 GetStore()->set_test_scenario( 371 GetStore()->set_test_scenario(
384 OfflinePageTestStore::TestScenario::WRITE_FAILED); 372 OfflinePageTestStore::TestScenario::WRITE_FAILED);
385 SavePage(kTestUrl, kTestPageBookmarkId1); 373 SavePage(kTestUrl, kTestClientId1);
386 EXPECT_EQ(SavePageResult::STORE_FAILURE, last_save_result()); 374 EXPECT_EQ(SavePageResult::STORE_FAILURE, last_save_result());
387 } 375 }
388 376
389 TEST_F(OfflinePageModelTest, SavePageLocalFileFailed) { 377 TEST_F(OfflinePageModelTest, SavePageLocalFileFailed) {
390 // Don't create archiver since it will not be needed for pages that are not 378 // Don't create archiver since it will not be needed for pages that are not
391 // going to be saved. 379 // going to be saved.
392 model()->SavePage( 380 model()->SavePage(
393 kFileUrl, kTestPageBookmarkId1, scoped_ptr<OfflinePageTestArchiver>(), 381 kFileUrl, kTestClientId1, scoped_ptr<OfflinePageTestArchiver>(),
394 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); 382 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
395 PumpLoop(); 383 PumpLoop();
396 EXPECT_EQ(SavePageResult::SKIPPED, last_save_result()); 384 EXPECT_EQ(SavePageResult::SKIPPED, last_save_result());
397 } 385 }
398 386
399 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverTwoPages) { 387 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverTwoPages) {
400 scoped_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( 388 scoped_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
401 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); 389 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
402 // archiver_ptr will be valid until after first PumpLoop() call after 390 // archiver_ptr will be valid until after first PumpLoop() call after
403 // CompleteCreateArchive() is called. 391 // CompleteCreateArchive() is called.
404 OfflinePageTestArchiver* archiver_ptr = archiver.get(); 392 OfflinePageTestArchiver* archiver_ptr = archiver.get();
405 archiver_ptr->set_delayed(true); 393 archiver_ptr->set_delayed(true);
406 model()->SavePage( 394 model()->SavePage(
407 kTestUrl, kTestPageBookmarkId1, std::move(archiver), 395 kTestUrl, kTestClientId1, std::move(archiver),
408 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); 396 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
409 EXPECT_TRUE(archiver_ptr->create_archive_called()); 397 EXPECT_TRUE(archiver_ptr->create_archive_called());
410 398
411 // Request to save another page. 399 // Request to save another page.
412 SavePage(kTestUrl2, kTestPageBookmarkId2); 400 SavePage(kTestUrl2, kTestClientId2);
413 401
414 OfflinePageTestStore* store = GetStore(); 402 OfflinePageTestStore* store = GetStore();
415 403
416 EXPECT_EQ(kTestUrl2, store->last_saved_page().url); 404 EXPECT_EQ(kTestUrl2, store->last_saved_page().url);
417 EXPECT_EQ(kTestPageBookmarkId2, store->last_saved_page().client_id); 405 EXPECT_EQ(kTestClientId2, store->last_saved_page().client_id);
418 base::FilePath archiver_path2 = last_archiver_path(); 406 base::FilePath archiver_path2 = last_archiver_path();
419 EXPECT_EQ(archiver_path2, store->last_saved_page().file_path); 407 EXPECT_EQ(archiver_path2, store->last_saved_page().file_path);
420 EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size); 408 EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size);
421 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); 409 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result());
422 410
423 ResetResults(); 411 ResetResults();
424 412
425 archiver_ptr->CompleteCreateArchive(); 413 archiver_ptr->CompleteCreateArchive();
426 // After this pump loop archiver_ptr is invalid. 414 // After this pump loop archiver_ptr is invalid.
427 PumpLoop(); 415 PumpLoop();
428 416
429 EXPECT_EQ(kTestUrl, store->last_saved_page().url); 417 EXPECT_EQ(kTestUrl, store->last_saved_page().url);
430 EXPECT_EQ(kTestPageBookmarkId1, store->last_saved_page().client_id); 418 EXPECT_EQ(kTestClientId1, store->last_saved_page().client_id);
431 base::FilePath archiver_path = last_archiver_path(); 419 base::FilePath archiver_path = last_archiver_path();
432 EXPECT_EQ(archiver_path, store->last_saved_page().file_path); 420 EXPECT_EQ(archiver_path, store->last_saved_page().file_path);
433 EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size); 421 EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size);
434 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); 422 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result());
435 423
436 ResetResults(); 424 ResetResults();
437 425
438 const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); 426 const std::vector<OfflinePageItem>& offline_pages = GetAllPages();
439 427
440 EXPECT_EQ(2UL, offline_pages.size()); 428 EXPECT_EQ(2UL, offline_pages.size());
441 // Offline IDs are random, so the order of the pages is also random 429 // Offline IDs are random, so the order of the pages is also random
442 // So load in the right page for the validation below. 430 // So load in the right page for the validation below.
443 const OfflinePageItem* page1; 431 const OfflinePageItem* page1;
444 const OfflinePageItem* page2; 432 const OfflinePageItem* page2;
445 if (offline_pages[0].client_id == kTestPageBookmarkId1) { 433 if (offline_pages[0].client_id == kTestClientId1) {
446 page1 = &offline_pages[0]; 434 page1 = &offline_pages[0];
447 page2 = &offline_pages[1]; 435 page2 = &offline_pages[1];
448 } else { 436 } else {
449 page1 = &offline_pages[1]; 437 page1 = &offline_pages[1];
450 page2 = &offline_pages[0]; 438 page2 = &offline_pages[0];
451 } 439 }
452 440
453 EXPECT_EQ(kTestUrl, page1->url); 441 EXPECT_EQ(kTestUrl, page1->url);
454 EXPECT_EQ(kTestPageBookmarkId1, page1->client_id); 442 EXPECT_EQ(kTestClientId1, page1->client_id);
455 EXPECT_EQ(archiver_path, page1->file_path); 443 EXPECT_EQ(archiver_path, page1->file_path);
456 EXPECT_EQ(kTestFileSize, page1->file_size); 444 EXPECT_EQ(kTestFileSize, page1->file_size);
457 EXPECT_EQ(0, page1->access_count); 445 EXPECT_EQ(0, page1->access_count);
458 EXPECT_EQ(0, page1->flags); 446 EXPECT_EQ(0, page1->flags);
459 EXPECT_EQ(kTestUrl2, page2->url); 447 EXPECT_EQ(kTestUrl2, page2->url);
460 EXPECT_EQ(kTestPageBookmarkId2, page2->client_id); 448 EXPECT_EQ(kTestClientId2, page2->client_id);
461 EXPECT_EQ(archiver_path2, page2->file_path); 449 EXPECT_EQ(archiver_path2, page2->file_path);
462 EXPECT_EQ(kTestFileSize, page2->file_size); 450 EXPECT_EQ(kTestFileSize, page2->file_size);
463 EXPECT_EQ(0, page2->access_count); 451 EXPECT_EQ(0, page2->access_count);
464 EXPECT_EQ(0, page2->flags); 452 EXPECT_EQ(0, page2->flags);
465 } 453 }
466 454
467 TEST_F(OfflinePageModelTest, MarkPageAccessed) { 455 TEST_F(OfflinePageModelTest, MarkPageAccessed) {
468 SavePage(kTestUrl, kTestPageBookmarkId1); 456 SavePage(kTestUrl, kTestClientId1);
469 457
470 // This will increase access_count by one. 458 // This will increase access_count by one.
471 model()->MarkPageAccessed(last_save_offline_id()); 459 model()->MarkPageAccessed(last_save_offline_id());
472 PumpLoop(); 460 PumpLoop();
473 461
474 const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); 462 const std::vector<OfflinePageItem>& offline_pages = GetAllPages();
475 463
476 EXPECT_EQ(1UL, offline_pages.size()); 464 EXPECT_EQ(1UL, offline_pages.size());
477 EXPECT_EQ(kTestUrl, offline_pages[0].url); 465 EXPECT_EQ(kTestUrl, offline_pages[0].url);
478 EXPECT_EQ(kTestPageBookmarkId1, offline_pages[0].client_id); 466 EXPECT_EQ(kTestClientId1, offline_pages[0].client_id);
479 EXPECT_EQ(kTestFileSize, offline_pages[0].file_size); 467 EXPECT_EQ(kTestFileSize, offline_pages[0].file_size);
480 EXPECT_EQ(1, offline_pages[0].access_count); 468 EXPECT_EQ(1, offline_pages[0].access_count);
481 } 469 }
482 470
483 TEST_F(OfflinePageModelTest, MarkPageForDeletion) { 471 TEST_F(OfflinePageModelTest, MarkPageForDeletion) {
484 SavePage(kTestUrl, kTestPageBookmarkId1); 472 SavePage(kTestUrl, kTestClientId1);
485 473
486 GURL offline_url = GetAllPages().begin()->GetOfflineURL(); 474 GURL offline_url = GetAllPages().begin()->GetOfflineURL();
487 475
488 // Delete the page with undo tiggerred. 476 // Delete the page with undo tiggerred.
489 model()->MarkPageForDeletion( 477 model()->MarkPageForDeletion(
490 last_save_offline_id(), 478 last_save_offline_id(),
491 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 479 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
492 PumpLoop(); 480 PumpLoop();
493 481
494 // GetAllPages will not return the page that is marked for deletion. 482 // GetAllPages will not return the page that is marked for deletion.
495 const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); 483 const std::vector<OfflinePageItem>& offline_pages = GetAllPages();
496 EXPECT_EQ(0UL, offline_pages.size()); 484 EXPECT_EQ(0UL, offline_pages.size());
497 485
498 EXPECT_FALSE(HasPages(BOOKMARK_NAMESPACE)); 486 EXPECT_FALSE(HasPages(kTestClientNamespace));
499 EXPECT_EQ(nullptr, model()->GetPageByOnlineURL(kTestUrl)); 487 EXPECT_EQ(nullptr, model()->GetPageByOnlineURL(kTestUrl));
500 EXPECT_EQ(nullptr, model()->GetPageByOfflineId(last_save_offline_id())); 488 EXPECT_EQ(nullptr, model()->GetPageByOfflineId(last_save_offline_id()));
501 EXPECT_EQ(nullptr, model()->GetPageByOfflineURL(offline_url)); 489 EXPECT_EQ(nullptr, model()->GetPageByOfflineURL(offline_url));
502 490
503 // Undo the deletion. 491 // Undo the deletion.
504 model()->UndoPageDeletion(last_save_offline_id()); 492 model()->UndoPageDeletion(last_save_offline_id());
505 PumpLoop(); 493 PumpLoop();
506 494
507 // GetAllPages will now return the restored page. 495 // GetAllPages will now return the restored page.
508 const std::vector<OfflinePageItem>& offline_pages_after_undo = GetAllPages(); 496 const std::vector<OfflinePageItem>& offline_pages_after_undo = GetAllPages();
509 EXPECT_EQ(1UL, offline_pages_after_undo.size()); 497 EXPECT_EQ(1UL, offline_pages_after_undo.size());
510 } 498 }
511 499
512 TEST_F(OfflinePageModelTest, FinalizePageDeletion) { 500 TEST_F(OfflinePageModelTest, FinalizePageDeletion) {
513 scoped_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( 501 scoped_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
514 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); 502 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
515 model()->SavePage( 503 model()->SavePage(
516 kTestUrl, kTestPageBookmarkId1, std::move(archiver), 504 kTestUrl, kTestClientId1, std::move(archiver),
517 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); 505 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
518 PumpLoop(); 506 PumpLoop();
519 507
520 // Mark the page for deletion. 508 // Mark the page for deletion.
521 model()->MarkPageForDeletion( 509 model()->MarkPageForDeletion(
522 last_save_offline_id(), 510 last_save_offline_id(),
523 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 511 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
524 PumpLoop(); 512 PumpLoop();
525 513
526 EXPECT_EQ(1UL, GetStore()->GetAllPages().size()); 514 EXPECT_EQ(1UL, GetStore()->GetAllPages().size());
527 515
528 // Fast forward to trigger the page deletion. 516 // Fast forward to trigger the page deletion.
529 FastForwardBy(OfflinePageModel::GetFinalDeletionDelayForTesting()); 517 FastForwardBy(OfflinePageModel::GetFinalDeletionDelayForTesting());
530 518
531 EXPECT_EQ(0UL, GetStore()->GetAllPages().size()); 519 EXPECT_EQ(0UL, GetStore()->GetAllPages().size());
532 } 520 }
533 521
534 TEST_F(OfflinePageModelTest, SavePageAfterMarkingPageForDeletion) { 522 TEST_F(OfflinePageModelTest, SavePageAfterMarkingPageForDeletion) {
535 scoped_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( 523 scoped_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
536 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); 524 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
537 model()->SavePage( 525 model()->SavePage(
538 kTestUrl, kTestPageBookmarkId1, std::move(archiver), 526 kTestUrl, kTestClientId1, std::move(archiver),
539 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); 527 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
540 PumpLoop(); 528 PumpLoop();
541 529
542 // Mark the page for deletion. 530 // Mark the page for deletion.
543 model()->MarkPageForDeletion( 531 model()->MarkPageForDeletion(
544 last_save_offline_id(), 532 last_save_offline_id(),
545 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 533 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
546 PumpLoop(); 534 PumpLoop();
547 535
548 EXPECT_EQ(1UL, GetStore()->GetAllPages().size()); 536 EXPECT_EQ(1UL, GetStore()->GetAllPages().size());
549 537
550 // Re-save the same page. 538 // Re-save the same page.
551 scoped_ptr<OfflinePageTestArchiver> archiver2(BuildArchiver( 539 scoped_ptr<OfflinePageTestArchiver> archiver2(BuildArchiver(
552 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); 540 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
553 model()->SavePage( 541 model()->SavePage(
554 kTestUrl, kTestPageBookmarkId1, std::move(archiver2), 542 kTestUrl, kTestClientId1, std::move(archiver2),
555 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); 543 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
556 544
557 // Fast forward to trigger the page cleanup. 545 // Fast forward to trigger the page cleanup.
558 FastForwardBy(OfflinePageModel::GetFinalDeletionDelayForTesting()); 546 FastForwardBy(OfflinePageModel::GetFinalDeletionDelayForTesting());
559 547
560 // The re-saved page should still exist. 548 // The re-saved page should still exist.
561 const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); 549 const std::vector<OfflinePageItem>& offline_pages = GetAllPages();
562 ASSERT_EQ(1UL, offline_pages.size()); 550 ASSERT_EQ(1UL, offline_pages.size());
563 EXPECT_EQ(kTestUrl, offline_pages[0].url); 551 EXPECT_EQ(kTestUrl, offline_pages[0].url);
564 EXPECT_EQ(kTestPageBookmarkId1, offline_pages[0].client_id); 552 EXPECT_EQ(kTestClientId1, offline_pages[0].client_id);
565 EXPECT_EQ(kTestFileSize, offline_pages[0].file_size); 553 EXPECT_EQ(kTestFileSize, offline_pages[0].file_size);
566 EXPECT_EQ(0, offline_pages[0].access_count); 554 EXPECT_EQ(0, offline_pages[0].access_count);
567 } 555 }
568 556
569 TEST_F(OfflinePageModelTest, GetAllPagesStoreEmpty) { 557 TEST_F(OfflinePageModelTest, GetAllPagesStoreEmpty) {
570 const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); 558 const std::vector<OfflinePageItem>& offline_pages = GetAllPages();
571 559
572 EXPECT_EQ(0UL, offline_pages.size()); 560 EXPECT_EQ(0UL, offline_pages.size());
573 } 561 }
574 562
575 TEST_F(OfflinePageModelTest, GetAllPagesStoreFailure) { 563 TEST_F(OfflinePageModelTest, GetAllPagesStoreFailure) {
576 GetStore()->set_test_scenario( 564 GetStore()->set_test_scenario(
577 OfflinePageTestStore::TestScenario::LOAD_FAILED); 565 OfflinePageTestStore::TestScenario::LOAD_FAILED);
578 const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); 566 const std::vector<OfflinePageItem>& offline_pages = GetAllPages();
579 567
580 EXPECT_EQ(0UL, offline_pages.size()); 568 EXPECT_EQ(0UL, offline_pages.size());
581 } 569 }
582 570
583 TEST_F(OfflinePageModelTest, DeletePageSuccessful) { 571 TEST_F(OfflinePageModelTest, DeletePageSuccessful) {
584 OfflinePageTestStore* store = GetStore(); 572 OfflinePageTestStore* store = GetStore();
585 573
586 // Save one page. 574 // Save one page.
587 SavePage(kTestUrl, kTestPageBookmarkId1); 575 SavePage(kTestUrl, kTestClientId1);
588 int64_t offline1 = last_save_offline_id(); 576 int64_t offline1 = last_save_offline_id();
589 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); 577 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result());
590 EXPECT_EQ(1u, store->GetAllPages().size()); 578 EXPECT_EQ(1u, store->GetAllPages().size());
591 579
592 ResetResults(); 580 ResetResults();
593 581
594 // Save another page. 582 // Save another page.
595 SavePage(kTestUrl2, kTestPageBookmarkId2); 583 SavePage(kTestUrl2, kTestClientId2);
596 int64_t offline2 = last_save_offline_id(); 584 int64_t offline2 = last_save_offline_id();
597 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); 585 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result());
598 EXPECT_EQ(2u, store->GetAllPages().size()); 586 EXPECT_EQ(2u, store->GetAllPages().size());
599 587
600 ResetResults(); 588 ResetResults();
601 589
602 // Delete one page. 590 // Delete one page.
603 DeletePage(offline1, 591 DeletePage(offline1,
604 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 592 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
605 593
606 PumpLoop(); 594 PumpLoop();
607 595
608 EXPECT_EQ(last_deleted_offline_id(), offline1); 596 EXPECT_EQ(last_deleted_offline_id(), offline1);
609 EXPECT_EQ(last_deleted_client_id(), kTestPageBookmarkId1); 597 EXPECT_EQ(last_deleted_client_id(), kTestClientId1);
610 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); 598 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result());
611 ASSERT_EQ(1u, store->GetAllPages().size()); 599 ASSERT_EQ(1u, store->GetAllPages().size());
612 EXPECT_EQ(kTestUrl2, store->GetAllPages()[0].url); 600 EXPECT_EQ(kTestUrl2, store->GetAllPages()[0].url);
613 601
614 // Delete another page. 602 // Delete another page.
615 DeletePage(offline2, 603 DeletePage(offline2,
616 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 604 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
617 605
618 ResetResults(); 606 ResetResults();
619 607
620 PumpLoop(); 608 PumpLoop();
621 609
622 EXPECT_EQ(last_deleted_offline_id(), offline2); 610 EXPECT_EQ(last_deleted_offline_id(), offline2);
623 EXPECT_EQ(last_deleted_client_id(), kTestPageBookmarkId2); 611 EXPECT_EQ(last_deleted_client_id(), kTestClientId2);
624 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); 612 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result());
625 EXPECT_EQ(0u, store->GetAllPages().size()); 613 EXPECT_EQ(0u, store->GetAllPages().size());
626 } 614 }
627 615
628 TEST_F(OfflinePageModelTest, DeletePageByPredicate) { 616 TEST_F(OfflinePageModelTest, DeletePageByPredicate) {
629 OfflinePageTestStore* store = GetStore(); 617 OfflinePageTestStore* store = GetStore();
630 618
631 // Save one page. 619 // Save one page.
632 SavePage(kTestUrl, kTestPageBookmarkId1); 620 SavePage(kTestUrl, kTestClientId1);
633 int64_t offline1 = last_save_offline_id(); 621 int64_t offline1 = last_save_offline_id();
634 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); 622 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result());
635 EXPECT_EQ(1u, store->GetAllPages().size()); 623 EXPECT_EQ(1u, store->GetAllPages().size());
636 624
637 ResetResults(); 625 ResetResults();
638 626
639 // Save another page. 627 // Save another page.
640 SavePage(kTestUrl2, kTestPageBookmarkId2); 628 SavePage(kTestUrl2, kTestClientId2);
641 int64_t offline2 = last_save_offline_id(); 629 int64_t offline2 = last_save_offline_id();
642 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); 630 EXPECT_EQ(SavePageResult::SUCCESS, last_save_result());
643 EXPECT_EQ(2u, store->GetAllPages().size()); 631 EXPECT_EQ(2u, store->GetAllPages().size());
644 632
645 ResetResults(); 633 ResetResults();
646 634
647 // Delete the second page. 635 // Delete the second page.
648 model()->DeletePagesByURLPredicate( 636 model()->DeletePagesByURLPredicate(
649 base::Bind(&URLSpecContains, "page.com"), 637 base::Bind(&URLSpecContains, "page.com"),
650 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 638 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
651 639
652 PumpLoop(); 640 PumpLoop();
653 641
654 EXPECT_EQ(last_deleted_offline_id(), offline2); 642 EXPECT_EQ(last_deleted_offline_id(), offline2);
655 EXPECT_EQ(last_deleted_client_id(), kTestPageBookmarkId2); 643 EXPECT_EQ(last_deleted_client_id(), kTestClientId2);
656 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); 644 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result());
657 ASSERT_EQ(1u, store->GetAllPages().size()); 645 ASSERT_EQ(1u, store->GetAllPages().size());
658 EXPECT_EQ(kTestUrl, store->GetAllPages()[0].url); 646 EXPECT_EQ(kTestUrl, store->GetAllPages()[0].url);
659 647
660 ResetResults(); 648 ResetResults();
661 649
662 // Delete the first page. 650 // Delete the first page.
663 model()->DeletePagesByURLPredicate( 651 model()->DeletePagesByURLPredicate(
664 base::Bind(&URLSpecContains, "example.com"), 652 base::Bind(&URLSpecContains, "example.com"),
665 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 653 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
666 654
667 PumpLoop(); 655 PumpLoop();
668 656
669 EXPECT_EQ(last_deleted_offline_id(), offline1); 657 EXPECT_EQ(last_deleted_offline_id(), offline1);
670 EXPECT_EQ(last_deleted_client_id(), kTestPageBookmarkId1); 658 EXPECT_EQ(last_deleted_client_id(), kTestClientId1);
671 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); 659 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result());
672 EXPECT_EQ(0u, store->GetAllPages().size()); 660 EXPECT_EQ(0u, store->GetAllPages().size());
673 } 661 }
674 662
675 TEST_F(OfflinePageModelTest, DeletePageNotFound) { 663 TEST_F(OfflinePageModelTest, DeletePageNotFound) {
676 DeletePage(1234LL, 664 DeletePage(1234LL,
677 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 665 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
678 EXPECT_EQ(DeletePageResult::NOT_FOUND, last_delete_result()); 666 EXPECT_EQ(DeletePageResult::NOT_FOUND, last_delete_result());
679 667
680 ResetResults(); 668 ResetResults();
681 669
682 model()->DeletePagesByURLPredicate( 670 model()->DeletePagesByURLPredicate(
683 base::Bind(&URLSpecContains, "page.com"), 671 base::Bind(&URLSpecContains, "page.com"),
684 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 672 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
685 EXPECT_EQ(DeletePageResult::NOT_FOUND, last_delete_result()); 673 EXPECT_EQ(DeletePageResult::NOT_FOUND, last_delete_result());
686 } 674 }
687 675
688 TEST_F(OfflinePageModelTest, DeletePageStoreFailureOnRemove) { 676 TEST_F(OfflinePageModelTest, DeletePageStoreFailureOnRemove) {
689 // Save a page. 677 // Save a page.
690 SavePage(kTestUrl, kTestPageBookmarkId1); 678 SavePage(kTestUrl, kTestClientId1);
691 int64_t offline_id = last_save_offline_id(); 679 int64_t offline_id = last_save_offline_id();
692 ResetResults(); 680 ResetResults();
693 681
694 // Try to delete this page. 682 // Try to delete this page.
695 GetStore()->set_test_scenario( 683 GetStore()->set_test_scenario(
696 OfflinePageTestStore::TestScenario::REMOVE_FAILED); 684 OfflinePageTestStore::TestScenario::REMOVE_FAILED);
697 DeletePage(offline_id, 685 DeletePage(offline_id,
698 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 686 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
699 PumpLoop(); 687 PumpLoop();
700 EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result()); 688 EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result());
701 } 689 }
702 690
703 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissing) { 691 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissing) {
704 // Save a page. 692 // Save a page.
705 SavePage(kTestUrl, kTestPageBookmarkId1); 693 SavePage(kTestUrl, kTestClientId1);
706 int64_t offline_id = last_save_offline_id(); 694 int64_t offline_id = last_save_offline_id();
707 695
708 ResetResults(); 696 ResetResults();
709 697
710 const OfflinePageItem* page = model()->GetPageByOfflineId(offline_id); 698 const OfflinePageItem* page = model()->GetPageByOfflineId(offline_id);
711 699
712 // Delete the offline copy of the page and check the metadata. 700 // Delete the offline copy of the page and check the metadata.
713 base::DeleteFile(page->file_path, false); 701 base::DeleteFile(page->file_path, false);
714 model()->CheckForExternalFileDeletion(); 702 model()->CheckForExternalFileDeletion();
715 PumpLoop(); 703 PumpLoop();
716 704
717 EXPECT_EQ(last_deleted_offline_id(), offline_id); 705 EXPECT_EQ(last_deleted_offline_id(), offline_id);
718 EXPECT_EQ(0UL, GetAllPages().size()); 706 EXPECT_EQ(0UL, GetAllPages().size());
719 } 707 }
720 708
721 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissingAfterLoad) { 709 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissingAfterLoad) {
722 // Save a page. 710 // Save a page.
723 SavePage(kTestUrl, kTestPageBookmarkId1); 711 SavePage(kTestUrl, kTestClientId1);
724 PumpLoop(); 712 PumpLoop();
725 int64_t offline_id = last_save_offline_id(); 713 int64_t offline_id = last_save_offline_id();
726 714
727 ResetResults(); 715 ResetResults();
728 716
729 const OfflinePageItem* page = model()->GetPageByOfflineId(offline_id); 717 const OfflinePageItem* page = model()->GetPageByOfflineId(offline_id);
730 // Delete the offline copy of the page and check the metadata. 718 // Delete the offline copy of the page and check the metadata.
731 base::DeleteFile(page->file_path, false); 719 base::DeleteFile(page->file_path, false);
732 // Reseting the model should trigger the metadata consistency check as well. 720 // Reseting the model should trigger the metadata consistency check as well.
733 ResetModel(); 721 ResetModel();
734 PumpLoop(); 722 PumpLoop();
735 723
736 EXPECT_EQ(last_deleted_offline_id(), offline_id); 724 EXPECT_EQ(last_deleted_offline_id(), offline_id);
737 EXPECT_EQ(0UL, GetAllPages().size()); 725 EXPECT_EQ(0UL, GetAllPages().size());
738 } 726 }
739 727
740 TEST_F(OfflinePageModelTest, DeleteMultiplePages) { 728 TEST_F(OfflinePageModelTest, DeleteMultiplePages) {
741 OfflinePageTestStore* store = GetStore(); 729 OfflinePageTestStore* store = GetStore();
742 730
743 // Save 3 pages. 731 // Save 3 pages.
744 scoped_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( 732 scoped_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
745 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); 733 kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
746 model()->SavePage( 734 model()->SavePage(
747 kTestUrl, kTestPageBookmarkId1, std::move(archiver), 735 kTestUrl, kTestClientId1, std::move(archiver),
748 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); 736 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
749 PumpLoop(); 737 PumpLoop();
750 int64_t offline1 = last_save_offline_id(); 738 int64_t offline1 = last_save_offline_id();
751 739
752 scoped_ptr<OfflinePageTestArchiver> archiver2(BuildArchiver( 740 scoped_ptr<OfflinePageTestArchiver> archiver2(BuildArchiver(
753 kTestUrl2, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); 741 kTestUrl2, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
754 model()->SavePage( 742 model()->SavePage(
755 kTestUrl2, kTestPageBookmarkId2, std::move(archiver2), 743 kTestUrl2, kTestClientId2, std::move(archiver2),
756 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); 744 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
757 PumpLoop(); 745 PumpLoop();
758 int64_t offline2 = last_save_offline_id(); 746 int64_t offline2 = last_save_offline_id();
759 747
760 scoped_ptr<OfflinePageTestArchiver> archiver3(BuildArchiver( 748 scoped_ptr<OfflinePageTestArchiver> archiver3(BuildArchiver(
761 kTestUrl3, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); 749 kTestUrl3, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED));
762 model()->SavePage( 750 model()->SavePage(
763 kTestUrl3, kTestPageBookmarkId3, std::move(archiver3), 751 kTestUrl3, kTestClientId3, std::move(archiver3),
764 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); 752 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
765 PumpLoop(); 753 PumpLoop();
766 754
767 EXPECT_EQ(3u, store->GetAllPages().size()); 755 EXPECT_EQ(3u, store->GetAllPages().size());
768 756
769 // Delete multiple pages. 757 // Delete multiple pages.
770 std::vector<int64_t> ids_to_delete; 758 std::vector<int64_t> ids_to_delete;
771 ids_to_delete.push_back(offline2); 759 ids_to_delete.push_back(offline2);
772 ids_to_delete.push_back(offline1); 760 ids_to_delete.push_back(offline1);
773 ids_to_delete.push_back(23434LL); // Non-existent ID. 761 ids_to_delete.push_back(23434LL); // Non-existent ID.
774 model()->DeletePagesByOfflineId( 762 model()->DeletePagesByOfflineId(
775 ids_to_delete, 763 ids_to_delete,
776 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); 764 base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr()));
777 PumpLoop(); 765 PumpLoop();
778 766
779 // Success is expected if at least one page is deleted successfully. 767 // Success is expected if at least one page is deleted successfully.
780 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); 768 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result());
781 EXPECT_EQ(1u, store->GetAllPages().size()); 769 EXPECT_EQ(1u, store->GetAllPages().size());
782 } 770 }
783 771
784 TEST_F(OfflinePageModelTest, GetPageByOfflineId) { 772 TEST_F(OfflinePageModelTest, GetPageByOfflineId) {
785 SavePage(kTestUrl, kTestPageBookmarkId1); 773 SavePage(kTestUrl, kTestClientId1);
786 int64_t offline1 = last_save_offline_id(); 774 int64_t offline1 = last_save_offline_id();
787 SavePage(kTestUrl2, kTestPageBookmarkId2); 775 SavePage(kTestUrl2, kTestClientId2);
788 int64_t offline2 = last_save_offline_id(); 776 int64_t offline2 = last_save_offline_id();
789 777
790 const OfflinePageItem* page = model()->GetPageByOfflineId(offline1); 778 const OfflinePageItem* page = model()->GetPageByOfflineId(offline1);
791 ASSERT_TRUE(page); 779 ASSERT_TRUE(page);
792 EXPECT_EQ(kTestUrl, page->url); 780 EXPECT_EQ(kTestUrl, page->url);
793 EXPECT_EQ(kTestPageBookmarkId1, page->client_id); 781 EXPECT_EQ(kTestClientId1, page->client_id);
794 EXPECT_EQ(kTestFileSize, page->file_size); 782 EXPECT_EQ(kTestFileSize, page->file_size);
795 783
796 page = model()->GetPageByOfflineId(offline2); 784 page = model()->GetPageByOfflineId(offline2);
797 ASSERT_TRUE(page); 785 ASSERT_TRUE(page);
798 EXPECT_EQ(kTestUrl2, page->url); 786 EXPECT_EQ(kTestUrl2, page->url);
799 EXPECT_EQ(kTestPageBookmarkId2, page->client_id); 787 EXPECT_EQ(kTestClientId2, page->client_id);
800 EXPECT_EQ(kTestFileSize, page->file_size); 788 EXPECT_EQ(kTestFileSize, page->file_size);
801 789
802 page = model()->GetPageByOfflineId(-42); 790 page = model()->GetPageByOfflineId(-42);
803 EXPECT_FALSE(page); 791 EXPECT_FALSE(page);
804 } 792 }
805 793
806 TEST_F(OfflinePageModelTest, GetPageByOfflineURL) { 794 TEST_F(OfflinePageModelTest, GetPageByOfflineURL) {
807 SavePage(kTestUrl, kTestPageBookmarkId1); 795 SavePage(kTestUrl, kTestClientId1);
808 int64_t offline1 = last_save_offline_id(); 796 int64_t offline1 = last_save_offline_id();
809 797
810 OfflinePageTestStore* store = GetStore(); 798 OfflinePageTestStore* store = GetStore();
811 GURL offline_url = store->last_saved_page().GetOfflineURL(); 799 GURL offline_url = store->last_saved_page().GetOfflineURL();
812 800
813 SavePage(kTestUrl2, kTestPageBookmarkId2); 801 SavePage(kTestUrl2, kTestClientId2);
814 802
815 GURL offline_url2 = store->last_saved_page().GetOfflineURL(); 803 GURL offline_url2 = store->last_saved_page().GetOfflineURL();
816 int64_t offline2 = last_save_offline_id(); 804 int64_t offline2 = last_save_offline_id();
817 805
818 const OfflinePageItem* page = model()->GetPageByOfflineURL(offline_url2); 806 const OfflinePageItem* page = model()->GetPageByOfflineURL(offline_url2);
819 EXPECT_TRUE(page); 807 EXPECT_TRUE(page);
820 EXPECT_EQ(kTestUrl2, page->url); 808 EXPECT_EQ(kTestUrl2, page->url);
821 EXPECT_EQ(kTestPageBookmarkId2, page->client_id); 809 EXPECT_EQ(kTestClientId2, page->client_id);
822 EXPECT_EQ(offline2, page->offline_id); 810 EXPECT_EQ(offline2, page->offline_id);
823 811
824 page = model()->GetPageByOfflineURL(offline_url); 812 page = model()->GetPageByOfflineURL(offline_url);
825 EXPECT_TRUE(page); 813 EXPECT_TRUE(page);
826 EXPECT_EQ(kTestUrl, page->url); 814 EXPECT_EQ(kTestUrl, page->url);
827 EXPECT_EQ(kTestPageBookmarkId1, page->client_id); 815 EXPECT_EQ(kTestClientId1, page->client_id);
828 EXPECT_EQ(offline1, page->offline_id); 816 EXPECT_EQ(offline1, page->offline_id);
829 817
830 page = model()->GetPageByOfflineURL(GURL("http://foo")); 818 page = model()->GetPageByOfflineURL(GURL("http://foo"));
831 EXPECT_FALSE(page); 819 EXPECT_FALSE(page);
832 } 820 }
833 821
834 TEST_F(OfflinePageModelTest, GetPageByOnlineURL) { 822 TEST_F(OfflinePageModelTest, GetPageByOnlineURL) {
835 SavePage(kTestUrl, kTestPageBookmarkId1); 823 SavePage(kTestUrl, kTestClientId1);
836 SavePage(kTestUrl2, kTestPageBookmarkId2); 824 SavePage(kTestUrl2, kTestClientId2);
837 825
838 const OfflinePageItem* page = model()->GetPageByOnlineURL(kTestUrl2); 826 const OfflinePageItem* page = model()->GetPageByOnlineURL(kTestUrl2);
839 EXPECT_TRUE(page); 827 EXPECT_TRUE(page);
840 EXPECT_EQ(kTestUrl2, page->url); 828 EXPECT_EQ(kTestUrl2, page->url);
841 EXPECT_EQ(kTestPageBookmarkId2, page->client_id); 829 EXPECT_EQ(kTestClientId2, page->client_id);
842 830
843 page = model()->GetPageByOnlineURL(kTestUrl); 831 page = model()->GetPageByOnlineURL(kTestUrl);
844 EXPECT_TRUE(page); 832 EXPECT_TRUE(page);
845 EXPECT_EQ(kTestUrl, page->url); 833 EXPECT_EQ(kTestUrl, page->url);
846 EXPECT_EQ(kTestPageBookmarkId1, page->client_id); 834 EXPECT_EQ(kTestClientId1, page->client_id);
847 835
848 page = model()->GetPageByOnlineURL(GURL("http://foo")); 836 page = model()->GetPageByOnlineURL(GURL("http://foo"));
849 EXPECT_FALSE(page); 837 EXPECT_FALSE(page);
850 } 838 }
851 839
852 // Test that model returns pages that are older than 30 days as candidates for 840 // Test that model returns pages that are older than 30 days as candidates for
853 // clean up, hence the numbers in time delta. 841 // clean up, hence the numbers in time delta.
854 TEST_F(OfflinePageModelTest, GetPagesToCleanUp) { 842 TEST_F(OfflinePageModelTest, GetPagesToCleanUp) {
855 base::Time now = base::Time::Now(); 843 base::Time now = base::Time::Now();
856 844
857 SavePage(kTestUrl, kTestPageBookmarkId1); 845 SavePage(kTestUrl, kTestClientId1);
858 GetStore()->UpdateLastAccessTime(last_save_offline_id(), 846 GetStore()->UpdateLastAccessTime(last_save_offline_id(),
859 now - base::TimeDelta::FromDays(40)); 847 now - base::TimeDelta::FromDays(40));
860 848
861 SavePage(kTestUrl2, kTestPageBookmarkId2); 849 SavePage(kTestUrl2, kTestClientId2);
862 GetStore()->UpdateLastAccessTime(last_save_offline_id(), 850 GetStore()->UpdateLastAccessTime(last_save_offline_id(),
863 now - base::TimeDelta::FromDays(31)); 851 now - base::TimeDelta::FromDays(31));
864 852
865 SavePage(kTestUrl3, kTestPageBookmarkId3); 853 SavePage(kTestUrl3, kTestClientId3);
866 GetStore()->UpdateLastAccessTime(last_save_offline_id(), 854 GetStore()->UpdateLastAccessTime(last_save_offline_id(),
867 now - base::TimeDelta::FromDays(29)); 855 now - base::TimeDelta::FromDays(29));
868 856
869 ResetModel(); 857 ResetModel();
870 858
871 // Only page_1 and page_2 are expected to be picked up by the model as page_3 859 // Only page_1 and page_2 are expected to be picked up by the model as page_3
872 // has not been in the store long enough. 860 // has not been in the store long enough.
873 std::vector<OfflinePageItem> pages_to_clean_up = model()->GetPagesToCleanUp(); 861 std::vector<OfflinePageItem> pages_to_clean_up = model()->GetPagesToCleanUp();
874 // Offline IDs are random, so the order of the pages is also random 862 // Offline IDs are random, so the order of the pages is also random
875 // So load in the right page for the validation below. 863 // So load in the right page for the validation below.
876 const OfflinePageItem* page1; 864 const OfflinePageItem* page1;
877 const OfflinePageItem* page2; 865 const OfflinePageItem* page2;
878 if (pages_to_clean_up[0].client_id == kTestPageBookmarkId1) { 866 if (pages_to_clean_up[0].client_id == kTestClientId1) {
879 page1 = &pages_to_clean_up[0]; 867 page1 = &pages_to_clean_up[0];
880 page2 = &pages_to_clean_up[1]; 868 page2 = &pages_to_clean_up[1];
881 } else { 869 } else {
882 page1 = &pages_to_clean_up[1]; 870 page1 = &pages_to_clean_up[1];
883 page2 = &pages_to_clean_up[0]; 871 page2 = &pages_to_clean_up[0];
884 } 872 }
885 873
886 EXPECT_EQ(2UL, pages_to_clean_up.size()); 874 EXPECT_EQ(2UL, pages_to_clean_up.size());
887 EXPECT_EQ(kTestUrl, page1->url); 875 EXPECT_EQ(kTestUrl, page1->url);
888 EXPECT_EQ(kTestPageBookmarkId1, page1->client_id); 876 EXPECT_EQ(kTestClientId1, page1->client_id);
889 EXPECT_EQ(kTestUrl2, page2->url); 877 EXPECT_EQ(kTestUrl2, page2->url);
890 EXPECT_EQ(kTestPageBookmarkId2, page2->client_id); 878 EXPECT_EQ(kTestClientId2, page2->client_id);
891 } 879 }
892 880
893 TEST_F(OfflinePageModelTest, CanSavePage) { 881 TEST_F(OfflinePageModelTest, CanSavePage) {
894 EXPECT_TRUE(OfflinePageModel::CanSavePage(GURL("http://foo"))); 882 EXPECT_TRUE(OfflinePageModel::CanSavePage(GURL("http://foo")));
895 EXPECT_TRUE(OfflinePageModel::CanSavePage(GURL("https://foo"))); 883 EXPECT_TRUE(OfflinePageModel::CanSavePage(GURL("https://foo")));
896 EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("file:///foo"))); 884 EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("file:///foo")));
897 EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("data:image/png;base64,ab"))); 885 EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("data:image/png;base64,ab")));
898 EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("chrome://version"))); 886 EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("chrome://version")));
899 EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("chrome-native://newtab/"))); 887 EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("chrome-native://newtab/")));
900 } 888 }
901 889
902 TEST_F(OfflinePageModelTest, ClearAll) { 890 TEST_F(OfflinePageModelTest, ClearAll) {
903 SavePage(kTestUrl, kTestPageBookmarkId1); 891 SavePage(kTestUrl, kTestClientId1);
904 SavePage(kTestUrl2, kTestPageBookmarkId2); 892 SavePage(kTestUrl2, kTestClientId2);
905 893
906 const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); 894 const std::vector<OfflinePageItem>& offline_pages = GetAllPages();
907 EXPECT_EQ(2UL, offline_pages.size()); 895 EXPECT_EQ(2UL, offline_pages.size());
908 EXPECT_EQ(2UL, GetStore()->GetAllPages().size()); 896 EXPECT_EQ(2UL, GetStore()->GetAllPages().size());
909 base::FilePath archiver_path = offline_pages[0].file_path; 897 base::FilePath archiver_path = offline_pages[0].file_path;
910 EXPECT_TRUE(base::PathExists(archiver_path)); 898 EXPECT_TRUE(base::PathExists(archiver_path));
911 899
912 // ClearAll should delete all the files and wipe out both cache and store. 900 // ClearAll should delete all the files and wipe out both cache and store.
913 model()->ClearAll( 901 model()->ClearAll(
914 base::Bind(&OfflinePageModelTest::OnClearAllDone, AsWeakPtr())); 902 base::Bind(&OfflinePageModelTest::OnClearAllDone, AsWeakPtr()));
915 PumpLoop(); 903 PumpLoop();
916 EXPECT_EQ(0UL, GetAllPages().size()); 904 EXPECT_EQ(0UL, GetAllPages().size());
917 EXPECT_EQ(0UL, GetStore()->GetAllPages().size()); 905 EXPECT_EQ(0UL, GetStore()->GetAllPages().size());
918 EXPECT_FALSE(base::PathExists(archiver_path)); 906 EXPECT_FALSE(base::PathExists(archiver_path));
919 907
920 // The model should reload the store after the reset. All model operations 908 // The model should reload the store after the reset. All model operations
921 // should continue to work. 909 // should continue to work.
922 SavePage(kTestUrl2, kTestPageBookmarkId2); 910 SavePage(kTestUrl2, kTestClientId2);
923 EXPECT_EQ(1UL, GetAllPages().size()); 911 EXPECT_EQ(1UL, GetAllPages().size());
924 EXPECT_EQ(1UL, GetStore()->GetAllPages().size()); 912 EXPECT_EQ(1UL, GetStore()->GetAllPages().size());
925 } 913 }
926 914
927 class OfflinePageModelBookmarkChangeTest : 915 TEST_F(OfflinePageModelTest, SaveRetrieveMultipleClientIds) {
928 public OfflinePageModelTest, 916 EXPECT_FALSE(HasPages(kTestClientNamespace));
929 public bookmarks::BookmarkUndoDelegate { 917 SavePage(kTestUrl, kTestClientId1);
930 public: 918 int64_t offline1 = last_save_offline_id();
931 OfflinePageModelBookmarkChangeTest(); 919 EXPECT_TRUE(HasPages(kTestClientNamespace));
932 ~OfflinePageModelBookmarkChangeTest() override;
933 920
934 void SetUp() override; 921 SavePage(kTestUrl, kTestClientId1);
935 void TearDown() override;
936
937 // bookmarks::BookmarkUndoDelegate implementation.
938 void SetUndoProvider(bookmarks::BookmarkUndoProvider* provider) override;
939 void OnBookmarkNodeRemoved(bookmarks::BookmarkModel* model,
940 const bookmarks::BookmarkNode* parent,
941 int index,
942 scoped_ptr<bookmarks::BookmarkNode> node) override;
943
944 const bookmarks::BookmarkNode* CreateBookmarkNode(const GURL& url);
945 void UndoBookmarkRemoval();
946
947 bookmarks::BookmarkModel* bookmark_model() const {
948 return bookmark_model_.get();
949 }
950
951 private:
952 scoped_ptr<bookmarks::BookmarkModel> bookmark_model_;
953 bookmarks::BookmarkUndoProvider* bookmark_undo_provider_;
954 const bookmarks::BookmarkNode* removed_bookmark_parent_;
955 int removed_bookmark_index_;
956 scoped_ptr<bookmarks::BookmarkNode> removed_bookmark_node_;
957 };
958
959 OfflinePageModelBookmarkChangeTest::OfflinePageModelBookmarkChangeTest()
960 : OfflinePageModelTest(),
961 bookmark_model_(bookmarks::TestBookmarkClient::CreateModel()),
962 bookmark_undo_provider_(nullptr),
963 removed_bookmark_parent_(nullptr),
964 removed_bookmark_index_(-1) {}
965
966 OfflinePageModelBookmarkChangeTest::~OfflinePageModelBookmarkChangeTest() {
967 }
968
969 void OfflinePageModelBookmarkChangeTest::SetUp() {
970 OfflinePageModelTest::SetUp();
971 bookmark_model_->AddObserver(
972 new OfflinePageBookmarkBridge(model(), bookmark_model()));
973 }
974
975 void OfflinePageModelBookmarkChangeTest::TearDown() {
976 OfflinePageModelTest::TearDown();
977 bookmark_model_.reset();
978 }
979
980 void OfflinePageModelBookmarkChangeTest::SetUndoProvider(
981 bookmarks::BookmarkUndoProvider* provider) {
982 bookmark_undo_provider_ = provider;
983 }
984
985 void OfflinePageModelBookmarkChangeTest::OnBookmarkNodeRemoved(
986 bookmarks::BookmarkModel* model,
987 const bookmarks::BookmarkNode* parent,
988 int index,
989 scoped_ptr<bookmarks::BookmarkNode> node) {
990 removed_bookmark_parent_ = parent;
991 removed_bookmark_index_ = index;
992 removed_bookmark_node_ = std::move(node);
993 }
994
995 const bookmarks::BookmarkNode*
996 OfflinePageModelBookmarkChangeTest::CreateBookmarkNode(const GURL& url) {
997 const bookmarks::BookmarkNode* bookmark_root =
998 bookmark_model()->bookmark_bar_node();
999 return bookmark_model()->AddURL(bookmark_root, 0, base::string16(), url);
1000 }
1001
1002 void OfflinePageModelBookmarkChangeTest::UndoBookmarkRemoval() {
1003 bookmark_undo_provider_->RestoreRemovedNode(
1004 removed_bookmark_parent_, removed_bookmark_index_,
1005 std::move(removed_bookmark_node_));
1006 removed_bookmark_parent_ = nullptr;
1007 removed_bookmark_index_ = -1;
1008 }
1009
1010 TEST_F(OfflinePageModelBookmarkChangeTest, ChangeBookmakeTitle) {
1011 // Creates a bookmark without offline copy.
1012 const bookmarks::BookmarkNode* bookmark_node = CreateBookmarkNode(kTestUrl);
1013 EXPECT_EQ(0UL, GetAllPages().size());
1014
1015 // Changing the bookmark title should have no effect.
1016 bookmark_model()->SetTitle(
1017 bookmark_node, base::string16(base::ASCIIToUTF16("foo")));
1018 PumpLoop();
1019 EXPECT_EQ(0UL, GetAllPages().size());
1020
1021 // Adds an offline copy for the bookmark.
1022 SavePage(kTestUrl, ClientId(BOOKMARK_NAMESPACE,
1023 base::Int64ToString(bookmark_node->id())));
1024 EXPECT_EQ(1UL, GetAllPages().size());
1025
1026 // Changes the bookmark title. The offline copy was not affected.
1027 bookmark_model()->SetTitle(
1028 bookmark_node, base::string16(base::ASCIIToUTF16("bar")));
1029 PumpLoop();
1030 EXPECT_EQ(1UL, GetAllPages().size());
1031 }
1032
1033 TEST_F(OfflinePageModelBookmarkChangeTest, ChangeBookmakeURL) {
1034 // Creates a bookmark without offline copy.
1035 const bookmarks::BookmarkNode* bookmark_node = CreateBookmarkNode(kTestUrl2);
1036 EXPECT_EQ(0UL, GetAllPages().size());
1037
1038 // Changing the bookmark URL should have no effect. Chrome should not crash.
1039 // (http://crbug.com/560518)
1040 bookmark_model()->SetURL(bookmark_node, kTestUrl);
1041 PumpLoop();
1042 EXPECT_EQ(0UL, GetAllPages().size());
1043
1044 // Adds an offline copy for the bookmark.
1045 SavePage(kTestUrl, ClientId(BOOKMARK_NAMESPACE,
1046 base::Int64ToString(bookmark_node->id())));
1047 EXPECT_EQ(1UL, GetAllPages().size());
1048
1049 // The offline copy should be removed upon the bookmark URL change.
1050 // (http://crbug.com/558929)
1051 bookmark_model()->SetURL(bookmark_node, kTestUrl2);
1052 PumpLoop();
1053 EXPECT_EQ(0UL, GetAllPages().size());
1054 }
1055
1056 TEST_F(OfflinePageModelBookmarkChangeTest, RemoveBookmark) {
1057 // Creates a bookmark without offline copy.
1058 const bookmarks::BookmarkNode* bookmark_node = CreateBookmarkNode(kTestUrl2);
1059 EXPECT_EQ(0UL, GetAllPages().size());
1060
1061 // Removing the bookmark should have no effect.
1062 bookmark_model()->Remove(bookmark_node);
1063 PumpLoop();
1064 EXPECT_EQ(0UL, GetAllPages().size());
1065
1066 // Creates a bookmark with offline copy.
1067 bookmark_node = CreateBookmarkNode(kTestUrl);
1068 ClientId client_id =
1069 ClientId(BOOKMARK_NAMESPACE, base::Int64ToString(bookmark_node->id()));
1070 SavePage(kTestUrl, client_id);
1071 EXPECT_EQ(1UL, GetAllPages().size());
1072
1073 // The offline copy should also be removed upon the bookmark removal.
1074 bookmark_model()->Remove(bookmark_node);
1075 PumpLoop();
1076 EXPECT_EQ(client_id, last_deleted_client_id());
1077 EXPECT_EQ(0UL, GetAllPages().size());
1078 }
1079
1080 TEST_F(OfflinePageModelBookmarkChangeTest, UndoBookmarkRemoval) {
1081 // Enables undo support.
1082 bookmark_model()->SetUndoDelegate(this);
1083
1084 // Creates a bookmark without offline copy.
1085 const bookmarks::BookmarkNode* bookmark_node = CreateBookmarkNode(kTestUrl2);
1086 EXPECT_EQ(0UL, GetAllPages().size());
1087
1088 // Removing the bookmark and undoing the removal should have no effect.
1089 bookmark_model()->Remove(bookmark_node);
1090 PumpLoop();
1091 UndoBookmarkRemoval();
1092 PumpLoop();
1093 EXPECT_EQ(0UL, GetAllPages().size());
1094
1095 // Creates a bookmark with offline copy.
1096 bookmark_node = CreateBookmarkNode(kTestUrl);
1097 SavePage(kTestUrl, ClientId(BOOKMARK_NAMESPACE,
1098 base::Int64ToString(bookmark_node->id())));
1099 EXPECT_EQ(1UL, GetAllPages().size());
1100
1101 // The offline copy should also be removed upon the bookmark removal.
1102 bookmark_model()->Remove(bookmark_node);
1103 PumpLoop();
1104 EXPECT_EQ(0UL, GetAllPages().size());
1105
1106 // The offline copy should be restored upon the bookmark restore.
1107 UndoBookmarkRemoval();
1108 PumpLoop();
1109 EXPECT_EQ(1UL, GetAllPages().size());
1110 }
1111
1112 TEST_F(OfflinePageModelTest, SaveRetrieveMultipleClientIds) {
1113 EXPECT_FALSE(HasPages(BOOKMARK_NAMESPACE));
1114 SavePage(kTestUrl, kTestPageBookmarkId1);
1115 int64_t offline1 = last_save_offline_id();
1116 EXPECT_TRUE(HasPages(BOOKMARK_NAMESPACE));
1117
1118 SavePage(kTestUrl, kTestPageBookmarkId1);
1119 int64_t offline2 = last_save_offline_id(); 922 int64_t offline2 = last_save_offline_id();
1120 923
1121 EXPECT_NE(offline1, offline2); 924 EXPECT_NE(offline1, offline2);
1122 925
1123 const std::vector<int64_t> ids = 926 const std::vector<int64_t> ids =
1124 model()->GetOfflineIdsForClientId(kTestPageBookmarkId1); 927 model()->GetOfflineIdsForClientId(kTestClientId1);
1125 928
1126 EXPECT_EQ(2UL, ids.size()); 929 EXPECT_EQ(2UL, ids.size());
1127 930
1128 std::set<int64_t> id_set; 931 std::set<int64_t> id_set;
1129 for (size_t i = 0; i < ids.size(); i++) { 932 for (size_t i = 0; i < ids.size(); i++) {
1130 id_set.insert(ids[i]); 933 id_set.insert(ids[i]);
1131 } 934 }
1132 935
1133 EXPECT_TRUE(id_set.find(offline1) != id_set.end()); 936 EXPECT_TRUE(id_set.find(offline1) != id_set.end());
1134 EXPECT_TRUE(id_set.find(offline2) != id_set.end()); 937 EXPECT_TRUE(id_set.find(offline2) != id_set.end());
(...skipping 25 matching lines...) Expand all
1160 // Check if feature is correctly enabled by command-line flag. 963 // Check if feature is correctly enabled by command-line flag.
1161 base::FeatureList::ClearInstanceForTesting(); 964 base::FeatureList::ClearInstanceForTesting();
1162 scoped_ptr<base::FeatureList> feature_list(new base::FeatureList); 965 scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
1163 feature_list->InitializeFromCommandLine( 966 feature_list->InitializeFromCommandLine(
1164 offline_pages::kOfflinePagesBackgroundLoadingFeature.name, ""); 967 offline_pages::kOfflinePagesBackgroundLoadingFeature.name, "");
1165 base::FeatureList::SetInstance(std::move(feature_list)); 968 base::FeatureList::SetInstance(std::move(feature_list));
1166 EXPECT_TRUE(offline_pages::IsOfflinePagesBackgroundLoadingEnabled()); 969 EXPECT_TRUE(offline_pages::IsOfflinePagesBackgroundLoadingEnabled());
1167 } 970 }
1168 971
1169 } // namespace offline_pages 972 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/offline_page_model.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698