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

Side by Side Diff: chrome/browser/net/predictor.h

Issue 545633002: Don't preresolve DNS if a fixed proxy configuration is in place. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remote superfluous net:: prefix Created 6 years, 2 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
« no previous file with comments | « no previous file | chrome/browser/net/predictor.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 // A Predictor object is instantiated once in the browser process, and manages 5 // A Predictor object is instantiated once in the browser process, and manages
6 // both preresolution of hostnames, as well as TCP/IP preconnection to expected 6 // both preresolution of hostnames, as well as TCP/IP preconnection to expected
7 // subresources. 7 // subresources.
8 // Most hostname lists are provided by the renderer processes, and include URLs 8 // Most hostname lists are provided by the renderer processes, and include URLs
9 // that *might* be used in the near future by the browsing user. One goal of 9 // that *might* be used in the near future by the browsing user. One goal of
10 // this class is to cause the underlying DNS structure to lookup a hostname 10 // this class is to cause the underlying DNS structure to lookup a hostname
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 class ProfileIOData; 42 class ProfileIOData;
43 43
44 namespace base { 44 namespace base {
45 class ListValue; 45 class ListValue;
46 class WaitableEvent; 46 class WaitableEvent;
47 } 47 }
48 48
49 namespace net { 49 namespace net {
50 class HostResolver; 50 class HostResolver;
51 class SSLConfigService; 51 class SSLConfigService;
52 class ProxyService;
52 class TransportSecurityState; 53 class TransportSecurityState;
53 class URLRequestContextGetter; 54 class URLRequestContextGetter;
54 } 55 }
55 56
56 namespace user_prefs { 57 namespace user_prefs {
57 class PrefRegistrySyncable; 58 class PrefRegistrySyncable;
58 } 59 }
59 60
60 namespace chrome_browser_net { 61 namespace chrome_browser_net {
61 62
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 FRIEND_TEST_ALL_PREFIXES(PredictorTest, ShutdownWhenResolutionIsPendingTest); 312 FRIEND_TEST_ALL_PREFIXES(PredictorTest, ShutdownWhenResolutionIsPendingTest);
312 FRIEND_TEST_ALL_PREFIXES(PredictorTest, SingleLookupTest); 313 FRIEND_TEST_ALL_PREFIXES(PredictorTest, SingleLookupTest);
313 FRIEND_TEST_ALL_PREFIXES(PredictorTest, ConcurrentLookupTest); 314 FRIEND_TEST_ALL_PREFIXES(PredictorTest, ConcurrentLookupTest);
314 FRIEND_TEST_ALL_PREFIXES(PredictorTest, MassiveConcurrentLookupTest); 315 FRIEND_TEST_ALL_PREFIXES(PredictorTest, MassiveConcurrentLookupTest);
315 FRIEND_TEST_ALL_PREFIXES(PredictorTest, PriorityQueuePushPopTest); 316 FRIEND_TEST_ALL_PREFIXES(PredictorTest, PriorityQueuePushPopTest);
316 FRIEND_TEST_ALL_PREFIXES(PredictorTest, PriorityQueueReorderTest); 317 FRIEND_TEST_ALL_PREFIXES(PredictorTest, PriorityQueueReorderTest);
317 FRIEND_TEST_ALL_PREFIXES(PredictorTest, ReferrerSerializationTrimTest); 318 FRIEND_TEST_ALL_PREFIXES(PredictorTest, ReferrerSerializationTrimTest);
318 FRIEND_TEST_ALL_PREFIXES(PredictorTest, SingleLookupTestWithDisabledAdvisor); 319 FRIEND_TEST_ALL_PREFIXES(PredictorTest, SingleLookupTestWithDisabledAdvisor);
319 FRIEND_TEST_ALL_PREFIXES(PredictorTest, SingleLookupTestWithEnabledAdvisor); 320 FRIEND_TEST_ALL_PREFIXES(PredictorTest, SingleLookupTestWithEnabledAdvisor);
320 FRIEND_TEST_ALL_PREFIXES(PredictorTest, TestSimplePreconnectAdvisor); 321 FRIEND_TEST_ALL_PREFIXES(PredictorTest, TestSimplePreconnectAdvisor);
322 FRIEND_TEST_ALL_PREFIXES(PredictorTest, NoProxyService);
323 FRIEND_TEST_ALL_PREFIXES(PredictorTest, ProxyDefinitelyEnabled);
324 FRIEND_TEST_ALL_PREFIXES(PredictorTest, ProxyDefinitelyNotEnabled);
325 FRIEND_TEST_ALL_PREFIXES(PredictorTest, ProxyMaybeEnabled);
321 friend class WaitForResolutionHelper; // For testing. 326 friend class WaitForResolutionHelper; // For testing.
322 327
323 class LookupRequest; 328 class LookupRequest;
324 329
325 // A simple priority queue for handling host names. 330 // A simple priority queue for handling host names.
326 // Some names that are queued up have |motivation| that requires very rapid 331 // Some names that are queued up have |motivation| that requires very rapid
327 // handling. For example, a sub-resource name lookup MUST be done before the 332 // handling. For example, a sub-resource name lookup MUST be done before the
328 // actual sub-resource is fetched. In contrast, a name that was speculatively 333 // actual sub-resource is fetched. In contrast, a name that was speculatively
329 // noted in a page has to be resolved before the user "gets around to" 334 // noted in a page has to be resolved before the user "gets around to"
330 // clicking on a link. By tagging (with a motivation) each push we make into 335 // clicking on a link. By tagging (with a motivation) each push we make into
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 // If it does not process all the URLs in that vector, it posts a task to 499 // If it does not process all the URLs in that vector, it posts a task to
495 // continue with them shortly (i.e., it yeilds and continues). 500 // continue with them shortly (i.e., it yeilds and continues).
496 void IncrementalTrimReferrers(bool trim_all_now); 501 void IncrementalTrimReferrers(bool trim_all_now);
497 502
498 // If a proxy advisor is defined, let it know that |url| will be prefetched or 503 // If a proxy advisor is defined, let it know that |url| will be prefetched or
499 // preconnected to. 504 // preconnected to.
500 void AdviseProxyOnIOThread(const GURL& url, 505 void AdviseProxyOnIOThread(const GURL& url,
501 UrlInfo::ResolutionMotivation motivation, 506 UrlInfo::ResolutionMotivation motivation,
502 bool is_preconnect); 507 bool is_preconnect);
503 508
509 // If we can determine immediately (i.e. synchronously) that requests to this
510 // URL would likely go through a proxy, then return true. Otherwise, return
511 // false. This is used to avoid issuing DNS requests when a fixed proxy
512 // configuration is in place, which improves efficiency, and is also important
513 // if the unproxied DNS may contain incorrect entries.
514 bool WouldLikelyProxyURL(const GURL& url);
515
504 // Applies the HSTS redirect for |url|, if any. 516 // Applies the HSTS redirect for |url|, if any.
505 GURL GetHSTSRedirectOnIOThread(const GURL& url); 517 GURL GetHSTSRedirectOnIOThread(const GURL& url);
506 518
507 // ------------- End IO thread methods. 519 // ------------- End IO thread methods.
508 520
509 scoped_ptr<InitialObserver> initial_observer_; 521 scoped_ptr<InitialObserver> initial_observer_;
510 522
511 // Reference to URLRequestContextGetter from the Profile which owns the 523 // Reference to URLRequestContextGetter from the Profile which owns the
512 // predictor. Used by Preconnect. 524 // predictor. Used by Preconnect.
513 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 525 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 // The host resolver we warm DNS entries for. 563 // The host resolver we warm DNS entries for.
552 net::HostResolver* host_resolver_; 564 net::HostResolver* host_resolver_;
553 565
554 // The TransportSecurityState instance we query HSTS redirects from. 566 // The TransportSecurityState instance we query HSTS redirects from.
555 net::TransportSecurityState* transport_security_state_; 567 net::TransportSecurityState* transport_security_state_;
556 568
557 // The SSLConfigService we query SNI support from (used in querying HSTS 569 // The SSLConfigService we query SNI support from (used in querying HSTS
558 // redirects). 570 // redirects).
559 net::SSLConfigService* ssl_config_service_; 571 net::SSLConfigService* ssl_config_service_;
560 572
573 // The ProxyService, used to determine whether preresolve is useful.
574 net::ProxyService* proxy_service_;
575
561 // Are we currently using preconnection, rather than just DNS resolution, for 576 // Are we currently using preconnection, rather than just DNS resolution, for
562 // subresources and omni-box search URLs. 577 // subresources and omni-box search URLs.
563 // This is false if and only if disabled by a command line switch. 578 // This is false if and only if disabled by a command line switch.
564 const bool preconnect_enabled_; 579 const bool preconnect_enabled_;
565 580
566 // Most recent suggestion from Omnibox provided via AnticipateOmniboxUrl(). 581 // Most recent suggestion from Omnibox provided via AnticipateOmniboxUrl().
567 std::string last_omnibox_host_; 582 std::string last_omnibox_host_;
568 583
569 // The time when the last preresolve was done for last_omnibox_host_. 584 // The time when the last preresolve was done for last_omnibox_host_.
570 base::TimeTicks last_omnibox_preresolve_; 585 base::TimeTicks last_omnibox_preresolve_;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 virtual void ShutdownOnUIThread() OVERRIDE; 629 virtual void ShutdownOnUIThread() OVERRIDE;
615 private: 630 private:
616 // These member functions return True for unittests. 631 // These member functions return True for unittests.
617 virtual bool CanPrefetchAndPrerender() const OVERRIDE; 632 virtual bool CanPrefetchAndPrerender() const OVERRIDE;
618 virtual bool CanPreresolveAndPreconnect() const OVERRIDE; 633 virtual bool CanPreresolveAndPreconnect() const OVERRIDE;
619 }; 634 };
620 635
621 } // namespace chrome_browser_net 636 } // namespace chrome_browser_net
622 637
623 #endif // CHROME_BROWSER_NET_PREDICTOR_H_ 638 #endif // CHROME_BROWSER_NET_PREDICTOR_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/net/predictor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698