| 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 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 const ClientId& client_id, | 242 const ClientId& client_id, |
| 243 const GURL& original_url, | 243 const GURL& original_url, |
| 244 std::unique_ptr<OfflinePageArchiver> archiver); | 244 std::unique_ptr<OfflinePageArchiver> archiver); |
| 245 | 245 |
| 246 void InterceptRequest(const GURL& url, | 246 void InterceptRequest(const GURL& url, |
| 247 const std::string& method, | 247 const std::string& method, |
| 248 const std::string& extra_header_name, | 248 const std::string& extra_header_name, |
| 249 const std::string& extra_header_value, | 249 const std::string& extra_header_value, |
| 250 content::ResourceType resource_type); | 250 content::ResourceType resource_type); |
| 251 | 251 |
| 252 void ExpectAggregatedRequestResultHistogram( | 252 // Expect exactly one count of |result| UMA reported. No other bucket should |
| 253 // have sample. |
| 254 void ExpectOneUniqueSampleForAggregatedRequestResult( |
| 253 OfflinePageRequestJob::AggregatedRequestResult result); | 255 OfflinePageRequestJob::AggregatedRequestResult result); |
| 254 void ExpectAggregatedRequestResultHistogramWithCount( | 256 // Expect exactly |count| of |result| UMA reported. No other bucket should |
| 257 // have sample. |
| 258 void ExpectMultiUniqueSampleForAggregatedRequestResult( |
| 255 OfflinePageRequestJob::AggregatedRequestResult result, int count); | 259 OfflinePageRequestJob::AggregatedRequestResult result, int count); |
| 260 // Expect one count of |result| UMA reported. Other buckets may have samples |
| 261 // as well. |
| 262 void ExpectOneNonuniqueSampleForAggregatedRequestResult( |
| 263 OfflinePageRequestJob::AggregatedRequestResult result); |
| 256 | 264 |
| 257 net::TestURLRequestContext* url_request_context() { | 265 net::TestURLRequestContext* url_request_context() { |
| 258 return test_url_request_context_.get(); | 266 return test_url_request_context_.get(); |
| 259 } | 267 } |
| 260 Profile* profile() { return profile_; } | 268 Profile* profile() { return profile_; } |
| 261 OfflinePageTabHelper* offline_page_tab_helper() const { | 269 OfflinePageTabHelper* offline_page_tab_helper() const { |
| 262 return offline_page_tab_helper_; | 270 return offline_page_tab_helper_; |
| 263 } | 271 } |
| 264 int64_t offline_id() const { return offline_id_; } | 272 int64_t offline_id() const { return offline_id_; } |
| 265 int64_t offline_id2() const { return offline_id2_; } | 273 int64_t offline_id2() const { return offline_id2_; } |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 1, /* render_frame_id */ | 448 1, /* render_frame_id */ |
| 441 true, /* is_main_frame */ | 449 true, /* is_main_frame */ |
| 442 false, /* parent_is_main_frame */ | 450 false, /* parent_is_main_frame */ |
| 443 true, /* allow_download */ | 451 true, /* allow_download */ |
| 444 true, /* is_async */ | 452 true, /* is_async */ |
| 445 false /* is_using_lofi */); | 453 false /* is_using_lofi */); |
| 446 | 454 |
| 447 return request; | 455 return request; |
| 448 } | 456 } |
| 449 | 457 |
| 450 void OfflinePageRequestJobTest::ExpectAggregatedRequestResultHistogram( | 458 void |
| 459 OfflinePageRequestJobTest::ExpectOneUniqueSampleForAggregatedRequestResult( |
| 451 OfflinePageRequestJob::AggregatedRequestResult result) { | 460 OfflinePageRequestJob::AggregatedRequestResult result) { |
| 452 histogram_tester_.ExpectUniqueSample( | 461 histogram_tester_.ExpectUniqueSample( |
| 453 kAggregatedRequestResultHistogram, static_cast<int>(result), 1); | 462 kAggregatedRequestResultHistogram, static_cast<int>(result), 1); |
| 454 } | 463 } |
| 455 | 464 |
| 456 void OfflinePageRequestJobTest::ExpectAggregatedRequestResultHistogramWithCount( | 465 void |
| 466 OfflinePageRequestJobTest::ExpectMultiUniqueSampleForAggregatedRequestResult( |
| 457 OfflinePageRequestJob::AggregatedRequestResult result, int count) { | 467 OfflinePageRequestJob::AggregatedRequestResult result, int count) { |
| 458 histogram_tester_.ExpectUniqueSample( | 468 histogram_tester_.ExpectUniqueSample( |
| 459 kAggregatedRequestResultHistogram, static_cast<int>(result), count); | 469 kAggregatedRequestResultHistogram, static_cast<int>(result), count); |
| 460 } | 470 } |
| 461 | 471 |
| 472 void |
| 473 OfflinePageRequestJobTest::ExpectOneNonuniqueSampleForAggregatedRequestResult( |
| 474 OfflinePageRequestJob::AggregatedRequestResult result) { |
| 475 histogram_tester_.ExpectBucketCount( |
| 476 kAggregatedRequestResultHistogram, static_cast<int>(result), 1); |
| 477 } |
| 478 |
| 462 void OfflinePageRequestJobTest::SavePage( | 479 void OfflinePageRequestJobTest::SavePage( |
| 463 const GURL& url, | 480 const GURL& url, |
| 464 const ClientId& client_id, | 481 const ClientId& client_id, |
| 465 const GURL& original_url, | 482 const GURL& original_url, |
| 466 std::unique_ptr<OfflinePageArchiver> archiver) { | 483 std::unique_ptr<OfflinePageArchiver> archiver) { |
| 467 OfflinePageModel::SavePageParams save_page_params; | 484 OfflinePageModel::SavePageParams save_page_params; |
| 468 save_page_params.url = url; | 485 save_page_params.url = url; |
| 469 save_page_params.client_id = client_id; | 486 save_page_params.client_id = client_id; |
| 470 save_page_params.original_url = original_url; | 487 save_page_params.original_url = original_url; |
| 471 OfflinePageModelFactory::GetForBrowserContext(profile())->SavePage( | 488 OfflinePageModelFactory::GetForBrowserContext(profile())->SavePage( |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnDisconnectedNetwork) { | 598 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnDisconnectedNetwork) { |
| 582 SimulateHasNetworkConnectivity(false); | 599 SimulateHasNetworkConnectivity(false); |
| 583 | 600 |
| 584 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 601 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 585 base::RunLoop().Run(); | 602 base::RunLoop().Run(); |
| 586 | 603 |
| 587 EXPECT_EQ(kTestFileSize2, bytes_read()); | 604 EXPECT_EQ(kTestFileSize2, bytes_read()); |
| 588 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 605 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 589 EXPECT_EQ(offline_id2(), | 606 EXPECT_EQ(offline_id2(), |
| 590 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 607 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); |
| 591 ExpectAggregatedRequestResultHistogram( | 608 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 592 OfflinePageRequestJob::AggregatedRequestResult:: | 609 OfflinePageRequestJob::AggregatedRequestResult:: |
| 593 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK); | 610 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK); |
| 594 } | 611 } |
| 595 | 612 |
| 596 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnDisconnectedNetwork) { | 613 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnDisconnectedNetwork) { |
| 597 SimulateHasNetworkConnectivity(false); | 614 SimulateHasNetworkConnectivity(false); |
| 598 | 615 |
| 599 InterceptRequest(kTestUrl2, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 616 InterceptRequest(kTestUrl2, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 600 base::RunLoop().Run(); | 617 base::RunLoop().Run(); |
| 601 | 618 |
| 602 EXPECT_EQ(0, bytes_read()); | 619 EXPECT_EQ(0, bytes_read()); |
| 603 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 620 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 604 ExpectAggregatedRequestResultHistogram( | 621 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 605 OfflinePageRequestJob::AggregatedRequestResult:: | 622 OfflinePageRequestJob::AggregatedRequestResult:: |
| 606 PAGE_NOT_FOUND_ON_DISCONNECTED_NETWORK); | 623 PAGE_NOT_FOUND_ON_DISCONNECTED_NETWORK); |
| 607 } | 624 } |
| 608 | 625 |
| 609 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnProhibitivelySlowNetwork) { | 626 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnProhibitivelySlowNetwork) { |
| 610 SimulateHasNetworkConnectivity(true); | 627 SimulateHasNetworkConnectivity(true); |
| 611 | 628 |
| 612 test_previews_decider()->set_should_allow_preview(true); | 629 test_previews_decider()->set_should_allow_preview(true); |
| 613 | 630 |
| 614 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 631 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 615 base::RunLoop().Run(); | 632 base::RunLoop().Run(); |
| 616 | 633 |
| 617 EXPECT_EQ(kTestFileSize2, bytes_read()); | 634 EXPECT_EQ(kTestFileSize2, bytes_read()); |
| 618 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 635 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 619 EXPECT_EQ(offline_id2(), | 636 EXPECT_EQ(offline_id2(), |
| 620 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 637 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); |
| 621 ExpectAggregatedRequestResultHistogram( | 638 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 622 OfflinePageRequestJob::AggregatedRequestResult:: | 639 OfflinePageRequestJob::AggregatedRequestResult:: |
| 623 SHOW_OFFLINE_ON_PROHIBITIVELY_SLOW_NETWORK); | 640 SHOW_OFFLINE_ON_PROHIBITIVELY_SLOW_NETWORK); |
| 624 test_previews_decider()->set_should_allow_preview(false); | 641 test_previews_decider()->set_should_allow_preview(false); |
| 625 } | 642 } |
| 626 | 643 |
| 627 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnProhibitivelySlowNetwork) { | 644 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnProhibitivelySlowNetwork) { |
| 628 SimulateHasNetworkConnectivity(true); | 645 SimulateHasNetworkConnectivity(true); |
| 629 | 646 |
| 630 test_previews_decider()->set_should_allow_preview(true); | 647 test_previews_decider()->set_should_allow_preview(true); |
| 631 | 648 |
| 632 InterceptRequest(kTestUrl2, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 649 InterceptRequest(kTestUrl2, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 633 base::RunLoop().Run(); | 650 base::RunLoop().Run(); |
| 634 | 651 |
| 635 EXPECT_EQ(0, bytes_read()); | 652 EXPECT_EQ(0, bytes_read()); |
| 636 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 653 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 637 ExpectAggregatedRequestResultHistogram( | 654 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 638 OfflinePageRequestJob::AggregatedRequestResult:: | 655 OfflinePageRequestJob::AggregatedRequestResult:: |
| 639 PAGE_NOT_FOUND_ON_PROHIBITIVELY_SLOW_NETWORK); | 656 PAGE_NOT_FOUND_ON_PROHIBITIVELY_SLOW_NETWORK); |
| 640 test_previews_decider()->set_should_allow_preview(false); | 657 test_previews_decider()->set_should_allow_preview(false); |
| 641 } | 658 } |
| 642 | 659 |
| 643 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnFlakyNetwork) { | 660 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnFlakyNetwork) { |
| 644 SimulateHasNetworkConnectivity(true); | 661 SimulateHasNetworkConnectivity(true); |
| 645 | 662 |
| 646 // When custom offline header exists and contains "reason=error", it means | 663 // When custom offline header exists and contains "reason=error", it means |
| 647 // that net error is hit in last request due to flaky network. | 664 // that net error is hit in last request due to flaky network. |
| 648 InterceptRequest( | 665 InterceptRequest( |
| 649 kTestUrl, | 666 kTestUrl, |
| 650 "GET", | 667 "GET", |
| 651 kOfflinePageHeader, | 668 kOfflinePageHeader, |
| 652 std::string(kOfflinePageHeaderReasonKey) + "=" + | 669 std::string(kOfflinePageHeaderReasonKey) + "=" + |
| 653 kOfflinePageHeaderReasonValueDueToNetError, | 670 kOfflinePageHeaderReasonValueDueToNetError, |
| 654 content::RESOURCE_TYPE_MAIN_FRAME); | 671 content::RESOURCE_TYPE_MAIN_FRAME); |
| 655 base::RunLoop().Run(); | 672 base::RunLoop().Run(); |
| 656 | 673 |
| 657 EXPECT_EQ(kTestFileSize2, bytes_read()); | 674 EXPECT_EQ(kTestFileSize2, bytes_read()); |
| 658 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 675 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 659 EXPECT_EQ(offline_id2(), | 676 EXPECT_EQ(offline_id2(), |
| 660 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 677 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); |
| 661 ExpectAggregatedRequestResultHistogram( | 678 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 662 OfflinePageRequestJob::AggregatedRequestResult:: | 679 OfflinePageRequestJob::AggregatedRequestResult:: |
| 663 SHOW_OFFLINE_ON_FLAKY_NETWORK); | 680 SHOW_OFFLINE_ON_FLAKY_NETWORK); |
| 664 } | 681 } |
| 665 | 682 |
| 666 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnFlakyNetwork) { | 683 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnFlakyNetwork) { |
| 667 SimulateHasNetworkConnectivity(true); | 684 SimulateHasNetworkConnectivity(true); |
| 668 | 685 |
| 669 // When custom offline header exists and contains "reason=error", it means | 686 // When custom offline header exists and contains "reason=error", it means |
| 670 // that net error is hit in last request due to flaky network. | 687 // that net error is hit in last request due to flaky network. |
| 671 InterceptRequest( | 688 InterceptRequest( |
| 672 kTestUrl2, | 689 kTestUrl2, |
| 673 "GET", | 690 "GET", |
| 674 kOfflinePageHeader, | 691 kOfflinePageHeader, |
| 675 std::string(kOfflinePageHeaderReasonKey) + "=" + | 692 std::string(kOfflinePageHeaderReasonKey) + "=" + |
| 676 kOfflinePageHeaderReasonValueDueToNetError, | 693 kOfflinePageHeaderReasonValueDueToNetError, |
| 677 content::RESOURCE_TYPE_MAIN_FRAME); | 694 content::RESOURCE_TYPE_MAIN_FRAME); |
| 678 base::RunLoop().Run(); | 695 base::RunLoop().Run(); |
| 679 | 696 |
| 680 EXPECT_EQ(0, bytes_read()); | 697 EXPECT_EQ(0, bytes_read()); |
| 681 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 698 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 682 ExpectAggregatedRequestResultHistogram( | 699 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 683 OfflinePageRequestJob::AggregatedRequestResult:: | 700 OfflinePageRequestJob::AggregatedRequestResult:: |
| 684 PAGE_NOT_FOUND_ON_FLAKY_NETWORK); | 701 PAGE_NOT_FOUND_ON_FLAKY_NETWORK); |
| 685 } | 702 } |
| 686 | 703 |
| 687 TEST_F(OfflinePageRequestJobTest, ForceLoadOfflinePageOnConnectedNetwork) { | 704 TEST_F(OfflinePageRequestJobTest, ForceLoadOfflinePageOnConnectedNetwork) { |
| 688 SimulateHasNetworkConnectivity(true); | 705 SimulateHasNetworkConnectivity(true); |
| 689 | 706 |
| 690 // When custom offline header exists and contains value other than | 707 // When custom offline header exists and contains value other than |
| 691 // "reason=error", it means that offline page is forced to load. | 708 // "reason=error", it means that offline page is forced to load. |
| 692 InterceptRequest( | 709 InterceptRequest( |
| 693 kTestUrl, | 710 kTestUrl, |
| 694 "GET", | 711 "GET", |
| 695 kOfflinePageHeader, | 712 kOfflinePageHeader, |
| 696 std::string(kOfflinePageHeaderReasonKey) + "=download", | 713 std::string(kOfflinePageHeaderReasonKey) + "=download", |
| 697 content::RESOURCE_TYPE_MAIN_FRAME); | 714 content::RESOURCE_TYPE_MAIN_FRAME); |
| 698 base::RunLoop().Run(); | 715 base::RunLoop().Run(); |
| 699 | 716 |
| 700 EXPECT_EQ(kTestFileSize2, bytes_read()); | 717 EXPECT_EQ(kTestFileSize2, bytes_read()); |
| 701 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 718 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 702 EXPECT_EQ(offline_id2(), | 719 EXPECT_EQ(offline_id2(), |
| 703 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 720 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); |
| 704 ExpectAggregatedRequestResultHistogram( | 721 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 705 OfflinePageRequestJob::AggregatedRequestResult:: | 722 OfflinePageRequestJob::AggregatedRequestResult:: |
| 706 SHOW_OFFLINE_ON_CONNECTED_NETWORK); | 723 SHOW_OFFLINE_ON_CONNECTED_NETWORK); |
| 707 } | 724 } |
| 708 | 725 |
| 709 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnConnectedNetwork) { | 726 TEST_F(OfflinePageRequestJobTest, PageNotFoundOnConnectedNetwork) { |
| 710 SimulateHasNetworkConnectivity(true); | 727 SimulateHasNetworkConnectivity(true); |
| 711 | 728 |
| 712 // When custom offline header exists and contains value other than | 729 // When custom offline header exists and contains value other than |
| 713 // "reason=error", it means that offline page is forced to load. | 730 // "reason=error", it means that offline page is forced to load. |
| 714 InterceptRequest( | 731 InterceptRequest( |
| 715 kTestUrl2, | 732 kTestUrl2, |
| 716 "GET", | 733 "GET", |
| 717 kOfflinePageHeader, | 734 kOfflinePageHeader, |
| 718 std::string(kOfflinePageHeaderReasonKey) + "=download", | 735 std::string(kOfflinePageHeaderReasonKey) + "=download", |
| 719 content::RESOURCE_TYPE_MAIN_FRAME); | 736 content::RESOURCE_TYPE_MAIN_FRAME); |
| 720 base::RunLoop().Run(); | 737 base::RunLoop().Run(); |
| 721 | 738 |
| 722 EXPECT_EQ(0, bytes_read()); | 739 EXPECT_EQ(0, bytes_read()); |
| 723 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 740 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 724 ExpectAggregatedRequestResultHistogram( | 741 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 725 OfflinePageRequestJob::AggregatedRequestResult:: | 742 OfflinePageRequestJob::AggregatedRequestResult:: |
| 726 PAGE_NOT_FOUND_ON_CONNECTED_NETWORK); | 743 PAGE_NOT_FOUND_ON_CONNECTED_NETWORK); |
| 727 } | 744 } |
| 728 | 745 |
| 729 TEST_F(OfflinePageRequestJobTest, DoNotLoadOfflinePageOnConnectedNetwork) { | 746 TEST_F(OfflinePageRequestJobTest, DoNotLoadOfflinePageOnConnectedNetwork) { |
| 730 SimulateHasNetworkConnectivity(true); | 747 SimulateHasNetworkConnectivity(true); |
| 731 | 748 |
| 732 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 749 InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 733 base::RunLoop().Run(); | 750 base::RunLoop().Run(); |
| 734 | 751 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 745 kOfflinePageHeader, | 762 kOfflinePageHeader, |
| 746 std::string(kOfflinePageHeaderReasonKey) + "=download " + | 763 std::string(kOfflinePageHeaderReasonKey) + "=download " + |
| 747 kOfflinePageHeaderIDKey + "=" + base::Int64ToString(offline_id()), | 764 kOfflinePageHeaderIDKey + "=" + base::Int64ToString(offline_id()), |
| 748 content::RESOURCE_TYPE_MAIN_FRAME); | 765 content::RESOURCE_TYPE_MAIN_FRAME); |
| 749 base::RunLoop().Run(); | 766 base::RunLoop().Run(); |
| 750 | 767 |
| 751 EXPECT_EQ(kTestFileSize, bytes_read()); | 768 EXPECT_EQ(kTestFileSize, bytes_read()); |
| 752 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 769 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 753 EXPECT_EQ(offline_id(), | 770 EXPECT_EQ(offline_id(), |
| 754 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 771 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); |
| 755 ExpectAggregatedRequestResultHistogram( | 772 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 756 OfflinePageRequestJob::AggregatedRequestResult:: | 773 OfflinePageRequestJob::AggregatedRequestResult:: |
| 757 SHOW_OFFLINE_ON_CONNECTED_NETWORK); | 774 SHOW_OFFLINE_ON_CONNECTED_NETWORK); |
| 758 } | 775 } |
| 759 | 776 |
| 760 TEST_F(OfflinePageRequestJobTest, | 777 TEST_F(OfflinePageRequestJobTest, |
| 761 LoadOfflinePageByOfflineIDAndFallbackToOnlineURL) { | 778 LoadOfflinePageByOfflineIDAndFallbackToOnlineURL) { |
| 762 SimulateHasNetworkConnectivity(true); | 779 SimulateHasNetworkConnectivity(true); |
| 763 | 780 |
| 764 // The offline page found with specific offline ID does not match the passed | 781 // The offline page found with specific offline ID does not match the passed |
| 765 // online URL. Should fall back to find the offline page based on the online | 782 // online URL. Should fall back to find the offline page based on the online |
| 766 // URL. | 783 // URL. |
| 767 InterceptRequest( | 784 InterceptRequest( |
| 768 kTestUrl2, | 785 kTestUrl2, |
| 769 "GET", | 786 "GET", |
| 770 kOfflinePageHeader, | 787 kOfflinePageHeader, |
| 771 std::string(kOfflinePageHeaderReasonKey) + "=download " + | 788 std::string(kOfflinePageHeaderReasonKey) + "=download " + |
| 772 kOfflinePageHeaderIDKey + "=" + base::Int64ToString(offline_id()), | 789 kOfflinePageHeaderIDKey + "=" + base::Int64ToString(offline_id()), |
| 773 content::RESOURCE_TYPE_MAIN_FRAME); | 790 content::RESOURCE_TYPE_MAIN_FRAME); |
| 774 base::RunLoop().Run(); | 791 base::RunLoop().Run(); |
| 775 | 792 |
| 776 EXPECT_EQ(0, bytes_read()); | 793 EXPECT_EQ(0, bytes_read()); |
| 777 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); | 794 EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 778 ExpectAggregatedRequestResultHistogram( | 795 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 779 OfflinePageRequestJob::AggregatedRequestResult:: | 796 OfflinePageRequestJob::AggregatedRequestResult:: |
| 780 PAGE_NOT_FOUND_ON_CONNECTED_NETWORK); | 797 PAGE_NOT_FOUND_ON_CONNECTED_NETWORK); |
| 781 } | 798 } |
| 782 | 799 |
| 783 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageForUrlWithFragment) { | 800 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageForUrlWithFragment) { |
| 784 SimulateHasNetworkConnectivity(false); | 801 SimulateHasNetworkConnectivity(false); |
| 785 | 802 |
| 786 // Loads an url with fragment, that will match the offline URL without the | 803 // Loads an url with fragment, that will match the offline URL without the |
| 787 // fragment. | 804 // fragment. |
| 788 GURL url_with_fragment(kTestUrl.spec() + "#ref"); | 805 GURL url_with_fragment(kTestUrl.spec() + "#ref"); |
| 789 InterceptRequest( | 806 InterceptRequest( |
| 790 url_with_fragment, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 807 url_with_fragment, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 791 base::RunLoop().Run(); | 808 base::RunLoop().Run(); |
| 792 | 809 |
| 793 EXPECT_EQ(kTestFileSize2, bytes_read()); | 810 EXPECT_EQ(kTestFileSize2, bytes_read()); |
| 794 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 811 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 795 EXPECT_EQ(offline_id2(), | 812 EXPECT_EQ(offline_id2(), |
| 796 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 813 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); |
| 797 ExpectAggregatedRequestResultHistogram( | 814 ExpectOneUniqueSampleForAggregatedRequestResult( |
| 798 OfflinePageRequestJob::AggregatedRequestResult:: | 815 OfflinePageRequestJob::AggregatedRequestResult:: |
| 799 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK); | 816 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK); |
| 800 | 817 |
| 801 // Loads an url without fragment, that will match the offline URL with the | 818 // Loads an url without fragment, that will match the offline URL with the |
| 802 // fragment. | 819 // fragment. |
| 803 InterceptRequest(kTestUrl3, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 820 InterceptRequest(kTestUrl3, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 804 base::RunLoop().Run(); | 821 base::RunLoop().Run(); |
| 805 | 822 |
| 806 EXPECT_EQ(kTestFileSize3, bytes_read()); | 823 EXPECT_EQ(kTestFileSize3, bytes_read()); |
| 807 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 824 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 808 EXPECT_EQ(offline_id3(), | 825 EXPECT_EQ(offline_id3(), |
| 809 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 826 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); |
| 810 ExpectAggregatedRequestResultHistogramWithCount( | 827 ExpectMultiUniqueSampleForAggregatedRequestResult( |
| 811 OfflinePageRequestJob::AggregatedRequestResult:: | 828 OfflinePageRequestJob::AggregatedRequestResult:: |
| 812 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK, 2); | 829 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK, 2); |
| 813 | 830 |
| 814 // Loads an url with fragment, that will match the offline URL with different | 831 // Loads an url with fragment, that will match the offline URL with different |
| 815 // fragment. | 832 // fragment. |
| 816 GURL url3_with_different_fragment(kTestUrl3.spec() + "#different_ref"); | 833 GURL url3_with_different_fragment(kTestUrl3.spec() + "#different_ref"); |
| 817 InterceptRequest(url3_with_different_fragment, "GET", "", "", | 834 InterceptRequest(url3_with_different_fragment, "GET", "", "", |
| 818 content::RESOURCE_TYPE_MAIN_FRAME); | 835 content::RESOURCE_TYPE_MAIN_FRAME); |
| 819 base::RunLoop().Run(); | 836 base::RunLoop().Run(); |
| 820 | 837 |
| 821 EXPECT_EQ(kTestFileSize3, bytes_read()); | 838 EXPECT_EQ(kTestFileSize3, bytes_read()); |
| 822 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 839 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 823 EXPECT_EQ(offline_id3(), | 840 EXPECT_EQ(offline_id3(), |
| 824 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 841 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); |
| 825 ExpectAggregatedRequestResultHistogramWithCount( | 842 ExpectMultiUniqueSampleForAggregatedRequestResult( |
| 826 OfflinePageRequestJob::AggregatedRequestResult:: | 843 OfflinePageRequestJob::AggregatedRequestResult:: |
| 827 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK, 3); | 844 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK, 3); |
| 828 | 845 |
| 829 } | 846 } |
| 830 | 847 |
| 831 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageAfterRedirect) { | 848 TEST_F(OfflinePageRequestJobTest, LoadOfflinePageAfterRedirect) { |
| 832 SimulateHasNetworkConnectivity(false); | 849 SimulateHasNetworkConnectivity(false); |
| 833 | 850 |
| 834 // This should trigger redirect first. | 851 // This should trigger redirect first. |
| 835 InterceptRequest( | 852 InterceptRequest( |
| 836 kTestOriginalUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); | 853 kTestOriginalUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME); |
| 837 base::RunLoop().Run(); | 854 base::RunLoop().Run(); |
| 838 | 855 |
| 839 EXPECT_EQ(kTestFileSize3, bytes_read()); | 856 EXPECT_EQ(kTestFileSize3, bytes_read()); |
| 840 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); | 857 ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest()); |
| 841 EXPECT_EQ(offline_id3(), | 858 EXPECT_EQ(offline_id3(), |
| 842 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); | 859 offline_page_tab_helper()->GetOfflinePageForTest()->offline_id); |
| 843 ExpectAggregatedRequestResultHistogram( | 860 ExpectOneNonuniqueSampleForAggregatedRequestResult( |
| 861 OfflinePageRequestJob::AggregatedRequestResult:: |
| 862 REDIRECTED_ON_DISCONNECTED_NETWORK); |
| 863 ExpectOneNonuniqueSampleForAggregatedRequestResult( |
| 844 OfflinePageRequestJob::AggregatedRequestResult:: | 864 OfflinePageRequestJob::AggregatedRequestResult:: |
| 845 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK); | 865 SHOW_OFFLINE_ON_DISCONNECTED_NETWORK); |
| 846 } | 866 } |
| 847 | 867 |
| 848 } // namespace offline_pages | 868 } // namespace offline_pages |
| OLD | NEW |