| Index: components/offline_pages/offline_page_model_unittest.cc
|
| diff --git a/components/offline_pages/offline_page_model_unittest.cc b/components/offline_pages/offline_page_model_unittest.cc
|
| index cf661f974e11a48589a5ec61ef6b3540392e3d0f..3f9070c694c5be1e832cffdad80433522c124858 100644
|
| --- a/components/offline_pages/offline_page_model_unittest.cc
|
| +++ b/components/offline_pages/offline_page_model_unittest.cc
|
| @@ -15,7 +15,9 @@
|
| #include "base/strings/string16.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "base/time/time.h"
|
| +#include "components/bookmarks/browser/bookmark_model.h"
|
| #include "components/bookmarks/browser/bookmark_node.h"
|
| +#include "components/bookmarks/test/test_bookmark_client.h"
|
| #include "components/offline_pages/offline_page_item.h"
|
| #include "components/offline_pages/offline_page_metadata_store.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -215,7 +217,7 @@ class OfflinePageModelTest
|
| scoped_ptr<OfflinePageMetadataStore> BuildStore();
|
| scoped_ptr<OfflinePageModel> BuildModel(
|
| scoped_ptr<OfflinePageMetadataStore> store);
|
| - void ResetModel();
|
| + void ResetModel(bookmarks::BookmarkModel* bookmarks);
|
|
|
| // Utility methods.
|
| void PumpLoop();
|
| @@ -360,13 +362,15 @@ scoped_ptr<OfflinePageModel> OfflinePageModelTest::BuildModel(
|
| new OfflinePageModel(store.Pass(), temp_dir_.path(), task_runner()));
|
| }
|
|
|
| -void OfflinePageModelTest::ResetModel() {
|
| +void OfflinePageModelTest::ResetModel(bookmarks::BookmarkModel* bookmarks) {
|
| model_->RemoveObserver(this);
|
| OfflinePageTestStore* old_store = GetStore();
|
| scoped_ptr<OfflinePageMetadataStore> new_store(
|
| new OfflinePageTestStore(*old_store));
|
| model_ = BuildModel(new_store.Pass()).Pass();
|
| model_->AddObserver(this);
|
| + if (bookmarks)
|
| + model_->Start(bookmarks);
|
| PumpLoop();
|
| }
|
|
|
| @@ -723,49 +727,97 @@ TEST_F(OfflinePageModelTest, DeletePageStoreFailureOnRemove) {
|
| EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result());
|
| }
|
|
|
| +// Test for case, where offline copy is missing and it is detected by a
|
| +// metadata check called directly.
|
| TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissing) {
|
| + bookmarks::TestBookmarkClient test_bookmark_client;
|
| + scoped_ptr<bookmarks::BookmarkModel> bookmarks_model(
|
| + test_bookmark_client.CreateModel());
|
| + model()->Start(bookmarks_model.get());
|
| +
|
| + const bookmarks::BookmarkNode* root = bookmarks_model->bookmark_bar_node();
|
| + const base::string16 title(base::ASCIIToUTF16("foo"));
|
| + const bookmarks::BookmarkNode* new_node =
|
| + bookmarks_model->AddURL(root, 0, title, kTestUrl);
|
| +
|
| // Save a page.
|
| scoped_ptr<OfflinePageTestArchiver> archiver(
|
| BuildArchiver(kTestUrl,
|
| OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)
|
| .Pass());
|
| model()->SavePage(
|
| - kTestUrl, kTestPageBookmarkId1, archiver.Pass(),
|
| + kTestUrl, new_node->id(), archiver.Pass(),
|
| base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
|
| PumpLoop();
|
|
|
| ResetResults();
|
|
|
| - const OfflinePageItem* page =
|
| - model()->GetPageByBookmarkId(kTestPageBookmarkId1);
|
| + const OfflinePageItem* page = model()->GetPageByBookmarkId(new_node->id());
|
| // Delete the offline copy of the page and check the metadata.
|
| base::DeleteFile(page->file_path, false);
|
| - model()->CheckForExternalFileDeletion();
|
| + model()->CheckMetadataConsistency(false);
|
| PumpLoop();
|
|
|
| - EXPECT_EQ(last_deleted_bookmark_id(), kTestPageBookmarkId1);
|
| + EXPECT_EQ(last_deleted_bookmark_id(), new_node->id());
|
| EXPECT_EQ(0UL, model()->GetAllPages().size());
|
| }
|
|
|
| +// Test for case, where offline copy is missing and it is detected by a
|
| +// metadata check initiated as part of offline page model load.
|
| TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissingAfterLoad) {
|
| + bookmarks::TestBookmarkClient test_bookmark_client;
|
| + scoped_ptr<bookmarks::BookmarkModel> bookmarks_model(
|
| + test_bookmark_client.CreateModel());
|
| + model()->Start(bookmarks_model.get());
|
| +
|
| + const bookmarks::BookmarkNode* root = bookmarks_model->bookmark_bar_node();
|
| + const base::string16 title(base::ASCIIToUTF16("foo"));
|
| + const bookmarks::BookmarkNode* new_node =
|
| + bookmarks_model->AddURL(root, 0, title, kTestUrl);
|
| +
|
| // Save a page.
|
| scoped_ptr<OfflinePageTestArchiver> archiver(
|
| BuildArchiver(kTestUrl,
|
| OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)
|
| .Pass());
|
| model()->SavePage(
|
| - kTestUrl, kTestPageBookmarkId1, archiver.Pass(),
|
| + kTestUrl, new_node->id(), archiver.Pass(),
|
| base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
|
| PumpLoop();
|
|
|
| ResetResults();
|
|
|
| - const OfflinePageItem* page =
|
| - model()->GetPageByBookmarkId(kTestPageBookmarkId1);
|
| + const OfflinePageItem* page = model()->GetPageByBookmarkId(new_node->id());
|
| // Delete the offline copy of the page and check the metadata.
|
| base::DeleteFile(page->file_path, false);
|
| + ResetModel(bookmarks_model.get());
|
| // Reseting the model should trigger the metadata consistency check as well.
|
| - ResetModel();
|
| + PumpLoop();
|
| +
|
| + EXPECT_EQ(last_deleted_bookmark_id(), new_node->id());
|
| + EXPECT_EQ(0UL, model()->GetAllPages().size());
|
| +}
|
| +
|
| +// Test for offline page missing a bookmark in the bookmarks model.
|
| +TEST_F(OfflinePageModelTest, DetectThatBookmarkIsMissingAfterLoad) {
|
| + // Save a page.
|
| + scoped_ptr<OfflinePageTestArchiver> archiver(
|
| + BuildArchiver(kTestUrl,
|
| + OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)
|
| + .Pass());
|
| + model()->SavePage(
|
| + kTestUrl, kTestPageBookmarkId1, archiver.Pass(),
|
| + base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
|
| + PumpLoop();
|
| +
|
| + ResetResults();
|
| +
|
| + // There will be a bookmark model to check against, where the bookmark ID
|
| + // cannot be found.
|
| + bookmarks::TestBookmarkClient test_bookmark_client;
|
| + scoped_ptr<bookmarks::BookmarkModel> bookmarks_model(
|
| + test_bookmark_client.CreateModel());
|
| + ResetModel(bookmarks_model.get());
|
| PumpLoop();
|
|
|
| EXPECT_EQ(last_deleted_bookmark_id(), kTestPageBookmarkId1);
|
| @@ -918,7 +970,7 @@ TEST_F(OfflinePageModelTest, GetPagesToCleanUp) {
|
| GetStore()->UpdateLastAccessTime(kTestPageBookmarkId3,
|
| now - base::TimeDelta::FromDays(29));
|
|
|
| - ResetModel();
|
| + ResetModel(nullptr);
|
|
|
| // Only page_1 and page_2 are expected to be picked up by the model as page_3
|
| // has not been in the store long enough.
|
|
|