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

Side by Side Diff: chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc

Issue 509643003: Use GetManagedProperties in InternetOptionsHandler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@issue_279351_internet_options_8a
Patch Set: Created 6 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/options/chromeos/internet_options_handler.h" 5 #include "chrome/browser/ui/webui/options/chromeos/internet_options_handler.h"
6 6
7 #include <ctype.h> 7 #include <ctype.h>
8 8
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
(...skipping 13 matching lines...) Expand all
24 #include "chrome/browser/chromeos/options/network_property_ui_data.h" 24 #include "chrome/browser/chromeos/options/network_property_ui_data.h"
25 #include "chrome/browser/chromeos/settings/cros_settings.h" 25 #include "chrome/browser/chromeos/settings/cros_settings.h"
26 #include "chrome/browser/chromeos/sim_dialog_delegate.h" 26 #include "chrome/browser/chromeos/sim_dialog_delegate.h"
27 #include "chrome/browser/chromeos/ui/choose_mobile_network_dialog.h" 27 #include "chrome/browser/chromeos/ui/choose_mobile_network_dialog.h"
28 #include "chrome/browser/chromeos/ui/mobile_config_ui.h" 28 #include "chrome/browser/chromeos/ui/mobile_config_ui.h"
29 #include "chrome/browser/chromeos/ui_proxy_config_service.h" 29 #include "chrome/browser/chromeos/ui_proxy_config_service.h"
30 #include "chrome/browser/profiles/profile.h" 30 #include "chrome/browser/profiles/profile.h"
31 #include "chrome/browser/ui/webui/chromeos/mobile_setup_dialog.h" 31 #include "chrome/browser/ui/webui/chromeos/mobile_setup_dialog.h"
32 #include "chrome/browser/ui/webui/options/chromeos/internet_options_handler_stri ngs.h" 32 #include "chrome/browser/ui/webui/options/chromeos/internet_options_handler_stri ngs.h"
33 #include "chromeos/chromeos_switches.h" 33 #include "chromeos/chromeos_switches.h"
34 #include "chromeos/login/login_state.h"
34 #include "chromeos/network/device_state.h" 35 #include "chromeos/network/device_state.h"
35 #include "chromeos/network/managed_network_configuration_handler.h" 36 #include "chromeos/network/managed_network_configuration_handler.h"
36 #include "chromeos/network/network_configuration_handler.h" 37 #include "chromeos/network/network_configuration_handler.h"
37 #include "chromeos/network/network_connection_handler.h" 38 #include "chromeos/network/network_connection_handler.h"
38 #include "chromeos/network/network_device_handler.h" 39 #include "chromeos/network/network_device_handler.h"
39 #include "chromeos/network/network_event_log.h" 40 #include "chromeos/network/network_event_log.h"
40 #include "chromeos/network/network_ip_config.h" 41 #include "chromeos/network/network_ip_config.h"
41 #include "chromeos/network/network_profile.h" 42 #include "chromeos/network/network_profile.h"
42 #include "chromeos/network/network_profile_handler.h" 43 #include "chromeos/network/network_profile_handler.h"
43 #include "chromeos/network/network_state.h" 44 #include "chromeos/network/network_state.h"
(...skipping 20 matching lines...) Expand all
64 namespace options { 65 namespace options {
65 66
66 namespace { 67 namespace {
67 68
68 // Keys for the network description dictionary passed to the web ui. Make sure 69 // Keys for the network description dictionary passed to the web ui. Make sure
69 // to keep the strings in sync with what the JavaScript side uses. 70 // to keep the strings in sync with what the JavaScript side uses.
70 const char kNetworkInfoKeyIconURL[] = "iconURL"; 71 const char kNetworkInfoKeyIconURL[] = "iconURL";
71 const char kNetworkInfoKeyServicePath[] = "servicePath"; 72 const char kNetworkInfoKeyServicePath[] = "servicePath";
72 const char kNetworkInfoKeyPolicyManaged[] = "policyManaged"; 73 const char kNetworkInfoKeyPolicyManaged[] = "policyManaged";
73 74
74 // These are keys for getting IP information from the web ui.
75 const char kIpConfigAddress[] = "address";
76 const char kIpConfigPrefixLength[] = "prefixLength";
77 const char kIpConfigNetmask[] = "netmask";
78 const char kIpConfigGateway[] = "gateway";
79 const char kIpConfigNameServers[] = "nameServers";
80 const char kIpConfigAutoConfig[] = "ipAutoConfig";
81 const char kIpConfigWebProxyAutoDiscoveryUrl[] = "webProxyAutoDiscoveryUrl";
82
83 // These are types of name server selections from the web ui. 75 // These are types of name server selections from the web ui.
84 const char kNameServerTypeAutomatic[] = "automatic"; 76 const char kNameServerTypeAutomatic[] = "automatic";
85 const char kNameServerTypeGoogle[] = "google"; 77 const char kNameServerTypeGoogle[] = "google";
86 const char kNameServerTypeUser[] = "user";
87
88 // These are dictionary names used to send data to the web ui.
89 const char kDictionaryIpConfig[] = "ipconfig";
90 const char kDictionaryStaticIp[] = "staticIP";
91 const char kDictionarySavedIp[] = "savedIP";
92 78
93 // Google public name servers (DNS). 79 // Google public name servers (DNS).
94 const char kGoogleNameServers[] = "8.8.4.4,8.8.8.8"; 80 const char kGoogleNameServers[] = "8.8.4.4,8.8.8.8";
95 81
96 // Functions we call in JavaScript. 82 // Functions we call in JavaScript.
97 const char kRefreshNetworkDataFunction[] = 83 const char kRefreshNetworkDataFunction[] =
98 "options.network.NetworkList.refreshNetworkData"; 84 "options.network.NetworkList.refreshNetworkData";
99 const char kSetDefaultNetworkIconsFunction[] = 85 const char kSetDefaultNetworkIconsFunction[] =
100 "options.network.NetworkList.setDefaultNetworkIcons"; 86 "options.network.NetworkList.setDefaultNetworkIcons";
101 const char kShowDetailedInfoFunction[] = 87 const char kShowDetailedInfoFunction[] =
(...skipping 26 matching lines...) Expand all
128 // These are strings used to communicate with JavaScript. 114 // These are strings used to communicate with JavaScript.
129 const char kTagActivate[] = "activate"; 115 const char kTagActivate[] = "activate";
130 const char kTagAddConnection[] = "add"; 116 const char kTagAddConnection[] = "add";
131 const char kTagCarrierSelectFlag[] = "showCarrierSelect"; 117 const char kTagCarrierSelectFlag[] = "showCarrierSelect";
132 const char kTagCarrierUrl[] = "carrierUrl"; 118 const char kTagCarrierUrl[] = "carrierUrl";
133 const char kTagCellularAvailable[] = "cellularAvailable"; 119 const char kTagCellularAvailable[] = "cellularAvailable";
134 const char kTagCellularEnabled[] = "cellularEnabled"; 120 const char kTagCellularEnabled[] = "cellularEnabled";
135 const char kTagCellularSupportsScan[] = "cellularSupportsScan"; 121 const char kTagCellularSupportsScan[] = "cellularSupportsScan";
136 const char kTagConfigure[] = "configure"; 122 const char kTagConfigure[] = "configure";
137 const char kTagConnect[] = "connect"; 123 const char kTagConnect[] = "connect";
138 const char kTagControlledBy[] = "controlledBy";
139 const char kTagDeviceConnected[] = "deviceConnected"; 124 const char kTagDeviceConnected[] = "deviceConnected";
140 const char kTagDisconnect[] = "disconnect"; 125 const char kTagDisconnect[] = "disconnect";
141 const char kTagErrorMessage[] = "errorMessage"; 126 const char kTagErrorMessage[] = "errorMessage";
142 const char kTagForget[] = "forget"; 127 const char kTagForget[] = "forget";
143 const char kTagNameServersGoogle[] = "nameServersGoogle";
144 const char kTagNameServerType[] = "nameServerType";
145 const char kTagOptions[] = "options"; 128 const char kTagOptions[] = "options";
146 const char kTagPolicy[] = "policy";
147 const char kTagRecommended[] = "recommended";
148 const char kTagRecommendedValue[] = "recommendedValue";
149 const char kTagRemembered[] = "remembered"; 129 const char kTagRemembered[] = "remembered";
150 const char kTagRememberedList[] = "rememberedList"; 130 const char kTagRememberedList[] = "rememberedList";
151 const char kTagCarriers[] = "carriers"; 131 const char kTagCarriers[] = "carriers";
152 const char kTagCurrentCarrierIndex[] = "currentCarrierIndex"; 132 const char kTagCurrentCarrierIndex[] = "currentCarrierIndex";
153 const char kTagShared[] = "shared"; 133 const char kTagShared[] = "shared";
154 const char kTagShowActivateButton[] = "showActivateButton"; 134 const char kTagShowActivateButton[] = "showActivateButton";
155 const char kTagShowViewAccountButton[] = "showViewAccountButton"; 135 const char kTagShowViewAccountButton[] = "showViewAccountButton";
156 const char kTagTrue[] = "true"; 136 const char kTagTrue[] = "true";
157 const char kTagValue[] = "value";
158 const char kTagVpnList[] = "vpnList"; 137 const char kTagVpnList[] = "vpnList";
159 const char kTagWifiAvailable[] = "wifiAvailable"; 138 const char kTagWifiAvailable[] = "wifiAvailable";
160 const char kTagWifiEnabled[] = "wifiEnabled"; 139 const char kTagWifiEnabled[] = "wifiEnabled";
161 const char kTagWimaxAvailable[] = "wimaxAvailable"; 140 const char kTagWimaxAvailable[] = "wimaxAvailable";
162 const char kTagWimaxEnabled[] = "wimaxEnabled"; 141 const char kTagWimaxEnabled[] = "wimaxEnabled";
163 const char kTagWiredList[] = "wiredList"; 142 const char kTagWiredList[] = "wiredList";
164 const char kTagWirelessList[] = "wirelessList"; 143 const char kTagWirelessList[] = "wirelessList";
165 144
166 const int kPreferredPriority = 1; 145 const int kPreferredPriority = 1;
167 146
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 192
214 std::string icon_url = ui::network_icon::GetImageUrlForNetwork( 193 std::string icon_url = ui::network_icon::GetImageUrlForNetwork(
215 network, ui::network_icon::ICON_TYPE_LIST, icon_scale_factor); 194 network, ui::network_icon::ICON_TYPE_LIST, icon_scale_factor);
216 195
217 network_info->SetString(kNetworkInfoKeyIconURL, icon_url); 196 network_info->SetString(kNetworkInfoKeyIconURL, icon_url);
218 network_info->SetString(kNetworkInfoKeyServicePath, network->path()); 197 network_info->SetString(kNetworkInfoKeyServicePath, network->path());
219 198
220 return network_info.release(); 199 return network_info.release();
221 } 200 }
222 201
223 // Pulls IP information out of a shill service properties dictionary. If
224 // |static_ip| is true, then it fetches "StaticIP.*" properties. If not, then it
225 // fetches "SavedIP.*" properties. Caller must take ownership of returned
226 // dictionary. If non-NULL, |ip_parameters_set| returns a count of the number
227 // of IP routing parameters that get set.
228 base::DictionaryValue* BuildIPInfoDictionary(
229 const base::DictionaryValue& shill_properties,
230 bool static_ip,
231 int* routing_parameters_set) {
232 std::string address_key;
233 std::string prefix_len_key;
234 std::string gateway_key;
235 std::string name_servers_key;
236 if (static_ip) {
237 address_key = shill::kStaticIPAddressProperty;
238 prefix_len_key = shill::kStaticIPPrefixlenProperty;
239 gateway_key = shill::kStaticIPGatewayProperty;
240 name_servers_key = shill::kStaticIPNameServersProperty;
241 } else {
242 address_key = shill::kSavedIPAddressProperty;
243 prefix_len_key = shill::kSavedIPPrefixlenProperty;
244 gateway_key = shill::kSavedIPGatewayProperty;
245 name_servers_key = shill::kSavedIPNameServersProperty;
246 }
247
248 scoped_ptr<base::DictionaryValue> ip_info_dict(new base::DictionaryValue);
249 std::string address;
250 int routing_parameters = 0;
251 if (shill_properties.GetStringWithoutPathExpansion(address_key, &address)) {
252 ip_info_dict->SetString(kIpConfigAddress, address);
253 VLOG(2) << "Found " << address_key << ": " << address;
254 routing_parameters++;
255 }
256 int prefix_len = -1;
257 if (shill_properties.GetIntegerWithoutPathExpansion(
258 prefix_len_key, &prefix_len)) {
259 ip_info_dict->SetInteger(kIpConfigPrefixLength, prefix_len);
260 std::string netmask = network_util::PrefixLengthToNetmask(prefix_len);
261 ip_info_dict->SetString(kIpConfigNetmask, netmask);
262 VLOG(2) << "Found " << prefix_len_key << ": "
263 << prefix_len << " (" << netmask << ")";
264 routing_parameters++;
265 }
266 std::string gateway;
267 if (shill_properties.GetStringWithoutPathExpansion(gateway_key, &gateway)) {
268 ip_info_dict->SetString(kIpConfigGateway, gateway);
269 VLOG(2) << "Found " << gateway_key << ": " << gateway;
270 routing_parameters++;
271 }
272 if (routing_parameters_set)
273 *routing_parameters_set = routing_parameters;
274
275 std::string name_servers;
276 if (shill_properties.GetStringWithoutPathExpansion(
277 name_servers_key, &name_servers)) {
278 ip_info_dict->SetString(kIpConfigNameServers, name_servers);
279 VLOG(2) << "Found " << name_servers_key << ": " << name_servers;
280 }
281
282 return ip_info_dict.release();
283 }
284
285 // Decorate pref value as CoreOptionsHandler::CreateValueForPref() does and
286 // store it under |key| in |settings|. Takes ownership of |value|.
287 void SetValueDictionary(const char* key,
288 base::Value* value,
289 const NetworkPropertyUIData& ui_data,
290 base::DictionaryValue* settings) {
291 base::DictionaryValue* dict = new base::DictionaryValue();
292 // DictionaryValue::Set() takes ownership of |value|.
293 dict->Set(kTagValue, value);
294 settings->Set(key, dict);
295
296 const base::Value* recommended_value = ui_data.default_value();
297 if (ui_data.IsManaged())
298 dict->SetString(kTagControlledBy, kTagPolicy);
299 else if (recommended_value && recommended_value->Equals(value))
300 dict->SetString(kTagControlledBy, kTagRecommended);
301
302 if (recommended_value)
303 dict->Set(kTagRecommendedValue, recommended_value->DeepCopy());
304 }
305
306 const char* GetOncPolicyString(::onc::ONCSource onc_source) {
307 if (onc_source == ::onc::ONC_SOURCE_DEVICE_POLICY)
308 return ::onc::kAugmentationDevicePolicy;
309 return ::onc::kAugmentationUserPolicy;
310 }
311
312 const char* GetOncEditableString(::onc::ONCSource onc_source) {
313 if (onc_source == ::onc::ONC_SOURCE_DEVICE_POLICY)
314 return ::onc::kAugmentationDeviceEditable;
315 return ::onc::kAugmentationUserEditable;
316 }
317
318 const char* GetOncSettingString(::onc::ONCSource onc_source) {
319 if (onc_source == ::onc::ONC_SOURCE_DEVICE_POLICY)
320 return ::onc::kAugmentationSharedSetting;
321 return ::onc::kAugmentationUserSetting;
322 }
323
324 // Creates a GetManagedProperties style dictionary and adds it to |settings|.
325 // |default_value| represents either the recommended value if |recommended|
326 // is true, or the enforced value if |recommended| is false. |settings_dict_key|
327 // is expected to be an ONC key with no '.' in it.
328 // Note(stevenjb): This is bridge code until we use GetManagedProperties to
329 // retrieve Shill properties.
330 void SetManagedValueDictionaryEx(const char* settings_dict_key,
331 const base::Value& value,
332 ::onc::ONCSource onc_source,
333 bool recommended,
334 const base::Value* default_value,
335 base::DictionaryValue* settings_dict) {
336 base::DictionaryValue* dict = new base::DictionaryValue();
337 settings_dict->SetWithoutPathExpansion(settings_dict_key, dict);
338
339 dict->Set(::onc::kAugmentationActiveSetting, value.DeepCopy());
340
341 if (onc_source == ::onc::ONC_SOURCE_NONE)
342 return;
343
344 if (recommended) {
345 // If an ONC property is 'Recommended' it can be edited by the user.
346 std::string editable = GetOncEditableString(onc_source);
347 dict->Set(editable, new base::FundamentalValue(true));
348 }
349 if (default_value) {
350 std::string policy_source = GetOncPolicyString(onc_source);
351 dict->Set(policy_source, default_value->DeepCopy());
352 if (recommended && !value.Equals(default_value)) {
353 std::string setting_source = GetOncSettingString(onc_source);
354 dict->Set(setting_source, value.DeepCopy());
355 dict->SetString(::onc::kAugmentationEffectiveSetting, setting_source);
356 } else {
357 dict->SetString(::onc::kAugmentationEffectiveSetting, policy_source);
358 }
359 }
360 }
361
362 // Wrapper for SetManagedValueDictionaryEx that does the policy lookup.
363 // Note: We have to pass |onc_key| separately from |settings_dict_key| since
364 // we might be populating a sub-dictionary in which case |onc_key| will be the
365 // complete path (e.g. 'VPN.Host') and |settings_dict_key| is the dictionary key
366 // (e.g. 'Host').
367 void SetManagedValueDictionary(const std::string& guid,
368 const char* settings_dict_key,
369 const base::Value& value,
370 const std::string& onc_key,
371 base::DictionaryValue* settings_dict) {
372 ::onc::ONCSource onc_source = ::onc::ONC_SOURCE_NONE;
373 const base::DictionaryValue* onc =
374 onc::FindPolicyForActiveUser(guid, &onc_source);
375 DCHECK_EQ(onc == NULL, onc_source == ::onc::ONC_SOURCE_NONE);
376 const base::Value* default_value = NULL;
377 bool recommended = false;
378 if (onc) {
379 onc->Get(onc_key, &default_value);
380 recommended = onc::IsRecommendedValue(onc, onc_key);
381 }
382 SetManagedValueDictionaryEx(settings_dict_key,
383 value,
384 onc_source,
385 recommended,
386 default_value,
387 settings_dict);
388 }
389
390 // Fills |dictionary| with the configuration details of |vpn|. |onc| is required
391 // for augmenting the policy-managed information.
392 void PopulateVPNDetails(const NetworkState* vpn,
393 const base::DictionaryValue& shill_properties,
394 base::DictionaryValue* dictionary) {
395 // Name and Remembered are set in PopulateConnectionDetails().
396 // Provider properties are stored in the "Provider" dictionary.
397 const base::DictionaryValue* shill_provider_properties = NULL;
398 if (!shill_properties.GetDictionaryWithoutPathExpansion(
399 shill::kProviderProperty, &shill_provider_properties)) {
400 LOG(ERROR) << "No provider properties for VPN: " << vpn->path();
401 return;
402 }
403 base::DictionaryValue* vpn_dictionary;
404 if (!dictionary->GetDictionary(
405 ::onc::network_config::kVPN, &vpn_dictionary)) {
406 vpn_dictionary = new base::DictionaryValue;
407 dictionary->Set(::onc::network_config::kVPN, vpn_dictionary);
408 }
409 std::string shill_provider_type;
410 if (!shill_provider_properties->GetStringWithoutPathExpansion(
411 shill::kTypeProperty, &shill_provider_type)) {
412 LOG(ERROR) << "Shill VPN has no Provider.Type: " << vpn->path();
413 return;
414 }
415 std::string provider_type_key;
416 if (shill_provider_type == shill::kProviderOpenVpn)
417 provider_type_key = ::onc::vpn::kOpenVPN;
418 else
419 provider_type_key = ::onc::vpn::kL2TP;
420
421 base::DictionaryValue* provider_type_dictionary;
422 if (!vpn_dictionary->GetDictionary(
423 provider_type_key, &provider_type_dictionary)) {
424 provider_type_dictionary = new base::DictionaryValue;
425 vpn_dictionary->Set(provider_type_key, provider_type_dictionary);
426 }
427 std::string provider_host;
428 shill_provider_properties->GetStringWithoutPathExpansion(
429 shill::kHostProperty, &provider_host);
430 SetManagedValueDictionary(
431 vpn->guid(),
432 ::onc::vpn::kHost,
433 base::StringValue(provider_host),
434 ::onc::network_config::VpnProperty(::onc::vpn::kHost),
435 vpn_dictionary);
436 }
437
438 // Given a list of supported carrier's by the device, return the index of 202 // Given a list of supported carrier's by the device, return the index of
439 // the carrier the device is currently using. 203 // the carrier the device is currently using.
440 int FindCurrentCarrierIndex(const base::ListValue* carriers, 204 int FindCurrentCarrierIndex(const base::ListValue* carriers,
441 const DeviceState* device) { 205 const DeviceState* device) {
442 DCHECK(carriers); 206 DCHECK(carriers);
443 DCHECK(device); 207 DCHECK(device);
444 bool gsm = (device->technology_family() == shill::kTechnologyFamilyGsm); 208 bool gsm = (device->technology_family() == shill::kTechnologyFamilyGsm);
445 int index = 0; 209 int index = 0;
446 for (base::ListValue::const_iterator it = carriers->begin(); 210 for (base::ListValue::const_iterator it = carriers->begin();
447 it != carriers->end(); ++it, ++index) { 211 it != carriers->end(); ++it, ++index) {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 // The button will trigger ShowMorePlanInfoCallback() which will open 304 // The button will trigger ShowMorePlanInfoCallback() which will open
541 // carrier specific portal. 305 // carrier specific portal.
542 if (cellular->IsConnectedState() || force_show_view_account_button) 306 if (cellular->IsConnectedState() || force_show_view_account_button)
543 dictionary->SetBoolean(kTagShowViewAccountButton, true); 307 dictionary->SetBoolean(kTagShowViewAccountButton, true);
544 } 308 }
545 } 309 }
546 } 310 }
547 311
548 scoped_ptr<base::DictionaryValue> PopulateConnectionDetails( 312 scoped_ptr<base::DictionaryValue> PopulateConnectionDetails(
549 const NetworkState* network, 313 const NetworkState* network,
550 const base::DictionaryValue& shill_properties) { 314 const base::DictionaryValue& onc_properties) {
551 // TODO(stevenjb): Once we eliminate all references to Shill properties, 315 scoped_ptr<base::DictionaryValue> dictionary(onc_properties.DeepCopy());
552 // we can switch to using managed_network_configuration_handler which
553 // includes Device properties for Cellular (and skip the call to
554 // onc::TranslateShillServiceToONCPart). For now we copy them over here.
555 scoped_ptr<base::DictionaryValue> shill_properties_with_device(
556 shill_properties.DeepCopy());
557 const DeviceState* device =
558 NetworkHandler::Get()->network_state_handler()->GetDeviceState(
559 network->device_path());
560 if (device) {
561 shill_properties_with_device->SetWithoutPathExpansion(
562 shill::kDeviceProperty, device->properties().DeepCopy());
563 // Get the hardware MAC address from the DeviceState.
564 // (Note: this is done in ManagedNetworkConfigurationHandler but not
565 // in NetworkConfigurationHandler).
566 if (!device->mac_address().empty()) {
567 shill_properties_with_device->SetStringWithoutPathExpansion(
568 shill::kAddressProperty, device->mac_address());
569 }
570 }
571 scoped_ptr<base::DictionaryValue> dictionary =
572 onc::TranslateShillServiceToONCPart(
573 *shill_properties_with_device, &onc::kNetworkWithStateSignature);
574 ::onc::TranslateOncStrings(dictionary.get()); 316 ::onc::TranslateOncStrings(dictionary.get());
575 317
576 dictionary->SetString(kNetworkInfoKeyServicePath, network->path()); 318 dictionary->SetString(kNetworkInfoKeyServicePath, network->path());
577 dictionary->SetString( 319 dictionary->SetString(
578 kTagErrorMessage, 320 kTagErrorMessage,
579 ash::network_connect::ErrorString(network->error(), network->path())); 321 ash::network_connect::ErrorString(network->error(), network->path()));
580 322
581 dictionary->SetBoolean(kTagRemembered, !network->profile_path().empty()); 323 dictionary->SetBoolean(kTagRemembered, !network->profile_path().empty());
582 bool shared = !network->IsPrivate(); 324 bool shared = !network->IsPrivate();
583 dictionary->SetBoolean(kTagShared, shared); 325 dictionary->SetBoolean(kTagShared, shared);
584 326
585 const std::string& type = network->type(); 327 const std::string& type = network->type();
586 328
587 const NetworkState* connected_network = 329 const NetworkState* connected_network =
588 NetworkHandler::Get()->network_state_handler()->ConnectedNetworkByType( 330 NetworkHandler::Get()->network_state_handler()->ConnectedNetworkByType(
589 NetworkTypePattern::Primitive(type)); 331 NetworkTypePattern::Primitive(type));
590 dictionary->SetBoolean(kTagDeviceConnected, connected_network != NULL); 332 dictionary->SetBoolean(kTagDeviceConnected, connected_network != NULL);
591 333
592 if (type == shill::kTypeCellular) 334 if (type == shill::kTypeCellular)
593 PopulateCellularDetails(network, dictionary.get()); 335 PopulateCellularDetails(network, dictionary.get());
594 else if (type == shill::kTypeVPN)
595 PopulateVPNDetails(network, shill_properties, dictionary.get());
596 336
597 return dictionary.Pass(); 337 return dictionary.Pass();
598 } 338 }
599 339
600 // Helper methods for SetIPConfigProperties 340 // Helper methods for SetIPConfigProperties
601 bool AppendPropertyKeyIfPresent(const std::string& key, 341 bool AppendPropertyKeyIfPresent(const std::string& key,
602 const base::DictionaryValue& old_properties, 342 const base::DictionaryValue& old_properties,
603 std::vector<std::string>* property_keys) { 343 std::vector<std::string>* property_keys) {
604 if (old_properties.HasKey(key)) { 344 if (old_properties.HasKey(key)) {
605 property_keys->push_back(key); 345 property_keys->push_back(key);
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 } 708 }
969 709
970 void InternetOptionsHandler::RefreshNetworkData() { 710 void InternetOptionsHandler::RefreshNetworkData() {
971 base::DictionaryValue dictionary; 711 base::DictionaryValue dictionary;
972 FillNetworkInfo(&dictionary); 712 FillNetworkInfo(&dictionary);
973 web_ui()->CallJavascriptFunction(kRefreshNetworkDataFunction, dictionary); 713 web_ui()->CallJavascriptFunction(kRefreshNetworkDataFunction, dictionary);
974 } 714 }
975 715
976 void InternetOptionsHandler::UpdateConnectionData( 716 void InternetOptionsHandler::UpdateConnectionData(
977 const std::string& service_path) { 717 const std::string& service_path) {
978 NetworkHandler::Get()->network_configuration_handler()->GetProperties( 718 NetworkHandler::Get()
979 service_path, 719 ->managed_network_configuration_handler()
980 base::Bind(&InternetOptionsHandler::UpdateConnectionDataCallback, 720 ->GetManagedProperties(
981 weak_factory_.GetWeakPtr()), 721 LoginState::Get()->primary_user_hash(),
982 base::Bind(&ShillError, "UpdateConnectionData")); 722 service_path,
723 base::Bind(&InternetOptionsHandler::UpdateConnectionDataCallback,
724 weak_factory_.GetWeakPtr()),
725 base::Bind(&ShillError, "UpdateConnectionData"));
983 } 726 }
984 727
985 void InternetOptionsHandler::UpdateConnectionDataCallback( 728 void InternetOptionsHandler::UpdateConnectionDataCallback(
986 const std::string& service_path, 729 const std::string& service_path,
987 const base::DictionaryValue& shill_properties) { 730 const base::DictionaryValue& onc_properties) {
988 const NetworkState* network = GetNetworkState(service_path); 731 const NetworkState* network = GetNetworkState(service_path);
989 if (!network) 732 if (!network)
990 return; 733 return;
991 scoped_ptr<base::DictionaryValue> dictionary = 734 scoped_ptr<base::DictionaryValue> dictionary =
992 PopulateConnectionDetails(network, shill_properties); 735 PopulateConnectionDetails(network, onc_properties);
993 web_ui()->CallJavascriptFunction(kUpdateConnectionDataFunction, *dictionary); 736 web_ui()->CallJavascriptFunction(kUpdateConnectionDataFunction, *dictionary);
994 } 737 }
995 738
996 void InternetOptionsHandler::UpdateCarrier() { 739 void InternetOptionsHandler::UpdateCarrier() {
997 web_ui()->CallJavascriptFunction(kUpdateCarrierFunction); 740 web_ui()->CallJavascriptFunction(kUpdateCarrierFunction);
998 } 741 }
999 742
1000 void InternetOptionsHandler::DeviceListChanged() { 743 void InternetOptionsHandler::DeviceListChanged() {
1001 if (!web_ui()) 744 if (!web_ui())
1002 return; 745 return;
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1182 callback = base::Bind(&RequestReconnect, service_path, GetNativeWindow()); 925 callback = base::Bind(&RequestReconnect, service_path, GetNativeWindow());
1183 NetworkHandler::Get()->network_device_handler()->RequestRefreshIPConfigs( 926 NetworkHandler::Get()->network_device_handler()->RequestRefreshIPConfigs(
1184 device_path, 927 device_path,
1185 callback, 928 callback,
1186 base::Bind(&ShillError, "RequestRefreshIPConfigs")); 929 base::Bind(&ShillError, "RequestRefreshIPConfigs"));
1187 } 930 }
1188 } 931 }
1189 932
1190 void InternetOptionsHandler::PopulateDictionaryDetailsCallback( 933 void InternetOptionsHandler::PopulateDictionaryDetailsCallback(
1191 const std::string& service_path, 934 const std::string& service_path,
1192 const base::DictionaryValue& shill_properties) { 935 const base::DictionaryValue& onc_properties) {
1193 const NetworkState* network = GetNetworkState(service_path); 936 const NetworkState* network = GetNetworkState(service_path);
1194 if (!network) { 937 if (!network) {
1195 LOG(ERROR) << "Network properties not found: " << service_path; 938 LOG(ERROR) << "Network properties not found: " << service_path;
1196 return; 939 return;
1197 } 940 }
1198 941
1199 details_path_ = service_path; 942 details_path_ = service_path;
1200 943
1201 scoped_ptr<base::DictionaryValue> dictionary = 944 scoped_ptr<base::DictionaryValue> dictionary =
1202 PopulateConnectionDetails(network, shill_properties); 945 PopulateConnectionDetails(network, onc_properties);
1203 946
1204 ::onc::ONCSource onc_source = ::onc::ONC_SOURCE_NONE;
1205 const base::DictionaryValue* onc =
1206 onc::FindPolicyForActiveUser(network->guid(), &onc_source);
1207 const NetworkPropertyUIData property_ui_data(onc_source);
1208
1209 // IP config
1210 scoped_ptr<base::DictionaryValue> ipconfig_dhcp(new base::DictionaryValue);
1211 ipconfig_dhcp->SetString(kIpConfigAddress, network->ip_address());
1212 ipconfig_dhcp->SetString(kIpConfigNetmask, network->GetNetmask());
1213 ipconfig_dhcp->SetString(kIpConfigGateway, network->gateway());
1214 std::string ipconfig_name_servers = network->GetDnsServersAsString();
1215 ipconfig_dhcp->SetString(kIpConfigNameServers, ipconfig_name_servers);
1216 ipconfig_dhcp->SetString(kIpConfigWebProxyAutoDiscoveryUrl,
1217 network->web_proxy_auto_discovery_url().spec());
1218 SetValueDictionary(kDictionaryIpConfig,
1219 ipconfig_dhcp.release(),
1220 property_ui_data,
1221 dictionary.get());
1222
1223 std::string name_server_type = kNameServerTypeAutomatic;
1224 int automatic_ip_config = 0;
1225 scoped_ptr<base::DictionaryValue> static_ip_dict(
1226 BuildIPInfoDictionary(shill_properties, true, &automatic_ip_config));
1227 dictionary->SetBoolean(kIpConfigAutoConfig, automatic_ip_config == 0);
1228 DCHECK(automatic_ip_config == 3 || automatic_ip_config == 0)
1229 << "UI doesn't support automatic specification of individual "
1230 << "static IP parameters.";
1231 scoped_ptr<base::DictionaryValue> saved_ip_dict(
1232 BuildIPInfoDictionary(shill_properties, false, NULL));
1233 dictionary->Set(kDictionarySavedIp, saved_ip_dict.release());
1234
1235 // Determine what kind of name server setting we have by comparing the
1236 // StaticIP and Google values with the ipconfig values.
1237 std::string static_ip_nameservers;
1238 static_ip_dict->GetString(kIpConfigNameServers, &static_ip_nameservers);
1239 if (!static_ip_nameservers.empty() &&
1240 static_ip_nameservers == ipconfig_name_servers) {
1241 name_server_type = kNameServerTypeUser;
1242 }
1243 if (ipconfig_name_servers == kGoogleNameServers) {
1244 name_server_type = kNameServerTypeGoogle;
1245 }
1246 SetValueDictionary(kDictionaryStaticIp,
1247 static_ip_dict.release(),
1248 property_ui_data,
1249 dictionary.get());
1250
1251 dictionary->SetString(kTagNameServerType, name_server_type);
1252 dictionary->SetString(kTagNameServersGoogle, kGoogleNameServers);
1253
1254 int priority = 0;
1255 shill_properties.GetIntegerWithoutPathExpansion(
1256 shill::kPriorityProperty, &priority);
1257 SetManagedValueDictionary(network->guid(),
1258 ::onc::network_config::kPriority,
1259 base::FundamentalValue(priority),
1260 ::onc::network_config::kPriority,
1261 dictionary.get());
1262
1263 std::string onc_path_to_auto_connect;
1264 if (network->Matches(NetworkTypePattern::WiFi())) { 947 if (network->Matches(NetworkTypePattern::WiFi())) {
1265 content::RecordAction( 948 content::RecordAction(
1266 base::UserMetricsAction("Options_NetworkShowDetailsWifi")); 949 base::UserMetricsAction("Options_NetworkShowDetailsWifi"));
1267 if (network->IsConnectedState()) { 950 if (network->IsConnectedState()) {
1268 content::RecordAction( 951 content::RecordAction(
1269 base::UserMetricsAction("Options_NetworkShowDetailsWifiConnected")); 952 base::UserMetricsAction("Options_NetworkShowDetailsWifiConnected"));
1270 } 953 }
1271 onc_path_to_auto_connect =
1272 ::onc::network_config::WifiProperty(::onc::wifi::kAutoConnect);
1273 } else if (network->Matches(NetworkTypePattern::VPN())) { 954 } else if (network->Matches(NetworkTypePattern::VPN())) {
1274 content::RecordAction( 955 content::RecordAction(
1275 base::UserMetricsAction("Options_NetworkShowDetailsVPN")); 956 base::UserMetricsAction("Options_NetworkShowDetailsVPN"));
1276 if (network->IsConnectedState()) { 957 if (network->IsConnectedState()) {
1277 content::RecordAction( 958 content::RecordAction(
1278 base::UserMetricsAction("Options_NetworkShowDetailsVPNConnected")); 959 base::UserMetricsAction("Options_NetworkShowDetailsVPNConnected"));
1279 } 960 }
1280 onc_path_to_auto_connect = ::onc::network_config::VpnProperty(
1281 ::onc::vpn::kAutoConnect);
1282 } else if (network->Matches(NetworkTypePattern::Cellular())) { 961 } else if (network->Matches(NetworkTypePattern::Cellular())) {
1283 content::RecordAction( 962 content::RecordAction(
1284 base::UserMetricsAction("Options_NetworkShowDetailsCellular")); 963 base::UserMetricsAction("Options_NetworkShowDetailsCellular"));
1285 if (network->IsConnectedState()) { 964 if (network->IsConnectedState()) {
1286 content::RecordAction(base::UserMetricsAction( 965 content::RecordAction(base::UserMetricsAction(
1287 "Options_NetworkShowDetailsCellularConnected")); 966 "Options_NetworkShowDetailsCellularConnected"));
1288 } 967 }
1289 } 968 }
1290 969
1291 if (!onc_path_to_auto_connect.empty()) {
1292 bool auto_connect = false;
1293 shill_properties.GetBooleanWithoutPathExpansion(
1294 shill::kAutoConnectProperty, &auto_connect);
1295
1296 base::FundamentalValue auto_connect_value(auto_connect);
1297 ::onc::ONCSource auto_connect_onc_source = onc_source;
1298
1299 DCHECK_EQ(onc == NULL, onc_source == ::onc::ONC_SOURCE_NONE);
1300 bool auto_connect_recommended =
1301 auto_connect_onc_source != ::onc::ONC_SOURCE_NONE &&
1302 onc::IsRecommendedValue(onc, onc_path_to_auto_connect);
1303 // If a policy exists, |auto_connect_default_value| will contain either a
1304 // recommended value (if |auto_connect_recommended| is true) or an enforced
1305 // value (if |auto_connect_recommended| is false).
1306 const base::Value* auto_connect_default_value = NULL;
1307 if (onc)
1308 onc->Get(onc_path_to_auto_connect, &auto_connect_default_value);
1309
1310 // Autoconnect can be controlled by the GlobalNetworkConfiguration of the
1311 // ONC policy.
1312 if (auto_connect_onc_source == ::onc::ONC_SOURCE_NONE &&
1313 onc::PolicyAllowsOnlyPolicyNetworksToAutoconnect(
1314 network->IsPrivate())) {
1315 auto_connect_recommended = false;
1316 auto_connect_onc_source = network->IsPrivate()
1317 ? ::onc::ONC_SOURCE_USER_POLICY
1318 : ::onc::ONC_SOURCE_DEVICE_POLICY;
1319 if (auto_connect) {
1320 LOG(WARNING) << "Policy prevents autoconnect, but value is True.";
1321 auto_connect_value = base::FundamentalValue(false);
1322 }
1323 }
1324 SetManagedValueDictionaryEx(shill::kAutoConnectProperty,
1325 auto_connect_value,
1326 auto_connect_onc_source,
1327 auto_connect_recommended,
1328 auto_connect_default_value,
1329 dictionary.get());
1330 }
1331
1332 // Show details dialog 970 // Show details dialog
1333 web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, *dictionary); 971 web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, *dictionary);
1334 } 972 }
1335 973
1336 gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const { 974 gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const {
1337 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); 975 return web_ui()->GetWebContents()->GetTopLevelNativeWindow();
1338 } 976 }
1339 977
1340 float InternetOptionsHandler::GetScaleFactor() const { 978 float InternetOptionsHandler::GetScaleFactor() const {
1341 return web_ui()->GetDeviceScaleFactor(); 979 return web_ui()->GetDeviceScaleFactor();
(...skipping 24 matching lines...) Expand all
1366 // Process commands that do not require an existing network. 1004 // Process commands that do not require an existing network.
1367 if (command == kTagAddConnection) { 1005 if (command == kTagAddConnection) {
1368 AddConnection(type); 1006 AddConnection(type);
1369 } else if (command == kTagForget) { 1007 } else if (command == kTagForget) {
1370 NetworkHandler::Get()->network_configuration_handler()-> 1008 NetworkHandler::Get()->network_configuration_handler()->
1371 RemoveConfiguration( 1009 RemoveConfiguration(
1372 service_path, 1010 service_path,
1373 base::Bind(&base::DoNothing), 1011 base::Bind(&base::DoNothing),
1374 base::Bind(&ShillError, "NetworkCommand: " + command)); 1012 base::Bind(&ShillError, "NetworkCommand: " + command));
1375 } else if (command == kTagOptions) { 1013 } else if (command == kTagOptions) {
1376 NetworkHandler::Get()->network_configuration_handler()->GetProperties( 1014 NetworkHandler::Get()
1377 service_path, 1015 ->managed_network_configuration_handler()
1378 base::Bind(&InternetOptionsHandler::PopulateDictionaryDetailsCallback, 1016 ->GetManagedProperties(
1379 weak_factory_.GetWeakPtr()), 1017 LoginState::Get()->primary_user_hash(),
1380 base::Bind(&ShillError, "NetworkCommand: " + command)); 1018 service_path,
1019 base::Bind(
1020 &InternetOptionsHandler::PopulateDictionaryDetailsCallback,
1021 weak_factory_.GetWeakPtr()),
1022 base::Bind(&ShillError, "NetworkCommand: " + command));
1381 } else if (command == kTagConnect) { 1023 } else if (command == kTagConnect) {
1382 const NetworkState* network = GetNetworkState(service_path); 1024 const NetworkState* network = GetNetworkState(service_path);
1383 if (network && network->type() == shill::kTypeWifi) 1025 if (network && network->type() == shill::kTypeWifi)
1384 content::RecordAction( 1026 content::RecordAction(
1385 base::UserMetricsAction("Options_NetworkConnectToWifi")); 1027 base::UserMetricsAction("Options_NetworkConnectToWifi"));
1386 else if (network && network->type() == shill::kTypeVPN) 1028 else if (network && network->type() == shill::kTypeVPN)
1387 content::RecordAction( 1029 content::RecordAction(
1388 base::UserMetricsAction("Options_NetworkConnectToVPN")); 1030 base::UserMetricsAction("Options_NetworkConnectToVPN"));
1389 ash::network_connect::ConnectToNetwork(service_path, GetNativeWindow()); 1031 ash::network_connect::ConnectToNetwork(service_path, GetNativeWindow());
1390 } else if (command == kTagDisconnect) { 1032 } else if (command == kTagDisconnect) {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 dictionary->SetBoolean( 1163 dictionary->SetBoolean(
1522 kTagWimaxAvailable, 1164 kTagWimaxAvailable,
1523 handler->IsTechnologyAvailable(NetworkTypePattern::Wimax())); 1165 handler->IsTechnologyAvailable(NetworkTypePattern::Wimax()));
1524 dictionary->SetBoolean( 1166 dictionary->SetBoolean(
1525 kTagWimaxEnabled, 1167 kTagWimaxEnabled,
1526 handler->IsTechnologyEnabled(NetworkTypePattern::Wimax())); 1168 handler->IsTechnologyEnabled(NetworkTypePattern::Wimax()));
1527 } 1169 }
1528 1170
1529 } // namespace options 1171 } // namespace options
1530 } // namespace chromeos 1172 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698