proxy_config_handler.cc revision 58537e28ecd584eab876aee8be7156509866d23a
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file. 4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/net/proxy_config_handler.h" 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/bind.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/json/json_writer.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/logging.h" 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/prefs/pref_registry_simple.h" 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/prefs/pref_service.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/values.h" 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/chromeos/net/onc_utils.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/prefs/proxy_config_dictionary.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/common/pref_names.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/dbus/shill_service_client.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_handler_callbacks.h" 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chromeos/network/network_profile.h" 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chromeos/network/network_profile_handler.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_state.h" 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_state_handler.h" 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "components/user_prefs/pref_registry_syncable.h" 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "dbus/object_path.h" 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace chromeos { 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace { 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochconst base::DictionaryValue* GetNetworkConfigByGUID( 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const base::ListValue& network_configs, 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& guid) { 34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (base::ListValue::const_iterator it = network_configs.begin(); 35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch it != network_configs.end(); 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ++it) { 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const base::DictionaryValue* network = NULL; 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch (*it)->GetAsDictionary(&network); 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string current_guid; 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch network->GetStringWithoutPathExpansion(onc::network_config::kGUID, 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ¤t_guid); 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (current_guid == guid) 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return network; 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return NULL; 46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochscoped_ptr<ProxyConfigDictionary> GetProxyPolicy( 49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const PrefService* pref_service, 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const char* pref_name, 51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const NetworkState& network, 52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool* network_is_managed) { 53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch *network_is_managed = false; 54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (!pref_service || network.guid().empty()) 56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return scoped_ptr<ProxyConfigDictionary>(); 57ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const PrefService::Preference* preference = 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) pref_service->FindPreference(pref_name); 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!preference) { 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The preference may not exit in tests. 62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return scoped_ptr<ProxyConfigDictionary>(); 63ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // User prefs are not stored in this Preference yet but only the policy. 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The policy server incorrectly configures the OpenNetworkConfiguration user 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // policy as Recommended. To work around that, we handle the Recommended and 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // the Mandatory value in the same way. 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // TODO(pneubeck): Remove this workaround, once the server is fixed. See 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // http://crbug.com/280553 . 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (preference->IsDefaultValue()) { 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // No policy set. 74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return scoped_ptr<ProxyConfigDictionary>(); 75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const base::Value* onc_policy_value = preference->GetValue(); 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(onc_policy_value); 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const base::ListValue* onc_policy = NULL; 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) onc_policy_value->GetAsList(&onc_policy); 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(onc_policy); 82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 83ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const base::DictionaryValue* network_policy = 84ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetNetworkConfigByGUID(*onc_policy, network.guid()); 85ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (!network_policy) { 86ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // This network isn't managed by this policy. 87ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return scoped_ptr<ProxyConfigDictionary>(); 88ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 89ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 90ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const base::DictionaryValue* proxy_policy = NULL; 91ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch network_policy->GetDictionaryWithoutPathExpansion( 92ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch onc::network_config::kProxySettings, &proxy_policy); 93ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (!proxy_policy) { 94ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // This policy doesn't set a proxy for this network. Nonetheless, this 95ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // disallows changes by the user. 96ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch *network_is_managed = true; 97ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return scoped_ptr<ProxyConfigDictionary>(); 98ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 99ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 100ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<base::DictionaryValue> proxy_dict = 101ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch onc::ConvertOncProxySettingsToProxyConfig(*proxy_policy); 102ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch *network_is_managed = true; 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return make_scoped_ptr(new ProxyConfigDictionary(proxy_dict.get())); 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void NotifyNetworkStateHandler(const std::string& service_path) { 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (NetworkHandler::IsInitialized()) { 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->RequestUpdateForNetwork( 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) service_path); 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace 114ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace proxy_config { 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)scoped_ptr<ProxyConfigDictionary> GetProxyConfigForNetwork( 118ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const PrefService* profile_prefs, 119ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const PrefService* local_state_prefs, 120ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const NetworkState& network, 121ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch onc::ONCSource* onc_source) { 122ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VLOG(2) << "GetProxyConfigForNetwork network: " << network.path() 123ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch << " , guid: " << network.guid(); 124ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch *onc_source = onc::ONC_SOURCE_NONE; 125ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool network_is_managed = false; 126ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 127ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<ProxyConfigDictionary> proxy_config = 128ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetProxyPolicy(profile_prefs, 129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch prefs::kOpenNetworkConfiguration, 130ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch network, 131ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &network_is_managed); 132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (network_is_managed) { 133ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VLOG(1) << "Network " << network.path() << " is managed by user policy."; 134ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch *onc_source = onc::ONC_SOURCE_USER_POLICY; 135ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return proxy_config.Pass(); 136ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 137ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch proxy_config = GetProxyPolicy(local_state_prefs, 138ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch prefs::kDeviceOpenNetworkConfiguration, 139ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch network, 140ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &network_is_managed); 141ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (network_is_managed) { 142ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VLOG(1) << "Network " << network.path() << " is managed by device policy."; 143ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch *onc_source = onc::ONC_SOURCE_DEVICE_POLICY; 144ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return proxy_config.Pass(); 145ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 146ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 147ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (network.profile_path().empty()) 148ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return scoped_ptr<ProxyConfigDictionary>(); 149ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 150ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const NetworkProfile* profile = NetworkHandler::Get() 151ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ->network_profile_handler()->GetProfileForPath(network.profile_path()); 152ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (!profile) { 153ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch LOG(WARNING) << "Unknown profile_path '" << network.profile_path() << "'."; 154ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return scoped_ptr<ProxyConfigDictionary>(); 155ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 156ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (!profile_prefs && profile->type() == NetworkProfile::TYPE_USER) { 157ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // This case occurs, for example, if called from the proxy config tracker 158ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // created for the system request context and the signin screen. Both don't 159ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // use profile prefs and shouldn't depend on the user's not shared proxy 160ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // settings. 161ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VLOG(1) 162ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch << "Don't use unshared settings for system context or signin screen."; 163ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return scoped_ptr<ProxyConfigDictionary>(); 164ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 165ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 166ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // No policy set for this network, read instead the user's (shared or 167ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // unshared) configuration. 16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The user's proxy setting is not stored in the Chrome preference yet. We 16958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // still rely on Shill storing it. 170868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::DictionaryValue& value = network.proxy_config(); 171868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (value.empty()) 172868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return scoped_ptr<ProxyConfigDictionary>(); 173868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return make_scoped_ptr(new ProxyConfigDictionary(&value)); 174868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void SetProxyConfigForNetwork(const ProxyConfigDictionary& proxy_config, 177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const NetworkState& network) { 178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) chromeos::ShillServiceClient* shill_service_client = 179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DBusThreadManager::Get()->GetShillServiceClient(); 180868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The user's proxy setting is not stored in the Chrome preference yet. We 18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // still rely on Shill storing it. 183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ProxyPrefs::ProxyMode mode; 184868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!proxy_config.GetMode(&mode) || mode == ProxyPrefs::MODE_DIRECT) { 1853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Return empty string for direct mode for portal check to work correctly. 1863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // TODO(pneubeck): Consider removing this legacy code. 187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) shill_service_client->ClearProperty( 188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dbus::ObjectPath(network.path()), 189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) flimflam::kProxyConfigProperty, 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::Bind(&NotifyNetworkStateHandler, network.path()), 1917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&network_handler::ShillErrorCallbackFunction, 1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "SetProxyConfig.ClearProperty Failed", 193ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch network.path(), 194ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch network_handler::ErrorCallback())); 195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } else { 196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string proxy_config_str; 197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::JSONWriter::Write(&proxy_config.GetDictionary(), &proxy_config_str); 198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) shill_service_client->SetProperty( 199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dbus::ObjectPath(network.path()), 200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) flimflam::kProxyConfigProperty, 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::StringValue(proxy_config_str), 2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::Bind(&NotifyNetworkStateHandler, network.path()), 2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&network_handler::ShillErrorCallbackFunction, 2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "SetProxyConfig.SetProperty Failed", 205ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch network.path(), 206ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch network_handler::ErrorCallback())); 207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 208868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 210ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid RegisterPrefs(PrefRegistrySimple* registry) { 211ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch registry->RegisterListPref(prefs::kDeviceOpenNetworkConfiguration); 212ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 213ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 214ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { 2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch registry->RegisterBooleanPref( 2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch prefs::kUseSharedProxies, 2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch false, 2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 219ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 220ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch registry->RegisterListPref(prefs::kOpenNetworkConfiguration, 221ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace proxy_config 225868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace chromeos 227