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

Side by Side Diff: chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc

Issue 2744553005: [Offline Pages] Turn Offliner::Cancel into an async operation to resolve conflicting assumptions be… (Closed)
Patch Set: Created 3 years, 9 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "chrome/browser/android/offline_pages/prerendering_offliner.h" 5 #include "chrome/browser/android/offline_pages/prerendering_offliner.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 ~PrerenderingOfflinerTest() override; 165 ~PrerenderingOfflinerTest() override;
166 166
167 void SetUp() override; 167 void SetUp() override;
168 168
169 Profile* profile() { return &profile_; } 169 Profile* profile() { return &profile_; }
170 PrerenderingOffliner* offliner() const { return offliner_.get(); } 170 PrerenderingOffliner* offliner() const { return offliner_.get(); }
171 Offliner::CompletionCallback const completion_callback() { 171 Offliner::CompletionCallback const completion_callback() {
172 return base::Bind(&PrerenderingOfflinerTest::OnCompletion, 172 return base::Bind(&PrerenderingOfflinerTest::OnCompletion,
173 base::Unretained(this)); 173 base::Unretained(this));
174 } 174 }
175
175 Offliner::ProgressCallback const progress_callback() { 176 Offliner::ProgressCallback const progress_callback() {
176 return base::Bind(&PrerenderingOfflinerTest::OnProgress, 177 return base::Bind(&PrerenderingOfflinerTest::OnProgress,
177 base::Unretained(this)); 178 base::Unretained(this));
178 } 179 }
179 180
181 Offliner::CancelCallback const cancel_callback() {
182 return base::Bind(&PrerenderingOfflinerTest::OnCancel,
183 base::Unretained(this));
184 }
185
180 bool SaveInProgress() const { return model_->mock_saving(); } 186 bool SaveInProgress() const { return model_->mock_saving(); }
181 MockPrerenderingLoader* loader() { return loader_; } 187 MockPrerenderingLoader* loader() { return loader_; }
182 MockOfflinePageModel* model() { return model_; } 188 MockOfflinePageModel* model() { return model_; }
183 bool completion_callback_called() { return completion_callback_called_; } 189 bool completion_callback_called() { return completion_callback_called_; }
184 Offliner::RequestStatus request_status() { return request_status_; } 190 Offliner::RequestStatus request_status() { return request_status_; }
185 OfflinerPolicy* policy() { return policy_; } 191 OfflinerPolicy* policy() { return policy_; }
192 bool cancel_callback_called() { return cancel_callback_called_; }
186 193
187 private: 194 private:
188 void OnCompletion(const SavePageRequest& request, 195 void OnCompletion(const SavePageRequest& request,
189 Offliner::RequestStatus status); 196 Offliner::RequestStatus status);
190 void OnProgress(const SavePageRequest& request, int64_t bytes); 197 void OnProgress(const SavePageRequest& request, int64_t bytes);
198 void OnCancel(int64_t offline_id);
191 199
192 content::TestBrowserThreadBundle thread_bundle_; 200 content::TestBrowserThreadBundle thread_bundle_;
193 TestingProfile profile_; 201 TestingProfile profile_;
194 std::unique_ptr<PrerenderingOffliner> offliner_; 202 std::unique_ptr<PrerenderingOffliner> offliner_;
195 // Not owned. 203 // Not owned.
196 MockPrerenderingLoader* loader_; 204 MockPrerenderingLoader* loader_;
197 MockOfflinePageModel* model_; 205 MockOfflinePageModel* model_;
198 bool completion_callback_called_; 206 bool completion_callback_called_;
207 bool cancel_callback_called_;
199 Offliner::RequestStatus request_status_; 208 Offliner::RequestStatus request_status_;
200 OfflinerPolicy* policy_; 209 OfflinerPolicy* policy_;
201 210
202 DISALLOW_COPY_AND_ASSIGN(PrerenderingOfflinerTest); 211 DISALLOW_COPY_AND_ASSIGN(PrerenderingOfflinerTest);
203 }; 212 };
204 213
205 PrerenderingOfflinerTest::PrerenderingOfflinerTest() 214 PrerenderingOfflinerTest::PrerenderingOfflinerTest()
206 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), 215 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
207 completion_callback_called_(false), 216 completion_callback_called_(false),
217 cancel_callback_called_(false),
208 request_status_(Offliner::RequestStatus::UNKNOWN) {} 218 request_status_(Offliner::RequestStatus::UNKNOWN) {}
209 219
210 PrerenderingOfflinerTest::~PrerenderingOfflinerTest() {} 220 PrerenderingOfflinerTest::~PrerenderingOfflinerTest() {}
211 221
212 void PrerenderingOfflinerTest::SetUp() { 222 void PrerenderingOfflinerTest::SetUp() {
213 model_ = new MockOfflinePageModel(); 223 model_ = new MockOfflinePageModel();
214 policy_ = new OfflinerPolicy(); 224 policy_ = new OfflinerPolicy();
215 offliner_.reset(new PrerenderingOffliner(profile(), policy_, model_)); 225 offliner_.reset(new PrerenderingOffliner(profile(), policy_, model_));
216 std::unique_ptr<MockPrerenderingLoader> mock_loader( 226 std::unique_ptr<MockPrerenderingLoader> mock_loader(
217 new MockPrerenderingLoader(nullptr)); 227 new MockPrerenderingLoader(nullptr));
218 loader_ = mock_loader.get(); 228 loader_ = mock_loader.get();
219 offliner_->SetLoaderForTesting(std::move(mock_loader)); 229 offliner_->SetLoaderForTesting(std::move(mock_loader));
220 } 230 }
221 231
222 void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request, 232 void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request,
223 Offliner::RequestStatus status) { 233 Offliner::RequestStatus status) {
224 DCHECK(!completion_callback_called_); // Expect single callback per request. 234 DCHECK(!completion_callback_called_); // Expect single callback per request.
225 completion_callback_called_ = true; 235 completion_callback_called_ = true;
226 request_status_ = status; 236 request_status_ = status;
227 } 237 }
228 238
229 void PrerenderingOfflinerTest::OnProgress(const SavePageRequest& request, 239 void PrerenderingOfflinerTest::OnProgress(const SavePageRequest& request,
230 int64_t bytes) {} 240 int64_t bytes) {}
241 void PrerenderingOfflinerTest::OnCancel(int64_t offline_id) {
242 DCHECK(!cancel_callback_called_);
243 cancel_callback_called_ = true;
244 }
231 245
232 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) { 246 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) {
233 base::Time creation_time = base::Time::Now(); 247 base::Time creation_time = base::Time::Now();
234 SavePageRequest request( 248 SavePageRequest request(
235 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested); 249 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested);
236 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), 250 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(),
237 progress_callback())); 251 progress_callback()));
238 EXPECT_TRUE(loader()->IsIdle()); 252 EXPECT_TRUE(loader()->IsIdle());
239 } 253 }
240 254
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 } 306 }
293 307
294 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) { 308 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) {
295 base::Time creation_time = base::Time::Now(); 309 base::Time creation_time = base::Time::Now();
296 SavePageRequest request( 310 SavePageRequest request(
297 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); 311 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
298 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), 312 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
299 progress_callback())); 313 progress_callback()));
300 EXPECT_FALSE(loader()->IsIdle()); 314 EXPECT_FALSE(loader()->IsIdle());
301 315
302 offliner()->Cancel(); 316 offliner()->Cancel(cancel_callback());
317 PumpLoop();
318 EXPECT_TRUE(cancel_callback_called());
303 EXPECT_TRUE(loader()->IsIdle()); 319 EXPECT_TRUE(loader()->IsIdle());
304 } 320 }
305 321
306 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) { 322 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) {
307 base::Time creation_time = base::Time::Now(); 323 base::Time creation_time = base::Time::Now();
308 SavePageRequest request( 324 SavePageRequest request(
309 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); 325 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
310 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), 326 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
311 progress_callback())); 327 progress_callback()));
312 EXPECT_FALSE(loader()->IsIdle()); 328 EXPECT_FALSE(loader()->IsIdle());
313 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); 329 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
314 330
315 loader()->CompleteLoadingAsLoaded(); 331 loader()->CompleteLoadingAsLoaded();
316 PumpLoop(); 332 PumpLoop();
317 EXPECT_FALSE(completion_callback_called()); 333 EXPECT_FALSE(completion_callback_called());
318 EXPECT_TRUE(loader()->IsLoaded()); 334 EXPECT_TRUE(loader()->IsLoaded());
319 EXPECT_TRUE(SaveInProgress()); 335 EXPECT_TRUE(SaveInProgress());
320 336
321 offliner()->Cancel(); 337 offliner()->Cancel(cancel_callback());
322 PumpLoop(); 338 PumpLoop();
323 EXPECT_FALSE(completion_callback_called()); 339 EXPECT_FALSE(completion_callback_called());
340 EXPECT_TRUE(cancel_callback_called());
324 EXPECT_FALSE(loader()->IsLoaded()); 341 EXPECT_FALSE(loader()->IsLoaded());
325 // Note: save still in progress since it does not support canceling. 342 // Note: save still in progress since it does not support canceling.
326 EXPECT_TRUE(SaveInProgress()); 343 EXPECT_TRUE(SaveInProgress());
327 344
328 // Subsequent save callback causes no harm (no crash and no callback). 345 // Subsequent save callback causes no harm (no crash and no callback).
329 model()->CompleteSavingAsArchiveCreationFailed(); 346 model()->CompleteSavingAsArchiveCreationFailed();
330 PumpLoop(); 347 PumpLoop();
331 EXPECT_FALSE(completion_callback_called()); 348 EXPECT_FALSE(completion_callback_called());
332 EXPECT_TRUE(loader()->IsIdle()); 349 EXPECT_TRUE(loader()->IsIdle());
333 EXPECT_FALSE(SaveInProgress()); 350 EXPECT_FALSE(SaveInProgress());
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, 520 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
504 kUserRequested); 521 kUserRequested);
505 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), 522 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
506 progress_callback())); 523 progress_callback()));
507 loader()->set_is_lowbar_met(true); 524 loader()->set_is_lowbar_met(true);
508 EXPECT_FALSE(offliner()->HandleTimeout(request)); 525 EXPECT_FALSE(offliner()->HandleTimeout(request));
509 EXPECT_FALSE(loader()->start_snapshot_called()); 526 EXPECT_FALSE(loader()->start_snapshot_called());
510 } 527 }
511 528
512 } // namespace offline_pages 529 } // namespace offline_pages
OLDNEW
« no previous file with comments | « chrome/browser/android/offline_pages/prerendering_offliner.cc ('k') | components/offline_pages/core/background/offliner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698