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

Side by Side Diff: components/offline_pages/offline_page_model_unittest.cc

Issue 1504243002: [Offline pages] Refactoring helper classes out from offline_page_model_unittest.cc (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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"
11 #include "base/files/scoped_temp_dir.h" 11 #include "base/files/scoped_temp_dir.h"
12 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
15 #include "base/strings/string16.h"
16 #include "base/strings/utf_string_conversions.h"
17 #include "base/time/time.h" 15 #include "base/time/time.h"
18 #include "components/bookmarks/browser/bookmark_node.h" 16 #include "components/bookmarks/browser/bookmark_node.h"
19 #include "components/offline_pages/offline_page_item.h" 17 #include "components/offline_pages/offline_page_item.h"
20 #include "components/offline_pages/offline_page_metadata_store.h" 18 #include "components/offline_pages/offline_page_test_archiver.h"
19 #include "components/offline_pages/offline_page_test_store.h"
21 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
22 #include "url/gurl.h" 21 #include "url/gurl.h"
23 22
24 using SavePageResult = offline_pages::OfflinePageModel::SavePageResult; 23 using SavePageResult = offline_pages::OfflinePageModel::SavePageResult;
25 using DeletePageResult = offline_pages::OfflinePageModel::DeletePageResult; 24 using DeletePageResult = offline_pages::OfflinePageModel::DeletePageResult;
26 25
27 namespace offline_pages { 26 namespace offline_pages {
28 27
29 namespace { 28 namespace {
30 const GURL kTestUrl("http://example.com"); 29 const GURL kTestUrl("http://example.com");
31 const int64 kTestPageBookmarkId1 = 1234LL; 30 const int64 kTestPageBookmarkId1 = 1234LL;
32 const GURL kTestUrl2("http://other.page.com"); 31 const GURL kTestUrl2("http://other.page.com");
33 const GURL kTestUrl3("http://test.xyz"); 32 const GURL kTestUrl3("http://test.xyz");
34 const GURL kFileUrl("file:///foo"); 33 const GURL kFileUrl("file:///foo");
35 const int64 kTestPageBookmarkId2 = 5678LL; 34 const int64 kTestPageBookmarkId2 = 5678LL;
36 const int64 kTestPageBookmarkId3 = 42LL; 35 const int64 kTestPageBookmarkId3 = 42LL;
37 const int64 kTestFileSize = 876543LL; 36 const int64 kTestFileSize = 876543LL;
38 37
39 class OfflinePageTestStore : public OfflinePageMetadataStore {
40 public:
41 enum class TestScenario {
42 SUCCESSFUL,
43 WRITE_FAILED,
44 LOAD_FAILED,
45 REMOVE_FAILED,
46 };
47
48 explicit OfflinePageTestStore(
49 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
50 explicit OfflinePageTestStore(const OfflinePageTestStore& other_store);
51 ~OfflinePageTestStore() override;
52
53 // OfflinePageMetadataStore overrides:
54 void Load(const LoadCallback& callback) override;
55 void AddOrUpdateOfflinePage(const OfflinePageItem& offline_page,
56 const UpdateCallback& callback) override;
57 void RemoveOfflinePages(const std::vector<int64>& bookmark_ids,
58 const UpdateCallback& callback) override;
59 void Reset(const ResetCallback& callback) override;
60
61 void UpdateLastAccessTime(int64 bookmark_id,
62 const base::Time& last_access_time);
63
64 const OfflinePageItem& last_saved_page() const { return last_saved_page_; }
65
66 void set_test_scenario(TestScenario scenario) { scenario_ = scenario; };
67
68 const std::vector<OfflinePageItem>& offline_pages() const {
69 return offline_pages_;
70 }
71
72 private:
73 OfflinePageItem last_saved_page_;
74 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
75 TestScenario scenario_;
76
77 std::vector<OfflinePageItem> offline_pages_;
78
79 DISALLOW_ASSIGN(OfflinePageTestStore);
80 };
81
82 OfflinePageTestStore::OfflinePageTestStore(
83 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
84 : task_runner_(task_runner),
85 scenario_(TestScenario::SUCCESSFUL) {
86 }
87
88 OfflinePageTestStore::OfflinePageTestStore(
89 const OfflinePageTestStore& other_store)
90 : task_runner_(other_store.task_runner_),
91 scenario_(other_store.scenario_),
92 offline_pages_(other_store.offline_pages_) {}
93
94 OfflinePageTestStore::~OfflinePageTestStore() {
95 }
96
97 void OfflinePageTestStore::Load(const LoadCallback& callback) {
98 OfflinePageMetadataStore::LoadStatus load_status;
99 if (scenario_ != TestScenario::LOAD_FAILED) {
100 load_status = OfflinePageMetadataStore::LOAD_SUCCEEDED;
101 } else {
102 load_status = OfflinePageMetadataStore::STORE_LOAD_FAILED;
103 offline_pages_.clear();
104 }
105 task_runner_->PostTask(
106 FROM_HERE, base::Bind(callback, load_status, offline_pages_));
107 }
108
109 void OfflinePageTestStore::AddOrUpdateOfflinePage(
110 const OfflinePageItem& offline_page, const UpdateCallback& callback) {
111 last_saved_page_ = offline_page;
112 bool result = scenario_ != TestScenario::WRITE_FAILED;
113 if (result) {
114 offline_pages_.push_back(offline_page);
115 }
116 task_runner_->PostTask(FROM_HERE, base::Bind(callback, result));
117 }
118
119 void OfflinePageTestStore::RemoveOfflinePages(
120 const std::vector<int64>& bookmark_ids,
121 const UpdateCallback& callback) {
122 ASSERT_FALSE(bookmark_ids.empty());
123 bool result = false;
124 if (scenario_ != TestScenario::REMOVE_FAILED) {
125 for (auto iter = offline_pages_.begin();
126 iter != offline_pages_.end(); ++iter) {
127 if (iter->bookmark_id == bookmark_ids[0]) {
128 offline_pages_.erase(iter);
129 result = true;
130 break;
131 }
132 }
133 }
134
135 task_runner_->PostTask(FROM_HERE, base::Bind(callback, result));
136 }
137
138 void OfflinePageTestStore::Reset(const ResetCallback& callback) {
139 offline_pages_.clear();
140 task_runner_->PostTask(FROM_HERE, base::Bind(callback, true));
141 }
142
143 void OfflinePageTestStore:: UpdateLastAccessTime(
144 int64 bookmark_id, const base::Time& last_access_time) {
145 for (auto& offline_page : offline_pages_) {
146 if (offline_page.bookmark_id == bookmark_id) {
147 offline_page.last_access_time = last_access_time;
148 return;
149 }
150 }
151 }
152
153 } // namespace 38 } // namespace
154 39
155 class OfflinePageModelTest;
156
157 class OfflinePageTestArchiver : public OfflinePageArchiver {
158 public:
159 OfflinePageTestArchiver(
160 OfflinePageModelTest* test,
161 const GURL& url,
162 ArchiverResult result,
163 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
164 ~OfflinePageTestArchiver() override;
165
166 // OfflinePageArchiver implementation:
167 void CreateArchive(const base::FilePath& archives_dir,
168 const CreateArchiveCallback& callback) override;
169
170 void CompleteCreateArchive();
171
172 void set_delayed(bool delayed) { delayed_ = delayed; }
173
174 bool create_archive_called() const { return create_archive_called_; }
175
176 private:
177 OfflinePageModelTest* test_; // Outlive OfflinePageTestArchiver.
178 GURL url_;
179 base::FilePath archives_dir_;
180 ArchiverResult result_;
181 bool create_archive_called_;
182 bool delayed_;
183 CreateArchiveCallback callback_;
184 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
185 DISALLOW_COPY_AND_ASSIGN(OfflinePageTestArchiver);
186 };
187
188 class OfflinePageModelTest 40 class OfflinePageModelTest
189 : public testing::Test, 41 : public testing::Test,
190 public OfflinePageModel::Observer, 42 public OfflinePageModel::Observer,
43 public OfflinePageTestArchiver::Observer,
191 public base::SupportsWeakPtr<OfflinePageModelTest> { 44 public base::SupportsWeakPtr<OfflinePageModelTest> {
192 public: 45 public:
193 OfflinePageModelTest(); 46 OfflinePageModelTest();
194 ~OfflinePageModelTest() override; 47 ~OfflinePageModelTest() override;
195 48
196 void SetUp() override; 49 void SetUp() override;
197 void TearDown() override; 50 void TearDown() override;
198 51
199 // OfflinePageModel::Observer implementation. 52 // OfflinePageModel::Observer implementation.
200 void OfflinePageModelLoaded(OfflinePageModel* model) override; 53 void OfflinePageModelLoaded(OfflinePageModel* model) override;
201 void OfflinePageModelChanged(OfflinePageModel* model) override; 54 void OfflinePageModelChanged(OfflinePageModel* model) override;
202 void OfflinePageDeleted(int64 bookmark_id) override; 55 void OfflinePageDeleted(int64 bookmark_id) override;
203 56
57 // OfflinePageTestArchiver::Observer implementation.
58 void SetLastPathCreatedByArchiver(const base::FilePath& file_path) override;
59
204 // OfflinePageModel callbacks. 60 // OfflinePageModel callbacks.
205 void OnSavePageDone(SavePageResult result); 61 void OnSavePageDone(SavePageResult result);
206 void OnDeletePageDone(DeletePageResult result); 62 void OnDeletePageDone(DeletePageResult result);
207 void OnClearAllDone(); 63 void OnClearAllDone();
208 64
209 // OfflinePageMetadataStore callbacks. 65 // OfflinePageMetadataStore callbacks.
210 void OnStoreUpdateDone(bool /* success */); 66 void OnStoreUpdateDone(bool /* success */);
211 67
212 scoped_ptr<OfflinePageTestArchiver> BuildArchiver( 68 scoped_ptr<OfflinePageTestArchiver> BuildArchiver(
213 const GURL& url, 69 const GURL& url,
(...skipping 21 matching lines...) Expand all
235 91
236 DeletePageResult last_delete_result() const { 92 DeletePageResult last_delete_result() const {
237 return last_delete_result_; 93 return last_delete_result_;
238 } 94 }
239 95
240 int64 last_deleted_bookmark_id() const { 96 int64 last_deleted_bookmark_id() const {
241 return last_deleted_bookmark_id_; 97 return last_deleted_bookmark_id_;
242 } 98 }
243 99
244 const base::FilePath& last_archiver_path() { return last_archiver_path_; } 100 const base::FilePath& last_archiver_path() { return last_archiver_path_; }
245 void set_last_archiver_path(const base::FilePath& last_archiver_path) {
246 last_archiver_path_ = last_archiver_path;
247 }
248 101
249 private: 102 private:
250 base::MessageLoop message_loop_; 103 base::MessageLoop message_loop_;
251 base::ScopedTempDir temp_dir_; 104 base::ScopedTempDir temp_dir_;
252 105
253 scoped_ptr<OfflinePageModel> model_; 106 scoped_ptr<OfflinePageModel> model_;
254 SavePageResult last_save_result_; 107 SavePageResult last_save_result_;
255 DeletePageResult last_delete_result_; 108 DeletePageResult last_delete_result_;
256 base::FilePath last_archiver_path_; 109 base::FilePath last_archiver_path_;
257 int64 last_deleted_bookmark_id_; 110 int64 last_deleted_bookmark_id_;
258 }; 111 };
259 112
260 OfflinePageTestArchiver::OfflinePageTestArchiver(
261 OfflinePageModelTest* test,
262 const GURL& url,
263 ArchiverResult result,
264 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
265 : test_(test),
266 url_(url),
267 result_(result),
268 create_archive_called_(false),
269 delayed_(false),
270 task_runner_(task_runner) {
271 }
272
273 OfflinePageTestArchiver::~OfflinePageTestArchiver() {
274 EXPECT_TRUE(create_archive_called_);
275 }
276
277 void OfflinePageTestArchiver::CreateArchive(
278 const base::FilePath& archives_dir,
279 const CreateArchiveCallback& callback) {
280 create_archive_called_ = true;
281 callback_ = callback;
282 archives_dir_ = archives_dir;
283 if (!delayed_)
284 CompleteCreateArchive();
285 }
286
287 void OfflinePageTestArchiver::CompleteCreateArchive() {
288 DCHECK(!callback_.is_null());
289 base::FilePath archive_path;
290 ASSERT_TRUE(base::CreateTemporaryFileInDir(archives_dir_, &archive_path));
291 test_->set_last_archiver_path(archive_path);
292 task_runner_->PostTask(FROM_HERE, base::Bind(callback_, this, result_, url_,
293 archive_path, kTestFileSize));
294 }
295
296 OfflinePageModelTest::OfflinePageModelTest() 113 OfflinePageModelTest::OfflinePageModelTest()
297 : last_save_result_(SavePageResult::CANCELLED), 114 : last_save_result_(SavePageResult::CANCELLED),
298 last_delete_result_(DeletePageResult::CANCELLED), 115 last_delete_result_(DeletePageResult::CANCELLED),
299 last_deleted_bookmark_id_(-1) { 116 last_deleted_bookmark_id_(-1) {
300 } 117 }
301 118
302 OfflinePageModelTest::~OfflinePageModelTest() { 119 OfflinePageModelTest::~OfflinePageModelTest() {
303 } 120 }
304 121
305 void OfflinePageModelTest::SetUp() { 122 void OfflinePageModelTest::SetUp() {
(...skipping 13 matching lines...) Expand all
319 } 136 }
320 137
321 void OfflinePageModelTest::OfflinePageModelChanged(OfflinePageModel* model) { 138 void OfflinePageModelTest::OfflinePageModelChanged(OfflinePageModel* model) {
322 ASSERT_EQ(model_.get(), model); 139 ASSERT_EQ(model_.get(), model);
323 } 140 }
324 141
325 void OfflinePageModelTest::OfflinePageDeleted(int64 bookmark_id) { 142 void OfflinePageModelTest::OfflinePageDeleted(int64 bookmark_id) {
326 last_deleted_bookmark_id_ = bookmark_id; 143 last_deleted_bookmark_id_ = bookmark_id;
327 } 144 }
328 145
146 void OfflinePageModelTest::SetLastPathCreatedByArchiver(
147 const base::FilePath& file_path) {
148 last_archiver_path_ = file_path;
149 }
150
329 void OfflinePageModelTest::OnSavePageDone( 151 void OfflinePageModelTest::OnSavePageDone(
330 OfflinePageModel::SavePageResult result) { 152 OfflinePageModel::SavePageResult result) {
331 last_save_result_ = result; 153 last_save_result_ = result;
332 } 154 }
333 155
334 void OfflinePageModelTest::OnDeletePageDone(DeletePageResult result) { 156 void OfflinePageModelTest::OnDeletePageDone(DeletePageResult result) {
335 last_delete_result_ = result; 157 last_delete_result_ = result;
336 } 158 }
337 159
338 void OfflinePageModelTest::OnClearAllDone() { 160 void OfflinePageModelTest::OnClearAllDone() {
339 base::RunLoop().RunUntilIdle(); 161 base::RunLoop().RunUntilIdle();
340 } 162 }
341 163
342 void OfflinePageModelTest::OnStoreUpdateDone(bool /* success - ignored */) { 164 void OfflinePageModelTest::OnStoreUpdateDone(bool /* success - ignored */) {
343 } 165 }
344 166
345 scoped_ptr<OfflinePageTestArchiver> OfflinePageModelTest::BuildArchiver( 167 scoped_ptr<OfflinePageTestArchiver> OfflinePageModelTest::BuildArchiver(
346 const GURL& url, 168 const GURL& url,
347 OfflinePageArchiver::ArchiverResult result) { 169 OfflinePageArchiver::ArchiverResult result) {
348 return scoped_ptr<OfflinePageTestArchiver>( 170 return scoped_ptr<OfflinePageTestArchiver>(new OfflinePageTestArchiver(
349 new OfflinePageTestArchiver(this, url, result, task_runner())); 171 this, url, result, kTestFileSize, task_runner()));
350 } 172 }
351 173
352 scoped_ptr<OfflinePageMetadataStore> OfflinePageModelTest::BuildStore() { 174 scoped_ptr<OfflinePageMetadataStore> OfflinePageModelTest::BuildStore() {
353 return scoped_ptr<OfflinePageMetadataStore>( 175 return scoped_ptr<OfflinePageMetadataStore>(
354 new OfflinePageTestStore(task_runner())); 176 new OfflinePageTestStore(task_runner()));
355 } 177 }
356 178
357 scoped_ptr<OfflinePageModel> OfflinePageModelTest::BuildModel( 179 scoped_ptr<OfflinePageModel> OfflinePageModelTest::BuildModel(
358 scoped_ptr<OfflinePageMetadataStore> store) { 180 scoped_ptr<OfflinePageMetadataStore> store) {
359 return scoped_ptr<OfflinePageModel>( 181 return scoped_ptr<OfflinePageModel>(
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after
1015 837
1016 // Chrome should not crash when a bookmark with no offline copy is changed. 838 // Chrome should not crash when a bookmark with no offline copy is changed.
1017 // http://crbug.com/560518 839 // http://crbug.com/560518
1018 bookmark_node.set_url(kTestUrl); 840 bookmark_node.set_url(kTestUrl);
1019 model()->BookmarkNodeChanged(nullptr, &bookmark_node); 841 model()->BookmarkNodeChanged(nullptr, &bookmark_node);
1020 PumpLoop(); 842 PumpLoop();
1021 EXPECT_EQ(0UL, model()->GetAllPages().size()); 843 EXPECT_EQ(0UL, model()->GetAllPages().size());
1022 } 844 }
1023 845
1024 } // namespace offline_pages 846 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698