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. |