OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/predictors/resource_prefetch_predictor.h" | 5 #include "chrome/browser/predictors/resource_prefetch_predictor.h" |
6 | 6 |
7 #include <iostream> | 7 #include <iostream> |
8 #include <memory> | 8 #include <memory> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 public: | 130 public: |
131 MockResourcePrefetchPredictorTables() { } | 131 MockResourcePrefetchPredictorTables() { } |
132 | 132 |
133 MOCK_METHOD6(GetAllData, | 133 MOCK_METHOD6(GetAllData, |
134 void(PrefetchDataMap* url_data_map, | 134 void(PrefetchDataMap* url_data_map, |
135 PrefetchDataMap* host_data_map, | 135 PrefetchDataMap* host_data_map, |
136 RedirectDataMap* url_redirect_data_map, | 136 RedirectDataMap* url_redirect_data_map, |
137 RedirectDataMap* host_redirect_data_map, | 137 RedirectDataMap* host_redirect_data_map, |
138 ManifestDataMap* manifest_data_map, | 138 ManifestDataMap* manifest_data_map, |
139 OriginDataMap* origin_data_map)); | 139 OriginDataMap* origin_data_map)); |
140 MOCK_METHOD4(UpdateData, | 140 MOCK_METHOD2(UpdateResourceData, |
141 void(const PrefetchData& url_data, | 141 void(const PrefetchData& data, PrefetchKeyType key_type)); |
142 const PrefetchData& host_data, | 142 MOCK_METHOD2(UpdateRedirectData, |
143 const RedirectData& url_redirect_data, | 143 void(const RedirectData& data, PrefetchKeyType key_type)); |
144 const RedirectData& host_redirect_data)); | |
145 MOCK_METHOD2(UpdateManifestData, | 144 MOCK_METHOD2(UpdateManifestData, |
146 void(const std::string& host, | 145 void(const std::string& host, |
147 const precache::PrecacheManifest& manifest_data)); | 146 const precache::PrecacheManifest& manifest_data)); |
148 MOCK_METHOD1(UpdateOriginData, void(const OriginData& origin_data)); | 147 MOCK_METHOD1(UpdateOriginData, void(const OriginData& origin_data)); |
149 MOCK_METHOD2(DeleteResourceData, | 148 MOCK_METHOD2(DeleteResourceData, |
150 void(const std::vector<std::string>& urls, | 149 void(const std::vector<std::string>& urls, |
151 const std::vector<std::string>& hosts)); | 150 const std::vector<std::string>& hosts)); |
152 MOCK_METHOD1(DeleteOriginData, void(const std::vector<std::string>& hosts)); | 151 MOCK_METHOD1(DeleteOriginData, void(const std::vector<std::string>& hosts)); |
153 MOCK_METHOD2(DeleteSingleResourceDataPoint, | 152 MOCK_METHOD2(DeleteSingleResourceDataPoint, |
154 void(const std::string& key, PrefetchKeyType key_type)); | 153 void(const std::string& key, PrefetchKeyType key_type)); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 | 262 |
264 std::unique_ptr<ResourcePrefetchPredictor> predictor_; | 263 std::unique_ptr<ResourcePrefetchPredictor> predictor_; |
265 scoped_refptr<StrictMock<MockResourcePrefetchPredictorTables>> mock_tables_; | 264 scoped_refptr<StrictMock<MockResourcePrefetchPredictorTables>> mock_tables_; |
266 | 265 |
267 PrefetchDataMap test_url_data_; | 266 PrefetchDataMap test_url_data_; |
268 PrefetchDataMap test_host_data_; | 267 PrefetchDataMap test_host_data_; |
269 RedirectDataMap test_url_redirect_data_; | 268 RedirectDataMap test_url_redirect_data_; |
270 RedirectDataMap test_host_redirect_data_; | 269 RedirectDataMap test_host_redirect_data_; |
271 ManifestDataMap test_manifest_data_; | 270 ManifestDataMap test_manifest_data_; |
272 OriginDataMap test_origin_data_; | 271 OriginDataMap test_origin_data_; |
273 PrefetchData empty_resource_data_; | |
274 RedirectData empty_redirect_data_; | |
275 | 272 |
276 MockURLRequestJobFactory url_request_job_factory_; | 273 MockURLRequestJobFactory url_request_job_factory_; |
277 EmptyURLRequestDelegate url_request_delegate_; | 274 EmptyURLRequestDelegate url_request_delegate_; |
278 | 275 |
279 std::unique_ptr<base::HistogramTester> histogram_tester_; | 276 std::unique_ptr<base::HistogramTester> histogram_tester_; |
280 }; | 277 }; |
281 | 278 |
282 ResourcePrefetchPredictorTest::ResourcePrefetchPredictorTest() | 279 ResourcePrefetchPredictorTest::ResourcePrefetchPredictorTest() |
283 : thread_bundle_(), | 280 : thread_bundle_(), |
284 profile_(new TestingProfile()), | 281 profile_(new TestingProfile()), |
285 mock_tables_(new StrictMock<MockResourcePrefetchPredictorTables>()), | 282 mock_tables_(new StrictMock<MockResourcePrefetchPredictorTables>()) {} |
286 empty_resource_data_(), | |
287 empty_redirect_data_() {} | |
288 | 283 |
289 ResourcePrefetchPredictorTest::~ResourcePrefetchPredictorTest() { | 284 ResourcePrefetchPredictorTest::~ResourcePrefetchPredictorTest() { |
290 profile_.reset(NULL); | 285 profile_.reset(NULL); |
291 base::RunLoop().RunUntilIdle(); | 286 base::RunLoop().RunUntilIdle(); |
292 } | 287 } |
293 | 288 |
294 void ResourcePrefetchPredictorTest::SetUp() { | 289 void ResourcePrefetchPredictorTest::SetUp() { |
295 InitializeSampleData(); | 290 InitializeSampleData(); |
296 | 291 |
297 ASSERT_TRUE(profile_->CreateHistoryService(true, false)); | 292 ASSERT_TRUE(profile_->CreateHistoryService(true, false)); |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 if (predictor_initial_key != predictor_key) { | 482 if (predictor_initial_key != predictor_key) { |
488 RedirectData redirect = CreateRedirectData(predictor_initial_key, 1); | 483 RedirectData redirect = CreateRedirectData(predictor_initial_key, 1); |
489 InitializeRedirectStat(redirect.add_redirect_endpoints(), predictor_key, 10, | 484 InitializeRedirectStat(redirect.add_redirect_endpoints(), predictor_key, 10, |
490 0, 0); | 485 0, 0); |
491 predictor_->host_redirect_table_cache_->insert( | 486 predictor_->host_redirect_table_cache_->insert( |
492 std::make_pair(redirect.primary_key(), redirect)); | 487 std::make_pair(redirect.primary_key(), redirect)); |
493 } | 488 } |
494 | 489 |
495 // Navigation simulation. | 490 // Navigation simulation. |
496 using testing::_; | 491 using testing::_; |
497 EXPECT_CALL(*mock_tables_.get(), UpdateData(_, _, _, _)) | 492 EXPECT_CALL(*mock_tables_.get(), UpdateResourceData(_, _)); |
498 .Times(testing::AtLeast(1)); | 493 EXPECT_CALL(*mock_tables_.get(), UpdateRedirectData(_, _)); |
499 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(_)); | 494 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(_)); |
500 | |
501 URLRequestSummary initial = | 495 URLRequestSummary initial = |
502 CreateURLRequestSummary(1, navigation_initial_url); | 496 CreateURLRequestSummary(1, navigation_initial_url); |
503 predictor_->RecordURLRequest(initial); | 497 predictor_->RecordURLRequest(initial); |
504 | 498 |
505 if (navigation_initial_url != navigation_url) { | 499 if (navigation_initial_url != navigation_url) { |
506 URLRequestSummary redirect = | 500 URLRequestSummary redirect = |
507 CreateRedirectRequestSummary(1, navigation_initial_url, navigation_url); | 501 CreateRedirectRequestSummary(1, navigation_initial_url, navigation_url); |
508 predictor_->RecordURLRedirect(redirect); | 502 predictor_->RecordURLRedirect(redirect); |
509 } | 503 } |
510 NavigationID navigation_id = CreateNavigationID(1, navigation_url); | 504 NavigationID navigation_id = CreateNavigationID(1, navigation_url); |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 "https://google.com/style1.css", | 615 "https://google.com/style1.css", |
622 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, | 616 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, |
623 net::MEDIUM, false, false); | 617 net::MEDIUM, false, false); |
624 InitializeResourceData( | 618 InitializeResourceData( |
625 host_data.add_resources(), "https://google.com/script1.js", | 619 host_data.add_resources(), "https://google.com/script1.js", |
626 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); | 620 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
627 InitializeResourceData( | 621 InitializeResourceData( |
628 host_data.add_resources(), "https://google.com/script2.js", | 622 host_data.add_resources(), "https://google.com/script2.js", |
629 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); | 623 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); |
630 EXPECT_CALL(*mock_tables_.get(), | 624 EXPECT_CALL(*mock_tables_.get(), |
631 UpdateData(empty_resource_data_, host_data, empty_redirect_data_, | 625 UpdateResourceData(host_data, PREFETCH_KEY_TYPE_HOST)); |
632 empty_redirect_data_)); | 626 |
633 OriginData origin_data = CreateOriginData("www.google.com"); | 627 OriginData origin_data = CreateOriginData("www.google.com"); |
634 InitializeOriginStat(origin_data.add_origins(), "https://google.com/", 1, 0, | 628 InitializeOriginStat(origin_data.add_origins(), "https://google.com/", 1, 0, |
635 0, 1., false, true); | 629 0, 1., false, true); |
636 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(origin_data)); | 630 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(origin_data)); |
637 | 631 |
638 RedirectData host_redirect_data = CreateRedirectData("www.google.com"); | 632 RedirectData host_redirect_data = CreateRedirectData("www.google.com"); |
639 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), | 633 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), |
640 "www.google.com", 1, 0, 0); | 634 "www.google.com", 1, 0, 0); |
641 EXPECT_CALL(*mock_tables_.get(), | 635 EXPECT_CALL(*mock_tables_.get(), |
642 UpdateData(empty_resource_data_, empty_resource_data_, | 636 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); |
643 empty_redirect_data_, host_redirect_data)); | |
644 | 637 |
645 predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id); | 638 predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id); |
646 profile_->BlockUntilHistoryProcessesPendingRequests(); | 639 profile_->BlockUntilHistoryProcessesPendingRequests(); |
647 } | 640 } |
648 | 641 |
649 // Single navigation that will be recorded. Will check for duplicate | 642 // Single navigation that will be recorded. Will check for duplicate |
650 // resources and also for number of resources saved. | 643 // resources and also for number of resources saved. |
651 TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDB) { | 644 TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDB) { |
652 const int kVisitCount = 4; | 645 const int kVisitCount = 4; |
653 AddUrlToHistory("http://www.google.com", kVisitCount); | 646 AddUrlToHistory("http://www.google.com", kVisitCount); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
723 url_data.add_resources(), "http://google.com/script1.js", | 716 url_data.add_resources(), "http://google.com/script1.js", |
724 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); | 717 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
725 InitializeResourceData( | 718 InitializeResourceData( |
726 url_data.add_resources(), "http://google.com/script2.js", | 719 url_data.add_resources(), "http://google.com/script2.js", |
727 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); | 720 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); |
728 InitializeResourceData(url_data.add_resources(), | 721 InitializeResourceData(url_data.add_resources(), |
729 "http://google.com/style2.css", | 722 "http://google.com/style2.css", |
730 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, | 723 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, |
731 net::MEDIUM, false, false); | 724 net::MEDIUM, false, false); |
732 EXPECT_CALL(*mock_tables_.get(), | 725 EXPECT_CALL(*mock_tables_.get(), |
733 UpdateData(url_data, empty_resource_data_, empty_redirect_data_, | 726 UpdateResourceData(url_data, PREFETCH_KEY_TYPE_URL)); |
734 empty_redirect_data_)); | |
735 | 727 |
736 OriginData origin_data = CreateOriginData("www.google.com"); | 728 OriginData origin_data = CreateOriginData("www.google.com"); |
737 InitializeOriginStat(origin_data.add_origins(), "http://static.google.com/", | 729 InitializeOriginStat(origin_data.add_origins(), "http://static.google.com/", |
738 1, 0, 0, 2., true, true); | 730 1, 0, 0, 2., true, true); |
739 InitializeOriginStat(origin_data.add_origins(), "http://dev.null.google.com/", | 731 InitializeOriginStat(origin_data.add_origins(), "http://dev.null.google.com/", |
740 1, 0, 0, 4., true, true); | 732 1, 0, 0, 4., true, true); |
741 InitializeOriginStat(origin_data.add_origins(), "http://google.com/", 1, 0, 0, | 733 InitializeOriginStat(origin_data.add_origins(), "http://google.com/", 1, 0, 0, |
742 1., false, true); | 734 1., false, true); |
743 InitializeOriginStat(origin_data.add_origins(), "http://reader.google.com/", | 735 InitializeOriginStat(origin_data.add_origins(), "http://reader.google.com/", |
744 1, 0, 0, 3., false, true); | 736 1, 0, 0, 3., false, true); |
745 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(origin_data)); | 737 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(origin_data)); |
746 | 738 |
747 PrefetchData host_data = CreatePrefetchData("www.google.com"); | 739 PrefetchData host_data = CreatePrefetchData("www.google.com"); |
748 host_data.mutable_resources()->CopyFrom(url_data.resources()); | 740 host_data.mutable_resources()->CopyFrom(url_data.resources()); |
749 EXPECT_CALL(*mock_tables_.get(), | 741 EXPECT_CALL(*mock_tables_.get(), |
750 UpdateData(empty_resource_data_, host_data, empty_redirect_data_, | 742 UpdateResourceData(host_data, PREFETCH_KEY_TYPE_HOST)); |
751 empty_redirect_data_)); | |
752 | 743 |
753 RedirectData url_redirect_data = CreateRedirectData("http://www.google.com/"); | 744 RedirectData url_redirect_data = CreateRedirectData("http://www.google.com/"); |
754 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), | 745 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), |
755 "http://www.google.com/", 1, 0, 0); | 746 "http://www.google.com/", 1, 0, 0); |
756 EXPECT_CALL(*mock_tables_.get(), | 747 EXPECT_CALL(*mock_tables_.get(), |
757 UpdateData(empty_resource_data_, empty_resource_data_, | 748 UpdateRedirectData(url_redirect_data, PREFETCH_KEY_TYPE_URL)); |
758 url_redirect_data, empty_redirect_data_)); | |
759 | 749 |
760 RedirectData host_redirect_data = CreateRedirectData("www.google.com"); | 750 RedirectData host_redirect_data = CreateRedirectData("www.google.com"); |
761 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), | 751 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), |
762 "www.google.com", 1, 0, 0); | 752 "www.google.com", 1, 0, 0); |
763 EXPECT_CALL(*mock_tables_.get(), | 753 EXPECT_CALL(*mock_tables_.get(), |
764 UpdateData(empty_resource_data_, empty_resource_data_, | 754 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); |
765 empty_redirect_data_, host_redirect_data)); | |
766 | 755 |
767 predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id); | 756 predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id); |
768 profile_->BlockUntilHistoryProcessesPendingRequests(); | 757 profile_->BlockUntilHistoryProcessesPendingRequests(); |
769 } | 758 } |
770 | 759 |
771 // Tests that navigation is recorded correctly for URL already present in | 760 // Tests that navigation is recorded correctly for URL already present in |
772 // the database cache. | 761 // the database cache. |
773 TEST_F(ResourcePrefetchPredictorTest, NavigationUrlInDB) { | 762 TEST_F(ResourcePrefetchPredictorTest, NavigationUrlInDB) { |
774 const int kVisitCount = 4; | 763 const int kVisitCount = 4; |
775 AddUrlToHistory("http://www.google.com", kVisitCount); | 764 AddUrlToHistory("http://www.google.com", kVisitCount); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 InitializeResourceData( | 835 InitializeResourceData( |
847 url_data.add_resources(), "http://google.com/script1.js", | 836 url_data.add_resources(), "http://google.com/script1.js", |
848 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); | 837 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
849 InitializeResourceData( | 838 InitializeResourceData( |
850 url_data.add_resources(), "http://google.com/script4.js", | 839 url_data.add_resources(), "http://google.com/script4.js", |
851 content::RESOURCE_TYPE_SCRIPT, 11, 1, 1, 2.1, net::MEDIUM, false, false); | 840 content::RESOURCE_TYPE_SCRIPT, 11, 1, 1, 2.1, net::MEDIUM, false, false); |
852 InitializeResourceData( | 841 InitializeResourceData( |
853 url_data.add_resources(), "http://google.com/script2.js", | 842 url_data.add_resources(), "http://google.com/script2.js", |
854 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); | 843 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); |
855 EXPECT_CALL(*mock_tables_.get(), | 844 EXPECT_CALL(*mock_tables_.get(), |
856 UpdateData(url_data, empty_resource_data_, empty_redirect_data_, | 845 UpdateResourceData(url_data, PREFETCH_KEY_TYPE_URL)); |
857 empty_redirect_data_)); | |
858 EXPECT_CALL(*mock_tables_.get(), | 846 EXPECT_CALL(*mock_tables_.get(), |
859 DeleteSingleResourceDataPoint("www.facebook.com", | 847 DeleteSingleResourceDataPoint("www.facebook.com", |
860 PREFETCH_KEY_TYPE_HOST)); | 848 PREFETCH_KEY_TYPE_HOST)); |
861 | 849 |
862 PrefetchData host_data = CreatePrefetchData("www.google.com"); | 850 PrefetchData host_data = CreatePrefetchData("www.google.com"); |
863 InitializeResourceData(host_data.add_resources(), | 851 InitializeResourceData(host_data.add_resources(), |
864 "http://google.com/style1.css", | 852 "http://google.com/style1.css", |
865 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, | 853 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, |
866 net::MEDIUM, false, false); | 854 net::MEDIUM, false, false); |
867 InitializeResourceData( | 855 InitializeResourceData( |
868 host_data.add_resources(), "http://google.com/script1.js", | 856 host_data.add_resources(), "http://google.com/script1.js", |
869 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); | 857 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
870 InitializeResourceData( | 858 InitializeResourceData( |
871 host_data.add_resources(), "http://google.com/script2.js", | 859 host_data.add_resources(), "http://google.com/script2.js", |
872 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); | 860 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); |
873 InitializeResourceData(host_data.add_resources(), | 861 InitializeResourceData(host_data.add_resources(), |
874 "http://google.com/style2.css", | 862 "http://google.com/style2.css", |
875 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, | 863 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, |
876 net::MEDIUM, false, false); | 864 net::MEDIUM, false, false); |
877 EXPECT_CALL(*mock_tables_.get(), | 865 EXPECT_CALL(*mock_tables_.get(), |
878 UpdateData(empty_resource_data_, host_data, empty_redirect_data_, | 866 UpdateResourceData(host_data, PREFETCH_KEY_TYPE_HOST)); |
879 empty_redirect_data_)); | |
880 | 867 |
881 RedirectData url_redirect_data = CreateRedirectData("http://www.google.com/"); | 868 RedirectData url_redirect_data = CreateRedirectData("http://www.google.com/"); |
882 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), | 869 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), |
883 "http://www.google.com/", 1, 0, 0); | 870 "http://www.google.com/", 1, 0, 0); |
884 EXPECT_CALL(*mock_tables_.get(), | 871 EXPECT_CALL(*mock_tables_.get(), |
885 UpdateData(empty_resource_data_, empty_resource_data_, | 872 UpdateRedirectData(url_redirect_data, PREFETCH_KEY_TYPE_URL)); |
886 url_redirect_data, empty_redirect_data_)); | |
887 | 873 |
888 RedirectData host_redirect_data = CreateRedirectData("www.google.com"); | 874 RedirectData host_redirect_data = CreateRedirectData("www.google.com"); |
889 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), | 875 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), |
890 "www.google.com", 1, 0, 0); | 876 "www.google.com", 1, 0, 0); |
891 EXPECT_CALL(*mock_tables_.get(), | 877 EXPECT_CALL(*mock_tables_.get(), |
892 UpdateData(empty_resource_data_, empty_resource_data_, | 878 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); |
893 empty_redirect_data_, host_redirect_data)); | |
894 | 879 |
895 OriginData origin_data = CreateOriginData("www.google.com"); | 880 OriginData origin_data = CreateOriginData("www.google.com"); |
896 InitializeOriginStat(origin_data.add_origins(), "http://static.google.com/", | 881 InitializeOriginStat(origin_data.add_origins(), "http://static.google.com/", |
897 1, 0, 0, 2., true, true); | 882 1, 0, 0, 2., true, true); |
898 InitializeOriginStat(origin_data.add_origins(), "http://google.com/", 1, 0, 0, | 883 InitializeOriginStat(origin_data.add_origins(), "http://google.com/", 1, 0, 0, |
899 1., false, true); | 884 1., false, true); |
900 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(origin_data)); | 885 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(origin_data)); |
901 | 886 |
902 predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id); | 887 predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id); |
903 profile_->BlockUntilHistoryProcessesPendingRequests(); | 888 profile_->BlockUntilHistoryProcessesPendingRequests(); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
957 DeleteOriginData(std::vector<std::string>({"google.com"}))); | 942 DeleteOriginData(std::vector<std::string>({"google.com"}))); |
958 | 943 |
959 PrefetchData url_data = CreatePrefetchData("http://www.nike.com/"); | 944 PrefetchData url_data = CreatePrefetchData("http://www.nike.com/"); |
960 InitializeResourceData(url_data.add_resources(), "http://nike.com/style1.css", | 945 InitializeResourceData(url_data.add_resources(), "http://nike.com/style1.css", |
961 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, | 946 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, |
962 net::MEDIUM, false, false); | 947 net::MEDIUM, false, false); |
963 InitializeResourceData(url_data.add_resources(), "http://nike.com/image2.png", | 948 InitializeResourceData(url_data.add_resources(), "http://nike.com/image2.png", |
964 content::RESOURCE_TYPE_IMAGE, 1, 0, 0, 2.0, | 949 content::RESOURCE_TYPE_IMAGE, 1, 0, 0, 2.0, |
965 net::MEDIUM, false, false); | 950 net::MEDIUM, false, false); |
966 EXPECT_CALL(*mock_tables_.get(), | 951 EXPECT_CALL(*mock_tables_.get(), |
967 UpdateData(url_data, empty_resource_data_, empty_redirect_data_, | 952 UpdateResourceData(url_data, PREFETCH_KEY_TYPE_URL)); |
968 empty_redirect_data_)); | |
969 | 953 |
970 PrefetchData host_data = CreatePrefetchData("www.nike.com"); | 954 PrefetchData host_data = CreatePrefetchData("www.nike.com"); |
971 host_data.mutable_resources()->CopyFrom(url_data.resources()); | 955 host_data.mutable_resources()->CopyFrom(url_data.resources()); |
972 EXPECT_CALL(*mock_tables_.get(), | 956 EXPECT_CALL(*mock_tables_.get(), |
973 UpdateData(empty_resource_data_, host_data, empty_redirect_data_, | 957 UpdateResourceData(host_data, PREFETCH_KEY_TYPE_HOST)); |
974 empty_redirect_data_)); | |
975 | 958 |
976 RedirectData url_redirect_data = CreateRedirectData("http://www.nike.com/"); | 959 RedirectData url_redirect_data = CreateRedirectData("http://www.nike.com/"); |
977 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), | 960 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), |
978 "http://www.nike.com/", 1, 0, 0); | 961 "http://www.nike.com/", 1, 0, 0); |
979 EXPECT_CALL(*mock_tables_.get(), | 962 EXPECT_CALL(*mock_tables_.get(), |
980 UpdateData(empty_resource_data_, empty_resource_data_, | 963 UpdateRedirectData(url_redirect_data, PREFETCH_KEY_TYPE_URL)); |
981 url_redirect_data, empty_redirect_data_)); | |
982 | 964 |
983 RedirectData host_redirect_data = CreateRedirectData("www.nike.com"); | 965 RedirectData host_redirect_data = CreateRedirectData("www.nike.com"); |
984 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), | 966 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), |
985 "www.nike.com", 1, 0, 0); | 967 "www.nike.com", 1, 0, 0); |
986 EXPECT_CALL(*mock_tables_.get(), | 968 EXPECT_CALL(*mock_tables_.get(), |
987 UpdateData(empty_resource_data_, empty_resource_data_, | 969 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); |
988 empty_redirect_data_, host_redirect_data)); | |
989 | 970 |
990 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(testing::_)); | 971 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(testing::_)); |
991 | 972 |
992 predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id); | 973 predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id); |
993 profile_->BlockUntilHistoryProcessesPendingRequests(); | 974 profile_->BlockUntilHistoryProcessesPendingRequests(); |
994 } | 975 } |
995 | 976 |
996 TEST_F(ResourcePrefetchPredictorTest, RedirectUrlNotInDB) { | 977 TEST_F(ResourcePrefetchPredictorTest, RedirectUrlNotInDB) { |
997 const int kVisitCount = 4; | 978 const int kVisitCount = 4; |
998 AddUrlToHistory("https://facebook.com/google", kVisitCount); | 979 AddUrlToHistory("https://facebook.com/google", kVisitCount); |
(...skipping 24 matching lines...) Expand all Loading... |
1023 EXPECT_CALL(*mock_tables_.get(), | 1004 EXPECT_CALL(*mock_tables_.get(), |
1024 DeleteSingleResourceDataPoint("https://facebook.com/google", | 1005 DeleteSingleResourceDataPoint("https://facebook.com/google", |
1025 PREFETCH_KEY_TYPE_URL)); | 1006 PREFETCH_KEY_TYPE_URL)); |
1026 EXPECT_CALL(*mock_tables_.get(), DeleteSingleResourceDataPoint( | 1007 EXPECT_CALL(*mock_tables_.get(), DeleteSingleResourceDataPoint( |
1027 "facebook.com", PREFETCH_KEY_TYPE_HOST)); | 1008 "facebook.com", PREFETCH_KEY_TYPE_HOST)); |
1028 | 1009 |
1029 RedirectData url_redirect_data = CreateRedirectData("http://fb.com/google"); | 1010 RedirectData url_redirect_data = CreateRedirectData("http://fb.com/google"); |
1030 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), | 1011 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), |
1031 "https://facebook.com/google", 1, 0, 0); | 1012 "https://facebook.com/google", 1, 0, 0); |
1032 EXPECT_CALL(*mock_tables_.get(), | 1013 EXPECT_CALL(*mock_tables_.get(), |
1033 UpdateData(empty_resource_data_, empty_resource_data_, | 1014 UpdateRedirectData(url_redirect_data, PREFETCH_KEY_TYPE_URL)); |
1034 url_redirect_data, empty_redirect_data_)); | |
1035 | 1015 |
1036 RedirectData host_redirect_data = CreateRedirectData("fb.com"); | 1016 RedirectData host_redirect_data = CreateRedirectData("fb.com"); |
1037 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), | 1017 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), |
1038 "facebook.com", 1, 0, 0); | 1018 "facebook.com", 1, 0, 0); |
1039 EXPECT_CALL(*mock_tables_.get(), | 1019 EXPECT_CALL(*mock_tables_.get(), |
1040 UpdateData(empty_resource_data_, empty_resource_data_, | 1020 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); |
1041 empty_redirect_data_, host_redirect_data)); | |
1042 | 1021 |
1043 predictor_->RecordMainFrameLoadComplete(fb_end); | 1022 predictor_->RecordMainFrameLoadComplete(fb_end); |
1044 profile_->BlockUntilHistoryProcessesPendingRequests(); | 1023 profile_->BlockUntilHistoryProcessesPendingRequests(); |
1045 } | 1024 } |
1046 | 1025 |
1047 // Tests that redirect is recorded correctly for URL already present in | 1026 // Tests that redirect is recorded correctly for URL already present in |
1048 // the database cache. | 1027 // the database cache. |
1049 TEST_F(ResourcePrefetchPredictorTest, RedirectUrlInDB) { | 1028 TEST_F(ResourcePrefetchPredictorTest, RedirectUrlInDB) { |
1050 const int kVisitCount = 7; | 1029 const int kVisitCount = 7; |
1051 AddUrlToHistory("https://facebook.com/google", kVisitCount); | 1030 AddUrlToHistory("https://facebook.com/google", kVisitCount); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1096 PREFETCH_KEY_TYPE_URL)); | 1075 PREFETCH_KEY_TYPE_URL)); |
1097 EXPECT_CALL(*mock_tables_.get(), DeleteSingleResourceDataPoint( | 1076 EXPECT_CALL(*mock_tables_.get(), DeleteSingleResourceDataPoint( |
1098 "facebook.com", PREFETCH_KEY_TYPE_HOST)); | 1077 "facebook.com", PREFETCH_KEY_TYPE_HOST)); |
1099 | 1078 |
1100 RedirectData url_redirect_data = CreateRedirectData("http://fb.com/google"); | 1079 RedirectData url_redirect_data = CreateRedirectData("http://fb.com/google"); |
1101 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), | 1080 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), |
1102 "https://facebook.com/google", 6, 1, 0); | 1081 "https://facebook.com/google", 6, 1, 0); |
1103 // Existing redirect to https://facebook.com/login will be deleted because of | 1082 // Existing redirect to https://facebook.com/login will be deleted because of |
1104 // too many consecutive misses. | 1083 // too many consecutive misses. |
1105 EXPECT_CALL(*mock_tables_.get(), | 1084 EXPECT_CALL(*mock_tables_.get(), |
1106 UpdateData(empty_resource_data_, empty_resource_data_, | 1085 UpdateRedirectData(url_redirect_data, PREFETCH_KEY_TYPE_URL)); |
1107 url_redirect_data, empty_redirect_data_)); | |
1108 | 1086 |
1109 RedirectData host_redirect_data = CreateRedirectData("fb.com"); | 1087 RedirectData host_redirect_data = CreateRedirectData("fb.com"); |
1110 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), | 1088 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), |
1111 "facebook.com", 1, 0, 0); | 1089 "facebook.com", 1, 0, 0); |
1112 EXPECT_CALL(*mock_tables_.get(), | 1090 EXPECT_CALL(*mock_tables_.get(), |
1113 UpdateData(empty_resource_data_, empty_resource_data_, | 1091 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); |
1114 empty_redirect_data_, host_redirect_data)); | |
1115 | 1092 |
1116 predictor_->RecordMainFrameLoadComplete(fb_end); | 1093 predictor_->RecordMainFrameLoadComplete(fb_end); |
1117 profile_->BlockUntilHistoryProcessesPendingRequests(); | 1094 profile_->BlockUntilHistoryProcessesPendingRequests(); |
1118 } | 1095 } |
1119 | 1096 |
1120 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDB) { | 1097 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDB) { |
1121 precache::PrecacheManifest manifest = CreateManifestData(1); | 1098 precache::PrecacheManifest manifest = CreateManifestData(1); |
1122 InitializePrecacheResource(manifest.add_resource(), | 1099 InitializePrecacheResource(manifest.add_resource(), |
1123 "http://cdn.google.com/script.js", 0.9); | 1100 "http://cdn.google.com/script.js", 0.9); |
1124 InitializePrecacheResource(manifest.add_resource(), | 1101 InitializePrecacheResource(manifest.add_resource(), |
(...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1899 predictor_->url_table_cache_->insert( | 1876 predictor_->url_table_cache_->insert( |
1900 std::make_pair(www_google_url.primary_key(), www_google_url)); | 1877 std::make_pair(www_google_url.primary_key(), www_google_url)); |
1901 | 1878 |
1902 urls.clear(); | 1879 urls.clear(); |
1903 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1880 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
1904 EXPECT_THAT(urls, UnorderedElementsAre(GURL(font_url))); | 1881 EXPECT_THAT(urls, UnorderedElementsAre(GURL(font_url))); |
1905 } | 1882 } |
1906 | 1883 |
1907 TEST_F(ResourcePrefetchPredictorTest, TestPrecisionRecallHistograms) { | 1884 TEST_F(ResourcePrefetchPredictorTest, TestPrecisionRecallHistograms) { |
1908 using testing::_; | 1885 using testing::_; |
1909 EXPECT_CALL(*mock_tables_.get(), UpdateData(_, _, _, _)).Times(2); | 1886 EXPECT_CALL(*mock_tables_.get(), UpdateResourceData(_, _)); |
| 1887 EXPECT_CALL(*mock_tables_.get(), UpdateRedirectData(_, _)); |
1910 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(_)); | 1888 EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(_)); |
1911 | 1889 |
1912 // Fill the database with 3 resources: 1 useful, 2 useless. | 1890 // Fill the database with 3 resources: 1 useful, 2 useless. |
1913 const std::string main_frame_url = "http://google.com/?query=cats"; | 1891 const std::string main_frame_url = "http://google.com/?query=cats"; |
1914 PrefetchData google = CreatePrefetchData("google.com", 1); | 1892 PrefetchData google = CreatePrefetchData("google.com", 1); |
1915 | 1893 |
1916 const std::string script_url = "https://cdn.google.com/script.js"; | 1894 const std::string script_url = "https://cdn.google.com/script.js"; |
1917 InitializeResourceData(google.add_resources(), script_url, | 1895 InitializeResourceData(google.add_resources(), script_url, |
1918 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, | 1896 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, |
1919 net::MEDIUM, false, false); | 1897 net::MEDIUM, false, false); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2007 predictor_->host_table_cache_->insert( | 1985 predictor_->host_table_cache_->insert( |
2008 std::make_pair(google.primary_key(), google)); | 1986 std::make_pair(google.primary_key(), google)); |
2009 | 1987 |
2010 predictor_->StartPrefetching(GURL(main_frame_url), PrefetchOrigin::EXTERNAL); | 1988 predictor_->StartPrefetching(GURL(main_frame_url), PrefetchOrigin::EXTERNAL); |
2011 predictor_->StopPrefetching(GURL(main_frame_url)); | 1989 predictor_->StopPrefetching(GURL(main_frame_url)); |
2012 histogram_tester_->ExpectTotalCount( | 1990 histogram_tester_->ExpectTotalCount( |
2013 internal::kResourcePrefetchPredictorPrefetchingDurationHistogram, 1); | 1991 internal::kResourcePrefetchPredictorPrefetchingDurationHistogram, 1); |
2014 } | 1992 } |
2015 | 1993 |
2016 } // namespace predictors | 1994 } // namespace predictors |
OLD | NEW |