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