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

Unified Diff: chrome/browser/chromeos/proxy_config_service_impl.cc

Issue 6597070: Allow ProxyConfigService to report "no configuration set" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: PollingProxyConfigService adjustments 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: chrome/browser/chromeos/proxy_config_service_impl.cc
diff --git a/chrome/browser/chromeos/proxy_config_service_impl.cc b/chrome/browser/chromeos/proxy_config_service_impl.cc
index 5854bb19e70251dc28cd7d280bc6f3f70eeaee14..fdbfc204971c2db6904885fc32238f51cc0d6b6e 100644
--- a/chrome/browser/chromeos/proxy_config_service_impl.cc
+++ b/chrome/browser/chromeos/proxy_config_service_impl.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.
@@ -391,7 +391,7 @@ bool ProxyConfigServiceImpl::ProxyConfig::DecodeManualProxy(
ProxyConfigServiceImpl::ProxyConfigServiceImpl()
: can_post_task_(false),
- has_config_(false),
+ config_availability_(net::ProxyConfigService::CONFIG_PENDING),
persist_to_device_(true),
persist_to_device_pending_(false) {
// Start async fetch of proxy config from settings persisted on device.
@@ -409,13 +409,13 @@ ProxyConfigServiceImpl::ProxyConfigServiceImpl()
}
}
if (use_default)
- InitConfigToDefault(false);
+ config_availability_ = net::ProxyConfigService::CONFIG_UNSET;
can_post_task_ = true;
}
ProxyConfigServiceImpl::ProxyConfigServiceImpl(const ProxyConfig& init_config)
: can_post_task_(true),
- has_config_(true),
+ config_availability_(net::ProxyConfigService::CONFIG_VALID),
persist_to_device_(false),
persist_to_device_pending_(false) {
reference_config_ = init_config;
@@ -514,15 +514,14 @@ void ProxyConfigServiceImpl::RemoveObserver(
observers_.RemoveObserver(observer);
}
-bool ProxyConfigServiceImpl::IOGetProxyConfig(net::ProxyConfig* net_config) {
+net::ProxyConfigService::ConfigAvailability
+ ProxyConfigServiceImpl::IOGetProxyConfig(net::ProxyConfig* net_config) {
// Should be called from IO thread.
CheckCurrentlyOnIOThread();
- if (has_config_) {
- // Simply return the last cached proxy configuration.
+ if (config_availability_ == net::ProxyConfigService::CONFIG_VALID)
cached_config_.ToNetProxyConfig(net_config);
- return true;
- }
- return false;
+
+ return config_availability_;
}
void ProxyConfigServiceImpl::OnSettingsOpCompleted(
@@ -540,36 +539,26 @@ void ProxyConfigServiceImpl::OnSettingsOpCompleted(
void ProxyConfigServiceImpl::OnSettingsOpCompleted(
SignedSettings::ReturnCode code,
std::string value) {
+ retrieve_property_op_ = NULL;
if (SignedSettings::SUCCESS == code) {
VLOG(1) << "Retrieved proxy setting from device, value=[" << value << "]";
if (reference_config_.Deserialize(value)) {
- OnUISetProxyConfig(false);
+ IOSetProxyConfig(reference_config_,
+ net::ProxyConfigService::CONFIG_VALID);
+ return;
} else {
eroman 2011/03/26 00:50:30 nit: remove the "else" if you are going to return
LOG(WARNING) << "Error deserializing device's proxy setting";
- InitConfigToDefault(true);
}
} else {
LOG(WARNING) << "Error retrieving proxy setting from device";
- InitConfigToDefault(true);
}
- retrieve_property_op_ = NULL;
+
+ // Update the configuration state on the IO thread.
+ IOSetProxyConfig(reference_config_, net::ProxyConfigService::CONFIG_UNSET);
}
//------------------ ProxyConfigServiceImpl: private methods -------------------
-void ProxyConfigServiceImpl::InitConfigToDefault(bool post_to_io_thread) {
- VLOG(1) << "Using default proxy config: auto-detect";
- reference_config_.mode = ProxyConfig::MODE_AUTO_DETECT;
- reference_config_.automatic_proxy.source = ProxyConfig::SOURCE_OWNER;
- if (post_to_io_thread && can_post_task_) {
- OnUISetProxyConfig(false);
- } else {
- // Update the IO-accessible copy in |cached_config_| as well.
- cached_config_ = reference_config_;
- has_config_ = true;
- }
-}
-
void ProxyConfigServiceImpl::PersistConfigToDevice() {
DCHECK(!store_property_op_);
persist_to_device_pending_ = false;
@@ -585,15 +574,7 @@ void ProxyConfigServiceImpl::PersistConfigToDevice() {
}
void ProxyConfigServiceImpl::OnUISetProxyConfig(bool persist_to_device) {
- // Posts a task to IO thread with the new config, so it can update
- // |cached_config_|.
- Task* task = NewRunnableMethod(this,
- &ProxyConfigServiceImpl::IOSetProxyConfig, reference_config_);
- if (!BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, task)) {
- VLOG(1) << "Couldn't post task to IO thread to set new proxy config";
- delete task;
- }
-
+ IOSetProxyConfig(reference_config_, net::ProxyConfigService::CONFIG_VALID);
if (persist_to_device && CrosLibrary::Get()->EnsureLoaded()) {
if (store_property_op_) {
persist_to_device_pending_ = true;
@@ -604,25 +585,40 @@ void ProxyConfigServiceImpl::OnUISetProxyConfig(bool persist_to_device) {
}
}
-void ProxyConfigServiceImpl::CheckCurrentlyOnIOThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-}
-
-void ProxyConfigServiceImpl::CheckCurrentlyOnUIThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-}
+void ProxyConfigServiceImpl::IOSetProxyConfig(
+ const ProxyConfig& new_config,
+ net::ProxyConfigService::ConfigAvailability new_availability) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::IO) && can_post_task_) {
+ // Posts a task to IO thread with the new config, so it can update
+ // |cached_config_|.
+ Task* task = NewRunnableMethod(this,
+ &ProxyConfigServiceImpl::IOSetProxyConfig,
+ new_config,
+ new_availability);
+ if (!BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, task)) {
+ VLOG(1) << "Couldn't post task to IO thread to set new proxy config";
+ delete task;
+ }
+ return;
+ }
-void ProxyConfigServiceImpl::IOSetProxyConfig(const ProxyConfig& new_config) {
- // This is called on the IO thread (posted from UI thread).
- CheckCurrentlyOnIOThread();
+ // Now guaranteed to be on the correct thread.
VLOG(1) << "Proxy configuration changed";
- has_config_ = true;
cached_config_ = new_config;
+ config_availability_ = new_availability;
// Notify observers of new proxy config.
net::ProxyConfig net_config;
cached_config_.ToNetProxyConfig(&net_config);
FOR_EACH_OBSERVER(net::ProxyConfigService::Observer, observers_,
- OnProxyConfigChanged(net_config));
+ OnProxyConfigChanged(net_config, config_availability_));
+}
+
+void ProxyConfigServiceImpl::CheckCurrentlyOnIOThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+}
+
+void ProxyConfigServiceImpl::CheckCurrentlyOnUIThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
}
} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/proxy_config_service_impl.h ('k') | chrome/browser/chromeos/proxy_config_service_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698