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

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

Issue 482243002: Use Managed properties for Preferred and Provider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: JS feedback Created 6 years, 4 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 | Annotate | Revision Log
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 25 matching lines...) Expand all
36 #include "chromeos/network/network_connection_handler.h" 36 #include "chromeos/network/network_connection_handler.h"
37 #include "chromeos/network/network_device_handler.h" 37 #include "chromeos/network/network_device_handler.h"
38 #include "chromeos/network/network_event_log.h" 38 #include "chromeos/network/network_event_log.h"
39 #include "chromeos/network/network_ip_config.h" 39 #include "chromeos/network/network_ip_config.h"
40 #include "chromeos/network/network_profile.h" 40 #include "chromeos/network/network_profile.h"
41 #include "chromeos/network/network_profile_handler.h" 41 #include "chromeos/network/network_profile_handler.h"
42 #include "chromeos/network/network_state.h" 42 #include "chromeos/network/network_state.h"
43 #include "chromeos/network/network_state_handler.h" 43 #include "chromeos/network/network_state_handler.h"
44 #include "chromeos/network/network_util.h" 44 #include "chromeos/network/network_util.h"
45 #include "chromeos/network/onc/onc_signature.h" 45 #include "chromeos/network/onc/onc_signature.h"
46 #include "chromeos/network/onc/onc_translation_tables.h"
46 #include "chromeos/network/onc/onc_translator.h" 47 #include "chromeos/network/onc/onc_translator.h"
47 #include "chromeos/network/onc/onc_utils.h" 48 #include "chromeos/network/onc/onc_utils.h"
48 #include "components/onc/onc_constants.h" 49 #include "components/onc/onc_constants.h"
49 #include "content/public/browser/user_metrics.h" 50 #include "content/public/browser/user_metrics.h"
50 #include "content/public/browser/web_contents.h" 51 #include "content/public/browser/web_contents.h"
51 #include "content/public/browser/web_ui.h" 52 #include "content/public/browser/web_ui.h"
52 #include "grit/ash_resources.h" 53 #include "grit/ash_resources.h"
53 #include "grit/ui_chromeos_resources.h" 54 #include "grit/ui_chromeos_resources.h"
54 #include "third_party/cros_system_api/dbus/service_constants.h" 55 #include "third_party/cros_system_api/dbus/service_constants.h"
55 #include "ui/base/resource/resource_bundle.h" 56 #include "ui/base/resource/resource_bundle.h"
56 #include "ui/base/webui/web_ui_util.h" 57 #include "ui/base/webui/web_ui_util.h"
57 #include "ui/chromeos/network/network_icon.h" 58 #include "ui/chromeos/network/network_icon.h"
58 #include "ui/gfx/image/image_skia.h" 59 #include "ui/gfx/image/image_skia.h"
59 60
60 namespace chromeos { 61 namespace chromeos {
61 namespace options { 62 namespace options {
62 63
63 namespace { 64 namespace {
64 65
66 // The key in a Managed Value dictionary for translated values.
67 // TODO(stevenjb): Consider making this part of the ONC spec.
68 const char kTranslatedKey[] = "Translated";
69
65 // Keys for the network description dictionary passed to the web ui. Make sure 70 // Keys for the network description dictionary passed to the web ui. Make sure
66 // to keep the strings in sync with what the JavaScript side uses. 71 // to keep the strings in sync with what the JavaScript side uses.
67 const char kNetworkInfoKeyIconURL[] = "iconURL"; 72 const char kNetworkInfoKeyIconURL[] = "iconURL";
68 const char kNetworkInfoKeyServicePath[] = "servicePath"; 73 const char kNetworkInfoKeyServicePath[] = "servicePath";
69 const char kNetworkInfoKeyPolicyManaged[] = "policyManaged"; 74 const char kNetworkInfoKeyPolicyManaged[] = "policyManaged";
70 75
71 // These are keys for getting IP information from the web ui. 76 // These are keys for getting IP information from the web ui.
72 const char kIpConfigAddress[] = "address"; 77 const char kIpConfigAddress[] = "address";
73 const char kIpConfigPrefixLength[] = "prefixLength"; 78 const char kIpConfigPrefixLength[] = "prefixLength";
74 const char kIpConfigNetmask[] = "netmask"; 79 const char kIpConfigNetmask[] = "netmask";
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 const char kTagLanguage[] = "language"; 147 const char kTagLanguage[] = "language";
143 const char kTagLastGoodApn[] = "lastGoodApn"; 148 const char kTagLastGoodApn[] = "lastGoodApn";
144 const char kTagLocalizedName[] = "localizedName"; 149 const char kTagLocalizedName[] = "localizedName";
145 const char kTagName[] = "name"; 150 const char kTagName[] = "name";
146 const char kTagNameServersGoogle[] = "nameServersGoogle"; 151 const char kTagNameServersGoogle[] = "nameServersGoogle";
147 const char kTagNameServerType[] = "nameServerType"; 152 const char kTagNameServerType[] = "nameServerType";
148 const char kTagNetworkId[] = "networkId"; 153 const char kTagNetworkId[] = "networkId";
149 const char kTagOptions[] = "options"; 154 const char kTagOptions[] = "options";
150 const char kTagPassword[] = "password"; 155 const char kTagPassword[] = "password";
151 const char kTagPolicy[] = "policy"; 156 const char kTagPolicy[] = "policy";
152 const char kTagPreferred[] = "preferred";
153 const char kTagProviderType[] = "providerType";
154 const char kTagProviderApnList[] = "providerApnList"; 157 const char kTagProviderApnList[] = "providerApnList";
155 const char kTagRecommended[] = "recommended"; 158 const char kTagRecommended[] = "recommended";
156 const char kTagRecommendedValue[] = "recommendedValue"; 159 const char kTagRecommendedValue[] = "recommendedValue";
157 const char kTagRemembered[] = "remembered"; 160 const char kTagRemembered[] = "remembered";
158 const char kTagRememberedList[] = "rememberedList"; 161 const char kTagRememberedList[] = "rememberedList";
159 const char kTagRestrictedPool[] = "restrictedPool"; 162 const char kTagRestrictedPool[] = "restrictedPool";
160 const char kTagRoamingState[] = "roamingState"; 163 const char kTagRoamingState[] = "roamingState";
161 const char kTagServerHostname[] = "serverHostname";
162 const char kTagCarriers[] = "carriers"; 164 const char kTagCarriers[] = "carriers";
163 const char kTagCurrentCarrierIndex[] = "currentCarrierIndex"; 165 const char kTagCurrentCarrierIndex[] = "currentCarrierIndex";
164 const char kTagShared[] = "shared"; 166 const char kTagShared[] = "shared";
165 const char kTagShowActivateButton[] = "showActivateButton"; 167 const char kTagShowActivateButton[] = "showActivateButton";
166 const char kTagShowViewAccountButton[] = "showViewAccountButton"; 168 const char kTagShowViewAccountButton[] = "showViewAccountButton";
167 const char kTagSimCardLockEnabled[] = "simCardLockEnabled"; 169 const char kTagSimCardLockEnabled[] = "simCardLockEnabled";
168 const char kTagSupportUrl[] = "supportUrl"; 170 const char kTagSupportUrl[] = "supportUrl";
169 const char kTagTrue[] = "true"; 171 const char kTagTrue[] = "true";
170 const char kTagUsername[] = "username"; 172 const char kTagUsername[] = "username";
171 const char kTagValue[] = "value"; 173 const char kTagValue[] = "value";
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 if (onc_source == ::onc::ONC_SOURCE_DEVICE_POLICY) 332 if (onc_source == ::onc::ONC_SOURCE_DEVICE_POLICY)
331 return ::onc::kAugmentationSharedSetting; 333 return ::onc::kAugmentationSharedSetting;
332 return ::onc::kAugmentationUserSetting; 334 return ::onc::kAugmentationUserSetting;
333 } 335 }
334 336
335 // Creates a GetManagedProperties style dictionary and adds it to |settings|. 337 // Creates a GetManagedProperties style dictionary and adds it to |settings|.
336 // |default_value| represents either the recommended value if |recommended| 338 // |default_value| represents either the recommended value if |recommended|
337 // is true, or the enforced value if |recommended| is false. 339 // is true, or the enforced value if |recommended| is false.
338 // Note(stevenjb): This is bridge code until we use GetManagedProperties to 340 // Note(stevenjb): This is bridge code until we use GetManagedProperties to
339 // retrieve Shill properties. 341 // retrieve Shill properties.
340 void SetManagedValueDictionary(const char* key, 342 void SetManagedValueDictionaryEx(const char* settings_dict_key,
341 const base::Value* value, 343 const base::Value* value,
342 ::onc::ONCSource onc_source, 344 ::onc::ONCSource onc_source,
343 bool recommended, 345 bool recommended,
344 const base::Value* default_value, 346 const base::Value* default_value,
345 base::DictionaryValue* settings) { 347 base::DictionaryValue* settings_dict) {
346 base::DictionaryValue* dict = new base::DictionaryValue(); 348 base::DictionaryValue* dict = new base::DictionaryValue();
347 settings->Set(key, dict); 349 settings_dict->Set(settings_dict_key, dict);
pneubeck (no reviews) 2014/08/19 19:26:38 nit: maybe clarify at the comment of this function
stevenjb 2014/08/19 23:20:17 This was not intended to support path expansion, s
348 350
349 DCHECK(value); 351 DCHECK(value);
350 dict->Set(::onc::kAugmentationActiveSetting, value->DeepCopy()); 352 dict->Set(::onc::kAugmentationActiveSetting, value->DeepCopy());
351 353
352 if (onc_source == ::onc::ONC_SOURCE_NONE) 354 if (onc_source == ::onc::ONC_SOURCE_NONE)
353 return; 355 return;
354 356
355 if (recommended) { 357 if (recommended) {
356 // If an ONC property is 'Recommended' it can be edited by the user. 358 // If an ONC property is 'Recommended' it can be edited by the user.
357 std::string editable = GetOncEditableString(onc_source); 359 std::string editable = GetOncEditableString(onc_source);
358 dict->Set(editable, new base::FundamentalValue(true)); 360 dict->Set(editable, new base::FundamentalValue(true));
359 } 361 }
360 if (default_value) { 362 if (default_value) {
361 std::string policy_source = GetOncPolicyString(onc_source); 363 std::string policy_source = GetOncPolicyString(onc_source);
362 dict->Set(policy_source, default_value->DeepCopy()); 364 dict->Set(policy_source, default_value->DeepCopy());
363 if (recommended && !value->Equals(default_value)) { 365 if (recommended && !value->Equals(default_value)) {
364 std::string setting_source = GetOncSettingString(onc_source); 366 std::string setting_source = GetOncSettingString(onc_source);
365 dict->Set(setting_source, value->DeepCopy()); 367 dict->Set(setting_source, value->DeepCopy());
366 dict->SetString(::onc::kAugmentationEffectiveSetting, setting_source); 368 dict->SetString(::onc::kAugmentationEffectiveSetting, setting_source);
367 } else { 369 } else {
368 dict->SetString(::onc::kAugmentationEffectiveSetting, policy_source); 370 dict->SetString(::onc::kAugmentationEffectiveSetting, policy_source);
369 } 371 }
370 } 372 }
371 } 373 }
372 374
375 void SetManagedValueDictionary(const std::string& guid,
376 const char* settings_dict_key,
377 const base::Value* value,
378 const std::string& onc_key,
379 base::DictionaryValue* settings_dict) {
380
pneubeck (no reviews) 2014/08/19 19:26:37 nit: drop empty line
stevenjb 2014/08/19 23:20:18 Done.
381 ::onc::ONCSource onc_source = ::onc::ONC_SOURCE_NONE;
382 const base::DictionaryValue* onc =
383 onc::FindPolicyForActiveUser(guid, &onc_source);
384 DCHECK_EQ(onc == NULL, onc_source == ::onc::ONC_SOURCE_NONE);
385 const base::Value* default_value = NULL;
386 if (onc)
387 onc->Get(onc_key, &default_value);
388 SetManagedValueDictionaryEx(settings_dict_key,
389 value,
390 onc_source,
391 onc::IsRecommendedValue(onc, onc_key),
392 default_value,
393 settings_dict);
394 }
395
396 // Creates a GetManagedProperties style dictionary with an Active value and
397 // a Translated value, and adds it to |settings|.
398 // Note(stevenjb): This is bridge code until we use GetManagedProperties to
399 // retrieve Shill properties and include Translated values.
400 void SetTranslatedDictionary(const char* settings_dict_key,
401 const std::string& value,
402 const std::string& translated_value,
403 base::DictionaryValue* settings_dict) {
404 base::DictionaryValue* dict = new base::DictionaryValue();
405 settings_dict->Set(settings_dict_key, dict);
406 dict->SetString(::onc::kAugmentationActiveSetting, value);
407 dict->SetString(kTranslatedKey, translated_value);
408 }
409
373 std::string CopyStringFromDictionary(const base::DictionaryValue& source, 410 std::string CopyStringFromDictionary(const base::DictionaryValue& source,
374 const std::string& src_key, 411 const std::string& src_key,
375 const std::string& dest_key, 412 const std::string& dest_key,
376 base::DictionaryValue* dest) { 413 base::DictionaryValue* dest) {
377 std::string string_value; 414 std::string string_value;
378 if (source.GetStringWithoutPathExpansion(src_key, &string_value)) 415 if (source.GetStringWithoutPathExpansion(src_key, &string_value))
379 dest->SetStringWithoutPathExpansion(dest_key, string_value); 416 dest->SetStringWithoutPathExpansion(dest_key, string_value);
380 return string_value; 417 return string_value;
381 } 418 }
382 419
383 // Fills |dictionary| with the configuration details of |vpn|. |onc| is required 420 // Fills |dictionary| with the configuration details of |vpn|. |onc| is required
384 // for augmenting the policy-managed information. 421 // for augmenting the policy-managed information.
385 void PopulateVPNDetails(const NetworkState* vpn, 422 void PopulateVPNDetails(const NetworkState* vpn,
386 const base::DictionaryValue& shill_properties, 423 const base::DictionaryValue& shill_properties,
387 base::DictionaryValue* dictionary) { 424 base::DictionaryValue* dictionary) {
388 // Name and Remembered are set in PopulateConnectionDetails(). 425 // Name and Remembered are set in PopulateConnectionDetails().
389 // Provider properties are stored in the "Provider" dictionary. 426 // Provider properties are stored in the "Provider" dictionary.
390 const base::DictionaryValue* provider_properties = NULL; 427 const base::DictionaryValue* shill_provider_properties = NULL;
391 if (!shill_properties.GetDictionaryWithoutPathExpansion( 428 if (!shill_properties.GetDictionaryWithoutPathExpansion(
392 shill::kProviderProperty, &provider_properties)) { 429 shill::kProviderProperty, &shill_provider_properties)) {
393 LOG(ERROR) << "No provider properties for VPN: " << vpn->path(); 430 LOG(ERROR) << "No provider properties for VPN: " << vpn->path();
394 return; 431 return;
395 } 432 }
396 std::string provider_type; 433 base::DictionaryValue* vpn_dictionary = new base::DictionaryValue;
397 provider_properties->GetStringWithoutPathExpansion( 434 dictionary->Set(::onc::network_config::kVPN, vpn_dictionary);
398 shill::kTypeProperty, &provider_type); 435
399 dictionary->SetString(kTagProviderType, 436 std::string shill_provider_type;
400 internet_options_strings::ProviderTypeString( 437 if (!shill_provider_properties->GetStringWithoutPathExpansion(
401 provider_type, 438 shill::kTypeProperty, &shill_provider_type)) {
402 *provider_properties)); 439 LOG(ERROR) << "Shill VPN has no Provider.Type: " << vpn->path();
440 return;
441 }
442 std::string onc_provider_type;
443 onc::TranslateStringToONC(
444 onc::kVPNTypeTable, shill_provider_type, &onc_provider_type);
445 SetTranslatedDictionary(
446 ::onc::vpn::kType,
447 onc_provider_type,
448 internet_options_strings::ProviderTypeString(shill_provider_type,
449 *shill_provider_properties),
450 vpn_dictionary);
451
452 base::DictionaryValue* provider_dictionary = new base::DictionaryValue;
pneubeck (no reviews) 2014/08/19 19:26:37 I have the impression that 'provider' is not the r
stevenjb 2014/08/19 23:20:17 Renamed provider_type_dictionary since that is wha
453 vpn_dictionary->Set(onc_provider_type, provider_dictionary);
pneubeck (no reviews) 2014/08/19 19:26:38 This will not work: The possible subdictionaries a
stevenjb 2014/08/19 23:20:18 Gah. OK, so... what? Let me look at the doc again.
403 454
404 std::string username; 455 std::string username;
405 if (provider_type == shill::kProviderOpenVpn) { 456 if (shill_provider_type == shill::kProviderOpenVpn) {
406 provider_properties->GetStringWithoutPathExpansion( 457 shill_provider_properties->GetStringWithoutPathExpansion(
407 shill::kOpenVPNUserProperty, &username); 458 shill::kOpenVPNUserProperty, &username);
408 } else { 459 } else {
409 provider_properties->GetStringWithoutPathExpansion( 460 shill_provider_properties->GetStringWithoutPathExpansion(
410 shill::kL2tpIpsecUserProperty, &username); 461 shill::kL2tpIpsecUserProperty, &username);
411 } 462 }
412 dictionary->SetString(kTagUsername, username); 463 provider_dictionary->SetString(::onc::vpn::kUsername, username);
pneubeck (no reviews) 2014/08/19 19:26:37 The username is never set in IPsec but only in L2T
stevenjb 2014/08/19 23:20:18 OK, I think I maybe have this right now...
413 464
414 ::onc::ONCSource onc_source = ::onc::ONC_SOURCE_NONE;
415 const base::DictionaryValue* onc =
416 onc::FindPolicyForActiveUser(vpn->guid(), &onc_source);
417
418 NetworkPropertyUIData hostname_ui_data;
419 hostname_ui_data.ParseOncProperty(
420 onc_source,
421 onc,
422 ::onc::network_config::VpnProperty(::onc::vpn::kHost));
423 std::string provider_host; 465 std::string provider_host;
424 provider_properties->GetStringWithoutPathExpansion( 466 shill_provider_properties->GetStringWithoutPathExpansion(
425 shill::kHostProperty, &provider_host); 467 shill::kHostProperty, &provider_host);
426 SetValueDictionary(kTagServerHostname, 468 SetManagedValueDictionary(
427 new base::StringValue(provider_host), 469 vpn->guid(),
428 hostname_ui_data, 470 ::onc::vpn::kHost,
pneubeck (no reviews) 2014/08/19 19:26:38 optional nit: having the same key with different p
stevenjb 2014/08/19 23:20:17 I really don't like using Value::Set with '.' sepa
429 dictionary); 471 new base::StringValue(provider_host),
pneubeck (no reviews) 2014/08/19 19:26:38 memory leak, see other comment.
stevenjb 2014/08/19 23:20:17 Bah, this is what happens when... nevermind. Fixed
472 ::onc::network_config::VpnProperty(::onc::vpn::kHost),
473 vpn_dictionary);
430 } 474 }
431 475
432 // Given a list of supported carrier's by the device, return the index of 476 // Given a list of supported carrier's by the device, return the index of
433 // the carrier the device is currently using. 477 // the carrier the device is currently using.
434 int FindCurrentCarrierIndex(const base::ListValue* carriers, 478 int FindCurrentCarrierIndex(const base::ListValue* carriers,
435 const DeviceState* device) { 479 const DeviceState* device) {
436 DCHECK(carriers); 480 DCHECK(carriers);
437 DCHECK(device); 481 DCHECK(device);
438 bool gsm = (device->technology_family() == shill::kTechnologyFamilyGsm); 482 bool gsm = (device->technology_family() == shill::kTechnologyFamilyGsm);
439 int index = 0; 483 int index = 0;
(...skipping 885 matching lines...) Expand 10 before | Expand all | Expand 10 after
1325 static_ip_dict.release(), 1369 static_ip_dict.release(),
1326 property_ui_data, 1370 property_ui_data,
1327 dictionary.get()); 1371 dictionary.get());
1328 1372
1329 dictionary->SetString(kTagNameServerType, name_server_type); 1373 dictionary->SetString(kTagNameServerType, name_server_type);
1330 dictionary->SetString(kTagNameServersGoogle, kGoogleNameServers); 1374 dictionary->SetString(kTagNameServersGoogle, kGoogleNameServers);
1331 1375
1332 int priority = 0; 1376 int priority = 0;
1333 shill_properties.GetIntegerWithoutPathExpansion( 1377 shill_properties.GetIntegerWithoutPathExpansion(
1334 shill::kPriorityProperty, &priority); 1378 shill::kPriorityProperty, &priority);
1335 bool preferred = priority > 0; 1379 SetManagedValueDictionary(network->guid(),
1336 SetValueDictionary(kTagPreferred, 1380 ::onc::network_config::kPriority,
1337 new base::FundamentalValue(preferred), 1381 new base::FundamentalValue(priority),
pneubeck (no reviews) 2014/08/19 19:26:38 this will leak the FundamentalValue. Please, pleas
stevenjb 2014/08/19 23:20:17 Fixed.
1338 property_ui_data, 1382 ::onc::network_config::kPriority,
1339 dictionary.get()); 1383 dictionary.get());
1340 1384
1341 std::string onc_path_to_auto_connect; 1385 std::string onc_path_to_auto_connect;
1342 if (network->Matches(NetworkTypePattern::WiFi())) { 1386 if (network->Matches(NetworkTypePattern::WiFi())) {
1343 content::RecordAction( 1387 content::RecordAction(
1344 base::UserMetricsAction("Options_NetworkShowDetailsWifi")); 1388 base::UserMetricsAction("Options_NetworkShowDetailsWifi"));
1345 if (network->IsConnectedState()) { 1389 if (network->IsConnectedState()) {
1346 content::RecordAction( 1390 content::RecordAction(
1347 base::UserMetricsAction("Options_NetworkShowDetailsWifiConnected")); 1391 base::UserMetricsAction("Options_NetworkShowDetailsWifiConnected"));
1348 } 1392 }
1349 onc_path_to_auto_connect = 1393 onc_path_to_auto_connect =
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1393 network->IsPrivate())) { 1437 network->IsPrivate())) {
1394 auto_connect_recommended = false; 1438 auto_connect_recommended = false;
1395 auto_connect_onc_source = network->IsPrivate() 1439 auto_connect_onc_source = network->IsPrivate()
1396 ? ::onc::ONC_SOURCE_USER_POLICY 1440 ? ::onc::ONC_SOURCE_USER_POLICY
1397 : ::onc::ONC_SOURCE_DEVICE_POLICY; 1441 : ::onc::ONC_SOURCE_DEVICE_POLICY;
1398 if (auto_connect) { 1442 if (auto_connect) {
1399 LOG(WARNING) << "Policy prevents autoconnect, but value is True."; 1443 LOG(WARNING) << "Policy prevents autoconnect, but value is True.";
1400 auto_connect_value.reset(new base::FundamentalValue(false)); 1444 auto_connect_value.reset(new base::FundamentalValue(false));
1401 } 1445 }
1402 } 1446 }
1403 SetManagedValueDictionary(shill::kAutoConnectProperty, 1447 SetManagedValueDictionaryEx(shill::kAutoConnectProperty,
1404 auto_connect_value.get(), 1448 auto_connect_value.get(),
1405 auto_connect_onc_source, 1449 auto_connect_onc_source,
1406 auto_connect_recommended, 1450 auto_connect_recommended,
1407 auto_connect_default_value, 1451 auto_connect_default_value,
1408 dictionary.get()); 1452 dictionary.get());
1409 } 1453 }
1410 1454
1411 // Show details dialog 1455 // Show details dialog
1412 web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, *dictionary); 1456 web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, *dictionary);
1413 } 1457 }
1414 1458
1415 gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const { 1459 gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const {
1416 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); 1460 return web_ui()->GetWebContents()->GetTopLevelNativeWindow();
1417 } 1461 }
1418 1462
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1600 dictionary->SetBoolean( 1644 dictionary->SetBoolean(
1601 kTagWimaxAvailable, 1645 kTagWimaxAvailable,
1602 handler->IsTechnologyAvailable(NetworkTypePattern::Wimax())); 1646 handler->IsTechnologyAvailable(NetworkTypePattern::Wimax()));
1603 dictionary->SetBoolean( 1647 dictionary->SetBoolean(
1604 kTagWimaxEnabled, 1648 kTagWimaxEnabled,
1605 handler->IsTechnologyEnabled(NetworkTypePattern::Wimax())); 1649 handler->IsTechnologyEnabled(NetworkTypePattern::Wimax()));
1606 } 1650 }
1607 1651
1608 } // namespace options 1652 } // namespace options
1609 } // namespace chromeos 1653 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698