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

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

Issue 2715433006: [Offline Pages] Turn Offliner::Cancel into an async operation to resolve conflicting assumptions (Closed)
Patch Set: forgot to init 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 callback() { 171 Offliner::CompletionCallback const callback() {
172 return base::Bind(&PrerenderingOfflinerTest::OnCompletion, 172 return base::Bind(&PrerenderingOfflinerTest::OnCompletion,
173 base::Unretained(this)); 173 base::Unretained(this));
174 } 174 }
175 Offliner::CancelCallback const cancel_callback() {
176 return base::Bind(&PrerenderingOfflinerTest::OnCancel,
177 base::Unretained(this));
178 }
175 179
176 bool SaveInProgress() const { return model_->mock_saving(); } 180 bool SaveInProgress() const { return model_->mock_saving(); }
177 MockPrerenderingLoader* loader() { return loader_; } 181 MockPrerenderingLoader* loader() { return loader_; }
178 MockOfflinePageModel* model() { return model_; } 182 MockOfflinePageModel* model() { return model_; }
179 bool completion_callback_called() { return completion_callback_called_; } 183 bool completion_callback_called() { return completion_callback_called_; }
180 Offliner::RequestStatus request_status() { return request_status_; } 184 Offliner::RequestStatus request_status() { return request_status_; }
181 OfflinerPolicy* policy() { return policy_; } 185 OfflinerPolicy* policy() { return policy_; }
186 bool cancel_callback_called() { return cancel_callback_called_; }
182 187
183 private: 188 private:
184 void OnCompletion(const SavePageRequest& request, 189 void OnCompletion(const SavePageRequest& request,
185 Offliner::RequestStatus status); 190 Offliner::RequestStatus status);
191 void OnCancel(int64_t offline_id);
186 192
187 content::TestBrowserThreadBundle thread_bundle_; 193 content::TestBrowserThreadBundle thread_bundle_;
188 TestingProfile profile_; 194 TestingProfile profile_;
189 std::unique_ptr<PrerenderingOffliner> offliner_; 195 std::unique_ptr<PrerenderingOffliner> offliner_;
190 // Not owned. 196 // Not owned.
191 MockPrerenderingLoader* loader_; 197 MockPrerenderingLoader* loader_;
192 MockOfflinePageModel* model_; 198 MockOfflinePageModel* model_;
193 bool completion_callback_called_; 199 bool completion_callback_called_;
200 bool cancel_callback_called_;
194 Offliner::RequestStatus request_status_; 201 Offliner::RequestStatus request_status_;
195 OfflinerPolicy* policy_; 202 OfflinerPolicy* policy_;
196 203
197 DISALLOW_COPY_AND_ASSIGN(PrerenderingOfflinerTest); 204 DISALLOW_COPY_AND_ASSIGN(PrerenderingOfflinerTest);
198 }; 205 };
199 206
200 PrerenderingOfflinerTest::PrerenderingOfflinerTest() 207 PrerenderingOfflinerTest::PrerenderingOfflinerTest()
201 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), 208 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
202 completion_callback_called_(false), 209 completion_callback_called_(false),
210 cancel_callback_called_(false),
203 request_status_(Offliner::RequestStatus::UNKNOWN) {} 211 request_status_(Offliner::RequestStatus::UNKNOWN) {}
204 212
205 PrerenderingOfflinerTest::~PrerenderingOfflinerTest() {} 213 PrerenderingOfflinerTest::~PrerenderingOfflinerTest() {}
206 214
207 void PrerenderingOfflinerTest::SetUp() { 215 void PrerenderingOfflinerTest::SetUp() {
208 model_ = new MockOfflinePageModel(); 216 model_ = new MockOfflinePageModel();
209 policy_ = new OfflinerPolicy(); 217 policy_ = new OfflinerPolicy();
210 offliner_.reset(new PrerenderingOffliner(profile(), policy_, model_)); 218 offliner_.reset(new PrerenderingOffliner(profile(), policy_, model_));
211 std::unique_ptr<MockPrerenderingLoader> mock_loader( 219 std::unique_ptr<MockPrerenderingLoader> mock_loader(
212 new MockPrerenderingLoader(nullptr)); 220 new MockPrerenderingLoader(nullptr));
213 loader_ = mock_loader.get(); 221 loader_ = mock_loader.get();
214 offliner_->SetLoaderForTesting(std::move(mock_loader)); 222 offliner_->SetLoaderForTesting(std::move(mock_loader));
215 } 223 }
216 224
217 void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request, 225 void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request,
218 Offliner::RequestStatus status) { 226 Offliner::RequestStatus status) {
219 DCHECK(!completion_callback_called_); // Expect single callback per request. 227 DCHECK(!completion_callback_called_); // Expect single callback per request.
220 completion_callback_called_ = true; 228 completion_callback_called_ = true;
221 request_status_ = status; 229 request_status_ = status;
222 } 230 }
223 231
232 void PrerenderingOfflinerTest::OnCancel(int64_t offline_id) {
233 DCHECK(!cancel_callback_called_);
234 cancel_callback_called_ = true;
235 }
236
224 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) { 237 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) {
225 base::Time creation_time = base::Time::Now(); 238 base::Time creation_time = base::Time::Now();
226 SavePageRequest request( 239 SavePageRequest request(
227 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested); 240 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested);
228 EXPECT_FALSE(offliner()->LoadAndSave(request, callback())); 241 EXPECT_FALSE(offliner()->LoadAndSave(request, callback()));
229 EXPECT_TRUE(loader()->IsIdle()); 242 EXPECT_TRUE(loader()->IsIdle());
230 } 243 }
231 244
232 TEST_F(PrerenderingOfflinerTest, LoadAndSavePrerenderingDisabled) { 245 TEST_F(PrerenderingOfflinerTest, LoadAndSavePrerenderingDisabled) {
233 base::Time creation_time = base::Time::Now(); 246 base::Time creation_time = base::Time::Now();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 EXPECT_FALSE(SaveInProgress()); 291 EXPECT_FALSE(SaveInProgress());
279 } 292 }
280 293
281 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) { 294 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) {
282 base::Time creation_time = base::Time::Now(); 295 base::Time creation_time = base::Time::Now();
283 SavePageRequest request( 296 SavePageRequest request(
284 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); 297 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
285 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 298 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
286 EXPECT_FALSE(loader()->IsIdle()); 299 EXPECT_FALSE(loader()->IsIdle());
287 300
288 offliner()->Cancel(); 301 offliner()->Cancel(cancel_callback());
302 PumpLoop();
303 EXPECT_TRUE(cancel_callback_called());
289 EXPECT_TRUE(loader()->IsIdle()); 304 EXPECT_TRUE(loader()->IsIdle());
290 } 305 }
291 306
292 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) { 307 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) {
293 base::Time creation_time = base::Time::Now(); 308 base::Time creation_time = base::Time::Now();
294 SavePageRequest request( 309 SavePageRequest request(
295 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); 310 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
296 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 311 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
297 EXPECT_FALSE(loader()->IsIdle()); 312 EXPECT_FALSE(loader()->IsIdle());
298 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); 313 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
299 314
300 loader()->CompleteLoadingAsLoaded(); 315 loader()->CompleteLoadingAsLoaded();
301 PumpLoop(); 316 PumpLoop();
302 EXPECT_FALSE(completion_callback_called()); 317 EXPECT_FALSE(completion_callback_called());
303 EXPECT_TRUE(loader()->IsLoaded()); 318 EXPECT_TRUE(loader()->IsLoaded());
304 EXPECT_TRUE(SaveInProgress()); 319 EXPECT_TRUE(SaveInProgress());
305 320
306 offliner()->Cancel(); 321 offliner()->Cancel(cancel_callback());
307 PumpLoop(); 322 PumpLoop();
308 EXPECT_FALSE(completion_callback_called()); 323 EXPECT_FALSE(completion_callback_called());
324 EXPECT_TRUE(cancel_callback_called());
309 EXPECT_FALSE(loader()->IsLoaded()); 325 EXPECT_FALSE(loader()->IsLoaded());
310 // Note: save still in progress since it does not support canceling. 326 // Note: save still in progress since it does not support canceling.
311 EXPECT_TRUE(SaveInProgress()); 327 EXPECT_TRUE(SaveInProgress());
312 328
313 // Subsequent save callback causes no harm (no crash and no callback). 329 // Subsequent save callback causes no harm (no crash and no callback).
314 model()->CompleteSavingAsArchiveCreationFailed(); 330 model()->CompleteSavingAsArchiveCreationFailed();
315 PumpLoop(); 331 PumpLoop();
316 EXPECT_FALSE(completion_callback_called()); 332 EXPECT_FALSE(completion_callback_called());
317 EXPECT_TRUE(loader()->IsIdle()); 333 EXPECT_TRUE(loader()->IsIdle());
318 EXPECT_FALSE(SaveInProgress()); 334 EXPECT_FALSE(SaveInProgress());
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 base::Time creation_time = base::Time::Now(); 494 base::Time creation_time = base::Time::Now();
479 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, 495 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
480 kUserRequested); 496 kUserRequested);
481 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 497 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
482 loader()->set_is_lowbar_met(true); 498 loader()->set_is_lowbar_met(true);
483 EXPECT_FALSE(offliner()->HandleTimeout(request)); 499 EXPECT_FALSE(offliner()->HandleTimeout(request));
484 EXPECT_FALSE(loader()->start_snapshot_called()); 500 EXPECT_FALSE(loader()->start_snapshot_called());
485 } 501 }
486 502
487 } // namespace offline_pages 503 } // 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