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

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

Issue 848006: Generalize the net module's LoadLog facility from a passive container, to an event stream (NetLog). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Split up RequestTracker into ConnectJobTracker+RequestTracker+RequestTrackerBase, address comments Created 10 years, 9 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/init_proxy_resolver.h ('k') | net/proxy/init_proxy_resolver_unittest.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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "net/proxy/init_proxy_resolver.h" 5 #include "net/proxy/init_proxy_resolver.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/format_macros.h" 8 #include "base/format_macros.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "net/base/load_log.h" 11 #include "net/base/net_log.h"
12 #include "net/base/net_errors.h" 12 #include "net/base/net_errors.h"
13 #include "net/proxy/proxy_config.h" 13 #include "net/proxy/proxy_config.h"
14 #include "net/proxy/proxy_resolver.h" 14 #include "net/proxy/proxy_resolver.h"
15 #include "net/proxy/proxy_script_fetcher.h" 15 #include "net/proxy/proxy_script_fetcher.h"
16 16
17 namespace net { 17 namespace net {
18 18
19 InitProxyResolver::InitProxyResolver(ProxyResolver* resolver, 19 InitProxyResolver::InitProxyResolver(ProxyResolver* resolver,
20 ProxyScriptFetcher* proxy_script_fetcher) 20 ProxyScriptFetcher* proxy_script_fetcher)
21 : resolver_(resolver), 21 : resolver_(resolver),
22 proxy_script_fetcher_(proxy_script_fetcher), 22 proxy_script_fetcher_(proxy_script_fetcher),
23 ALLOW_THIS_IN_INITIALIZER_LIST(io_callback_( 23 ALLOW_THIS_IN_INITIALIZER_LIST(io_callback_(
24 this, &InitProxyResolver::OnIOCompletion)), 24 this, &InitProxyResolver::OnIOCompletion)),
25 user_callback_(NULL), 25 user_callback_(NULL),
26 current_pac_url_index_(0u), 26 current_pac_url_index_(0u),
27 next_state_(STATE_NONE) { 27 next_state_(STATE_NONE) {
28 } 28 }
29 29
30 InitProxyResolver::~InitProxyResolver() { 30 InitProxyResolver::~InitProxyResolver() {
31 if (next_state_ != STATE_NONE) 31 if (next_state_ != STATE_NONE)
32 Cancel(); 32 Cancel();
33 } 33 }
34 34
35 int InitProxyResolver::Init(const ProxyConfig& config, 35 int InitProxyResolver::Init(const ProxyConfig& config,
36 CompletionCallback* callback, 36 CompletionCallback* callback,
37 LoadLog* load_log) { 37 const BoundNetLog& net_log) {
38 DCHECK_EQ(STATE_NONE, next_state_); 38 DCHECK_EQ(STATE_NONE, next_state_);
39 DCHECK(callback); 39 DCHECK(callback);
40 DCHECK(config.MayRequirePACResolver()); 40 DCHECK(config.MayRequirePACResolver());
41 DCHECK(!load_log_); 41 DCHECK(!net_log_.net_log());
42 42
43 load_log_ = load_log; 43 net_log_ = net_log;
44 44
45 LoadLog::BeginEvent(load_log_, LoadLog::TYPE_INIT_PROXY_RESOLVER); 45 net_log_.BeginEvent(NetLog::TYPE_INIT_PROXY_RESOLVER);
46 46
47 pac_urls_ = BuildPacUrlsFallbackList(config); 47 pac_urls_ = BuildPacUrlsFallbackList(config);
48 DCHECK(!pac_urls_.empty()); 48 DCHECK(!pac_urls_.empty());
49 49
50 next_state_ = GetStartState(); 50 next_state_ = GetStartState();
51 51
52 int rv = DoLoop(OK); 52 int rv = DoLoop(OK);
53 if (rv == ERR_IO_PENDING) 53 if (rv == ERR_IO_PENDING)
54 user_callback_ = callback; 54 user_callback_ = callback;
55 else 55 else
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 115
116 void InitProxyResolver::DoCallback(int result) { 116 void InitProxyResolver::DoCallback(int result) {
117 DCHECK_NE(ERR_IO_PENDING, result); 117 DCHECK_NE(ERR_IO_PENDING, result);
118 DCHECK(user_callback_); 118 DCHECK(user_callback_);
119 user_callback_->Run(result); 119 user_callback_->Run(result);
120 } 120 }
121 121
122 int InitProxyResolver::DoFetchPacScript() { 122 int InitProxyResolver::DoFetchPacScript() {
123 DCHECK(resolver_->expects_pac_bytes()); 123 DCHECK(resolver_->expects_pac_bytes());
124 124
125 LoadLog::BeginEvent(load_log_, 125 net_log_.BeginEvent(NetLog::TYPE_INIT_PROXY_RESOLVER_FETCH_PAC_SCRIPT);
126 LoadLog::TYPE_INIT_PROXY_RESOLVER_FETCH_PAC_SCRIPT);
127 126
128 next_state_ = STATE_FETCH_PAC_SCRIPT_COMPLETE; 127 next_state_ = STATE_FETCH_PAC_SCRIPT_COMPLETE;
129 128
130 const GURL& pac_url = current_pac_url(); 129 const GURL& pac_url = current_pac_url();
131 130
132 LoadLog::AddString(load_log_, pac_url.spec()); 131 net_log_.AddString(pac_url.spec());
133 132
134 if (!proxy_script_fetcher_) { 133 if (!proxy_script_fetcher_) {
135 LoadLog::AddStringLiteral(load_log_, 134 net_log_.AddStringLiteral(
136 "Can't download PAC script, because no fetcher was specified"); 135 "Can't download PAC script, because no fetcher was specified");
137 return ERR_UNEXPECTED; 136 return ERR_UNEXPECTED;
138 } 137 }
139 138
140 return proxy_script_fetcher_->Fetch(pac_url, &pac_bytes_, &io_callback_); 139 return proxy_script_fetcher_->Fetch(pac_url, &pac_bytes_, &io_callback_);
141 } 140 }
142 141
143 int InitProxyResolver::DoFetchPacScriptComplete(int result) { 142 int InitProxyResolver::DoFetchPacScriptComplete(int result) {
144 DCHECK(resolver_->expects_pac_bytes()); 143 DCHECK(resolver_->expects_pac_bytes());
145 144
146 LoadLog::AddString(load_log_, 145 net_log_.AddString(StringPrintf(
147 StringPrintf(
148 "Completed fetch with result %s. Received %" PRIuS " bytes", 146 "Completed fetch with result %s. Received %" PRIuS " bytes",
149 ErrorToString(result), 147 ErrorToString(result),
150 pac_bytes_.size())); 148 pac_bytes_.size()));
151 149
152 LoadLog::EndEvent(load_log_, 150 net_log_.EndEvent(NetLog::TYPE_INIT_PROXY_RESOLVER_FETCH_PAC_SCRIPT);
153 LoadLog::TYPE_INIT_PROXY_RESOLVER_FETCH_PAC_SCRIPT);
154 151
155 if (result != OK) 152 if (result != OK)
156 return TryToFallbackPacUrl(result); 153 return TryToFallbackPacUrl(result);
157 154
158 next_state_ = STATE_SET_PAC_SCRIPT; 155 next_state_ = STATE_SET_PAC_SCRIPT;
159 return result; 156 return result;
160 } 157 }
161 158
162 int InitProxyResolver::DoSetPacScript() { 159 int InitProxyResolver::DoSetPacScript() {
163 LoadLog::BeginEvent(load_log_, 160 net_log_.BeginEvent(NetLog::TYPE_INIT_PROXY_RESOLVER_SET_PAC_SCRIPT);
164 LoadLog::TYPE_INIT_PROXY_RESOLVER_SET_PAC_SCRIPT);
165 161
166 const GURL& pac_url = current_pac_url(); 162 const GURL& pac_url = current_pac_url();
167 163
168 next_state_ = STATE_SET_PAC_SCRIPT_COMPLETE; 164 next_state_ = STATE_SET_PAC_SCRIPT_COMPLETE;
169 165
170 return resolver_->expects_pac_bytes() ? 166 return resolver_->expects_pac_bytes() ?
171 resolver_->SetPacScriptByData(pac_bytes_, &io_callback_) : 167 resolver_->SetPacScriptByData(pac_bytes_, &io_callback_) :
172 resolver_->SetPacScriptByUrl(pac_url, &io_callback_); 168 resolver_->SetPacScriptByUrl(pac_url, &io_callback_);
173 } 169 }
174 170
175 int InitProxyResolver::DoSetPacScriptComplete(int result) { 171 int InitProxyResolver::DoSetPacScriptComplete(int result) {
176 if (result != OK) { 172 if (result != OK) {
177 LoadLog::AddString(load_log_, 173 net_log_.AddString(
178 StringPrintf("Failed initializing the PAC script with error: %s", 174 StringPrintf("Failed initializing the PAC script with error: %s",
179 ErrorToString(result))); 175 ErrorToString(result)));
180 LoadLog::EndEvent(load_log_, 176 net_log_.EndEvent(NetLog::TYPE_INIT_PROXY_RESOLVER_SET_PAC_SCRIPT);
181 LoadLog::TYPE_INIT_PROXY_RESOLVER_SET_PAC_SCRIPT);
182 return TryToFallbackPacUrl(result); 177 return TryToFallbackPacUrl(result);
183 } 178 }
184 179
185 LoadLog::AddStringLiteral(load_log_, "Successfully initialized PAC script."); 180 net_log_.AddStringLiteral("Successfully initialized PAC script.");
186 181
187 LoadLog::EndEvent(load_log_, 182 net_log_.EndEvent(NetLog::TYPE_INIT_PROXY_RESOLVER_SET_PAC_SCRIPT);
188 LoadLog::TYPE_INIT_PROXY_RESOLVER_SET_PAC_SCRIPT);
189 return result; 183 return result;
190 } 184 }
191 185
192 int InitProxyResolver::TryToFallbackPacUrl(int error) { 186 int InitProxyResolver::TryToFallbackPacUrl(int error) {
193 DCHECK_LT(error, 0); 187 DCHECK_LT(error, 0);
194 188
195 if (current_pac_url_index_ + 1 >= pac_urls_.size()) { 189 if (current_pac_url_index_ + 1 >= pac_urls_.size()) {
196 // Nothing left to fall back to. 190 // Nothing left to fall back to.
197 return error; 191 return error;
198 } 192 }
199 193
200 // Advance to next URL in our list. 194 // Advance to next URL in our list.
201 ++current_pac_url_index_; 195 ++current_pac_url_index_;
202 196
203 LoadLog::AddStringLiteral(load_log_, "Falling back to next PAC URL..."); 197 net_log_.AddStringLiteral("Falling back to next PAC URL...");
204 198
205 next_state_ = GetStartState(); 199 next_state_ = GetStartState();
206 200
207 return OK; 201 return OK;
208 } 202 }
209 203
210 InitProxyResolver::State InitProxyResolver::GetStartState() const { 204 InitProxyResolver::State InitProxyResolver::GetStartState() const {
211 return resolver_->expects_pac_bytes() ? 205 return resolver_->expects_pac_bytes() ?
212 STATE_FETCH_PAC_SCRIPT : STATE_SET_PAC_SCRIPT; 206 STATE_FETCH_PAC_SCRIPT : STATE_SET_PAC_SCRIPT;
213 } 207 }
214 208
215 const GURL& InitProxyResolver::current_pac_url() const { 209 const GURL& InitProxyResolver::current_pac_url() const {
216 DCHECK_LT(current_pac_url_index_, pac_urls_.size()); 210 DCHECK_LT(current_pac_url_index_, pac_urls_.size());
217 return pac_urls_[current_pac_url_index_]; 211 return pac_urls_[current_pac_url_index_];
218 } 212 }
219 213
220 void InitProxyResolver::DidCompleteInit() { 214 void InitProxyResolver::DidCompleteInit() {
221 LoadLog::EndEvent(load_log_, LoadLog::TYPE_INIT_PROXY_RESOLVER); 215 net_log_.EndEvent(NetLog::TYPE_INIT_PROXY_RESOLVER);
222 } 216 }
223 217
224 void InitProxyResolver::Cancel() { 218 void InitProxyResolver::Cancel() {
225 DCHECK_NE(STATE_NONE, next_state_); 219 DCHECK_NE(STATE_NONE, next_state_);
226 220
227 LoadLog::AddEvent(load_log_, LoadLog::TYPE_CANCELLED); 221 net_log_.AddEvent(NetLog::TYPE_CANCELLED);
228 222
229 switch (next_state_) { 223 switch (next_state_) {
230 case STATE_FETCH_PAC_SCRIPT_COMPLETE: 224 case STATE_FETCH_PAC_SCRIPT_COMPLETE:
231 proxy_script_fetcher_->Cancel(); 225 proxy_script_fetcher_->Cancel();
232 break; 226 break;
233 case STATE_SET_PAC_SCRIPT_COMPLETE: 227 case STATE_SET_PAC_SCRIPT_COMPLETE:
234 resolver_->CancelSetPacScript(); 228 resolver_->CancelSetPacScript();
235 break; 229 break;
236 default: 230 default:
237 NOTREACHED(); 231 NOTREACHED();
238 break; 232 break;
239 } 233 }
240 234
241 DidCompleteInit(); 235 DidCompleteInit();
242 } 236 }
243 237
244 } // namespace net 238 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/init_proxy_resolver.h ('k') | net/proxy/init_proxy_resolver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698