summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/proxy_config_service_impl.cc
diff options
context:
space:
mode:
authorxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-17 22:22:07 +0000
committerxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-17 22:22:07 +0000
commitd0908eaf6d7023bd6cd1a3d94fb1f6bc31fd57fd (patch)
treee6b88380d9579ffe93bf5f5904b5bc347c0df47d /chrome/browser/chromeos/proxy_config_service_impl.cc
parent0d81267c61f85082df1b7e365f2c6743ee2b0e4c (diff)
downloadchromium_src-d0908eaf6d7023bd6cd1a3d94fb1f6bc31fd57fd.zip
chromium_src-d0908eaf6d7023bd6cd1a3d94fb1f6bc31fd57fd.tar.gz
chromium_src-d0908eaf6d7023bd6cd1a3d94fb1f6bc31fd57fd.tar.bz2
chromeos: Lock proxy settings UI for policy managed network.
BUG=chromium-os:24284 TEST=Verify fix for chromium-os:24284. Review URL: http://codereview.chromium.org/9401020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122604 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/proxy_config_service_impl.cc')
-rw-r--r--chrome/browser/chromeos/proxy_config_service_impl.cc28
1 files changed, 26 insertions, 2 deletions
diff --git a/chrome/browser/chromeos/proxy_config_service_impl.cc b/chrome/browser/chromeos/proxy_config_service_impl.cc
index f4039284..5e74ae1 100644
--- a/chrome/browser/chromeos/proxy_config_service_impl.cc
+++ b/chrome/browser/chromeos/proxy_config_service_impl.cc
@@ -11,6 +11,7 @@
#include "base/logging.h"
#include "base/string_util.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
+#include "chrome/browser/chromeos/cros/onc_constants.h"
#include "chrome/browser/chromeos/cros_settings.h"
#include "chrome/browser/chromeos/cros_settings_names.h"
#include "chrome/browser/chromeos/login/user_manager.h"
@@ -89,6 +90,23 @@ const char* ConfigStateToString(ProxyPrefs::ConfigState state) {
return "";
}
+// Returns true if proxy settings from |network| is editable.
+bool IsNetworkProxySettingsEditable(const Network* network) {
+ if (!network)
+ return true; // editable if no network given.
+
+ NetworkLibrary* network_library = CrosLibrary::Get()->GetNetworkLibrary();
+ const base::DictionaryValue* onc =
+ network_library->FindOncForNetwork(network->unique_id());
+
+ NetworkPropertyUIData proxy_settings_ui_data;
+ proxy_settings_ui_data.ParseOncProperty(
+ network->ui_data(),
+ onc,
+ onc::kProxySettings);
+ return proxy_settings_ui_data.editable();
+}
+
// Only unblock if needed for debugging.
#if defined(NEED_DEBUG_LOG)
std::ostream& operator<<(
@@ -762,10 +780,16 @@ void ProxyConfigServiceImpl::DetermineEffectiveConfig(const Network* network,
} else { // For UI, store effective proxy into |current_ui_config_|.
current_ui_config_.FromNetProxyConfig(effective_config);
current_ui_config_.state = effective_config_state;
- if (PrefPrecedes(effective_config_state))
+ if (PrefPrecedes(effective_config_state)) {
+ current_ui_config_.user_modifiable = false;
+ } else if (!IsNetworkProxySettingsEditable(network)) {
+ // TODO(xiyuan): Figure out the right way to set config state for managed
+ // network.
+ current_ui_config_.state = ProxyPrefs::CONFIG_POLICY;
current_ui_config_.user_modifiable = false;
- else
+ } else {
current_ui_config_.user_modifiable = !network || !IgnoreProxy(network);
+ }
}
}