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

Side by Side Diff: net/proxy/init_proxy_resolver.h

Issue 7019015: Revert 85646 - Adds support for the DHCP portion of the WPAD (proxy auto-discovery) protocol. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 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 | Annotate | Revision Log
« no previous file with comments | « net/proxy/dhcpcsvc_init_win.cc ('k') | net/proxy/init_proxy_resolver.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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #ifndef NET_PROXY_INIT_PROXY_RESOLVER_H_ 5 #ifndef NET_PROXY_INIT_PROXY_RESOLVER_H_
6 #define NET_PROXY_INIT_PROXY_RESOLVER_H_ 6 #define NET_PROXY_INIT_PROXY_RESOLVER_H_
7 #pragma once 7 #pragma once
8 8
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/string16.h" 11 #include "base/string16.h"
12 #include "base/time.h" 12 #include "base/time.h"
13 #include "base/timer.h" 13 #include "base/timer.h"
14 #include "base/scoped_ptr.h"
15 #include "googleurl/src/gurl.h" 14 #include "googleurl/src/gurl.h"
16 #include "net/base/completion_callback.h" 15 #include "net/base/completion_callback.h"
17 #include "net/base/net_log.h" 16 #include "net/base/net_log.h"
18 17
19 namespace net { 18 namespace net {
20 19
21 class DhcpProxyScriptFetcher;
22 class NetLogParameter;
23 class ProxyConfig; 20 class ProxyConfig;
24 class ProxyResolver; 21 class ProxyResolver;
25 class ProxyScriptFetcher; 22 class ProxyScriptFetcher;
26 class URLRequestContext;
27 23
28 // InitProxyResolver is a helper class used by ProxyService to 24 // InitProxyResolver is a helper class used by ProxyService to
29 // initialize a ProxyResolver with the PAC script data specified 25 // initialize a ProxyResolver with the PAC script data specified
30 // by a particular ProxyConfig. 26 // by a particular ProxyConfig.
31 // 27 //
32 // This involves trying to use PAC scripts in this order: 28 // This involves trying to use PAC scripts in this order:
33 // 29 //
34 // (1) WPAD (DNS) if auto-detect is on. 30 // (1) WPAD (DNS) if auto-detect is on.
35 // (2) Custom PAC script if a URL was given. 31 // (2) Custom PAC script if a URL was given.
36 // 32 //
37 // If no PAC script was successfully downloaded + parsed, then it fails with 33 // If no PAC script was successfully downloaded + parsed, then it fails with
38 // a network error. Otherwise the proxy resolver is left initialized with 34 // a network error. Otherwise the proxy resolver is left initialized with
39 // the PAC script. 35 // the PAC script.
40 // 36 //
41 // Deleting InitProxyResolver while Init() is in progress, will 37 // Deleting InitProxyResolver while Init() is in progress, will
42 // cancel the request. 38 // cancel the request.
43 // 39 //
44 class InitProxyResolver { 40 class InitProxyResolver {
45 public: 41 public:
46 // |resolver|, |proxy_script_fetcher|, |dhcp_proxy_script_fetcher| and 42 // |resolver|, |proxy_script_fetcher| and |net_log| must remain valid for
47 // |net_log| must remain valid for the lifespan of InitProxyResolver. 43 // the lifespan of InitProxyResolver.
48 InitProxyResolver(ProxyResolver* resolver, 44 InitProxyResolver(ProxyResolver* resolver,
49 ProxyScriptFetcher* proxy_script_fetcher, 45 ProxyScriptFetcher* proxy_script_fetcher,
50 DhcpProxyScriptFetcher* dhcp_proxy_script_fetcher,
51 NetLog* net_log); 46 NetLog* net_log);
52 47
53 // Aborts any in-progress request. 48 // Aborts any in-progress request.
54 ~InitProxyResolver(); 49 ~InitProxyResolver();
55 50
56 // Applies the PAC settings of |config| to |resolver_|. 51 // Applies the PAC settings of |config| to |resolver_|.
57 // If |wait_delay| is positive, the initialization will pause for this 52 // If |wait_delay| is positive, the initialization will pause for this
58 // amount of time before getting started. 53 // amount of time before getting started.
59 // If |effective_config| is non-NULL, then on successful initialization of 54 // If |effective_config| is non-NULL, then on successful initialization of
60 // |resolver_| the "effective" proxy settings we ended up using will be 55 // |resolver_| the "effective" proxy settings we ended up using will be
61 // written out to |*effective_config|. Note that this may differ from 56 // written out to |*effective_config|. Note that this may differ from
62 // |config| since we will have stripped any manual settings, and decided 57 // |config| since we will have stripped any manual settings, and decided
63 // whether to use auto-detect or the custom PAC URL. Finally, if auto-detect 58 // whether to use auto-detect or the custom PAC URL. Finally, if auto-detect
64 // was used we may now have resolved that to a specific script URL. 59 // was used we may now have resolved that to a specific script URL.
65 int Init(const ProxyConfig& config, 60 int Init(const ProxyConfig& config,
66 const base::TimeDelta wait_delay, 61 const base::TimeDelta wait_delay,
67 ProxyConfig* effective_config, 62 ProxyConfig* effective_config,
68 CompletionCallback* callback); 63 CompletionCallback* callback);
69 64
70 private: 65 private:
71 // Represents the sources from which we can get PAC files; two types of 66 struct PacURL {
72 // auto-detect or a custom URL. 67 PacURL(bool auto_detect, const GURL& url)
73 struct PacSource { 68 : auto_detect(auto_detect), url(url) {}
74 enum Type { 69 bool auto_detect;
75 WPAD_DHCP, 70 GURL url;
76 WPAD_DNS,
77 CUSTOM
78 };
79
80 PacSource(Type type, const GURL& url)
81 : type(type), url(url) {}
82
83 Type type;
84 GURL url; // Empty unless |type == PAC_SOURCE_CUSTOM|.
85 }; 71 };
86 72
87 typedef std::vector<PacSource> PacSourceList; 73 typedef std::vector<PacURL> UrlList;
88 74
89 enum State { 75 enum State {
90 STATE_NONE, 76 STATE_NONE,
91 STATE_WAIT, 77 STATE_WAIT,
92 STATE_WAIT_COMPLETE, 78 STATE_WAIT_COMPLETE,
93 STATE_FETCH_PAC_SCRIPT, 79 STATE_FETCH_PAC_SCRIPT,
94 STATE_FETCH_PAC_SCRIPT_COMPLETE, 80 STATE_FETCH_PAC_SCRIPT_COMPLETE,
95 STATE_SET_PAC_SCRIPT, 81 STATE_SET_PAC_SCRIPT,
96 STATE_SET_PAC_SCRIPT_COMPLETE, 82 STATE_SET_PAC_SCRIPT_COMPLETE,
97 }; 83 };
98 84
99 // Returns ordered list of PAC urls to try for |config|. 85 // Returns ordered list of PAC urls to try for |config|.
100 PacSourceList BuildPacSourcesFallbackList(const ProxyConfig& config) const; 86 UrlList BuildPacUrlsFallbackList(const ProxyConfig& config) const;
101 87
102 void OnIOCompletion(int result); 88 void OnIOCompletion(int result);
103 int DoLoop(int result); 89 int DoLoop(int result);
104 void DoCallback(int result); 90 void DoCallback(int result);
105 91
106 int DoWait(); 92 int DoWait();
107 int DoWaitComplete(int result); 93 int DoWaitComplete(int result);
108 94
109 int DoFetchPacScript(); 95 int DoFetchPacScript();
110 int DoFetchPacScriptComplete(int result); 96 int DoFetchPacScriptComplete(int result);
111 97
112 int DoSetPacScript(); 98 int DoSetPacScript();
113 int DoSetPacScriptComplete(int result); 99 int DoSetPacScriptComplete(int result);
114 100
115 // Tries restarting using the next fallback PAC URL: 101 // Tries restarting using the next fallback PAC URL:
116 // |pac_sources_[++current_pac_source_index]|. 102 // |pac_urls_[++current_pac_url_index]|.
117 // Returns OK and rewinds the state machine when there 103 // Returns OK and rewinds the state machine when there
118 // is something to try, otherwise returns |error|. 104 // is something to try, otherwise returns |error|.
119 int TryToFallbackPacSource(int error); 105 int TryToFallbackPacUrl(int error);
120 106
121 // Gets the initial state (we skip fetching when the 107 // Gets the initial state (we skip fetching when the
122 // ProxyResolver doesn't |expect_pac_bytes()|. 108 // ProxyResolver doesn't |expect_pac_bytes()|.
123 State GetStartState() const; 109 State GetStartState() const;
124 110
125 NetLogStringParameter* CreateNetLogParameterAndDetermineURL(
126 const PacSource& pac_source, GURL* effective_pac_url);
127
128 // Returns the current PAC URL we are fetching/testing. 111 // Returns the current PAC URL we are fetching/testing.
129 const PacSource& current_pac_source() const; 112 const PacURL& current_pac_url() const;
130 113
131 void OnWaitTimerFired(); 114 void OnWaitTimerFired();
132 void DidCompleteInit(); 115 void DidCompleteInit();
133 void Cancel(); 116 void Cancel();
134 117
135 ProxyResolver* resolver_; 118 ProxyResolver* resolver_;
136 ProxyScriptFetcher* proxy_script_fetcher_; 119 ProxyScriptFetcher* proxy_script_fetcher_;
137 DhcpProxyScriptFetcher* dhcp_proxy_script_fetcher_;
138 120
139 CompletionCallbackImpl<InitProxyResolver> io_callback_; 121 CompletionCallbackImpl<InitProxyResolver> io_callback_;
140 CompletionCallback* user_callback_; 122 CompletionCallback* user_callback_;
141 123
142 size_t current_pac_source_index_; 124 size_t current_pac_url_index_;
143 125
144 // Filled when the PAC script fetch completes. 126 // Filled when the PAC script fetch completes.
145 string16 pac_script_; 127 string16 pac_script_;
146 128
147 // Flag indicating whether the caller requested a mandatory pac script 129 // Flag indicating whether the caller requested a mandatory pac script
148 // (i.e. fallback to direct connections are prohibited). 130 // (i.e. fallback to direct connections are prohibited).
149 bool pac_mandatory_; 131 bool pac_mandatory_;
150 132
151 PacSourceList pac_sources_; 133 UrlList pac_urls_;
152 State next_state_; 134 State next_state_;
153 135
154 BoundNetLog net_log_; 136 BoundNetLog net_log_;
155 137
156 base::TimeDelta wait_delay_; 138 base::TimeDelta wait_delay_;
157 base::OneShotTimer<InitProxyResolver> wait_timer_; 139 base::OneShotTimer<InitProxyResolver> wait_timer_;
158 140
159 ProxyConfig* effective_config_; 141 ProxyConfig* effective_config_;
160 142
161 DISALLOW_COPY_AND_ASSIGN(InitProxyResolver); 143 DISALLOW_COPY_AND_ASSIGN(InitProxyResolver);
162 }; 144 };
163 145
164 } // namespace net 146 } // namespace net
165 147
166 #endif // NET_PROXY_INIT_PROXY_RESOLVER_H_ 148 #endif // NET_PROXY_INIT_PROXY_RESOLVER_H_
OLDNEW
« no previous file with comments | « net/proxy/dhcpcsvc_init_win.cc ('k') | net/proxy/init_proxy_resolver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698