Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4206)

Unified Diff: chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc

Issue 2553083002: predictors: Add browsertest that tests prefetching. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698