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

Unified Diff: net/proxy/polling_proxy_config_service.cc

Issue 6597070: Allow ProxyConfigService to report "no configuration set" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comment Created 9 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 side-by-side diff with in-line comments
Download patch
Index: net/proxy/polling_proxy_config_service.cc
diff --git a/net/proxy/polling_proxy_config_service.cc b/net/proxy/polling_proxy_config_service.cc
index 7526c192c0375db0129144e388269ca47fe89d7e..aee5abfe1aeb8226d17ce6cf483b83aa8227fbae 100644
--- a/net/proxy/polling_proxy_config_service.cc
+++ b/net/proxy/polling_proxy_config_service.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -24,7 +24,7 @@ class PollingProxyConfigService::Core
: get_config_func_(get_config_func),
poll_interval_(poll_interval),
have_initialized_origin_loop_(false),
- has_config_(false),
+ config_availability_(ProxyConfigService::CONFIG_PENDING),
poll_task_outstanding_(false),
poll_task_queued_(false) {
}
@@ -36,7 +36,8 @@ class PollingProxyConfigService::Core
origin_loop_proxy_ = NULL;
}
- bool GetLatestProxyConfig(ProxyConfig* config) {
+ ProxyConfigService::ConfigAvailability GetLatestProxyConfig(
+ ProxyConfig* config) {
LazyInitializeOriginLoop();
DCHECK(origin_loop_proxy_->BelongsToCurrentThread());
@@ -44,11 +45,10 @@ class PollingProxyConfigService::Core
// If we have already retrieved the proxy settings (on worker thread)
// then return what we last saw.
- if (has_config_) {
+ if (config_availability_ == ProxyConfigService::CONFIG_VALID)
*config = last_config_;
- return true;
- }
- return false;
+
+ return config_availability_;
}
void AddObserver(Observer* observer) {
@@ -97,18 +97,21 @@ class PollingProxyConfigService::Core
private:
void PollOnWorkerThread(GetConfigFunction func) {
ProxyConfig config;
- func(&config);
+ ProxyConfigService::ConfigAvailability available = func(&config);
eroman 2011/03/16 01:30:00 Please add a DCHECK/CHECK that |available| != CONF
Mattias Nissler (ping if slow) 2011/03/16 17:40:00 Done.
base::AutoLock l(lock_);
if (origin_loop_proxy_) {
origin_loop_proxy_->PostTask(
FROM_HERE,
- NewRunnableMethod(this, &Core::GetConfigCompleted, config));
+ NewRunnableMethod(this, &Core::GetConfigCompleted,
+ config, available));
}
}
// Called after the worker thread has finished retrieving a configuration.
- void GetConfigCompleted(const ProxyConfig& config) {
+ void GetConfigCompleted(
+ const ProxyConfig& config,
+ ProxyConfigService::ConfigAvailability available) {
DCHECK(poll_task_outstanding_);
poll_task_outstanding_ = false;
@@ -117,11 +120,15 @@ class PollingProxyConfigService::Core
DCHECK(origin_loop_proxy_->BelongsToCurrentThread());
- if (!has_config_ || !last_config_.Equals(config)) {
+ if (config_availability_ != available ||
+ (available == ProxyConfigService::CONFIG_VALID &&
+ !last_config_.Equals(config))) {
// If the configuration has changed, notify the observers.
- has_config_ = true;
+ config_availability_ = available;
last_config_ = config;
- FOR_EACH_OBSERVER(Observer, observers_, OnProxyConfigChanged(config));
+ FOR_EACH_OBSERVER(Observer, observers_,
+ OnProxyConfigChanged(last_config_,
+ config_availability_));
}
if (poll_task_queued_)
@@ -149,7 +156,7 @@ class PollingProxyConfigService::Core
scoped_refptr<base::MessageLoopProxy> origin_loop_proxy_;
bool have_initialized_origin_loop_;
- bool has_config_;
+ ProxyConfigService::ConfigAvailability config_availability_;
bool poll_task_outstanding_;
bool poll_task_queued_;
};
@@ -162,7 +169,8 @@ void PollingProxyConfigService::RemoveObserver(Observer* observer) {
core_->RemoveObserver(observer);
}
-bool PollingProxyConfigService::GetLatestProxyConfig(ProxyConfig* config) {
+ProxyConfigService::ConfigAvailability
+ PollingProxyConfigService::GetLatestProxyConfig(ProxyConfig* config) {
return core_->GetLatestProxyConfig(config);
}

Powered by Google App Engine
This is Rietveld 408576698