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

Side by Side Diff: chrome/browser/net/predictor_browsertest.cc

Issue 2871323006: Make Network Predictor skip empty urls (Closed)
Patch Set: self Created 3 years, 7 months 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <algorithm> 8 #include <algorithm>
9 #include <memory> 9 #include <memory>
10 #include <set> 10 #include <set>
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 same_site_preconnected_(0), 313 same_site_preconnected_(0),
314 dns_run_loop_(nullptr), 314 dns_run_loop_(nullptr),
315 strict_(true) {} 315 strict_(true) {}
316 316
317 void OnPreconnectUrl( 317 void OnPreconnectUrl(
318 const GURL& original_url, 318 const GURL& original_url,
319 const GURL& first_party_for_cookies, 319 const GURL& first_party_for_cookies,
320 chrome_browser_net::UrlInfo::ResolutionMotivation motivation, 320 chrome_browser_net::UrlInfo::ResolutionMotivation motivation,
321 int count) override { 321 int count) override {
322 base::AutoLock lock(lock_); 322 base::AutoLock lock(lock_);
323 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 :)
323 if (original_url == cross_site_host_) { 324 if (original_url == cross_site_host_) {
324 cross_site_preconnected_ = std::max(cross_site_preconnected_, count); 325 cross_site_preconnected_ = std::max(cross_site_preconnected_, count);
325 } else if (original_url == source_host_) { 326 } else if (original_url == source_host_) {
326 same_site_preconnected_ = std::max(same_site_preconnected_, count); 327 same_site_preconnected_ = std::max(same_site_preconnected_, count);
327 } else if (strict_) { 328 } else if (strict_) {
328 ADD_FAILURE() << "Preconnected " << original_url 329 ADD_FAILURE() << "Preconnected " << original_url
329 << " when should only be preconnecting the source host: " 330 << " when should only be preconnecting the source host: "
330 << source_host_ 331 << source_host_
331 << " or the cross site host: " << cross_site_host_; 332 << " or the cross site host: " << cross_site_host_;
332 } 333 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 lock_.AssertAcquired(); 405 lock_.AssertAcquired();
405 return base::ContainsKey(successful_dns_lookups_, url) || 406 return base::ContainsKey(successful_dns_lookups_, url) ||
406 base::ContainsKey(unsuccessful_dns_lookups_, url); 407 base::ContainsKey(unsuccessful_dns_lookups_, url);
407 } 408 }
408 409
409 bool HasHostBeenLookedUp(const GURL& url) { 410 bool HasHostBeenLookedUp(const GURL& url) {
410 base::AutoLock lock(lock_); 411 base::AutoLock lock(lock_);
411 return HasHostBeenLookedUpLocked(url); 412 return HasHostBeenLookedUpLocked(url);
412 } 413 }
413 414
415 bool HasHostAttemptedToPreconnect(const GURL& url) {
416 base::AutoLock lock(lock_);
417 return base::ContainsKey(preconnect_url_attempts_, url);
418 }
419
414 void CheckForWaitingLoop() { 420 void CheckForWaitingLoop() {
415 lock_.AssertAcquired(); 421 lock_.AssertAcquired();
416 if (waiting_on_dns_.is_empty()) 422 if (waiting_on_dns_.is_empty())
417 return; 423 return;
418 if (!HasHostBeenLookedUpLocked(waiting_on_dns_)) 424 if (!HasHostBeenLookedUpLocked(waiting_on_dns_))
419 return; 425 return;
420 DCHECK(dns_run_loop_); 426 DCHECK(dns_run_loop_);
421 DCHECK(task_runner_); 427 DCHECK(task_runner_);
422 waiting_on_dns_ = GURL(); 428 waiting_on_dns_ = GURL();
423 task_runner_->PostTask(FROM_HERE, dns_run_loop_->QuitClosure()); 429 task_runner_->PostTask(FROM_HERE, dns_run_loop_->QuitClosure());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 464 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
459 465
460 // Protects all following members. They are read and updated from different 466 // Protects all following members. They are read and updated from different
461 // threads. 467 // threads.
462 base::Lock lock_; 468 base::Lock lock_;
463 469
464 int cross_site_learned_; 470 int cross_site_learned_;
465 int cross_site_preconnected_; 471 int cross_site_preconnected_;
466 int same_site_preconnected_; 472 int same_site_preconnected_;
467 473
474 std::set<GURL> preconnect_url_attempts_;
468 std::set<GURL> successful_dns_lookups_; 475 std::set<GURL> successful_dns_lookups_;
469 std::set<GURL> unsuccessful_dns_lookups_; 476 std::set<GURL> unsuccessful_dns_lookups_;
470 base::RunLoop* dns_run_loop_; 477 base::RunLoop* dns_run_loop_;
471 478
472 // This member can be set to optionally allow url learning other than from 479 // This member can be set to optionally allow url learning other than from
473 // source => source, source => target, or target => target. It will also allow 480 // source => source, source => target, or target => target. It will also allow
474 // preconnects to other hosts. 481 // preconnects to other hosts.
475 bool strict_; 482 bool strict_;
476 483
477 DISALLOW_COPY_AND_ASSIGN(CrossSitePredictorObserver); 484 DISALLOW_COPY_AND_ASSIGN(CrossSitePredictorObserver);
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 } 875 }
869 876
870 IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, SimplePreconnectFour) { 877 IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, SimplePreconnectFour) {
871 predictor()->PreconnectUrl( 878 predictor()->PreconnectUrl(
872 embedded_test_server()->base_url(), GURL(), 879 embedded_test_server()->base_url(), GURL(),
873 UrlInfo::ResolutionMotivation::EARLY_LOAD_MOTIVATED, 880 UrlInfo::ResolutionMotivation::EARLY_LOAD_MOTIVATED,
874 false /* allow credentials */, 4); 881 false /* allow credentials */, 4);
875 connection_listener_->WaitForAcceptedConnectionsOnUI(4u); 882 connection_listener_->WaitForAcceptedConnectionsOnUI(4u);
876 } 883 }
877 884
885 // Regression test for crbug.com/721981.
886 IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, PreconnectNonHttpScheme) {
887 GURL url("chrome-native://dummyurl");
888 predictor()->PreconnectUrlAndSubresources(url, GURL());
889 base::RunLoop().RunUntilIdle();
890 // Since |url| is non-HTTP(s) scheme, Predictor will canonicalize it to an
891 // empty url. Make sure that there is no attempt to preconnect |url| or an
892 // empty url.
893 EXPECT_FALSE(observer()->HasHostAttemptedToPreconnect(url));
894 EXPECT_FALSE(observer()->HasHostAttemptedToPreconnect(GURL()));
895 }
896
878 // Test the html test harness used to initiate cross site fetches. These 897 // Test the html test harness used to initiate cross site fetches. These
879 // initiate cross site subresource requests to the cross site test server. 898 // initiate cross site subresource requests to the cross site test server.
880 // Inspect the predictor's internal state to make sure that they are properly 899 // Inspect the predictor's internal state to make sure that they are properly
881 // logged. 900 // logged.
882 IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, CrossSiteUseOneSocket) { 901 IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, CrossSiteUseOneSocket) {
883 StopInterceptingCrossSiteOnUI(); 902 StopInterceptingCrossSiteOnUI();
884 NavigateToCrossSiteHtmlUrl(1 /* num_cors */, "" /* file_suffix */); 903 NavigateToCrossSiteHtmlUrl(1 /* num_cors */, "" /* file_suffix */);
885 EXPECT_EQ(1u, cross_site_connection_listener_->GetAcceptedSocketCount()); 904 EXPECT_EQ(1u, cross_site_connection_listener_->GetAcceptedSocketCount());
886 EXPECT_EQ(1, observer()->CrossSiteLearned()); 905 EXPECT_EQ(1, observer()->CrossSiteLearned());
887 EXPECT_EQ(2, observer()->SameSitePreconnected()); 906 EXPECT_EQ(2, observer()->SameSitePreconnected());
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after
1565 // Second navigation to content with an img. 1584 // Second navigation to content with an img.
1566 std::string img_content = 1585 std::string img_content =
1567 "<img src=\"" + preconnect_url.spec() + "test.gif\">"; 1586 "<img src=\"" + preconnect_url.spec() + "test.gif\">";
1568 NavigateToDataURLWithContent(img_content); 1587 NavigateToDataURLWithContent(img_content);
1569 connection_listener_->WaitUntilFirstConnectionRead(); 1588 connection_listener_->WaitUntilFirstConnectionRead();
1570 EXPECT_EQ(2u, connection_listener_->GetAcceptedSocketCount()); 1589 EXPECT_EQ(2u, connection_listener_->GetAcceptedSocketCount());
1571 EXPECT_EQ(1u, connection_listener_->GetReadSocketCount()); 1590 EXPECT_EQ(1u, connection_listener_->GetReadSocketCount());
1572 } 1591 }
1573 1592
1574 } // namespace chrome_browser_net 1593 } // namespace chrome_browser_net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698