| OLD | NEW |
| 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 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 } | 250 } |
| 251 | 251 |
| 252 void PrerenderingOfflinerTest::OnProgress(const SavePageRequest& request, | 252 void PrerenderingOfflinerTest::OnProgress(const SavePageRequest& request, |
| 253 int64_t bytes) {} | 253 int64_t bytes) {} |
| 254 | 254 |
| 255 void PrerenderingOfflinerTest::OnCancel(const SavePageRequest& request) { | 255 void PrerenderingOfflinerTest::OnCancel(const SavePageRequest& request) { |
| 256 DCHECK(!cancel_callback_called_); | 256 DCHECK(!cancel_callback_called_); |
| 257 cancel_callback_called_ = true; | 257 cancel_callback_called_ = true; |
| 258 } | 258 } |
| 259 | 259 |
| 260 TEST_F(PrerenderingOfflinerTest, DISABLED_LoadAndSaveBadUrl) { | 260 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) { |
| 261 base::Time creation_time = base::Time::Now(); | 261 base::Time creation_time = base::Time::Now(); |
| 262 SavePageRequest request( | 262 SavePageRequest request( |
| 263 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested); | 263 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested); |
| 264 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), | 264 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), |
| 265 progress_callback())); | 265 progress_callback())); |
| 266 EXPECT_TRUE(loader()->IsIdle()); | 266 EXPECT_TRUE(loader()->IsIdle()); |
| 267 } | 267 } |
| 268 | 268 |
| 269 TEST_F(PrerenderingOfflinerTest, DISABLED_LoadAndSavePrerenderingDisabled) { | 269 TEST_F(PrerenderingOfflinerTest, LoadAndSavePrerenderingDisabled) { |
| 270 base::Time creation_time = base::Time::Now(); | 270 base::Time creation_time = base::Time::Now(); |
| 271 SavePageRequest request( | 271 SavePageRequest request( |
| 272 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); | 272 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); |
| 273 loader()->DisablePrerendering(); | 273 loader()->DisablePrerendering(); |
| 274 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), | 274 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), |
| 275 progress_callback())); | 275 progress_callback())); |
| 276 EXPECT_TRUE(loader()->IsIdle()); | 276 EXPECT_TRUE(loader()->IsIdle()); |
| 277 } | 277 } |
| 278 | 278 |
| 279 TEST_F(PrerenderingOfflinerTest, | 279 TEST_F(PrerenderingOfflinerTest, |
| 280 DISABLED_LoadAndSaveBlockThirdPartyCookiesForCustomTabs) { | 280 LoadAndSaveBlockThirdPartyCookiesForCustomTabs) { |
| 281 base::Time creation_time = base::Time::Now(); | 281 base::Time creation_time = base::Time::Now(); |
| 282 ClientId custom_tabs_client_id("custom_tabs", "88"); | 282 ClientId custom_tabs_client_id("custom_tabs", "88"); |
| 283 SavePageRequest request(kRequestId, kHttpUrl, custom_tabs_client_id, | 283 SavePageRequest request(kRequestId, kHttpUrl, custom_tabs_client_id, |
| 284 creation_time, kUserRequested); | 284 creation_time, kUserRequested); |
| 285 profile()->GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); | 285 profile()->GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); |
| 286 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), | 286 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), |
| 287 progress_callback())); | 287 progress_callback())); |
| 288 EXPECT_TRUE(loader()->IsIdle()); | 288 EXPECT_TRUE(loader()->IsIdle()); |
| 289 } | 289 } |
| 290 | 290 |
| 291 TEST_F(PrerenderingOfflinerTest, | 291 TEST_F(PrerenderingOfflinerTest, |
| 292 DISABLED_LoadAndSaveBlockOnDisabledPrerendererForCustomTabs) { | 292 LoadAndSaveBlockOnDisabledPrerendererForCustomTabs) { |
| 293 base::Time creation_time = base::Time::Now(); | 293 base::Time creation_time = base::Time::Now(); |
| 294 ClientId custom_tabs_client_id("custom_tabs", "88"); | 294 ClientId custom_tabs_client_id("custom_tabs", "88"); |
| 295 SavePageRequest request(kRequestId, kHttpUrl, custom_tabs_client_id, | 295 SavePageRequest request(kRequestId, kHttpUrl, custom_tabs_client_id, |
| 296 creation_time, kUserRequested); | 296 creation_time, kUserRequested); |
| 297 profile()->GetPrefs()->SetInteger( | 297 profile()->GetPrefs()->SetInteger( |
| 298 prefs::kNetworkPredictionOptions, | 298 prefs::kNetworkPredictionOptions, |
| 299 chrome_browser_net::NETWORK_PREDICTION_NEVER); | 299 chrome_browser_net::NETWORK_PREDICTION_NEVER); |
| 300 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), | 300 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), |
| 301 progress_callback())); | 301 progress_callback())); |
| 302 EXPECT_TRUE(loader()->IsIdle()); | 302 EXPECT_TRUE(loader()->IsIdle()); |
| 303 } | 303 } |
| 304 | 304 |
| 305 TEST_F(PrerenderingOfflinerTest, DISABLED_LoadAndSaveLoadStartedButFails) { | 305 TEST_F(PrerenderingOfflinerTest, LoadAndSaveLoadStartedButFails) { |
| 306 base::Time creation_time = base::Time::Now(); | 306 base::Time creation_time = base::Time::Now(); |
| 307 SavePageRequest request( | 307 SavePageRequest request( |
| 308 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); | 308 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); |
| 309 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 309 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 310 progress_callback())); | 310 progress_callback())); |
| 311 EXPECT_FALSE(loader()->IsIdle()); | 311 EXPECT_FALSE(loader()->IsIdle()); |
| 312 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); | 312 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); |
| 313 | 313 |
| 314 loader()->CompleteLoadingAsFailed(); | 314 loader()->CompleteLoadingAsFailed(); |
| 315 PumpLoop(); | 315 PumpLoop(); |
| 316 EXPECT_TRUE(completion_callback_called()); | 316 EXPECT_TRUE(completion_callback_called()); |
| 317 EXPECT_EQ(Offliner::RequestStatus::LOADING_FAILED, request_status()); | 317 EXPECT_EQ(Offliner::RequestStatus::LOADING_FAILED, request_status()); |
| 318 EXPECT_TRUE(loader()->IsIdle()); | 318 EXPECT_TRUE(loader()->IsIdle()); |
| 319 EXPECT_FALSE(SaveInProgress()); | 319 EXPECT_FALSE(SaveInProgress()); |
| 320 } | 320 } |
| 321 | 321 |
| 322 TEST_F(PrerenderingOfflinerTest, DISABLED_CancelWhenLoading) { | 322 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) { |
| 323 base::Time creation_time = base::Time::Now(); | 323 base::Time creation_time = base::Time::Now(); |
| 324 SavePageRequest request( | 324 SavePageRequest request( |
| 325 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); | 325 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); |
| 326 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 326 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 327 progress_callback())); | 327 progress_callback())); |
| 328 EXPECT_FALSE(loader()->IsIdle()); | 328 EXPECT_FALSE(loader()->IsIdle()); |
| 329 | 329 |
| 330 offliner()->Cancel(cancel_callback()); | 330 offliner()->Cancel(cancel_callback()); |
| 331 PumpLoop(); | 331 PumpLoop(); |
| 332 EXPECT_TRUE(cancel_callback_called()); | 332 EXPECT_TRUE(cancel_callback_called()); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 | 427 |
| 428 loader()->CompleteLoadingAsCanceled(); | 428 loader()->CompleteLoadingAsCanceled(); |
| 429 PumpLoop(); | 429 PumpLoop(); |
| 430 EXPECT_TRUE(completion_callback_called()); | 430 EXPECT_TRUE(completion_callback_called()); |
| 431 EXPECT_EQ(Offliner::RequestStatus::LOADING_CANCELED, request_status()); | 431 EXPECT_EQ(Offliner::RequestStatus::LOADING_CANCELED, request_status()); |
| 432 EXPECT_FALSE(loader()->IsLoaded()); | 432 EXPECT_FALSE(loader()->IsLoaded()); |
| 433 // Note: save still in progress since it does not support canceling. | 433 // Note: save still in progress since it does not support canceling. |
| 434 EXPECT_TRUE(SaveInProgress()); | 434 EXPECT_TRUE(SaveInProgress()); |
| 435 } | 435 } |
| 436 | 436 |
| 437 TEST_F(PrerenderingOfflinerTest, | 437 TEST_F(PrerenderingOfflinerTest, ForegroundTransitionCancelsOnLowEndDevice) { |
| 438 DISABLED_ForegroundTransitionCancelsOnLowEndDevice) { | |
| 439 offliner()->SetLowEndDeviceForTesting(true); | 438 offliner()->SetLowEndDeviceForTesting(true); |
| 440 | 439 |
| 441 base::Time creation_time = base::Time::Now(); | 440 base::Time creation_time = base::Time::Now(); |
| 442 SavePageRequest request( | 441 SavePageRequest request( |
| 443 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); | 442 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); |
| 443 // LoadAndSave completes asynchronously, and notifies us via the |
| 444 // completion_callback() when it completes. |
| 444 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 445 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 445 progress_callback())); | 446 progress_callback())); |
| 446 EXPECT_FALSE(loader()->IsIdle()); | 447 EXPECT_FALSE(loader()->IsIdle()); |
| 447 | 448 |
| 448 offliner()->SetApplicationStateForTesting( | 449 offliner()->SetApplicationStateForTesting( |
| 449 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES); | 450 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES); |
| 450 | 451 |
| 452 // Wait until the completion callback arrives before checking postconditions. |
| 453 PumpLoop(); |
| 454 |
| 451 // Loading canceled on low-end device. | 455 // Loading canceled on low-end device. |
| 452 EXPECT_TRUE(loader()->IsIdle()); | 456 EXPECT_TRUE(loader()->IsIdle()); |
| 453 EXPECT_EQ(Offliner::RequestStatus::FOREGROUND_CANCELED, request_status()); | 457 EXPECT_EQ(Offliner::RequestStatus::FOREGROUND_CANCELED, request_status()); |
| 454 } | 458 } |
| 455 | 459 |
| 456 // TODO(crbug.com/712941): Flaky test. | 460 TEST_F(PrerenderingOfflinerTest, ForegroundTransitionIgnoredOnHighEndDevice) { |
| 457 TEST_F(PrerenderingOfflinerTest, | |
| 458 DISABLED_ForegroundTransitionIgnoredOnHighEndDevice) { | |
| 459 offliner()->SetLowEndDeviceForTesting(false); | 461 offliner()->SetLowEndDeviceForTesting(false); |
| 460 | 462 |
| 461 base::Time creation_time = base::Time::Now(); | 463 base::Time creation_time = base::Time::Now(); |
| 462 SavePageRequest request( | 464 SavePageRequest request( |
| 463 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); | 465 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); |
| 466 // LoadAndSave completes asynchronously, and notifies us via the |
| 467 // completion_callback() when it completes. |
| 464 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 468 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 465 progress_callback())); | 469 progress_callback())); |
| 466 EXPECT_FALSE(loader()->IsIdle()); | 470 EXPECT_FALSE(loader()->IsIdle()); |
| 467 | 471 |
| 468 offliner()->SetApplicationStateForTesting( | 472 offliner()->SetApplicationStateForTesting( |
| 469 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES); | 473 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES); |
| 470 | 474 |
| 475 // Wait until the completion callback arrives before checking postconditions. |
| 476 PumpLoop(); |
| 477 |
| 471 // Loader still loading since not low-end device. | 478 // Loader still loading since not low-end device. |
| 472 EXPECT_FALSE(loader()->IsIdle()); | 479 EXPECT_FALSE(loader()->IsIdle()); |
| 473 } | 480 } |
| 474 | 481 |
| 475 TEST_F(PrerenderingOfflinerTest, HandleTimeoutWithLowbarAndCompletedTriesMet) { | 482 TEST_F(PrerenderingOfflinerTest, HandleTimeoutWithLowbarAndCompletedTriesMet) { |
| 476 offliner()->SetLowEndDeviceForTesting(false); | 483 offliner()->SetLowEndDeviceForTesting(false); |
| 477 | 484 |
| 478 base::Time creation_time = base::Time::Now(); | 485 base::Time creation_time = base::Time::Now(); |
| 479 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, | 486 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, |
| 480 kUserRequested); | 487 kUserRequested); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 501 kUserRequested); | 508 kUserRequested); |
| 502 request.set_completed_attempt_count(policy()->GetMaxCompletedTries() - 1); | 509 request.set_completed_attempt_count(policy()->GetMaxCompletedTries() - 1); |
| 503 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 510 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 504 progress_callback())); | 511 progress_callback())); |
| 505 loader()->set_is_lowbar_met(true); | 512 loader()->set_is_lowbar_met(true); |
| 506 EXPECT_TRUE(offliner()->HandleTimeout(kRequestId)); | 513 EXPECT_TRUE(offliner()->HandleTimeout(kRequestId)); |
| 507 EXPECT_TRUE(loader()->start_snapshot_called()); | 514 EXPECT_TRUE(loader()->start_snapshot_called()); |
| 508 } | 515 } |
| 509 | 516 |
| 510 TEST_F(PrerenderingOfflinerTest, | 517 TEST_F(PrerenderingOfflinerTest, |
| 511 DISABLED_HandleTimeoutCompletedTriesMetWithoutLowbarMet) { | 518 HandleTimeoutCompletedTriesMetWithoutLowbarMet) { |
| 512 offliner()->SetLowEndDeviceForTesting(false); | 519 offliner()->SetLowEndDeviceForTesting(false); |
| 513 | 520 |
| 514 base::Time creation_time = base::Time::Now(); | 521 base::Time creation_time = base::Time::Now(); |
| 515 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, | 522 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, |
| 516 kUserRequested); | 523 kUserRequested); |
| 517 request.set_completed_attempt_count(policy()->GetMaxCompletedTries() - 1); | 524 request.set_completed_attempt_count(policy()->GetMaxCompletedTries() - 1); |
| 518 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 525 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 519 progress_callback())); | 526 progress_callback())); |
| 520 loader()->set_is_lowbar_met(false); | 527 loader()->set_is_lowbar_met(false); |
| 521 EXPECT_FALSE(offliner()->HandleTimeout(kRequestId)); | 528 EXPECT_FALSE(offliner()->HandleTimeout(kRequestId)); |
| 522 EXPECT_FALSE(loader()->start_snapshot_called()); | 529 EXPECT_FALSE(loader()->start_snapshot_called()); |
| 523 } | 530 } |
| 524 | 531 |
| 525 TEST_F(PrerenderingOfflinerTest, | 532 TEST_F(PrerenderingOfflinerTest, HandleTimeoutStartedTriesMetWithoutLowbarMet) { |
| 526 DISABLED_HandleTimeoutStartedTriesMetWithoutLowbarMet) { | |
| 527 offliner()->SetLowEndDeviceForTesting(false); | 533 offliner()->SetLowEndDeviceForTesting(false); |
| 528 | 534 |
| 529 base::Time creation_time = base::Time::Now(); | 535 base::Time creation_time = base::Time::Now(); |
| 530 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, | 536 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, |
| 531 kUserRequested); | 537 kUserRequested); |
| 532 request.set_started_attempt_count(policy()->GetMaxStartedTries() - 1); | 538 request.set_started_attempt_count(policy()->GetMaxStartedTries() - 1); |
| 533 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 539 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 534 progress_callback())); | 540 progress_callback())); |
| 535 loader()->set_is_lowbar_met(false); | 541 loader()->set_is_lowbar_met(false); |
| 536 EXPECT_FALSE(offliner()->HandleTimeout(kRequestId)); | 542 EXPECT_FALSE(offliner()->HandleTimeout(kRequestId)); |
| 537 EXPECT_FALSE(loader()->start_snapshot_called()); | 543 EXPECT_FALSE(loader()->start_snapshot_called()); |
| 538 } | 544 } |
| 539 | 545 |
| 540 TEST_F(PrerenderingOfflinerTest, HandleTimeoutWithLowbarAndStartedTriesMet) { | 546 TEST_F(PrerenderingOfflinerTest, HandleTimeoutWithLowbarAndStartedTriesMet) { |
| 541 offliner()->SetLowEndDeviceForTesting(false); | 547 offliner()->SetLowEndDeviceForTesting(false); |
| 542 | 548 |
| 543 base::Time creation_time = base::Time::Now(); | 549 base::Time creation_time = base::Time::Now(); |
| 544 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, | 550 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, |
| 545 kUserRequested); | 551 kUserRequested); |
| 546 request.set_started_attempt_count(policy()->GetMaxStartedTries() - 1); | 552 request.set_started_attempt_count(policy()->GetMaxStartedTries() - 1); |
| 547 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 553 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 548 progress_callback())); | 554 progress_callback())); |
| 549 loader()->set_is_lowbar_met(true); | 555 loader()->set_is_lowbar_met(true); |
| 550 EXPECT_TRUE(offliner()->HandleTimeout(kRequestId)); | 556 EXPECT_TRUE(offliner()->HandleTimeout(kRequestId)); |
| 551 EXPECT_TRUE(loader()->start_snapshot_called()); | 557 EXPECT_TRUE(loader()->start_snapshot_called()); |
| 552 } | 558 } |
| 553 | 559 |
| 554 TEST_F(PrerenderingOfflinerTest, DISABLED_HandleTimeoutWithOnlyLowbarMet) { | 560 TEST_F(PrerenderingOfflinerTest, HandleTimeoutWithOnlyLowbarMet) { |
| 555 offliner()->SetLowEndDeviceForTesting(false); | 561 offliner()->SetLowEndDeviceForTesting(false); |
| 556 | 562 |
| 557 base::Time creation_time = base::Time::Now(); | 563 base::Time creation_time = base::Time::Now(); |
| 558 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, | 564 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, |
| 559 kUserRequested); | 565 kUserRequested); |
| 560 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 566 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 561 progress_callback())); | 567 progress_callback())); |
| 562 loader()->set_is_lowbar_met(true); | 568 loader()->set_is_lowbar_met(true); |
| 563 EXPECT_FALSE(offliner()->HandleTimeout(kRequestId)); | 569 EXPECT_FALSE(offliner()->HandleTimeout(kRequestId)); |
| 564 EXPECT_FALSE(loader()->start_snapshot_called()); | 570 EXPECT_FALSE(loader()->start_snapshot_called()); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 PumpLoop(); | 617 PumpLoop(); |
| 612 EXPECT_EQ(Offliner::RequestStatus::SAVED, request_status()); | 618 EXPECT_EQ(Offliner::RequestStatus::SAVED, request_status()); |
| 613 | 619 |
| 614 // One extra part should be added if the flag is on. | 620 // One extra part should be added if the flag is on. |
| 615 content::MHTMLExtraParts* extra_parts = | 621 content::MHTMLExtraParts* extra_parts = |
| 616 content::MHTMLExtraParts::FromWebContents(loader()->web_contents()); | 622 content::MHTMLExtraParts::FromWebContents(loader()->web_contents()); |
| 617 EXPECT_EQ(extra_parts->size(), 1); | 623 EXPECT_EQ(extra_parts->size(), 1); |
| 618 } | 624 } |
| 619 | 625 |
| 620 } // namespace offline_pages | 626 } // namespace offline_pages |
| OLD | NEW |