public:
InitProxyResolver()
: proxy_resolver_(NULL),
- next_state_(STATE_NONE) {
+ next_state_(STATE_NONE),
+ quick_check_enabled_(true) {
}
~InitProxyResolver() {
decider_.reset(new ProxyScriptDecider(
proxy_script_fetcher, dhcp_proxy_script_fetcher, net_log));
+ decider_->set_quick_check_enabled(quick_check_enabled_);
config_ = config;
wait_delay_ = wait_delay;
callback_ = callback;
return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
}
+ void set_quick_check_enabled(bool enabled) { quick_check_enabled_ = enabled; }
+ bool quick_check_enabled() const { return quick_check_enabled_; }
+
private:
enum State {
STATE_NONE,
ProxyResolver* proxy_resolver_;
CompletionCallback callback_;
State next_state_;
+ bool quick_check_enabled_;
DISALLOW_COPY_AND_ASSIGN(InitProxyResolver);
};
return prev;
}
+ void set_quick_check_enabled(bool enabled) { quick_check_enabled_ = enabled; }
+ bool quick_check_enabled() const { return quick_check_enabled_; }
+
private:
// Returns the effective poll policy (the one injected by unit-tests, or the
// default).
// TODO(eroman): Pass a proper NetLog rather than NULL.
decider_.reset(new ProxyScriptDecider(
proxy_script_fetcher_, dhcp_proxy_script_fetcher_, NULL));
+ decider_->set_quick_check_enabled(quick_check_enabled_);
int result = decider_->Start(
config_, TimeDelta(), proxy_resolver_expects_pac_bytes_,
base::Bind(&ProxyScriptDeciderPoller::OnProxyScriptDeciderCompleted,
const DefaultPollPolicy default_poll_policy_;
+ bool quick_check_enabled_;
+
DISALLOW_COPY_AND_ASSIGN(ProxyScriptDeciderPoller);
};
current_state_(STATE_NONE) ,
net_log_(net_log),
stall_proxy_auto_config_delay_(TimeDelta::FromMilliseconds(
- kDelayAfterNetworkChangesMs)) {
+ kDelayAfterNetworkChangesMs)),
+ quick_check_enabled_(true) {
NetworkChangeNotifier::AddIPAddressObserver(this);
NetworkChangeNotifier::AddDNSObserver(this);
ResetConfigService(config_service);
result,
init_proxy_resolver_->script_data(),
NULL));
+ script_poller_->set_quick_check_enabled(quick_check_enabled_);
init_proxy_resolver_.reset();
return did_fallback ? OK : ERR_FAILED;
}
-bool ProxyService::MarkProxyAsBad(const ProxyInfo& result,
- base::TimeDelta retry_delay,
- const BoundNetLog& net_log) {
+bool ProxyService::MarkProxiesAsBadUntil(
+ const ProxyInfo& result,
+ base::TimeDelta retry_delay,
+ const ProxyServer& another_bad_proxy,
+ const BoundNetLog& net_log) {
result.proxy_list_.UpdateRetryInfoOnFallback(&proxy_retry_info_, retry_delay,
+ false,
+ another_bad_proxy,
net_log);
- return result.proxy_list_.HasUntriedProxies(proxy_retry_info_);
+ if (another_bad_proxy.is_valid())
+ return result.proxy_list_.size() > 2;
+ else
+ return result.proxy_list_.size() > 1;
}
void ProxyService::ReportSuccess(const ProxyInfo& result) {
stall_proxy_autoconfig_until_ - TimeTicks::Now();
init_proxy_resolver_.reset(new InitProxyResolver());
+ init_proxy_resolver_->set_quick_check_enabled(quick_check_enabled_);
int rv = init_proxy_resolver_->Start(
resolver_.get(),
proxy_script_fetcher_.get(),