Chromium Code Reviews| 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 "base/command_line.h" | 5 #include "base/command_line.h" | 
| 6 #include "chrome/browser/predictors/resource_prefetch_predictor.h" | 6 #include "chrome/browser/predictors/resource_prefetch_predictor.h" | 
| 7 #include "chrome/browser/predictors/resource_prefetch_predictor_factory.h" | 7 #include "chrome/browser/predictors/resource_prefetch_predictor_factory.h" | 
| 8 #include "chrome/browser/predictors/resource_prefetch_predictor_test_util.h" | 8 #include "chrome/browser/predictors/resource_prefetch_predictor_test_util.h" | 
| 9 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" | 
| 10 #include "chrome/browser/ui/browser.h" | 10 #include "chrome/browser/ui/browser.h" | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 54 void OnPredictorInitialized() override { run_loop_.Quit(); } | 54 void OnPredictorInitialized() override { run_loop_.Quit(); } | 
| 55 | 55 | 
| 56 void Wait() { run_loop_.Run(); } | 56 void Wait() { run_loop_.Run(); } | 
| 57 | 57 | 
| 58 private: | 58 private: | 
| 59 base::RunLoop run_loop_; | 59 base::RunLoop run_loop_; | 
| 60 | 60 | 
| 61 DISALLOW_COPY_AND_ASSIGN(InitializationObserver); | 61 DISALLOW_COPY_AND_ASSIGN(InitializationObserver); | 
| 62 }; | 62 }; | 
| 63 | 63 | 
| 64 using PageRequestSummary = ResourcePrefetchPredictor::PageRequestSummary; | |
| 65 using URLRequestSummary = ResourcePrefetchPredictor::URLRequestSummary; | |
| 66 | |
| 67 std::vector<URLRequestSummary> GetUniqueSubresources( | |
| 68 const PageRequestSummary& summary) { | |
| 69 std::vector<URLRequestSummary> subresources( | |
| 
 
Benoit L
2016/11/28 14:58:04
nit: why not just a copy?
 
alexilin
2016/11/28 15:12:15
Done.
 
 | |
| 70 summary.subresource_requests.begin(), summary.subresource_requests.end()); | |
| 71 std::sort(subresources.begin(), subresources.end(), | |
| 
 
Benoit L
2016/11/28 14:58:04
Do you need stable_sort here?
 
alexilin
2016/11/28 15:12:15
Thanks! Indeed we need first occurrences of each s
 
 | |
| 72 [](const URLRequestSummary& x, const URLRequestSummary& y) { | |
| 73 return x.resource_url < y.resource_url; | |
| 74 }); | |
| 75 subresources.erase( | |
| 76 std::unique(subresources.begin(), subresources.end(), | |
| 77 [](const URLRequestSummary& x, const URLRequestSummary& y) { | |
| 78 return x.resource_url == y.resource_url; | |
| 79 }), | |
| 80 subresources.end()); | |
| 81 return subresources; | |
| 82 } | |
| 83 | |
| 64 // Helper class to track and allow waiting for ResourcePrefetchPredictor events. | 84 // Helper class to track and allow waiting for ResourcePrefetchPredictor events. | 
| 65 // These events are also used to verify that ResourcePrefetchPredictor works as | 85 // These events are also used to verify that ResourcePrefetchPredictor works as | 
| 66 // expected. | 86 // expected. | 
| 67 class ResourcePrefetchPredictorTestObserver : public TestObserver { | 87 class ResourcePrefetchPredictorTestObserver : public TestObserver { | 
| 68 public: | 88 public: | 
| 69 using PageRequestSummary = ResourcePrefetchPredictor::PageRequestSummary; | |
| 70 | 89 | 
| 71 explicit ResourcePrefetchPredictorTestObserver( | 90 explicit ResourcePrefetchPredictorTestObserver( | 
| 72 ResourcePrefetchPredictor* predictor, | 91 ResourcePrefetchPredictor* predictor, | 
| 73 const size_t expected_url_visit_count, | 92 const size_t expected_url_visit_count, | 
| 74 const PageRequestSummary& expected_summary) | 93 const PageRequestSummary& expected_summary) | 
| 75 : TestObserver(predictor), | 94 : TestObserver(predictor), | 
| 76 url_visit_count_(expected_url_visit_count), | 95 url_visit_count_(expected_url_visit_count), | 
| 77 summary_(expected_summary) {} | 96 summary_(expected_summary) {} | 
| 78 | 97 | 
| 79 // TestObserver: | 98 // TestObserver: | 
| 80 void OnNavigationLearned(size_t url_visit_count, | 99 void OnNavigationLearned(size_t url_visit_count, | 
| 81 const PageRequestSummary& summary) override { | 100 const PageRequestSummary& summary) override { | 
| 82 EXPECT_EQ(url_visit_count, url_visit_count_); | 101 EXPECT_EQ(url_visit_count, url_visit_count_); | 
| 83 EXPECT_EQ(summary.main_frame_url, summary_.main_frame_url); | 102 EXPECT_EQ(summary.main_frame_url, summary_.main_frame_url); | 
| 84 EXPECT_EQ(summary.initial_url, summary_.initial_url); | 103 EXPECT_EQ(summary.initial_url, summary_.initial_url); | 
| 85 EXPECT_THAT( | 104 EXPECT_THAT( | 
| 
 
Benoit L
2016/11/28 14:58:04
Can you add a comment to explain that we have dupl
 
alexilin
2016/11/28 15:12:15
Done.
 
 | |
| 86 summary.subresource_requests, | 105 GetUniqueSubresources(summary), | 
| 87 testing::UnorderedElementsAreArray(summary_.subresource_requests)); | 106 testing::UnorderedElementsAreArray(summary_.subresource_requests)); | 
| 88 run_loop_.Quit(); | 107 run_loop_.Quit(); | 
| 89 } | 108 } | 
| 90 | 109 | 
| 91 void Wait() { run_loop_.Run(); } | 110 void Wait() { run_loop_.Run(); } | 
| 92 | 111 | 
| 93 private: | 112 private: | 
| 94 base::RunLoop run_loop_; | 113 base::RunLoop run_loop_; | 
| 95 size_t url_visit_count_; | 114 size_t url_visit_count_; | 
| 96 PageRequestSummary summary_; | 115 PageRequestSummary summary_; | 
| 97 | 116 | 
| 98 DISALLOW_COPY_AND_ASSIGN(ResourcePrefetchPredictorTestObserver); | 117 DISALLOW_COPY_AND_ASSIGN(ResourcePrefetchPredictorTestObserver); | 
| 99 }; | 118 }; | 
| 100 | 119 | 
| 101 class ResourcePrefetchPredictorBrowserTest : public InProcessBrowserTest { | 120 class ResourcePrefetchPredictorBrowserTest : public InProcessBrowserTest { | 
| 102 protected: | 121 protected: | 
| 103 using URLRequestSummary = ResourcePrefetchPredictor::URLRequestSummary; | |
| 104 | 122 | 
| 105 void SetUpCommandLine(base::CommandLine* command_line) override { | 123 void SetUpCommandLine(base::CommandLine* command_line) override { | 
| 106 command_line->AppendSwitchASCII( | 124 command_line->AppendSwitchASCII( | 
| 107 switches::kSpeculativeResourcePrefetching, | 125 switches::kSpeculativeResourcePrefetching, | 
| 108 switches::kSpeculativeResourcePrefetchingEnabled); | 126 switches::kSpeculativeResourcePrefetchingEnabled); | 
| 109 } | 127 } | 
| 110 | 128 | 
| 111 void SetUpOnMainThread() override { | 129 void SetUpOnMainThread() override { | 
| 112 embedded_test_server()->RegisterRequestHandler(base::Bind( | 130 embedded_test_server()->RegisterRequestHandler(base::Bind( | 
| 113 &ResourcePrefetchPredictorBrowserTest::HandleRedirectRequest, | 131 &ResourcePrefetchPredictorBrowserTest::HandleRedirectRequest, | 
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 340 AddResource(https_server()->GetURL(kStylePath), | 358 AddResource(https_server()->GetURL(kStylePath), | 
| 341 content::RESOURCE_TYPE_STYLESHEET, net::HIGHEST); | 359 content::RESOURCE_TYPE_STYLESHEET, net::HIGHEST); | 
| 342 AddResource(https_server()->GetURL(kScriptPath), | 360 AddResource(https_server()->GetURL(kScriptPath), | 
| 343 content::RESOURCE_TYPE_SCRIPT, net::MEDIUM); | 361 content::RESOURCE_TYPE_SCRIPT, net::MEDIUM); | 
| 344 AddResource(https_server()->GetURL(kFontPath), | 362 AddResource(https_server()->GetURL(kFontPath), | 
| 345 content::RESOURCE_TYPE_FONT_RESOURCE, net::HIGHEST); | 363 content::RESOURCE_TYPE_FONT_RESOURCE, net::HIGHEST); | 
| 346 NavigateToURLAndCheckSubresources(GetURL(kRedirectPath)); | 364 NavigateToURLAndCheckSubresources(GetURL(kRedirectPath)); | 
| 347 } | 365 } | 
| 348 | 366 | 
| 349 } // namespace predictors | 367 } // namespace predictors | 
| OLD | NEW |