diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-17 22:22:07 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-17 22:22:07 +0000 |
commit | d0908eaf6d7023bd6cd1a3d94fb1f6bc31fd57fd (patch) | |
tree | e6b88380d9579ffe93bf5f5904b5bc347c0df47d /chrome/browser/chromeos/proxy_config_service_impl.cc | |
parent | 0d81267c61f85082df1b7e365f2c6743ee2b0e4c (diff) | |
download | chromium_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.cc | 28 |
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); + } } } |