| 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/offline_page_request_job.h" | 5 #include "chrome/browser/android/offline_pages/offline_page_request_job.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/feature_list.h" | 8 #include "base/feature_list.h" |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 | 232 |
| 233 void SimulateHasNetworkConnectivity(bool has_connectivity); | 233 void SimulateHasNetworkConnectivity(bool has_connectivity); |
| 234 void RunUntilIdle(); | 234 void RunUntilIdle(); |
| 235 | 235 |
| 236 void InterceptRequest(const GURL& url, | 236 void InterceptRequest(const GURL& url, |
| 237 const std::string& method, | 237 const std::string& method, |
| 238 const std::string& extra_header_name, | 238 const std::string& extra_header_name, |
| 239 const std::string& extra_header_value, | 239 const std::string& extra_header_value, |
| 240 content::ResourceType resource_type); | 240 content::ResourceType resource_type); |
| 241 | 241 |
| 242 void VerifyInfo(bool should_use_offline, int64_t offline_id); |
| 243 |
| 242 void ExpectAggregatedRequestResultHistogram( | 244 void ExpectAggregatedRequestResultHistogram( |
| 243 OfflinePageRequestJob::AggregatedRequestResult result); | 245 OfflinePageRequestJob::AggregatedRequestResult result); |
| 244 | 246 |
| 245 net::TestURLRequestContext* url_request_context() { | 247 net::TestURLRequestContext* url_request_context() { |
| 246 return test_url_request_context_.get(); | 248 return test_url_request_context_.get(); |
| 247 } | 249 } |
| 248 Profile* profile() { return profile_; } | 250 Profile* profile() { return profile_; } |
| 249 OfflinePageTabHelper* offline_page_tab_helper() const { | 251 OfflinePageTabHelper* offline_page_tab_helper() const { |
| 250 return offline_page_tab_helper_; | 252 return offline_page_tab_helper_; |
| 251 } | 253 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 265 content::ResourceType resource_type); | 267 content::ResourceType resource_type); |
| 266 void ReadCompleted(int bytes_read); | 268 void ReadCompleted(int bytes_read); |
| 267 | 269 |
| 268 // Runs on IO thread. | 270 // Runs on IO thread. |
| 269 void InterceptRequestOnIO(const GURL& url, | 271 void InterceptRequestOnIO(const GURL& url, |
| 270 const std::string& method, | 272 const std::string& method, |
| 271 const std::string& extra_header_name, | 273 const std::string& extra_header_name, |
| 272 const std::string& extra_header_value, | 274 const std::string& extra_header_value, |
| 273 content::ResourceType resource_type); | 275 content::ResourceType resource_type); |
| 274 void ReadCompletedOnIO(int bytes_read); | 276 void ReadCompletedOnIO(int bytes_read); |
| 277 void VerifyInfoOnIO(bool should_use_offline, int64_t offline_id); |
| 275 | 278 |
| 276 content::TestBrowserThreadBundle thread_bundle_; | 279 content::TestBrowserThreadBundle thread_bundle_; |
| 277 base::SimpleTestClock clock_; | 280 base::SimpleTestClock clock_; |
| 278 std::unique_ptr<TestNetworkChangeNotifier> network_change_notifier_; | 281 std::unique_ptr<TestNetworkChangeNotifier> network_change_notifier_; |
| 279 std::unique_ptr<net::TestURLRequestContext> test_url_request_context_; | 282 std::unique_ptr<net::TestURLRequestContext> test_url_request_context_; |
| 280 net::URLRequestJobFactoryImpl url_request_job_factory_; | 283 net::URLRequestJobFactoryImpl url_request_job_factory_; |
| 281 std::unique_ptr<net::URLRequestInterceptingJobFactory> | 284 std::unique_ptr<net::URLRequestInterceptingJobFactory> |
| 282 intercepting_job_factory_; | 285 intercepting_job_factory_; |
| 283 std::unique_ptr<TestURLRequestDelegate> url_request_delegate_; | 286 std::unique_ptr<TestURLRequestDelegate> url_request_delegate_; |
| 284 std::unique_ptr<TestPreviewsDecider> test_previews_decider_; | 287 std::unique_ptr<TestPreviewsDecider> test_previews_decider_; |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 content::ResourceType resource_type) { | 470 content::ResourceType resource_type) { |
| 468 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 471 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 469 | 472 |
| 470 content::BrowserThread::PostTask( | 473 content::BrowserThread::PostTask( |
| 471 content::BrowserThread::IO, FROM_HERE, | 474 content::BrowserThread::IO, FROM_HERE, |
| 472 base::Bind(&OfflinePageRequestJobTest::InterceptRequestOnIO, | 475 base::Bind(&OfflinePageRequestJobTest::InterceptRequestOnIO, |
| 473 base::Unretained(this), url, method, extra_header_name, | 476 base::Unretained(this), url, method, extra_header_name, |
| 474 extra_header_value, resource_type)); | 477 extra_header_value, resource_type)); |
| 475 } | 478 } |
| 476 | 479 |
| 480 void OfflinePageRequestJobTest::VerifyInfoOnIO(bool should_use_offline, |
| 481 int64_t offline_id) { |
| 482 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 483 EXPECT_EQ(should_use_offline, !!LoadedOfflinePageInfo::GetInfo(*request_)); |
| 484 if (should_use_offline) { |
| 485 EXPECT_EQ( |
| 486 offline_id, |
| 487 LoadedOfflinePageInfo::GetInfo(*request_)->offline_page()->offline_id); |
| 488 } |
| 489 } |
| 490 |
| 491 void OfflinePageRequestJobTest::VerifyInfo(bool should_use_offline, |
| 492 int64_t offline_id) { |
| 493 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 494 |
| 495 content::BrowserThread::PostTask( |
| 496 content::BrowserThread::IO, FROM_HERE, |
| 497 base::Bind(&OfflinePageRequestJobTest::VerifyInfoOnIO, |
| 498 base::Unretained(this), should_use_offline, offline_id)); |
| 499 } |
| 500 |
| 477 void OfflinePageRequestJobTest::ReadCompletedOnIO(int bytes_read) { | 501 void OfflinePageRequestJobTest::ReadCompletedOnIO(int bytes_read) { |
| 478 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 502 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 479 | 503 |
| 480 content::BrowserThread::PostTask( | 504 content::BrowserThread::PostTask( |
| 481 content::BrowserThread::UI, FROM_HERE, | 505 content::BrowserThread::UI, FROM_HERE, |
| 482 base::Bind(&OfflinePageRequestJobTest::ReadCompleted, | 506 base::Bind(&OfflinePageRequestJobTest::ReadCompleted, |
| 483 base::Unretained(this), bytes_read)); | 507 base::Unretained(this), bytes_read)); |
| 484 } | 508 } |
| 485 | 509 |
| 486 void OfflinePageRequestJobTest::ReadCompleted(int bytes_read) { | 510 void OfflinePageRequestJobTest::ReadCompleted(int bytes_read) { |
| 487 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 511 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 488 | 512 |
| 489 bytes_read_ = bytes_read; | 513 bytes_read_ = bytes_read; |
| 490 base::ThreadTaskRunnerHandle::Get()->PostTask( | 514 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 491 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure()); | 515 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure()); |
| 492 } | 516 } |
| 493 | 517 |
| 494 TEST_F(OfflinePageRequestJobTest, FailedToCreateRequestJob) { | 518 TEST_F(OfflinePageRequestJobTest, FailedToCreateRequestJob) { |
| 495 SimulateHasNetworkConnectivity(false); | 519 SimulateHasNetworkConnectivity(false); |
| 496 | 520 |
| 497 // Must be http/https URL. | 521 // Must be http/https URL. |
| 498 InterceptRequest(GURL("ftp://host/doc"), "GET", "", "", | 522 InterceptRequest(GURL("ftp://host/doc"), "GET", "", "", |
| 499 content::RESOURCE_TYPE_MAIN_FRAME); | 523 content::RESOURCE_TYPE_MAIN_FRAME); |
| 500 base::RunLoop().Run(); | 524 base::RunLoop().Run(); |
| 501 EXPECT_EQ(0, bytes_read()); | 525 EXPECT_EQ(0, bytes_read()); |
| 502 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 526 VerifyInfo(false, 0); |
| 527 base::RunLoop().RunUntilIdle(); |
| 503 | 528 |
| 504 InterceptRequest(GURL("file:///path/doc"), "GET", "", "", | 529 InterceptRequest(GURL("file:///path/doc"), "GET", "", "", |
| 505 content::RESOURCE_TYPE_MAIN_FRAME); | 530 content::RESOURCE_TYPE_MAIN_FRAME); |
| 506 base::RunLoop().Run(); | 531 base::RunLoop().Run(); |
| 507 EXPECT_EQ(0, bytes_read()); | 532 EXPECT_EQ(0, bytes_read()); |
| 508 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 533 VerifyInfo(false, 0); |
| 534 base::RunLoop().RunUntilIdle(); |
| 509 | 535 |
| 510 // Must be GET method. | 536 // Must be GET method. |
| 511 InterceptRequest( | 537 InterceptRequest( |
| 512 kTestUrl, "POST", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 538 kTestUrl, "POST", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 513 base::RunLoop().Run(); | 539 base::RunLoop().Run(); |
| 514 EXPECT_EQ(0, bytes_read()); | 540 EXPECT_EQ(0, bytes_read()); |
| 515 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 541 VerifyInfo(false, 0); |
| 542 base::RunLoop().RunUntilIdle(); |
| 516 | 543 |
| 517 InterceptRequest( | 544 InterceptRequest( |
| 518 kTestUrl, "HEAD", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 545 kTestUrl, "HEAD", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 519 base::RunLoop().Run(); | 546 base::RunLoop().Run(); |
| 520 EXPECT_EQ(0, bytes_read()); | 547 EXPECT_EQ(0, bytes_read()); |
| 521 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 548 VerifyInfo(false, 0); |
| 549 base::RunLoop().RunUntilIdle(); |
| 522 | 550 |
| 523 // Must be main resource. | 551 // Must be main resource. |
| 524 InterceptRequest( | 552 InterceptRequest( |
| 525 kTestUrl, "POST", "", "", content::RESOURCE_TYPE_SUB_FRAME); | 553 kTestUrl, "POST", "", "", content::RESOURCE_TYPE_SUB_FRAME); |
| 526 base::RunLoop().Run(); | 554 base::RunLoop().Run(); |
| 527 EXPECT_EQ(0, bytes_read()); | 555 EXPECT_EQ(0, bytes_read()); |
| 528 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 556 VerifyInfo(false, 0); |
| 557 base::RunLoop().RunUntilIdle(); |
| 529 | 558 |
| 530 InterceptRequest( | 559 InterceptRequest( |
| 531 kTestUrl, "POST", "", "", content::RESOURCE_TYPE_IMAGE); | 560 kTestUrl, "POST", "", "", content::RESOURCE_TYPE_IMAGE); |
| 532 base::RunLoop().Run(); | 561 base::RunLoop().Run(); |
| 533 EXPECT_EQ(0, bytes_read()); | 562 EXPECT_EQ(0, bytes_read()); |
| 534 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 563 VerifyInfo(false, 0); |
| 564 base::RunLoop().RunUntilIdle(); |
| 535 } | 565 } |
| 536 | 566 |
| 537 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnDisconnectedNetwork) { | 567 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnDisconnectedNetwork) { |
| 538 SimulateHasNetworkConnectivity(false); | 568 SimulateHasNetworkConnectivity(false); |
| 539 | 569 |
| 540 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 570 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 541 base::RunLoop().Run(); | 571 base::RunLoop().Run(); |
| 542 | 572 |
| 543 EXPECT_EQ(kTestFileSize2, bytes_read()); | 573 EXPECT_EQ(kTestFileSize2, bytes_read()); |
| 544 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 574 VerifyInfo(true, offline_id2()); |
| 545 EXPECT_EQ(offline_id2(), | 575 base::RunLoop().RunUntilIdle(); |
| 546 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 576 |
| 547 ExpectAggregatedRequestResultHistogram( | 577 ExpectAggregatedRequestResultHistogram( |
| 548 OfflinePageRequestJob::AggregatedRequestResult:: | 578 OfflinePageRequestJob::AggregatedRequestResult:: |
| 549 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK); | 579 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK); |
| 550 } | 580 } |
| 551 | 581 |
| 552 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnDisconnectedNetwork) { | 582 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnDisconnectedNetwork) { |
| 553 SimulateHasNetworkConnectivity(false); | 583 SimulateHasNetworkConnectivity(false); |
| 554 | 584 |
| 555 InterceptRequest(kTestUrl2, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 585 InterceptRequest(kTestUrl2, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 556 base::RunLoop().Run(); | 586 base::RunLoop().Run(); |
| 557 | 587 |
| 558 EXPECT_EQ(0, bytes_read()); | 588 EXPECT_EQ(0, bytes_read()); |
| 559 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 589 VerifyInfo(false, 0); |
| 590 base::RunLoop().RunUntilIdle(); |
| 591 |
| 560 ExpectAggregatedRequestResultHistogram( | 592 ExpectAggregatedRequestResultHistogram( |
| 561 OfflinePageRequestJob::AggregatedRequestResult:: | 593 OfflinePageRequestJob::AggregatedRequestResult:: |
| 562 PAGE_NOT_FOUND_ON_DISCONNECTED_NETWORK); | 594 PAGE_NOT_FOUND_ON_DISCONNECTED_NETWORK); |
| 563 } | 595 } |
| 564 | 596 |
| 565 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnProhibitivelySlowNetwork) { | 597 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnProhibitivelySlowNetwork) { |
| 566 SimulateHasNetworkConnectivity(true); | 598 SimulateHasNetworkConnectivity(true); |
| 567 | 599 |
| 568 test_previews_decider()->set_should_allow_preview(true); | 600 test_previews_decider()->set_should_allow_preview(true); |
| 569 | 601 |
| 570 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 602 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 571 base::RunLoop().Run(); | 603 base::RunLoop().Run(); |
| 572 | 604 |
| 573 EXPECT_EQ(kTestFileSize2, bytes_read()); | 605 EXPECT_EQ(kTestFileSize2, bytes_read()); |
| 574 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 606 VerifyInfo(true, offline_id2()); |
| 575 EXPECT_EQ(offline_id2(), | 607 base::RunLoop().RunUntilIdle(); |
| 576 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 608 |
| 577 ExpectAggregatedRequestResultHistogram( | 609 ExpectAggregatedRequestResultHistogram( |
| 578 OfflinePageRequestJob::AggregatedRequestResult:: | 610 OfflinePageRequestJob::AggregatedRequestResult:: |
| 579 SHOW_OFFLINE_ON_PROHIBITIVELY_SLOW_NETWORK); | 611 SHOW_OFFLINE_ON_PROHIBITIVELY_SLOW_NETWORK); |
| 580 test_previews_decider()->set_should_allow_preview(false); | 612 test_previews_decider()->set_should_allow_preview(false); |
| 581 } | 613 } |
| 582 | 614 |
| 583 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnProhibitivelySlowNetwork) { | 615 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnProhibitivelySlowNetwork) { |
| 584 SimulateHasNetworkConnectivity(true); | 616 SimulateHasNetworkConnectivity(true); |
| 585 | 617 |
| 586 test_previews_decider()->set_should_allow_preview(true); | 618 test_previews_decider()->set_should_allow_preview(true); |
| 587 | 619 |
| 588 InterceptRequest(kTestUrl2, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 620 InterceptRequest(kTestUrl2, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 589 base::RunLoop().Run(); | 621 base::RunLoop().Run(); |
| 590 | 622 |
| 591 EXPECT_EQ(0, bytes_read()); | 623 EXPECT_EQ(0, bytes_read()); |
| 592 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 624 VerifyInfo(false, 0); |
| 625 base::RunLoop().RunUntilIdle(); |
| 626 |
| 593 ExpectAggregatedRequestResultHistogram( | 627 ExpectAggregatedRequestResultHistogram( |
| 594 OfflinePageRequestJob::AggregatedRequestResult:: | 628 OfflinePageRequestJob::AggregatedRequestResult:: |
| 595 PAGE_NOT_FOUND_ON_PROHIBITIVELY_SLOW_NETWORK); | 629 PAGE_NOT_FOUND_ON_PROHIBITIVELY_SLOW_NETWORK); |
| 596 test_previews_decider()->set_should_allow_preview(false); | 630 test_previews_decider()->set_should_allow_preview(false); |
| 597 } | 631 } |
| 598 | 632 |
| 599 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnFlakyNetwork) { | 633 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnFlakyNetwork) { |
| 600 SimulateHasNetworkConnectivity(true); | 634 SimulateHasNetworkConnectivity(true); |
| 601 | 635 |
| 602 // When custom offline header exists and contains "reason=error", it means | 636 // When custom offline header exists and contains "reason=error", it means |
| 603 // that net error is hit in last request due to flaky network. | 637 // that net error is hit in last request due to flaky network. |
| 604 InterceptRequest( | 638 InterceptRequest( |
| 605 kTestUrl, | 639 kTestUrl, |
| 606 "GET", | 640 "GET", |
| 607 kOfflinePageHeader, | 641 kOfflinePageHeader, |
| 608 std::string(kOfflinePageHeaderReasonKey) + "=" + | 642 std::string(kOfflinePageHeaderReasonKey) + "=" + |
| 609 kOfflinePageHeaderReasonValueDueToNetError, | 643 kOfflinePageHeaderReasonValueDueToNetError, |
| 610 content::RESOURCE_TYPE_MAIN_FRAME); | 644 content::RESOURCE_TYPE_MAIN_FRAME); |
| 611 base::RunLoop().Run(); | 645 base::RunLoop().Run(); |
| 612 | 646 |
| 613 EXPECT_EQ(kTestFileSize2, bytes_read()); | 647 EXPECT_EQ(kTestFileSize2, bytes_read()); |
| 614 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 648 VerifyInfo(true, offline_id2()); |
| 615 EXPECT_EQ(offline_id2(), | 649 base::RunLoop().RunUntilIdle(); |
| 616 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 650 |
| 617 ExpectAggregatedRequestResultHistogram( | 651 ExpectAggregatedRequestResultHistogram( |
| 618 OfflinePageRequestJob::AggregatedRequestResult:: | 652 OfflinePageRequestJob::AggregatedRequestResult:: |
| 619 SHOW_OFFLINE_ON_FLAKY_NETWORK); | 653 SHOW_OFFLINE_ON_FLAKY_NETWORK); |
| 620 } | 654 } |
| 621 | 655 |
| 622 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnFlakyNetwork) { | 656 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnFlakyNetwork) { |
| 623 SimulateHasNetworkConnectivity(true); | 657 SimulateHasNetworkConnectivity(true); |
| 624 | 658 |
| 625 // When custom offline header exists and contains "reason=error", it means | 659 // When custom offline header exists and contains "reason=error", it means |
| 626 // that net error is hit in last request due to flaky network. | 660 // that net error is hit in last request due to flaky network. |
| 627 InterceptRequest( | 661 InterceptRequest( |
| 628 kTestUrl2, | 662 kTestUrl2, |
| 629 "GET", | 663 "GET", |
| 630 kOfflinePageHeader, | 664 kOfflinePageHeader, |
| 631 std::string(kOfflinePageHeaderReasonKey) + "=" + | 665 std::string(kOfflinePageHeaderReasonKey) + "=" + |
| 632 kOfflinePageHeaderReasonValueDueToNetError, | 666 kOfflinePageHeaderReasonValueDueToNetError, |
| 633 content::RESOURCE_TYPE_MAIN_FRAME); | 667 content::RESOURCE_TYPE_MAIN_FRAME); |
| 634 base::RunLoop().Run(); | 668 base::RunLoop().Run(); |
| 635 | 669 |
| 636 EXPECT_EQ(0, bytes_read()); | 670 EXPECT_EQ(0, bytes_read()); |
| 637 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 671 VerifyInfo(false, 0); |
| 672 base::RunLoop().RunUntilIdle(); |
| 673 |
| 638 ExpectAggregatedRequestResultHistogram( | 674 ExpectAggregatedRequestResultHistogram( |
| 639 OfflinePageRequestJob::AggregatedRequestResult:: | 675 OfflinePageRequestJob::AggregatedRequestResult:: |
| 640 PAGE_NOT_FOUND_ON_FLAKY_NETWORK); | 676 PAGE_NOT_FOUND_ON_FLAKY_NETWORK); |
| 641 } | 677 } |
| 642 | 678 |
| 643 TEST_F(OfflinePageRequestJobTest, ForceLoadOfflinePageOnConnectedNetwork) { | 679 TEST_F(OfflinePageRequestJobTest, ForceLoadOfflinePageOnConnectedNetwork) { |
| 644 SimulateHasNetworkConnectivity(true); | 680 SimulateHasNetworkConnectivity(true); |
| 645 | 681 |
| 646 // When custom offline header exists and contains value other than | 682 // When custom offline header exists and contains value other than |
| 647 // "reason=error", it means that offline page is forced to load. | 683 // "reason=error", it means that offline page is forced to load. |
| 648 InterceptRequest( | 684 InterceptRequest( |
| 649 kTestUrl, | 685 kTestUrl, |
| 650 "GET", | 686 "GET", |
| 651 kOfflinePageHeader, | 687 kOfflinePageHeader, |
| 652 std::string(kOfflinePageHeaderReasonKey) + "=download", | 688 std::string(kOfflinePageHeaderReasonKey) + "=download", |
| 653 content::RESOURCE_TYPE_MAIN_FRAME); | 689 content::RESOURCE_TYPE_MAIN_FRAME); |
| 654 base::RunLoop().Run(); | 690 base::RunLoop().Run(); |
| 655 | 691 |
| 656 EXPECT_EQ(kTestFileSize2, bytes_read()); | 692 EXPECT_EQ(kTestFileSize2, bytes_read()); |
| 657 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 693 VerifyInfo(true, offline_id2()); |
| 658 EXPECT_EQ(offline_id2(), | 694 base::RunLoop().RunUntilIdle(); |
| 659 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 695 |
| 660 ExpectAggregatedRequestResultHistogram( | 696 ExpectAggregatedRequestResultHistogram( |
| 661 OfflinePageRequestJob::AggregatedRequestResult:: | 697 OfflinePageRequestJob::AggregatedRequestResult:: |
| 662 SHOW_OFFLINE_ON_CONNECTED_NETWORK); | 698 SHOW_OFFLINE_ON_CONNECTED_NETWORK); |
| 663 } | 699 } |
| 664 | 700 |
| 665 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnConnectedNetwork) { | 701 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnConnectedNetwork) { |
| 666 SimulateHasNetworkConnectivity(true); | 702 SimulateHasNetworkConnectivity(true); |
| 667 | 703 |
| 668 // When custom offline header exists and contains value other than | 704 // When custom offline header exists and contains value other than |
| 669 // "reason=error", it means that offline page is forced to load. | 705 // "reason=error", it means that offline page is forced to load. |
| 670 InterceptRequest( | 706 InterceptRequest( |
| 671 kTestUrl2, | 707 kTestUrl2, |
| 672 "GET", | 708 "GET", |
| 673 kOfflinePageHeader, | 709 kOfflinePageHeader, |
| 674 std::string(kOfflinePageHeaderReasonKey) + "=download", | 710 std::string(kOfflinePageHeaderReasonKey) + "=download", |
| 675 content::RESOURCE_TYPE_MAIN_FRAME); | 711 content::RESOURCE_TYPE_MAIN_FRAME); |
| 676 base::RunLoop().Run(); | 712 base::RunLoop().Run(); |
| 677 | 713 |
| 678 EXPECT_EQ(0, bytes_read()); | 714 EXPECT_EQ(0, bytes_read()); |
| 679 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 715 VerifyInfo(false, 0); |
| 716 base::RunLoop().RunUntilIdle(); |
| 717 |
| 680 ExpectAggregatedRequestResultHistogram( | 718 ExpectAggregatedRequestResultHistogram( |
| 681 OfflinePageRequestJob::AggregatedRequestResult:: | 719 OfflinePageRequestJob::AggregatedRequestResult:: |
| 682 PAGE_NOT_FOUND_ON_CONNECTED_NETWORK); | 720 PAGE_NOT_FOUND_ON_CONNECTED_NETWORK); |
| 683 } | 721 } |
| 684 | 722 |
| 685 TEST_F(OfflinePageRequestJobTest, DoNotLoadOfflinePageOnConnectedNetwork) { | 723 TEST_F(OfflinePageRequestJobTest, DoNotLoadOfflinePageOnConnectedNetwork) { |
| 686 SimulateHasNetworkConnectivity(true); | 724 SimulateHasNetworkConnectivity(true); |
| 687 | 725 |
| 688 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 726 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 689 base::RunLoop().Run(); | 727 base::RunLoop().Run(); |
| 690 | 728 |
| 691 EXPECT_EQ(0, bytes_read()); | 729 EXPECT_EQ(0, bytes_read()); |
| 692 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 730 VerifyInfo(false, 0); |
| 731 base::RunLoop().RunUntilIdle(); |
| 693 } | 732 } |
| 694 | 733 |
| 695 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageByOfflineID) { | 734 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageByOfflineID) { |
| 696 SimulateHasNetworkConnectivity(true); | 735 SimulateHasNetworkConnectivity(true); |
| 697 | 736 |
| 698 InterceptRequest( | 737 InterceptRequest( |
| 699 kTestUrl, | 738 kTestUrl, |
| 700 "GET", | 739 "GET", |
| 701 kOfflinePageHeader, | 740 kOfflinePageHeader, |
| 702 std::string(kOfflinePageHeaderReasonKey) + "=download " + | 741 std::string(kOfflinePageHeaderReasonKey) + "=download " + |
| 703 kOfflinePageHeaderIDKey + "=" + base::Int64ToString(offline_id()), | 742 kOfflinePageHeaderIDKey + "=" + base::Int64ToString(offline_id()), |
| 704 content::RESOURCE_TYPE_MAIN_FRAME); | 743 content::RESOURCE_TYPE_MAIN_FRAME); |
| 705 base::RunLoop().Run(); | 744 base::RunLoop().Run(); |
| 706 | 745 |
| 707 EXPECT_EQ(kTestFileSize, bytes_read()); | 746 EXPECT_EQ(kTestFileSize, bytes_read()); |
| 708 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 747 VerifyInfo(true, offline_id()); |
| 709 EXPECT_EQ(offline_id(), | 748 base::RunLoop().RunUntilIdle(); |
| 710 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 749 |
| 711 ExpectAggregatedRequestResultHistogram( | 750 ExpectAggregatedRequestResultHistogram( |
| 712 OfflinePageRequestJob::AggregatedRequestResult:: | 751 OfflinePageRequestJob::AggregatedRequestResult:: |
| 713 SHOW_OFFLINE_ON_CONNECTED_NETWORK); | 752 SHOW_OFFLINE_ON_CONNECTED_NETWORK); |
| 714 } | 753 } |
| 715 | 754 |
| 716 TEST_F(OfflinePageRequestJobTest, | 755 TEST_F(OfflinePageRequestJobTest, |
| 717 LoadOfflinePageByOfflineIDAndFallbackToOnlineURL) { | 756 LoadOfflinePageByOfflineIDAndFallbackToOnlineURL) { |
| 718 SimulateHasNetworkConnectivity(true); | 757 SimulateHasNetworkConnectivity(true); |
| 719 | 758 |
| 720 // The offline page found with specific offline ID does not match the passed | 759 // The offline page found with specific offline ID does not match the passed |
| 721 // online URL. Should fall back to find the offline page based on the online | 760 // online URL. Should fall back to find the offline page based on the online |
| 722 // URL. | 761 // URL. |
| 723 InterceptRequest( | 762 InterceptRequest( |
| 724 kTestUrl2, | 763 kTestUrl2, |
| 725 "GET", | 764 "GET", |
| 726 kOfflinePageHeader, | 765 kOfflinePageHeader, |
| 727 std::string(kOfflinePageHeaderReasonKey) + "=download " + | 766 std::string(kOfflinePageHeaderReasonKey) + "=download " + |
| 728 kOfflinePageHeaderIDKey + "=" + base::Int64ToString(offline_id()), | 767 kOfflinePageHeaderIDKey + "=" + base::Int64ToString(offline_id()), |
| 729 content::RESOURCE_TYPE_MAIN_FRAME); | 768 content::RESOURCE_TYPE_MAIN_FRAME); |
| 730 base::RunLoop().Run(); | 769 base::RunLoop().Run(); |
| 731 | 770 |
| 732 EXPECT_EQ(0, bytes_read()); | 771 EXPECT_EQ(0, bytes_read()); |
| 733 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 772 VerifyInfo(false, 0); |
| 773 base::RunLoop().RunUntilIdle(); |
| 774 |
| 734 ExpectAggregatedRequestResultHistogram( | 775 ExpectAggregatedRequestResultHistogram( |
| 735 OfflinePageRequestJob::AggregatedRequestResult:: | 776 OfflinePageRequestJob::AggregatedRequestResult:: |
| 736 PAGE_NOT_FOUND_ON_CONNECTED_NETWORK); | 777 PAGE_NOT_FOUND_ON_CONNECTED_NETWORK); |
| 737 } | 778 } |
| 738 | 779 |
| 739 } // namespace offline_pages | 780 } // namespace offline_pages |
| OLD | NEW |