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

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: Updates based on the latest code review feedback 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
« no previous file with comments | « components/offline_pages/offline_page_model.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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
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
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
OLDNEW
« no previous file with comments | « components/offline_pages/offline_page_model.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698