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

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

Issue 1397233002: [Offline pages] Detecting missing offline copy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebasing Created 5 years, 2 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
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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 public: 166 public:
167 OfflinePageModelTest(); 167 OfflinePageModelTest();
168 ~OfflinePageModelTest() override; 168 ~OfflinePageModelTest() override;
169 169
170 void SetUp() override; 170 void SetUp() override;
171 void TearDown() override; 171 void TearDown() override;
172 172
173 // OfflinePageModel::Observer implementation. 173 // OfflinePageModel::Observer implementation.
174 void OfflinePageModelLoaded(OfflinePageModel* model) override; 174 void OfflinePageModelLoaded(OfflinePageModel* model) override;
175 void OfflinePageModelChanged(OfflinePageModel* model) override; 175 void OfflinePageModelChanged(OfflinePageModel* model) override;
176 void OfflinePageDeleted(int64 bookmark_id) override;
176 177
177 // OfflinePageModel callbacks. 178 // OfflinePageModel callbacks.
178 void OnSavePageDone(SavePageResult result); 179 void OnSavePageDone(SavePageResult result);
179 void OnDeletePageDone(DeletePageResult result); 180 void OnDeletePageDone(DeletePageResult result);
180 181
181 // OfflinePageMetadataStore callbacks. 182 // OfflinePageMetadataStore callbacks.
182 void OnStoreUpdateDone(bool /* success */); 183 void OnStoreUpdateDone(bool /* success */);
183 184
184 scoped_ptr<OfflinePageTestArchiver> BuildArchiver( 185 scoped_ptr<OfflinePageTestArchiver> BuildArchiver(
185 const GURL& url, 186 const GURL& url,
(...skipping 16 matching lines...) Expand all
202 OfflinePageTestStore* GetStore(); 203 OfflinePageTestStore* GetStore();
203 204
204 SavePageResult last_save_result() const { 205 SavePageResult last_save_result() const {
205 return last_save_result_; 206 return last_save_result_;
206 } 207 }
207 208
208 DeletePageResult last_delete_result() const { 209 DeletePageResult last_delete_result() const {
209 return last_delete_result_; 210 return last_delete_result_;
210 } 211 }
211 212
213 int64 last_deleted_bookmark_id() const {
214 return last_deleted_bookmark_id_;
215 }
216
212 const base::FilePath& last_archiver_path() { return last_archiver_path_; } 217 const base::FilePath& last_archiver_path() { return last_archiver_path_; }
213 void set_last_archiver_path(const base::FilePath& last_archiver_path) { 218 void set_last_archiver_path(const base::FilePath& last_archiver_path) {
214 last_archiver_path_ = last_archiver_path; 219 last_archiver_path_ = last_archiver_path;
215 } 220 }
216 221
217 private: 222 private:
218 base::MessageLoop message_loop_; 223 base::MessageLoop message_loop_;
219 scoped_ptr<base::RunLoop> run_loop_; 224 scoped_ptr<base::RunLoop> run_loop_;
220 base::ScopedTempDir temp_dir_; 225 base::ScopedTempDir temp_dir_;
221 226
222 scoped_ptr<OfflinePageModel> model_; 227 scoped_ptr<OfflinePageModel> model_;
223 SavePageResult last_save_result_; 228 SavePageResult last_save_result_;
224 DeletePageResult last_delete_result_; 229 DeletePageResult last_delete_result_;
225 base::FilePath last_archiver_path_; 230 base::FilePath last_archiver_path_;
231 int64 last_deleted_bookmark_id_;
226 }; 232 };
227 233
228 OfflinePageTestArchiver::OfflinePageTestArchiver( 234 OfflinePageTestArchiver::OfflinePageTestArchiver(
229 OfflinePageModelTest* test, 235 OfflinePageModelTest* test,
230 const GURL& url, 236 const GURL& url,
231 const base::FilePath& archiver_dir, 237 const base::FilePath& archiver_dir,
232 ArchiverResult result, 238 ArchiverResult result,
233 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) 239 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
234 : test_(test), 240 : test_(test),
235 url_(url), 241 url_(url),
(...skipping 20 matching lines...) Expand all
256 DCHECK(!callback_.is_null()); 262 DCHECK(!callback_.is_null());
257 base::FilePath archiver_path; 263 base::FilePath archiver_path;
258 ASSERT_TRUE(base::CreateTemporaryFileInDir(archiver_dir_, &archiver_path)); 264 ASSERT_TRUE(base::CreateTemporaryFileInDir(archiver_dir_, &archiver_path));
259 test_->set_last_archiver_path(archiver_path); 265 test_->set_last_archiver_path(archiver_path);
260 task_runner_->PostTask(FROM_HERE, base::Bind(callback_, this, result_, url_, 266 task_runner_->PostTask(FROM_HERE, base::Bind(callback_, this, result_, url_,
261 archiver_path, kTestFileSize)); 267 archiver_path, kTestFileSize));
262 } 268 }
263 269
264 OfflinePageModelTest::OfflinePageModelTest() 270 OfflinePageModelTest::OfflinePageModelTest()
265 : last_save_result_(SavePageResult::CANCELLED), 271 : last_save_result_(SavePageResult::CANCELLED),
266 last_delete_result_(DeletePageResult::CANCELLED) { 272 last_delete_result_(DeletePageResult::CANCELLED),
273 last_deleted_bookmark_id_(-1) {
267 } 274 }
268 275
269 OfflinePageModelTest::~OfflinePageModelTest() { 276 OfflinePageModelTest::~OfflinePageModelTest() {
270 } 277 }
271 278
272 void OfflinePageModelTest::SetUp() { 279 void OfflinePageModelTest::SetUp() {
273 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 280 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
274 model_ = BuildModel(BuildStore().Pass()).Pass(); 281 model_ = BuildModel(BuildStore().Pass()).Pass();
275 model_->AddObserver(this); 282 model_->AddObserver(this);
276 PumpLoop(); 283 PumpLoop();
277 } 284 }
278 285
279 void OfflinePageModelTest::TearDown() { 286 void OfflinePageModelTest::TearDown() {
280 model_->RemoveObserver(this); 287 model_->RemoveObserver(this);
288 run_loop_.reset(new base::RunLoop());
289 run_loop_->RunUntilIdle();
jianli 2015/10/20 21:56:49 Will base::RunLoop().RunUntilIdle() work?
fgorski 2015/10/21 20:01:33 Done.
281 } 290 }
282 291
283 void OfflinePageModelTest::OfflinePageModelLoaded(OfflinePageModel* model) { 292 void OfflinePageModelTest::OfflinePageModelLoaded(OfflinePageModel* model) {
284 ASSERT_EQ(model_.get(), model); 293 ASSERT_EQ(model_.get(), model);
285 run_loop_->Quit(); 294 run_loop_->Quit();
286 } 295 }
287 296
288 void OfflinePageModelTest::OfflinePageModelChanged(OfflinePageModel* model) { 297 void OfflinePageModelTest::OfflinePageModelChanged(OfflinePageModel* model) {
289 ASSERT_EQ(model_.get(), model); 298 ASSERT_EQ(model_.get(), model);
290 } 299 }
291 300
301 void OfflinePageModelTest::OfflinePageDeleted(int64 bookmark_id) {
302 last_deleted_bookmark_id_ = bookmark_id;
303 run_loop_->Quit();
304 }
305
292 void OfflinePageModelTest::OnSavePageDone( 306 void OfflinePageModelTest::OnSavePageDone(
293 OfflinePageModel::SavePageResult result) { 307 OfflinePageModel::SavePageResult result) {
294 run_loop_->Quit(); 308 run_loop_->Quit();
295 last_save_result_ = result; 309 last_save_result_ = result;
296 } 310 }
297 311
298 void OfflinePageModelTest::OnDeletePageDone(DeletePageResult result) { 312 void OfflinePageModelTest::OnDeletePageDone(DeletePageResult result) {
299 run_loop_->Quit(); 313 run_loop_->Quit();
300 last_delete_result_ = result; 314 last_delete_result_ = result;
301 } 315 }
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 // Try to delete this page. 681 // Try to delete this page.
668 GetStore()->set_test_scenario( 682 GetStore()->set_test_scenario(
669 OfflinePageTestStore::TestScenario::REMOVE_FAILED); 683 OfflinePageTestStore::TestScenario::REMOVE_FAILED);
670 model()->DeletePageByBookmarkId( 684 model()->DeletePageByBookmarkId(
671 kTestPageBookmarkId1, base::Bind(&OfflinePageModelTest::OnDeletePageDone, 685 kTestPageBookmarkId1, base::Bind(&OfflinePageModelTest::OnDeletePageDone,
672 AsWeakPtr())); 686 AsWeakPtr()));
673 PumpLoop(); 687 PumpLoop();
674 EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result()); 688 EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result());
675 } 689 }
676 690
691 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissing) {
692 // Save a page.
693 scoped_ptr<OfflinePageTestArchiver> archiver(
694 BuildArchiver(kTestUrl,
695 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)
696 .Pass());
697 model()->SavePage(
698 kTestUrl, kTestPageBookmarkId1, archiver.Pass(),
699 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
700 PumpLoop();
701
702 ResetResults();
703
704 const OfflinePageItem* page =
705 model()->GetPageByBookmarkId(kTestPageBookmarkId1);
706 // Delete the offline copy of the page and check the metadata.
707 base::DeleteFile(page->file_path, false);
708 model()->CheckForExternalFileDeletion();
709 PumpLoop();
710
711 EXPECT_EQ(last_deleted_bookmark_id(), kTestPageBookmarkId1);
712 EXPECT_EQ(0UL, model()->GetAllPages().size());
713 }
714
715 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissingAfterLoad) {
716 // Save a page.
717 scoped_ptr<OfflinePageTestArchiver> archiver(
718 BuildArchiver(kTestUrl,
719 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)
720 .Pass());
721 model()->SavePage(
722 kTestUrl, kTestPageBookmarkId1, archiver.Pass(),
723 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
724 PumpLoop();
725
726 ResetResults();
727
728 const OfflinePageItem* page =
729 model()->GetPageByBookmarkId(kTestPageBookmarkId1);
730 // Delete the offline copy of the page and check the metadata.
731 base::DeleteFile(page->file_path, false);
732 // Reseting the model should trigger the metadata consistency check as well.
733 ResetModel();
734 PumpLoop();
735
736 EXPECT_EQ(last_deleted_bookmark_id(), kTestPageBookmarkId1);
737 EXPECT_EQ(0UL, model()->GetAllPages().size());
738 }
739
677 TEST_F(OfflinePageModelTest, GetPageByBookmarkId) { 740 TEST_F(OfflinePageModelTest, GetPageByBookmarkId) {
678 scoped_ptr<OfflinePageTestArchiver> archiver( 741 scoped_ptr<OfflinePageTestArchiver> archiver(
679 BuildArchiver(kTestUrl, 742 BuildArchiver(kTestUrl,
680 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) 743 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)
681 .Pass()); 744 .Pass());
682 model()->SavePage( 745 model()->SavePage(
683 kTestUrl, kTestPageBookmarkId1, archiver.Pass(), 746 kTestUrl, kTestPageBookmarkId1, archiver.Pass(),
684 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); 747 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr()));
685 PumpLoop(); 748 PumpLoop();
686 749
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 // has not been in the store long enough. 851 // has not been in the store long enough.
789 std::vector<OfflinePageItem> pages_to_clean_up = model()->GetPagesToCleanUp(); 852 std::vector<OfflinePageItem> pages_to_clean_up = model()->GetPagesToCleanUp();
790 EXPECT_EQ(2UL, pages_to_clean_up.size()); 853 EXPECT_EQ(2UL, pages_to_clean_up.size());
791 EXPECT_EQ(kTestUrl, pages_to_clean_up[0].url); 854 EXPECT_EQ(kTestUrl, pages_to_clean_up[0].url);
792 EXPECT_EQ(kTestPageBookmarkId1, pages_to_clean_up[0].bookmark_id); 855 EXPECT_EQ(kTestPageBookmarkId1, pages_to_clean_up[0].bookmark_id);
793 EXPECT_EQ(kTestUrl2, pages_to_clean_up[1].url); 856 EXPECT_EQ(kTestUrl2, pages_to_clean_up[1].url);
794 EXPECT_EQ(kTestPageBookmarkId2, pages_to_clean_up[1].bookmark_id); 857 EXPECT_EQ(kTestPageBookmarkId2, pages_to_clean_up[1].bookmark_id);
795 } 858 }
796 859
797 } // namespace offline_pages 860 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698