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 |