Chromium Code Reviews| Index: chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc |
| diff --git a/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc b/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc |
| index 91e3d93786e17c3e8a87925d0a4301fed1fa73b3..1780355b4d4ccbe0c6d9ff4ee995392640d2fa9c 100644 |
| --- a/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc |
| +++ b/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc |
| @@ -8,6 +8,7 @@ |
| #include "chrome/browser/predictors/resource_prefetch_predictor_test_util.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/browser.h" |
| +#include "chrome/browser/ui/browser_commands.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| @@ -112,14 +113,13 @@ std::vector<URLRequestSummary> GetUniqueSubresources( |
| // Helper class to track and allow waiting for ResourcePrefetchPredictor events. |
| // These events are also used to verify that ResourcePrefetchPredictor works as |
| // expected. |
| -class ResourcePrefetchPredictorTestObserver : public TestObserver { |
| +class LearningObserver : public TestObserver { |
| public: |
| using PageRequestSummary = ResourcePrefetchPredictor::PageRequestSummary; |
| - explicit ResourcePrefetchPredictorTestObserver( |
| - ResourcePrefetchPredictor* predictor, |
| - const size_t expected_url_visit_count, |
| - const PageRequestSummary& expected_summary) |
| + explicit LearningObserver(ResourcePrefetchPredictor* predictor, |
| + const size_t expected_url_visit_count, |
| + const PageRequestSummary& expected_summary) |
| : TestObserver(predictor), |
| url_visit_count_(expected_url_visit_count), |
| summary_(expected_summary) {} |
| @@ -146,7 +146,33 @@ class ResourcePrefetchPredictorTestObserver : public TestObserver { |
| size_t url_visit_count_; |
| PageRequestSummary summary_; |
| - DISALLOW_COPY_AND_ASSIGN(ResourcePrefetchPredictorTestObserver); |
| + DISALLOW_COPY_AND_ASSIGN(LearningObserver); |
| +}; |
| + |
| +class PrefetchingObserver : public TestObserver { |
| + public: |
| + explicit PrefetchingObserver(ResourcePrefetchPredictor* predictor, |
| + const GURL& expected_main_frame_url) |
| + : TestObserver(predictor), main_frame_url_(expected_main_frame_url) {} |
| + |
| + // TestObserver: |
| + void OnNavigationLearned(size_t url_visit_count, |
| + const PageRequestSummary& summary) override { |
| + ADD_FAILURE() << "Prefetching shouldn't activate learning"; |
| + } |
| + |
| + void OnPrefetchingFinished(const GURL& main_frame_url) override { |
| + EXPECT_EQ(main_frame_url_, main_frame_url); |
| + run_loop_.Quit(); |
| + } |
| + |
| + void Wait() { run_loop_.Run(); } |
| + |
| + private: |
| + base::RunLoop run_loop_; |
| + GURL main_frame_url_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PrefetchingObserver); |
| }; |
| class ResourcePrefetchPredictorBrowserTest : public InProcessBrowserTest { |
| @@ -182,12 +208,26 @@ class ResourcePrefetchPredictorBrowserTest : public InProcessBrowserTest { |
| url_request_summaries.push_back( |
| GetURLRequestSummaryForResource(endpoint_url, kv.second)); |
| } |
| - ResourcePrefetchPredictorTestObserver observer( |
| + LearningObserver observer( |
| predictor_, UpdateAndGetVisitCount(main_frame_url), |
| CreatePageRequestSummary(endpoint_url.spec(), main_frame_url.spec(), |
| url_request_summaries)); |
| ui_test_utils::NavigateToURL(browser(), main_frame_url); |
| observer.Wait(); |
| + for (auto& kv : resources_) { |
| + if (!kv.second.is_no_store && kv.second.should_be_recorded) |
| + kv.second.request.was_cached = true; |
| + } |
| + } |
| + |
| + void PrefetchURL(const GURL& main_frame_url) { |
| + PrefetchingObserver observer(predictor_, main_frame_url); |
| + predictor_->StartPrefetching(main_frame_url, PrefetchOrigin::NAVIGATION); |
| + observer.Wait(); |
| + for (auto& kv : resources_) { |
| + if (!kv.second.is_no_store && kv.second.should_be_recorded) |
| + kv.second.request.was_cached = true; |
| + } |
| } |
| ResourceSummary* AddResource(const GURL& resource_url, |
| @@ -233,6 +273,12 @@ class ResourcePrefetchPredictorBrowserTest : public InProcessBrowserTest { |
| } |
| } |
| + void ClearCache() { |
| + chrome::ClearCache(browser()); |
| + for (auto& kv : resources_) |
| + kv.second.request.was_cached = false; |
| + } |
| + |
| // Shortcut for convenience. |
| GURL GetURL(const std::string& path) const { |
| return embedded_test_server()->GetURL(path); |
| @@ -489,4 +535,21 @@ IN_PROC_BROWSER_TEST_F(ResourcePrefetchPredictorBrowserTest, |
| NavigateToURLAndCheckSubresources(GetURL(kHtmlIframePath)); |
| } |
| +IN_PROC_BROWSER_TEST_F(ResourcePrefetchPredictorBrowserTest, |
| + PrefetchingSimple) { |
| + AddResource(GetURL(kImagePath), content::RESOURCE_TYPE_IMAGE, net::LOWEST); |
| + AddResource(GetURL(kStylePath), content::RESOURCE_TYPE_STYLESHEET, |
| + net::HIGHEST); |
| + AddResource(GetURL(kScriptPath), content::RESOURCE_TYPE_SCRIPT, net::MEDIUM); |
| + AddResource(GetURL(kFontPath), content::RESOURCE_TYPE_FONT_RESOURCE, |
| + net::HIGHEST); |
| + // We need to have at least two resource hits to trigger prefetch. |
| + NavigateToURLAndCheckSubresources(GetURL(kHtmlSubresourcesPath)); |
| + ClearCache(); |
| + NavigateToURLAndCheckSubresources(GetURL(kHtmlSubresourcesPath)); |
| + ClearCache(); |
| + PrefetchURL(GetURL(kHtmlSubresourcesPath)); |
| + NavigateToURLAndCheckSubresources(GetURL(kHtmlSubresourcesPath)); |
|
alexilin
2016/12/06 12:44:17
Here we reuse interceptors of URLRequests that Res
|
| +} |
| + |
| } // namespace predictors |