Commit 0b6891ca authored by lizeb's avatar lizeb Committed by Commit bot

predictors: Don't record URLs with a port.

BUG=631966

Review-Url: https://codereview.chromium.org/2749583003
Cr-Commit-Position: refs/heads/master@{#457406}
parent 58f641e2
......@@ -52,6 +52,8 @@ const char* kFontMimeTypes[] = {"font/woff2",
const size_t kNumSampleHosts = 50;
const size_t kReportReadinessThreshold = 50;
bool g_allow_port_in_urls = false;
// For reporting events of interest that are not tied to any navigation.
enum ReportingEvent {
REPORTING_EVENT_ALL_HISTORY_CLEARED = 0,
......@@ -273,16 +275,21 @@ bool ResourcePrefetchPredictor::ShouldRecordRedirect(
// static
bool ResourcePrefetchPredictor::IsHandledMainPage(net::URLRequest* request) {
return request->url().SchemeIsHTTPOrHTTPS();
const GURL& url = request->url();
bool bad_port = !g_allow_port_in_urls && url.has_port();
return url.SchemeIsHTTPOrHTTPS() && !bad_port;
}
// static
bool ResourcePrefetchPredictor::IsHandledSubresource(
net::URLRequest* response,
content::ResourceType resource_type) {
const GURL& url = response->url();
bool bad_port = !g_allow_port_in_urls && url.has_port();
if (!response->first_party_for_cookies().SchemeIsHTTPOrHTTPS() ||
!response->url().SchemeIsHTTPOrHTTPS())
!url.SchemeIsHTTPOrHTTPS() || bad_port) {
return false;
}
std::string mime_type;
response->GetMimeType(&mime_type);
......@@ -398,6 +405,11 @@ bool ResourcePrefetchPredictor::GetRedirectEndpoint(
return true;
}
// static
void ResourcePrefetchPredictor::SetAllowPortInUrlsForTesting(bool state) {
g_allow_port_in_urls = state;
}
////////////////////////////////////////////////////////////////////////////////
// ResourcePrefetchPredictor nested types.
......
......@@ -294,6 +294,8 @@ class ResourcePrefetchPredictor
const RedirectDataMap& redirect_data_map,
std::string* redirect_endpoint);
static void SetAllowPortInUrlsForTesting(bool state);
// KeyedService methods override.
void Shutdown() override;
......
......@@ -331,10 +331,16 @@ class ResourcePrefetchPredictorBrowserTest : public InProcessBrowserTest {
predictor_ =
ResourcePrefetchPredictorFactory::GetForProfile(browser()->profile());
ASSERT_TRUE(predictor_);
// URLs from the test server contain a port number.
ResourcePrefetchPredictor::SetAllowPortInUrlsForTesting(true);
EnsurePredictorInitialized();
histogram_tester_.reset(new base::HistogramTester());
}
void TearDownOnMainThread() override {
ResourcePrefetchPredictor::SetAllowPortInUrlsForTesting(false);
}
void TestLearningAndPrefetching(const GURL& main_frame_url) {
// Navigate to |main_frame_url| and check all the expectations.
NavigateToURLAndCheckSubresources(main_frame_url);
......
......@@ -1250,6 +1250,12 @@ TEST_F(ResourcePrefetchPredictorTest, ShouldRecordRequestMainFrame) {
content::RESOURCE_TYPE_IMAGE, true);
EXPECT_FALSE(ResourcePrefetchPredictor::ShouldRecordRequest(
file_request.get(), content::RESOURCE_TYPE_MAIN_FRAME));
std::unique_ptr<net::URLRequest> https_request_with_port =
CreateURLRequest(GURL("https://www.google.com:666"), net::MEDIUM,
content::RESOURCE_TYPE_IMAGE, true);
EXPECT_FALSE(ResourcePrefetchPredictor::ShouldRecordRequest(
https_request_with_port.get(), content::RESOURCE_TYPE_MAIN_FRAME));
}
TEST_F(ResourcePrefetchPredictorTest, ShouldRecordRequestSubResource) {
......@@ -1270,6 +1276,12 @@ TEST_F(ResourcePrefetchPredictorTest, ShouldRecordRequestSubResource) {
content::RESOURCE_TYPE_IMAGE, false);
EXPECT_FALSE(ResourcePrefetchPredictor::ShouldRecordRequest(
file_request.get(), content::RESOURCE_TYPE_IMAGE));
std::unique_ptr<net::URLRequest> https_request_with_port =
CreateURLRequest(GURL("https://www.google.com:666/cat.png"), net::MEDIUM,
content::RESOURCE_TYPE_IMAGE, false);
EXPECT_FALSE(ResourcePrefetchPredictor::ShouldRecordRequest(
https_request_with_port.get(), content::RESOURCE_TYPE_IMAGE));
}
TEST_F(ResourcePrefetchPredictorTest, ShouldRecordResponseMainFrame) {
......@@ -1294,6 +1306,12 @@ TEST_F(ResourcePrefetchPredictorTest, ShouldRecordResponseMainFrame) {
content::RESOURCE_TYPE_MAIN_FRAME, true);
EXPECT_FALSE(
ResourcePrefetchPredictor::ShouldRecordResponse(file_request.get()));
std::unique_ptr<net::URLRequest> https_request_with_port =
CreateURLRequest(GURL("https://www.google.com:666"), net::MEDIUM,
content::RESOURCE_TYPE_MAIN_FRAME, true);
EXPECT_FALSE(ResourcePrefetchPredictor::ShouldRecordResponse(
https_request_with_port.get()));
}
TEST_F(ResourcePrefetchPredictorTest, ShouldRecordResponseSubresource) {
......@@ -1316,6 +1334,12 @@ TEST_F(ResourcePrefetchPredictorTest, ShouldRecordResponseSubresource) {
EXPECT_TRUE(ResourcePrefetchPredictor::ShouldRecordResponse(
https_image_request.get()));
std::unique_ptr<net::URLRequest> https_image_request_with_port =
CreateURLRequest(GURL("https://www.google.com:666/cat.png"), net::MEDIUM,
content::RESOURCE_TYPE_IMAGE, true);
EXPECT_FALSE(ResourcePrefetchPredictor::ShouldRecordResponse(
https_image_request_with_port.get()));
std::unique_ptr<net::URLRequest> file_image_request =
CreateURLRequest(GURL("file://www.google.com/cat.png"), net::MEDIUM,
content::RESOURCE_TYPE_IMAGE, true);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment