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

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

Issue 2113383002: More detailed implementation of the RequestPicker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix merge Created 4 years, 5 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"
11 #include "base/sys_info.h" 11 #include "base/sys_info.h"
12 #include "base/threading/thread_task_runner_handle.h" 12 #include "base/threading/thread_task_runner_handle.h"
13 #include "chrome/browser/android/offline_pages/prerendering_loader.h" 13 #include "chrome/browser/android/offline_pages/prerendering_loader.h"
14 #include "chrome/test/base/testing_profile.h" 14 #include "chrome/test/base/testing_profile.h"
15 #include "components/offline_pages/background/offliner.h" 15 #include "components/offline_pages/background/offliner.h"
16 #include "components/offline_pages/background/save_page_request.h" 16 #include "components/offline_pages/background/save_page_request.h"
17 #include "components/offline_pages/stub_offline_page_model.h" 17 #include "components/offline_pages/stub_offline_page_model.h"
18 #include "content/public/test/test_browser_thread_bundle.h" 18 #include "content/public/test/test_browser_thread_bundle.h"
19 #include "content/public/test/web_contents_tester.h" 19 #include "content/public/test/web_contents_tester.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 21
22 namespace offline_pages { 22 namespace offline_pages {
23 23
24 namespace { 24 namespace {
25 const int64_t kRequestId = 7; 25 const int64_t kRequestId = 7;
26 const GURL kHttpUrl("http://tunafish.com"); 26 const GURL kHttpUrl("http://tunafish.com");
27 const GURL kFileUrl("file://sailfish.png"); 27 const GURL kFileUrl("file://sailfish.png");
28 const ClientId kClientId("AsyncLoading", "88"); 28 const ClientId kClientId("AsyncLoading", "88");
29 const bool kUserRequested = true;
29 30
30 // Mock Loader for testing the Offliner calls. 31 // Mock Loader for testing the Offliner calls.
31 class MockPrerenderingLoader : public PrerenderingLoader { 32 class MockPrerenderingLoader : public PrerenderingLoader {
32 public: 33 public:
33 explicit MockPrerenderingLoader(content::BrowserContext* browser_context) 34 explicit MockPrerenderingLoader(content::BrowserContext* browser_context)
34 : PrerenderingLoader(browser_context), 35 : PrerenderingLoader(browser_context),
35 can_prerender_(true), 36 can_prerender_(true),
36 mock_loading_(false), 37 mock_loading_(false),
37 mock_loaded_(false) {} 38 mock_loaded_(false) {}
38 ~MockPrerenderingLoader() override {} 39 ~MockPrerenderingLoader() override {}
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 193
193 void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request, 194 void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request,
194 Offliner::RequestStatus status) { 195 Offliner::RequestStatus status) {
195 DCHECK(!completion_callback_called_); // Expect single callback per request. 196 DCHECK(!completion_callback_called_); // Expect single callback per request.
196 completion_callback_called_ = true; 197 completion_callback_called_ = true;
197 request_status_ = status; 198 request_status_ = status;
198 } 199 }
199 200
200 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) { 201 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) {
201 base::Time creation_time = base::Time::Now(); 202 base::Time creation_time = base::Time::Now();
202 SavePageRequest request(kRequestId, kFileUrl, kClientId, creation_time); 203 SavePageRequest request(
204 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested);
203 EXPECT_FALSE(offliner()->LoadAndSave(request, callback())); 205 EXPECT_FALSE(offliner()->LoadAndSave(request, callback()));
204 EXPECT_TRUE(loader()->IsIdle()); 206 EXPECT_TRUE(loader()->IsIdle());
205 } 207 }
206 208
207 TEST_F(PrerenderingOfflinerTest, LoadAndSavePrerenderingDisabled) { 209 TEST_F(PrerenderingOfflinerTest, LoadAndSavePrerenderingDisabled) {
208 base::Time creation_time = base::Time::Now(); 210 base::Time creation_time = base::Time::Now();
209 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time); 211 SavePageRequest request(
212 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
210 loader()->DisablePrerendering(); 213 loader()->DisablePrerendering();
211 EXPECT_FALSE(offliner()->LoadAndSave(request, callback())); 214 EXPECT_FALSE(offliner()->LoadAndSave(request, callback()));
212 EXPECT_TRUE(loader()->IsIdle()); 215 EXPECT_TRUE(loader()->IsIdle());
213 } 216 }
214 217
215 TEST_F(PrerenderingOfflinerTest, LoadAndSaveLoadStartedButFails) { 218 TEST_F(PrerenderingOfflinerTest, LoadAndSaveLoadStartedButFails) {
216 base::Time creation_time = base::Time::Now(); 219 base::Time creation_time = base::Time::Now();
217 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time); 220 SavePageRequest request(
221 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
218 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 222 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
219 EXPECT_FALSE(loader()->IsIdle()); 223 EXPECT_FALSE(loader()->IsIdle());
220 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); 224 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
221 225
222 loader()->CompleteLoadingAsFailed(); 226 loader()->CompleteLoadingAsFailed();
223 PumpLoop(); 227 PumpLoop();
224 EXPECT_TRUE(completion_callback_called()); 228 EXPECT_TRUE(completion_callback_called());
225 EXPECT_EQ(Offliner::RequestStatus::PRERENDERING_FAILED, request_status()); 229 EXPECT_EQ(Offliner::RequestStatus::PRERENDERING_FAILED, request_status());
226 EXPECT_TRUE(loader()->IsIdle()); 230 EXPECT_TRUE(loader()->IsIdle());
227 EXPECT_FALSE(SaveInProgress()); 231 EXPECT_FALSE(SaveInProgress());
228 } 232 }
229 233
230 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) { 234 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) {
231 base::Time creation_time = base::Time::Now(); 235 base::Time creation_time = base::Time::Now();
232 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time); 236 SavePageRequest request(
237 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
233 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 238 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
234 EXPECT_FALSE(loader()->IsIdle()); 239 EXPECT_FALSE(loader()->IsIdle());
235 240
236 offliner()->Cancel(); 241 offliner()->Cancel();
237 EXPECT_TRUE(loader()->IsIdle()); 242 EXPECT_TRUE(loader()->IsIdle());
238 } 243 }
239 244
240 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) { 245 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) {
241 base::Time creation_time = base::Time::Now(); 246 base::Time creation_time = base::Time::Now();
242 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time); 247 SavePageRequest request(
248 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
243 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 249 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
244 EXPECT_FALSE(loader()->IsIdle()); 250 EXPECT_FALSE(loader()->IsIdle());
245 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); 251 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
246 252
247 loader()->CompleteLoadingAsLoaded(); 253 loader()->CompleteLoadingAsLoaded();
248 PumpLoop(); 254 PumpLoop();
249 EXPECT_FALSE(completion_callback_called()); 255 EXPECT_FALSE(completion_callback_called());
250 EXPECT_TRUE(loader()->IsLoaded()); 256 EXPECT_TRUE(loader()->IsLoaded());
251 EXPECT_TRUE(SaveInProgress()); 257 EXPECT_TRUE(SaveInProgress());
252 258
253 offliner()->Cancel(); 259 offliner()->Cancel();
254 PumpLoop(); 260 PumpLoop();
255 EXPECT_FALSE(completion_callback_called()); 261 EXPECT_FALSE(completion_callback_called());
256 EXPECT_FALSE(loader()->IsLoaded()); 262 EXPECT_FALSE(loader()->IsLoaded());
257 // Note: save still in progress since it does not support canceling. 263 // Note: save still in progress since it does not support canceling.
258 EXPECT_TRUE(SaveInProgress()); 264 EXPECT_TRUE(SaveInProgress());
259 265
260 // Subsequent save callback causes no harm (no crash and no callback). 266 // Subsequent save callback causes no harm (no crash and no callback).
261 model()->CompleteSavingAsArchiveCreationFailed(); 267 model()->CompleteSavingAsArchiveCreationFailed();
262 PumpLoop(); 268 PumpLoop();
263 EXPECT_FALSE(completion_callback_called()); 269 EXPECT_FALSE(completion_callback_called());
264 EXPECT_TRUE(loader()->IsIdle()); 270 EXPECT_TRUE(loader()->IsIdle());
265 EXPECT_FALSE(SaveInProgress()); 271 EXPECT_FALSE(SaveInProgress());
266 } 272 }
267 273
268 TEST_F(PrerenderingOfflinerTest, LoadAndSaveLoadedButSaveFails) { 274 TEST_F(PrerenderingOfflinerTest, LoadAndSaveLoadedButSaveFails) {
269 base::Time creation_time = base::Time::Now(); 275 base::Time creation_time = base::Time::Now();
270 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time); 276 SavePageRequest request(
277 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
271 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 278 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
272 EXPECT_FALSE(loader()->IsIdle()); 279 EXPECT_FALSE(loader()->IsIdle());
273 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); 280 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
274 281
275 loader()->CompleteLoadingAsLoaded(); 282 loader()->CompleteLoadingAsLoaded();
276 PumpLoop(); 283 PumpLoop();
277 EXPECT_FALSE(completion_callback_called()); 284 EXPECT_FALSE(completion_callback_called());
278 EXPECT_TRUE(loader()->IsLoaded()); 285 EXPECT_TRUE(loader()->IsLoaded());
279 EXPECT_TRUE(SaveInProgress()); 286 EXPECT_TRUE(SaveInProgress());
280 287
281 model()->CompleteSavingAsArchiveCreationFailed(); 288 model()->CompleteSavingAsArchiveCreationFailed();
282 PumpLoop(); 289 PumpLoop();
283 EXPECT_TRUE(completion_callback_called()); 290 EXPECT_TRUE(completion_callback_called());
284 EXPECT_EQ(Offliner::RequestStatus::SAVE_FAILED, request_status()); 291 EXPECT_EQ(Offliner::RequestStatus::SAVE_FAILED, request_status());
285 EXPECT_FALSE(loader()->IsLoaded()); 292 EXPECT_FALSE(loader()->IsLoaded());
286 EXPECT_FALSE(SaveInProgress()); 293 EXPECT_FALSE(SaveInProgress());
287 } 294 }
288 295
289 TEST_F(PrerenderingOfflinerTest, LoadAndSaveSuccessful) { 296 TEST_F(PrerenderingOfflinerTest, LoadAndSaveSuccessful) {
290 base::Time creation_time = base::Time::Now(); 297 base::Time creation_time = base::Time::Now();
291 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time); 298 SavePageRequest request(
299 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
292 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 300 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
293 EXPECT_FALSE(loader()->IsIdle()); 301 EXPECT_FALSE(loader()->IsIdle());
294 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); 302 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
295 303
296 loader()->CompleteLoadingAsLoaded(); 304 loader()->CompleteLoadingAsLoaded();
297 PumpLoop(); 305 PumpLoop();
298 EXPECT_FALSE(completion_callback_called()); 306 EXPECT_FALSE(completion_callback_called());
299 EXPECT_TRUE(loader()->IsLoaded()); 307 EXPECT_TRUE(loader()->IsLoaded());
300 EXPECT_TRUE(SaveInProgress()); 308 EXPECT_TRUE(SaveInProgress());
301 309
302 model()->CompleteSavingAsSuccess(); 310 model()->CompleteSavingAsSuccess();
303 PumpLoop(); 311 PumpLoop();
304 EXPECT_TRUE(completion_callback_called()); 312 EXPECT_TRUE(completion_callback_called());
305 EXPECT_EQ(Offliner::RequestStatus::SAVED, request_status()); 313 EXPECT_EQ(Offliner::RequestStatus::SAVED, request_status());
306 EXPECT_FALSE(loader()->IsLoaded()); 314 EXPECT_FALSE(loader()->IsLoaded());
307 EXPECT_FALSE(SaveInProgress()); 315 EXPECT_FALSE(SaveInProgress());
308 } 316 }
309 317
310 TEST_F(PrerenderingOfflinerTest, LoadAndSaveLoadedButThenCanceledFromLoader) { 318 TEST_F(PrerenderingOfflinerTest, LoadAndSaveLoadedButThenCanceledFromLoader) {
311 base::Time creation_time = base::Time::Now(); 319 base::Time creation_time = base::Time::Now();
312 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time); 320 SavePageRequest request(
321 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
313 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 322 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
314 EXPECT_FALSE(loader()->IsIdle()); 323 EXPECT_FALSE(loader()->IsIdle());
315 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); 324 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
316 325
317 loader()->CompleteLoadingAsLoaded(); 326 loader()->CompleteLoadingAsLoaded();
318 PumpLoop(); 327 PumpLoop();
319 EXPECT_FALSE(completion_callback_called()); 328 EXPECT_FALSE(completion_callback_called());
320 EXPECT_TRUE(loader()->IsLoaded()); 329 EXPECT_TRUE(loader()->IsLoaded());
321 EXPECT_TRUE(SaveInProgress()); 330 EXPECT_TRUE(SaveInProgress());
322 331
323 loader()->CompleteLoadingAsCanceled(); 332 loader()->CompleteLoadingAsCanceled();
324 PumpLoop(); 333 PumpLoop();
325 EXPECT_TRUE(completion_callback_called()); 334 EXPECT_TRUE(completion_callback_called());
326 EXPECT_EQ(Offliner::RequestStatus::PRERENDERING_CANCELED, request_status()); 335 EXPECT_EQ(Offliner::RequestStatus::PRERENDERING_CANCELED, request_status());
327 EXPECT_FALSE(loader()->IsLoaded()); 336 EXPECT_FALSE(loader()->IsLoaded());
328 // Note: save still in progress since it does not support canceling. 337 // Note: save still in progress since it does not support canceling.
329 EXPECT_TRUE(SaveInProgress()); 338 EXPECT_TRUE(SaveInProgress());
330 } 339 }
331 340
332 TEST_F(PrerenderingOfflinerTest, ForegroundTransitionCancelsOnLowEndDevice) { 341 TEST_F(PrerenderingOfflinerTest, ForegroundTransitionCancelsOnLowEndDevice) {
333 offliner()->SetLowEndDeviceForTesting(true); 342 offliner()->SetLowEndDeviceForTesting(true);
334 343
335 base::Time creation_time = base::Time::Now(); 344 base::Time creation_time = base::Time::Now();
336 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time); 345 SavePageRequest request(
346 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
337 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 347 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
338 EXPECT_FALSE(loader()->IsIdle()); 348 EXPECT_FALSE(loader()->IsIdle());
339 349
340 offliner()->SetApplicationStateForTesting( 350 offliner()->SetApplicationStateForTesting(
341 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES); 351 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES);
342 352
343 // Loading canceled on low-end device. 353 // Loading canceled on low-end device.
344 EXPECT_TRUE(loader()->IsIdle()); 354 EXPECT_TRUE(loader()->IsIdle());
345 EXPECT_EQ(Offliner::RequestStatus::FOREGROUND_CANCELED, request_status()); 355 EXPECT_EQ(Offliner::RequestStatus::FOREGROUND_CANCELED, request_status());
346 } 356 }
347 357
348 TEST_F(PrerenderingOfflinerTest, ForegroundTransitionIgnoredOnHighEndDevice) { 358 TEST_F(PrerenderingOfflinerTest, ForegroundTransitionIgnoredOnHighEndDevice) {
349 offliner()->SetLowEndDeviceForTesting(false); 359 offliner()->SetLowEndDeviceForTesting(false);
350 360
351 base::Time creation_time = base::Time::Now(); 361 base::Time creation_time = base::Time::Now();
352 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time); 362 SavePageRequest request(
363 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
353 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 364 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
354 EXPECT_FALSE(loader()->IsIdle()); 365 EXPECT_FALSE(loader()->IsIdle());
355 366
356 offliner()->SetApplicationStateForTesting( 367 offliner()->SetApplicationStateForTesting(
357 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES); 368 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES);
358 369
359 // Loader still loading since not low-end device. 370 // Loader still loading since not low-end device.
360 EXPECT_FALSE(loader()->IsIdle()); 371 EXPECT_FALSE(loader()->IsIdle());
361 } 372 }
362 373
363 } // namespace offline_pages 374 } // namespace offline_pages
OLDNEW
« no previous file with comments | « chrome/browser/android/offline_pages/offline_page_bridge.cc ('k') | components/offline_pages/background/device_conditions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698