| 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 base::RunLoop().RunUntilIdle(); |
| 281 } | 289 } |
| 282 | 290 |
| 283 void OfflinePageModelTest::OfflinePageModelLoaded(OfflinePageModel* model) { | 291 void OfflinePageModelTest::OfflinePageModelLoaded(OfflinePageModel* model) { |
| 284 ASSERT_EQ(model_.get(), model); | 292 ASSERT_EQ(model_.get(), model); |
| 285 run_loop_->Quit(); | 293 run_loop_->Quit(); |
| 286 } | 294 } |
| 287 | 295 |
| 288 void OfflinePageModelTest::OfflinePageModelChanged(OfflinePageModel* model) { | 296 void OfflinePageModelTest::OfflinePageModelChanged(OfflinePageModel* model) { |
| 289 ASSERT_EQ(model_.get(), model); | 297 ASSERT_EQ(model_.get(), model); |
| 290 } | 298 } |
| 291 | 299 |
| 300 void OfflinePageModelTest::OfflinePageDeleted(int64 bookmark_id) { |
| 301 last_deleted_bookmark_id_ = bookmark_id; |
| 302 run_loop_->Quit(); |
| 303 } |
| 304 |
| 292 void OfflinePageModelTest::OnSavePageDone( | 305 void OfflinePageModelTest::OnSavePageDone( |
| 293 OfflinePageModel::SavePageResult result) { | 306 OfflinePageModel::SavePageResult result) { |
| 294 run_loop_->Quit(); | 307 run_loop_->Quit(); |
| 295 last_save_result_ = result; | 308 last_save_result_ = result; |
| 296 } | 309 } |
| 297 | 310 |
| 298 void OfflinePageModelTest::OnDeletePageDone(DeletePageResult result) { | 311 void OfflinePageModelTest::OnDeletePageDone(DeletePageResult result) { |
| 299 run_loop_->Quit(); | 312 run_loop_->Quit(); |
| 300 last_delete_result_ = result; | 313 last_delete_result_ = result; |
| 301 } | 314 } |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 // Try to delete this page. | 680 // Try to delete this page. |
| 668 GetStore()->set_test_scenario( | 681 GetStore()->set_test_scenario( |
| 669 OfflinePageTestStore::TestScenario::REMOVE_FAILED); | 682 OfflinePageTestStore::TestScenario::REMOVE_FAILED); |
| 670 model()->DeletePageByBookmarkId( | 683 model()->DeletePageByBookmarkId( |
| 671 kTestPageBookmarkId1, base::Bind(&OfflinePageModelTest::OnDeletePageDone, | 684 kTestPageBookmarkId1, base::Bind(&OfflinePageModelTest::OnDeletePageDone, |
| 672 AsWeakPtr())); | 685 AsWeakPtr())); |
| 673 PumpLoop(); | 686 PumpLoop(); |
| 674 EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result()); | 687 EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result()); |
| 675 } | 688 } |
| 676 | 689 |
| 690 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissing) { |
| 691 // Save a page. |
| 692 scoped_ptr<OfflinePageTestArchiver> archiver( |
| 693 BuildArchiver(kTestUrl, |
| 694 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) |
| 695 .Pass()); |
| 696 model()->SavePage( |
| 697 kTestUrl, kTestPageBookmarkId1, archiver.Pass(), |
| 698 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); |
| 699 PumpLoop(); |
| 700 |
| 701 ResetResults(); |
| 702 |
| 703 const OfflinePageItem* page = |
| 704 model()->GetPageByBookmarkId(kTestPageBookmarkId1); |
| 705 // Delete the offline copy of the page and check the metadata. |
| 706 base::DeleteFile(page->file_path, false); |
| 707 model()->CheckForExternalFileDeletion(); |
| 708 PumpLoop(); |
| 709 |
| 710 EXPECT_EQ(last_deleted_bookmark_id(), kTestPageBookmarkId1); |
| 711 EXPECT_EQ(0UL, model()->GetAllPages().size()); |
| 712 } |
| 713 |
| 714 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissingAfterLoad) { |
| 715 // Save a page. |
| 716 scoped_ptr<OfflinePageTestArchiver> archiver( |
| 717 BuildArchiver(kTestUrl, |
| 718 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) |
| 719 .Pass()); |
| 720 model()->SavePage( |
| 721 kTestUrl, kTestPageBookmarkId1, archiver.Pass(), |
| 722 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); |
| 723 PumpLoop(); |
| 724 |
| 725 ResetResults(); |
| 726 |
| 727 const OfflinePageItem* page = |
| 728 model()->GetPageByBookmarkId(kTestPageBookmarkId1); |
| 729 // Delete the offline copy of the page and check the metadata. |
| 730 base::DeleteFile(page->file_path, false); |
| 731 // Reseting the model should trigger the metadata consistency check as well. |
| 732 ResetModel(); |
| 733 PumpLoop(); |
| 734 |
| 735 EXPECT_EQ(last_deleted_bookmark_id(), kTestPageBookmarkId1); |
| 736 EXPECT_EQ(0UL, model()->GetAllPages().size()); |
| 737 } |
| 738 |
| 677 TEST_F(OfflinePageModelTest, GetPageByBookmarkId) { | 739 TEST_F(OfflinePageModelTest, GetPageByBookmarkId) { |
| 678 scoped_ptr<OfflinePageTestArchiver> archiver( | 740 scoped_ptr<OfflinePageTestArchiver> archiver( |
| 679 BuildArchiver(kTestUrl, | 741 BuildArchiver(kTestUrl, |
| 680 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) | 742 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) |
| 681 .Pass()); | 743 .Pass()); |
| 682 model()->SavePage( | 744 model()->SavePage( |
| 683 kTestUrl, kTestPageBookmarkId1, archiver.Pass(), | 745 kTestUrl, kTestPageBookmarkId1, archiver.Pass(), |
| 684 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); | 746 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); |
| 685 PumpLoop(); | 747 PumpLoop(); |
| 686 | 748 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 // has not been in the store long enough. | 850 // has not been in the store long enough. |
| 789 std::vector<OfflinePageItem> pages_to_clean_up = model()->GetPagesToCleanUp(); | 851 std::vector<OfflinePageItem> pages_to_clean_up = model()->GetPagesToCleanUp(); |
| 790 EXPECT_EQ(2UL, pages_to_clean_up.size()); | 852 EXPECT_EQ(2UL, pages_to_clean_up.size()); |
| 791 EXPECT_EQ(kTestUrl, pages_to_clean_up[0].url); | 853 EXPECT_EQ(kTestUrl, pages_to_clean_up[0].url); |
| 792 EXPECT_EQ(kTestPageBookmarkId1, pages_to_clean_up[0].bookmark_id); | 854 EXPECT_EQ(kTestPageBookmarkId1, pages_to_clean_up[0].bookmark_id); |
| 793 EXPECT_EQ(kTestUrl2, pages_to_clean_up[1].url); | 855 EXPECT_EQ(kTestUrl2, pages_to_clean_up[1].url); |
| 794 EXPECT_EQ(kTestPageBookmarkId2, pages_to_clean_up[1].bookmark_id); | 856 EXPECT_EQ(kTestPageBookmarkId2, pages_to_clean_up[1].bookmark_id); |
| 795 } | 857 } |
| 796 | 858 |
| 797 } // namespace offline_pages | 859 } // namespace offline_pages |
| OLD | NEW |