Chromium Code Reviews| Index: chrome/browser/net/predictor_browsertest.cc |
| diff --git a/chrome/browser/net/predictor_browsertest.cc b/chrome/browser/net/predictor_browsertest.cc |
| index 85c5f63dbb6fa8f8ac84f09d072fc16faa853ae4..60b264f2c31cc6c5132d90d7914a5ea07763079b 100644 |
| --- a/chrome/browser/net/predictor_browsertest.cc |
| +++ b/chrome/browser/net/predictor_browsertest.cc |
| @@ -320,6 +320,7 @@ class CrossSitePredictorObserver |
| chrome_browser_net::UrlInfo::ResolutionMotivation motivation, |
| int count) override { |
| base::AutoLock lock(lock_); |
| + preconnect_url_attempts_.insert(original_url); |
|
Charlie Harrison
2017/05/15 17:01:25
Does OnDnsLookupFinished trigger for these bad URL
xunjieli
2017/05/15 17:06:51
Unfortunately no. OnDnsLookupFinished() is only us
xunjieli
2017/05/15 17:08:56
s/presolve/preresolve :)
|
| if (original_url == cross_site_host_) { |
| cross_site_preconnected_ = std::max(cross_site_preconnected_, count); |
| } else if (original_url == source_host_) { |
| @@ -411,6 +412,11 @@ class CrossSitePredictorObserver |
| return HasHostBeenLookedUpLocked(url); |
| } |
| + bool HasHostAttemptedToPreconnect(const GURL& url) { |
| + base::AutoLock lock(lock_); |
| + return base::ContainsKey(preconnect_url_attempts_, url); |
| + } |
| + |
| void CheckForWaitingLoop() { |
| lock_.AssertAcquired(); |
| if (waiting_on_dns_.is_empty()) |
| @@ -465,6 +471,7 @@ class CrossSitePredictorObserver |
| int cross_site_preconnected_; |
| int same_site_preconnected_; |
| + std::set<GURL> preconnect_url_attempts_; |
| std::set<GURL> successful_dns_lookups_; |
| std::set<GURL> unsuccessful_dns_lookups_; |
| base::RunLoop* dns_run_loop_; |
| @@ -875,6 +882,18 @@ IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, SimplePreconnectFour) { |
| connection_listener_->WaitForAcceptedConnectionsOnUI(4u); |
| } |
| +// Regression test for crbug.com/721981. |
| +IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, PreconnectNonHttpScheme) { |
| + GURL url("chrome-native://dummyurl"); |
| + predictor()->PreconnectUrlAndSubresources(url, GURL()); |
| + base::RunLoop().RunUntilIdle(); |
| + // Since |url| is non-HTTP(s) scheme, Predictor will canonicalize it to an |
| + // empty url. Make sure that there is no attempt to preconnect |url| or an |
| + // empty url. |
| + EXPECT_FALSE(observer()->HasHostAttemptedToPreconnect(url)); |
| + EXPECT_FALSE(observer()->HasHostAttemptedToPreconnect(GURL())); |
| +} |
| + |
| // Test the html test harness used to initiate cross site fetches. These |
| // initiate cross site subresource requests to the cross site test server. |
| // Inspect the predictor's internal state to make sure that they are properly |