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 aab0a4a200b3d96b856e80d50c7282475e981c5d..e9a5ac92bcd3e05f07138c3a11426226507fd2b4 100644 |
--- a/components/offline_pages/offline_page_model_unittest.cc |
+++ b/components/offline_pages/offline_page_model_unittest.cc |
@@ -55,6 +55,7 @@ class OfflinePageTestStore : public OfflinePageMetadataStore { |
const UpdateCallback& callback) override; |
void RemoveOfflinePages(const std::vector<int64>& bookmark_ids, |
const UpdateCallback& callback) override; |
+ void Reset(const ResetCallback& callback) override; |
void UpdateLastAccessTime(int64 bookmark_id, |
const base::Time& last_access_time); |
@@ -93,13 +94,15 @@ OfflinePageTestStore::~OfflinePageTestStore() { |
} |
void OfflinePageTestStore::Load(const LoadCallback& callback) { |
+ OfflinePageMetadataStore::LoadStatus load_status; |
if (scenario_ != TestScenario::LOAD_FAILED) { |
- task_runner_->PostTask( |
- FROM_HERE, base::Bind(callback, true, offline_pages_)); |
+ load_status = OfflinePageMetadataStore::LOAD_SUCCEEDED; |
} else { |
- task_runner_->PostTask( |
- FROM_HERE, base::Bind(callback, false, std::vector<OfflinePageItem>())); |
+ load_status = OfflinePageMetadataStore::STORE_LOAD_FAILED; |
+ offline_pages_.clear(); |
} |
+ task_runner_->PostTask( |
+ FROM_HERE, base::Bind(callback, load_status, offline_pages_)); |
} |
void OfflinePageTestStore::AddOrUpdateOfflinePage( |
@@ -131,6 +134,11 @@ void OfflinePageTestStore::RemoveOfflinePages( |
task_runner_->PostTask(FROM_HERE, base::Bind(callback, result)); |
} |
+void OfflinePageTestStore::Reset(const ResetCallback& callback) { |
+ offline_pages_.clear(); |
+ task_runner_->PostTask(FROM_HERE, base::Bind(callback, true)); |
+} |
+ |
void OfflinePageTestStore:: UpdateLastAccessTime( |
int64 bookmark_id, const base::Time& last_access_time) { |
for (auto& offline_page : offline_pages_) { |
@@ -195,6 +203,7 @@ class OfflinePageModelTest |
// OfflinePageModel callbacks. |
void OnSavePageDone(SavePageResult result); |
void OnDeletePageDone(DeletePageResult result); |
+ void OnClearAllDone(); |
// OfflinePageMetadataStore callbacks. |
void OnStoreUpdateDone(bool /* success */); |
@@ -325,6 +334,10 @@ void OfflinePageModelTest::OnDeletePageDone(DeletePageResult result) { |
last_delete_result_ = result; |
} |
+void OfflinePageModelTest::OnClearAllDone() { |
+ base::RunLoop().RunUntilIdle(); |
+} |
+ |
void OfflinePageModelTest::OnStoreUpdateDone(bool /* success - ignored */) { |
} |
@@ -888,4 +901,51 @@ TEST_F(OfflinePageModelTest, CanSavePage) { |
EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("chrome-native://newtab/"))); |
} |
+TEST_F(OfflinePageModelTest, ClearAll) { |
+ scoped_ptr<OfflinePageTestArchiver> archiver( |
+ BuildArchiver(kTestUrl, |
+ OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) |
+ .Pass()); |
+ model()->SavePage( |
+ kTestUrl, kTestPageBookmarkId1, archiver.Pass(), |
+ base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); |
+ PumpLoop(); |
+ |
+ scoped_ptr<OfflinePageTestArchiver> archiver2( |
+ BuildArchiver(kTestUrl2, |
+ OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) |
+ .Pass()); |
+ model()->SavePage( |
+ kTestUrl2, kTestPageBookmarkId2, archiver2.Pass(), |
+ base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); |
+ PumpLoop(); |
+ |
+ const std::vector<OfflinePageItem>& offline_pages = model()->GetAllPages(); |
+ EXPECT_EQ(2UL, offline_pages.size()); |
+ EXPECT_EQ(2UL, GetStore()->offline_pages().size()); |
+ base::FilePath archiver_path = offline_pages[0].file_path; |
+ EXPECT_TRUE(base::PathExists(archiver_path)); |
+ |
+ // ClearAll should delete all the files and wipe out both cache and store. |
+ model()->ClearAll( |
+ base::Bind(&OfflinePageModelTest::OnClearAllDone, AsWeakPtr())); |
+ PumpLoop(); |
+ EXPECT_EQ(0UL, model()->GetAllPages().size()); |
+ EXPECT_EQ(0UL, GetStore()->offline_pages().size()); |
+ EXPECT_FALSE(base::PathExists(archiver_path)); |
+ |
+ // The model should reload the store after the reset. All model operations |
+ // should continue to work. |
+ scoped_ptr<OfflinePageTestArchiver> archiver3( |
+ BuildArchiver(kTestUrl2, |
+ OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) |
+ .Pass()); |
+ model()->SavePage( |
+ kTestUrl2, kTestPageBookmarkId2, archiver3.Pass(), |
+ base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); |
+ PumpLoop(); |
+ EXPECT_EQ(1UL, model()->GetAllPages().size()); |
+ EXPECT_EQ(1UL, GetStore()->offline_pages().size()); |
+} |
+ |
} // namespace offline_pages |