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

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

Issue 3050040: Reland 54771 (and 54795) To enable TCP Preconnection by default... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/browser_main.cc ('k') | chrome/browser/net/preconnect.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) 2006-2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2010 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 Preconnect instance maintains state while a TCP/IP connection is made, and 5 // A Preconnect instance maintains state while a TCP/IP connection is made, and
6 // and then released into the pool of available connections for future use. 6 // and then released into the pool of available connections for future use.
7 7
8 #ifndef CHROME_BROWSER_NET_PRECONNECT_H_ 8 #ifndef CHROME_BROWSER_NET_PRECONNECT_H_
9 #define CHROME_BROWSER_NET_PRECONNECT_H_ 9 #define CHROME_BROWSER_NET_PRECONNECT_H_
10 #pragma once 10 #pragma once
11 11
12 #include "base/ref_counted.h" 12 #include "base/ref_counted.h"
13 #include "chrome/browser/net/url_info.h" 13 #include "chrome/browser/net/url_info.h"
14 #include "net/base/completion_callback.h" 14 #include "net/base/completion_callback.h"
15 #include "net/base/host_port_pair.h" 15 #include "net/base/host_port_pair.h"
16 #include "net/socket/client_socket_handle.h" 16 #include "net/socket/client_socket_handle.h"
17 #include "net/socket/tcp_client_socket_pool.h" 17 #include "net/socket/tcp_client_socket_pool.h"
18 #include "net/url_request/url_request_context.h" 18 #include "net/url_request/url_request_context.h"
19 19
20 namespace chrome_browser_net { 20 namespace chrome_browser_net {
21 21
22 class Preconnect : public net::CompletionCallback { 22 class Preconnect : public net::CompletionCallback,
23 public base::RefCountedThreadSafe<Preconnect> {
23 public: 24 public:
24 // Try to preconnect. Typically motivated by OMNIBOX to reach search service. 25 // Try to preconnect. Typically motivated by OMNIBOX to reach search service.
25 static void PreconnectOnUIThread(const GURL& url, 26 static void PreconnectOnUIThread(const GURL& url,
26 UrlInfo::ResolutionMotivation motivation); 27 UrlInfo::ResolutionMotivation motivation);
27 28
28 // Try to preconnect. Typically used by predictor when a subresource probably 29 // Try to preconnect. Typically used by predictor when a subresource probably
29 // needs a connection. 30 // needs a connection.
30 static void PreconnectOnIOThread(const GURL& url, 31 static void PreconnectOnIOThread(const GURL& url,
31 UrlInfo::ResolutionMotivation motivation); 32 UrlInfo::ResolutionMotivation motivation);
32 33
33 static void SetPreconnectDespiteProxy(bool status) { 34 static void SetPreconnectDespiteProxy(bool status) {
34 preconnect_despite_proxy_ = status; 35 preconnect_despite_proxy_ = status;
35 } 36 }
36 37
37 private: 38 private:
38 Preconnect() {} 39 friend class base::RefCountedThreadSafe<Preconnect>;
39 40
40 // Supply an instance that could have been used in an IO callback, but will 41 explicit Preconnect(UrlInfo::ResolutionMotivation motivation)
41 // never actually be used (because we reset the connection so quickly). 42 : motivation_(motivation) {
42 static Preconnect* callback_instance_; 43 }
44 ~Preconnect();
45
46 // Request actual connection.
47 void Connect(const GURL& url);
43 48
44 // IO Callback which whould be performed when the connection is established. 49 // IO Callback which whould be performed when the connection is established.
45 virtual void RunWithParams(const Tuple1<int>& params); 50 virtual void RunWithParams(const Tuple1<int>& params);
46 51
47 // Preconnections are currently conservative, and do nothing if there is a 52 // Preconnections are currently conservative, and do nothing if there is a
48 // chance that a proxy may be used. This boolean allows proxy settings to 53 // chance that a proxy may be used. This boolean allows proxy settings to
49 // be ignored (presumably because a user knows that the proxy won't be doing 54 // be ignored (presumably because a user knows that the proxy won't be doing
50 // much work anway). 55 // much work anway).
51 static bool preconnect_despite_proxy_; 56 static bool preconnect_despite_proxy_;
52 57
58 // The handle holding the request. We need this so that we can mark the
59 // request as speculative when an actual socket is bound to it.
60 net::ClientSocketHandle handle_;
61
62 // Generally either LEARNED_REFERAL_MOTIVATED or OMNIBOX_MOTIVATED to indicate
63 // why we were trying to do a preconnection.
64 const UrlInfo::ResolutionMotivation motivation_;
65
66
53 DISALLOW_COPY_AND_ASSIGN(Preconnect); 67 DISALLOW_COPY_AND_ASSIGN(Preconnect);
54 }; 68 };
55 } // chrome_browser_net 69 } // chrome_browser_net
56 70
57 #endif // CHROME_BROWSER_NET_PRECONNECT_H_ 71 #endif // CHROME_BROWSER_NET_PRECONNECT_H_
OLDNEW
« no previous file with comments | « chrome/browser/browser_main.cc ('k') | chrome/browser/net/preconnect.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698