Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |