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

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: Passing only ID and paths for verification 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 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698