| 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 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 public base::SupportsWeakPtr<OfflinePageModelTest> { | 165 public base::SupportsWeakPtr<OfflinePageModelTest> { |
| 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 OfflinePageDeleted(int64 bookmark_id) override; |
| 175 | 176 |
| 176 // OfflinePageModel callbacks. | 177 // OfflinePageModel callbacks. |
| 177 void OnSavePageDone(SavePageResult result); | 178 void OnSavePageDone(SavePageResult result); |
| 178 void OnDeletePageDone(DeletePageResult result); | 179 void OnDeletePageDone(DeletePageResult result); |
| 179 | 180 |
| 180 // OfflinePageMetadataStore callbacks. | 181 // OfflinePageMetadataStore callbacks. |
| 181 void OnStoreUpdateDone(bool /* success */); | 182 void OnStoreUpdateDone(bool /* success */); |
| 182 | 183 |
| 183 scoped_ptr<OfflinePageTestArchiver> BuildArchiver( | 184 scoped_ptr<OfflinePageTestArchiver> BuildArchiver( |
| 184 const GURL& url, | 185 const GURL& url, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 201 OfflinePageTestStore* GetStore(); | 202 OfflinePageTestStore* GetStore(); |
| 202 | 203 |
| 203 SavePageResult last_save_result() const { | 204 SavePageResult last_save_result() const { |
| 204 return last_save_result_; | 205 return last_save_result_; |
| 205 } | 206 } |
| 206 | 207 |
| 207 DeletePageResult last_delete_result() const { | 208 DeletePageResult last_delete_result() const { |
| 208 return last_delete_result_; | 209 return last_delete_result_; |
| 209 } | 210 } |
| 210 | 211 |
| 212 int64 last_deleted_bookmark_id() const { |
| 213 return last_deleted_bookmark_id_; |
| 214 } |
| 215 |
| 211 const base::FilePath& last_archiver_path() { return last_archiver_path_; } | 216 const base::FilePath& last_archiver_path() { return last_archiver_path_; } |
| 212 void set_last_archiver_path(const base::FilePath& last_archiver_path) { | 217 void set_last_archiver_path(const base::FilePath& last_archiver_path) { |
| 213 last_archiver_path_ = last_archiver_path; | 218 last_archiver_path_ = last_archiver_path; |
| 214 } | 219 } |
| 215 | 220 |
| 216 private: | 221 private: |
| 217 base::MessageLoop message_loop_; | 222 base::MessageLoop message_loop_; |
| 218 scoped_ptr<base::RunLoop> run_loop_; | 223 scoped_ptr<base::RunLoop> run_loop_; |
| 219 base::ScopedTempDir temp_dir_; | 224 base::ScopedTempDir temp_dir_; |
| 220 | 225 |
| 221 scoped_ptr<OfflinePageModel> model_; | 226 scoped_ptr<OfflinePageModel> model_; |
| 222 SavePageResult last_save_result_; | 227 SavePageResult last_save_result_; |
| 223 DeletePageResult last_delete_result_; | 228 DeletePageResult last_delete_result_; |
| 224 base::FilePath last_archiver_path_; | 229 base::FilePath last_archiver_path_; |
| 230 int64 last_deleted_bookmark_id_; |
| 225 }; | 231 }; |
| 226 | 232 |
| 227 OfflinePageTestArchiver::OfflinePageTestArchiver( | 233 OfflinePageTestArchiver::OfflinePageTestArchiver( |
| 228 OfflinePageModelTest* test, | 234 OfflinePageModelTest* test, |
| 229 const GURL& url, | 235 const GURL& url, |
| 230 const base::FilePath& archiver_dir, | 236 const base::FilePath& archiver_dir, |
| 231 ArchiverResult result, | 237 ArchiverResult result, |
| 232 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) | 238 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) |
| 233 : test_(test), | 239 : test_(test), |
| 234 url_(url), | 240 url_(url), |
| (...skipping 20 matching lines...) Expand all Loading... |
| 255 DCHECK(!callback_.is_null()); | 261 DCHECK(!callback_.is_null()); |
| 256 base::FilePath archiver_path; | 262 base::FilePath archiver_path; |
| 257 ASSERT_TRUE(base::CreateTemporaryFileInDir(archiver_dir_, &archiver_path)); | 263 ASSERT_TRUE(base::CreateTemporaryFileInDir(archiver_dir_, &archiver_path)); |
| 258 test_->set_last_archiver_path(archiver_path); | 264 test_->set_last_archiver_path(archiver_path); |
| 259 task_runner_->PostTask(FROM_HERE, base::Bind(callback_, this, result_, url_, | 265 task_runner_->PostTask(FROM_HERE, base::Bind(callback_, this, result_, url_, |
| 260 archiver_path, kTestFileSize)); | 266 archiver_path, kTestFileSize)); |
| 261 } | 267 } |
| 262 | 268 |
| 263 OfflinePageModelTest::OfflinePageModelTest() | 269 OfflinePageModelTest::OfflinePageModelTest() |
| 264 : last_save_result_(SavePageResult::CANCELLED), | 270 : last_save_result_(SavePageResult::CANCELLED), |
| 265 last_delete_result_(DeletePageResult::CANCELLED) { | 271 last_delete_result_(DeletePageResult::CANCELLED), |
| 272 last_deleted_bookmark_id_(-1) { |
| 266 } | 273 } |
| 267 | 274 |
| 268 OfflinePageModelTest::~OfflinePageModelTest() { | 275 OfflinePageModelTest::~OfflinePageModelTest() { |
| 269 } | 276 } |
| 270 | 277 |
| 271 void OfflinePageModelTest::SetUp() { | 278 void OfflinePageModelTest::SetUp() { |
| 272 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 279 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 273 model_ = BuildModel(BuildStore().Pass()).Pass(); | 280 model_ = BuildModel(BuildStore().Pass()).Pass(); |
| 274 model_->AddObserver(this); | 281 model_->AddObserver(this); |
| 275 PumpLoop(); | 282 PumpLoop(); |
| 276 } | 283 } |
| 277 | 284 |
| 278 void OfflinePageModelTest::TearDown() { | 285 void OfflinePageModelTest::TearDown() { |
| 279 model_->RemoveObserver(this); | 286 model_->RemoveObserver(this); |
| 287 run_loop_.reset(new base::RunLoop()); |
| 288 run_loop_->RunUntilIdle(); |
| 280 } | 289 } |
| 281 | 290 |
| 282 void OfflinePageModelTest::OfflinePageModelLoaded(OfflinePageModel* model) { | 291 void OfflinePageModelTest::OfflinePageModelLoaded(OfflinePageModel* model) { |
| 283 ASSERT_EQ(model_.get(), model); | 292 ASSERT_EQ(model_.get(), model); |
| 284 run_loop_->Quit(); | 293 run_loop_->Quit(); |
| 285 } | 294 } |
| 286 | 295 |
| 296 void OfflinePageModelTest::OfflinePageDeleted(int64 bookmark_id) { |
| 297 last_deleted_bookmark_id_ = bookmark_id; |
| 298 run_loop_->Quit(); |
| 299 } |
| 300 |
| 287 void OfflinePageModelTest::OnSavePageDone( | 301 void OfflinePageModelTest::OnSavePageDone( |
| 288 OfflinePageModel::SavePageResult result) { | 302 OfflinePageModel::SavePageResult result) { |
| 289 run_loop_->Quit(); | 303 run_loop_->Quit(); |
| 290 last_save_result_ = result; | 304 last_save_result_ = result; |
| 291 } | 305 } |
| 292 | 306 |
| 293 void OfflinePageModelTest::OnDeletePageDone(DeletePageResult result) { | 307 void OfflinePageModelTest::OnDeletePageDone(DeletePageResult result) { |
| 294 run_loop_->Quit(); | 308 run_loop_->Quit(); |
| 295 last_delete_result_ = result; | 309 last_delete_result_ = result; |
| 296 } | 310 } |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 629 // Try to delete this page. | 643 // Try to delete this page. |
| 630 GetStore()->set_test_scenario( | 644 GetStore()->set_test_scenario( |
| 631 OfflinePageTestStore::TestScenario::REMOVE_FAILED); | 645 OfflinePageTestStore::TestScenario::REMOVE_FAILED); |
| 632 model()->DeletePageByBookmarkId( | 646 model()->DeletePageByBookmarkId( |
| 633 kTestPageBookmarkId1, base::Bind(&OfflinePageModelTest::OnDeletePageDone, | 647 kTestPageBookmarkId1, base::Bind(&OfflinePageModelTest::OnDeletePageDone, |
| 634 AsWeakPtr())); | 648 AsWeakPtr())); |
| 635 PumpLoop(); | 649 PumpLoop(); |
| 636 EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result()); | 650 EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result()); |
| 637 } | 651 } |
| 638 | 652 |
| 653 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissing) { |
| 654 // Save a page. |
| 655 scoped_ptr<OfflinePageTestArchiver> archiver( |
| 656 BuildArchiver(kTestUrl, |
| 657 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) |
| 658 .Pass()); |
| 659 model()->SavePage( |
| 660 kTestUrl, kTestPageBookmarkId1, archiver.Pass(), |
| 661 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); |
| 662 PumpLoop(); |
| 663 |
| 664 ResetResults(); |
| 665 |
| 666 const OfflinePageItem* page = |
| 667 model()->GetPageByBookmarkId(kTestPageBookmarkId1); |
| 668 // Delete the offline copy of the page and check the metadata. |
| 669 base::DeleteFile(page->file_path, false); |
| 670 model()->CheckForExternalFileDeletion(); |
| 671 PumpLoop(); |
| 672 |
| 673 EXPECT_EQ(last_deleted_bookmark_id(), kTestPageBookmarkId1); |
| 674 EXPECT_EQ(0UL, model()->GetAllPages().size()); |
| 675 } |
| 676 |
| 677 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissingAfterLoad) { |
| 678 // Save a page. |
| 679 scoped_ptr<OfflinePageTestArchiver> archiver( |
| 680 BuildArchiver(kTestUrl, |
| 681 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) |
| 682 .Pass()); |
| 683 model()->SavePage( |
| 684 kTestUrl, kTestPageBookmarkId1, archiver.Pass(), |
| 685 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); |
| 686 PumpLoop(); |
| 687 |
| 688 ResetResults(); |
| 689 |
| 690 const OfflinePageItem* page = |
| 691 model()->GetPageByBookmarkId(kTestPageBookmarkId1); |
| 692 // Delete the offline copy of the page and check the metadata. |
| 693 base::DeleteFile(page->file_path, false); |
| 694 // Reseting the model should trigger the metadata consistency check as well. |
| 695 ResetModel(); |
| 696 PumpLoop(); |
| 697 |
| 698 EXPECT_EQ(last_deleted_bookmark_id(), kTestPageBookmarkId1); |
| 699 EXPECT_EQ(0UL, model()->GetAllPages().size()); |
| 700 } |
| 701 |
| 639 TEST_F(OfflinePageModelTest, GetPageByBookmarkId) { | 702 TEST_F(OfflinePageModelTest, GetPageByBookmarkId) { |
| 640 scoped_ptr<OfflinePageTestArchiver> archiver( | 703 scoped_ptr<OfflinePageTestArchiver> archiver( |
| 641 BuildArchiver(kTestUrl, | 704 BuildArchiver(kTestUrl, |
| 642 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) | 705 OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED) |
| 643 .Pass()); | 706 .Pass()); |
| 644 model()->SavePage( | 707 model()->SavePage( |
| 645 kTestUrl, kTestPageBookmarkId1, archiver.Pass(), | 708 kTestUrl, kTestPageBookmarkId1, archiver.Pass(), |
| 646 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); | 709 base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); |
| 647 PumpLoop(); | 710 PumpLoop(); |
| 648 | 711 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 // has not been in the store long enough. | 813 // has not been in the store long enough. |
| 751 std::vector<OfflinePageItem> pages_to_clean_up = model()->GetPagesToCleanUp(); | 814 std::vector<OfflinePageItem> pages_to_clean_up = model()->GetPagesToCleanUp(); |
| 752 EXPECT_EQ(2UL, pages_to_clean_up.size()); | 815 EXPECT_EQ(2UL, pages_to_clean_up.size()); |
| 753 EXPECT_EQ(kTestUrl, pages_to_clean_up[0].url); | 816 EXPECT_EQ(kTestUrl, pages_to_clean_up[0].url); |
| 754 EXPECT_EQ(kTestPageBookmarkId1, pages_to_clean_up[0].bookmark_id); | 817 EXPECT_EQ(kTestPageBookmarkId1, pages_to_clean_up[0].bookmark_id); |
| 755 EXPECT_EQ(kTestUrl2, pages_to_clean_up[1].url); | 818 EXPECT_EQ(kTestUrl2, pages_to_clean_up[1].url); |
| 756 EXPECT_EQ(kTestPageBookmarkId2, pages_to_clean_up[1].bookmark_id); | 819 EXPECT_EQ(kTestPageBookmarkId2, pages_to_clean_up[1].bookmark_id); |
| 757 } | 820 } |
| 758 | 821 |
| 759 } // namespace offline_pages | 822 } // namespace offline_pages |
| OLD | NEW |