OLD | NEW |
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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 #include "ui/gfx/image/image_skia.h" | 59 #include "ui/gfx/image/image_skia.h" |
60 | 60 |
61 namespace chromeos { | 61 namespace chromeos { |
62 namespace options { | 62 namespace options { |
63 | 63 |
64 namespace { | 64 namespace { |
65 | 65 |
66 // Keys for the network description dictionary passed to the web ui. Make sure | 66 // Keys for the network description dictionary passed to the web ui. Make sure |
67 // to keep the strings in sync with what the JavaScript side uses. | 67 // to keep the strings in sync with what the JavaScript side uses. |
68 const char kNetworkInfoKeyIconURL[] = "iconURL"; | 68 const char kNetworkInfoKeyIconURL[] = "iconURL"; |
69 const char kNetworkInfoKeyServicePath[] = "servicePath"; | |
70 const char kNetworkInfoKeyPolicyManaged[] = "policyManaged"; | 69 const char kNetworkInfoKeyPolicyManaged[] = "policyManaged"; |
71 | 70 |
72 // These are types of name server selections from the web ui. | 71 // These are types of name server selections from the web ui. |
73 const char kNameServerTypeAutomatic[] = "automatic"; | 72 const char kNameServerTypeAutomatic[] = "automatic"; |
74 const char kNameServerTypeGoogle[] = "google"; | 73 const char kNameServerTypeGoogle[] = "google"; |
75 | 74 |
76 // Google public name servers (DNS). | 75 // Google public name servers (DNS). |
77 const char kGoogleNameServers[] = "8.8.4.4,8.8.8.8"; | 76 const char kGoogleNameServers[] = "8.8.4.4,8.8.8.8"; |
78 | 77 |
79 // Functions we call in JavaScript. | 78 // Functions we call in JavaScript. |
80 const char kRefreshNetworkDataFunction[] = | 79 const char kRefreshNetworkDataFunction[] = |
81 "options.network.NetworkList.refreshNetworkData"; | 80 "options.network.NetworkList.refreshNetworkData"; |
82 const char kSetDefaultNetworkIconsFunction[] = | 81 const char kSetDefaultNetworkIconsFunction[] = |
83 "options.network.NetworkList.setDefaultNetworkIcons"; | 82 "options.network.NetworkList.setDefaultNetworkIcons"; |
| 83 const char kSendNetworkDetailsFunction[] = |
| 84 "options.internet.DetailsInternetPage.sendNetworkDetails"; |
84 const char kShowDetailedInfoFunction[] = | 85 const char kShowDetailedInfoFunction[] = |
85 "options.internet.DetailsInternetPage.showDetailedInfo"; | 86 "options.internet.DetailsInternetPage.showDetailedInfo"; |
86 const char kUpdateConnectionDataFunction[] = | 87 const char kUpdateConnectionDataFunction[] = |
87 "options.internet.DetailsInternetPage.updateConnectionData"; | 88 "options.internet.DetailsInternetPage.updateConnectionData"; |
88 const char kUpdateCarrierFunction[] = | 89 const char kUpdateCarrierFunction[] = |
89 "options.internet.DetailsInternetPage.updateCarrier"; | 90 "options.internet.DetailsInternetPage.updateCarrier"; |
90 | 91 |
91 // These are used to register message handlers with JavaScript. | 92 // These are used to register message handlers with JavaScript. |
92 const char kChangePinMessage[] = "changePin"; | |
93 const char kDisableCellularMessage[] = "disableCellular"; | |
94 const char kDisableWifiMessage[] = "disableWifi"; | |
95 const char kDisableWimaxMessage[] = "disableWimax"; | |
96 const char kEnableCellularMessage[] = "enableCellular"; | |
97 const char kEnableWifiMessage[] = "enableWifi"; | |
98 const char kEnableWimaxMessage[] = "enableWimax"; | |
99 const char kNetworkCommandMessage[] = "networkCommand"; | 93 const char kNetworkCommandMessage[] = "networkCommand"; |
100 const char kRefreshNetworksMessage[] = "refreshNetworks"; | |
101 const char kSetApnMessage[] = "setApn"; | 94 const char kSetApnMessage[] = "setApn"; |
102 const char kSetAutoConnectMessage[] = "setAutoConnect"; | 95 const char kSetAutoConnectMessage[] = "setAutoConnect"; |
103 const char kSetCarrierMessage[] = "setCarrier"; | 96 const char kSetCarrierMessage[] = "setCarrier"; |
104 const char kSetIPConfigMessage[] = "setIPConfig"; | 97 const char kSetIPConfigMessage[] = "setIPConfig"; |
105 const char kSetPreferNetworkMessage[] = "setPreferNetwork"; | 98 const char kSetPreferNetworkMessage[] = "setPreferNetwork"; |
106 const char kSetServerHostname[] = "setServerHostname"; | 99 const char kSetServerHostname[] = "setServerHostname"; |
107 const char kSetSimCardLockMessage[] = "setSimCardLock"; | |
108 const char kShowMorePlanInfoMessage[] = "showMorePlanInfo"; | 100 const char kShowMorePlanInfoMessage[] = "showMorePlanInfo"; |
| 101 const char kSimOperationMessage[] = "simOperation"; |
| 102 |
| 103 // TODO(stevenjb): Replace these with the matching networkingPrivate methods. |
| 104 // crbug.com/279351. |
| 105 const char kDisableNetworkTypeMessage[] = "disableNetworkType"; |
| 106 const char kEnableNetworkTypeMessage[] = "enableNetworkType"; |
| 107 const char kGetManagedPropertiesMessage[] = "getManagedProperties"; |
| 108 const char kRequestNetworkScanMessage[] = "requestNetworkScan"; |
| 109 const char kStartConnectMessage[] = "startConnect"; |
| 110 const char kStartDisconnectMessage[] = "startDisconnect"; |
109 | 111 |
110 // These are strings used to communicate with JavaScript. | 112 // These are strings used to communicate with JavaScript. |
111 const char kTagActivate[] = "activate"; | 113 const char kTagActivate[] = "activate"; |
112 const char kTagAddConnection[] = "add"; | 114 const char kTagAddConnection[] = "add"; |
113 const char kTagCarrierSelectFlag[] = "showCarrierSelect"; | 115 const char kTagCarrierSelectFlag[] = "showCarrierSelect"; |
114 const char kTagCellularAvailable[] = "cellularAvailable"; | 116 const char kTagCellularAvailable[] = "cellularAvailable"; |
115 const char kTagCellularEnabled[] = "cellularEnabled"; | 117 const char kTagCellularEnabled[] = "cellularEnabled"; |
| 118 const char kTagCellularSimAbsent[] = "cellularSimAbsent"; |
| 119 const char kTagCellularSimLockType[] = "cellularSimLockType"; |
116 const char kTagCellularSupportsScan[] = "cellularSupportsScan"; | 120 const char kTagCellularSupportsScan[] = "cellularSupportsScan"; |
117 const char kTagConfigure[] = "configure"; | 121 const char kTagConfigure[] = "configure"; |
118 const char kTagConnect[] = "connect"; | |
119 const char kTagDeviceConnected[] = "deviceConnected"; | |
120 const char kTagDisconnect[] = "disconnect"; | |
121 const char kTagErrorMessage[] = "errorMessage"; | |
122 const char kTagForget[] = "forget"; | 122 const char kTagForget[] = "forget"; |
123 const char kTagOptions[] = "options"; | |
124 const char kTagRememberedList[] = "rememberedList"; | 123 const char kTagRememberedList[] = "rememberedList"; |
| 124 const char kTagShowDetails[] = "showDetails"; |
125 const char kTagShowViewAccountButton[] = "showViewAccountButton"; | 125 const char kTagShowViewAccountButton[] = "showViewAccountButton"; |
| 126 const char kTagSimOpChangePin[] = "changePin"; |
| 127 const char kTagSimOpConfigure[] = "configure"; |
| 128 const char kTagSimOpSetLocked[] = "setLocked"; |
| 129 const char kTagSimOpSetUnlocked[] = "setUnlocked"; |
| 130 const char kTagSimOpUnlock[] = "unlock"; |
126 const char kTagTrue[] = "true"; | 131 const char kTagTrue[] = "true"; |
127 const char kTagVpnList[] = "vpnList"; | 132 const char kTagVpnList[] = "vpnList"; |
128 const char kTagWifiAvailable[] = "wifiAvailable"; | 133 const char kTagWifiAvailable[] = "wifiAvailable"; |
129 const char kTagWifiEnabled[] = "wifiEnabled"; | 134 const char kTagWifiEnabled[] = "wifiEnabled"; |
130 const char kTagWimaxAvailable[] = "wimaxAvailable"; | 135 const char kTagWimaxAvailable[] = "wimaxAvailable"; |
131 const char kTagWimaxEnabled[] = "wimaxEnabled"; | 136 const char kTagWimaxEnabled[] = "wimaxEnabled"; |
132 const char kTagWiredList[] = "wiredList"; | 137 const char kTagWiredList[] = "wiredList"; |
133 const char kTagWirelessList[] = "wirelessList"; | 138 const char kTagWirelessList[] = "wirelessList"; |
134 | 139 |
| 140 // Pseudo-ONC chrome specific properties appended to the ONC dictionary. |
| 141 const char kTagErrorMessage[] = "errorMessage"; |
| 142 const char kNetworkInfoKeyServicePath[] = "servicePath"; |
| 143 const char kNetworkInfoKeyGUID[] = "GUID"; |
| 144 |
135 const int kPreferredPriority = 1; | 145 const int kPreferredPriority = 1; |
136 | 146 |
137 void ShillError(const std::string& function, | 147 void ShillError(const std::string& function, |
138 const std::string& error_name, | 148 const std::string& error_name, |
139 scoped_ptr<base::DictionaryValue> error_data) { | 149 scoped_ptr<base::DictionaryValue> error_data) { |
140 // UpdateConnectionData may send requests for stale services; ignore | 150 // UpdateConnectionData may send requests for stale services; ignore |
141 // these errors. | 151 // these errors. |
142 if (function == "UpdateConnectionData" && | 152 if (function == "UpdateConnectionData" && |
143 error_name == network_handler::kDBusFailedError) | 153 error_name == network_handler::kDBusFailedError) |
144 return; | 154 return; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 } | 236 } |
227 | 237 |
228 return true; | 238 return true; |
229 } | 239 } |
230 | 240 |
231 scoped_ptr<base::DictionaryValue> PopulateConnectionDetails( | 241 scoped_ptr<base::DictionaryValue> PopulateConnectionDetails( |
232 const NetworkState* network, | 242 const NetworkState* network, |
233 const base::DictionaryValue& onc_properties) { | 243 const base::DictionaryValue& onc_properties) { |
234 scoped_ptr<base::DictionaryValue> dictionary(onc_properties.DeepCopy()); | 244 scoped_ptr<base::DictionaryValue> dictionary(onc_properties.DeepCopy()); |
235 | 245 |
| 246 // Append Service Path for now. |
236 dictionary->SetString(kNetworkInfoKeyServicePath, network->path()); | 247 dictionary->SetString(kNetworkInfoKeyServicePath, network->path()); |
| 248 // Append a Chrome specific translated error message. |
237 dictionary->SetString( | 249 dictionary->SetString( |
238 kTagErrorMessage, | 250 kTagErrorMessage, |
239 ash::network_connect::ErrorString(network->error(), network->path())); | 251 ash::network_connect::ErrorString(network->error(), network->path())); |
240 | 252 |
241 const std::string& type = network->type(); | |
242 | |
243 const NetworkState* connected_network = | |
244 NetworkHandler::Get()->network_state_handler()->ConnectedNetworkByType( | |
245 NetworkTypePattern::Primitive(type)); | |
246 dictionary->SetBoolean(kTagDeviceConnected, connected_network != NULL); | |
247 | |
248 if (type == shill::kTypeCellular) { | |
249 dictionary->SetBoolean( | |
250 kTagCarrierSelectFlag, | |
251 CommandLine::ForCurrentProcess() | |
252 ->HasSwitch(chromeos::switches::kEnableCarrierSwitching)); | |
253 dictionary->SetBoolean(kTagShowViewAccountButton, | |
254 ShowViewAccountButton(network)); | |
255 } | |
256 return dictionary.Pass(); | 253 return dictionary.Pass(); |
257 } | 254 } |
258 | 255 |
259 // Helper methods for SetIPConfigProperties | 256 // Helper methods for SetIPConfigProperties |
260 bool AppendPropertyKeyIfPresent(const std::string& key, | 257 bool AppendPropertyKeyIfPresent(const std::string& key, |
261 const base::DictionaryValue& old_properties, | 258 const base::DictionaryValue& old_properties, |
262 std::vector<std::string>* property_keys) { | 259 std::vector<std::string>* property_keys) { |
263 if (old_properties.HasKey(key)) { | 260 if (old_properties.HasKey(key)) { |
264 property_keys->push_back(key); | 261 property_keys->push_back(key); |
265 return true; | 262 return true; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 dictionary); | 344 dictionary); |
348 NetworkHandler::Get()->network_state_handler()->RequestScan(); | 345 NetworkHandler::Get()->network_state_handler()->RequestScan(); |
349 RefreshNetworkData(); | 346 RefreshNetworkData(); |
350 } | 347 } |
351 | 348 |
352 void InternetOptionsHandler::RegisterMessages() { | 349 void InternetOptionsHandler::RegisterMessages() { |
353 // Setup handlers specific to this panel. | 350 // Setup handlers specific to this panel. |
354 web_ui()->RegisterMessageCallback(kNetworkCommandMessage, | 351 web_ui()->RegisterMessageCallback(kNetworkCommandMessage, |
355 base::Bind(&InternetOptionsHandler::NetworkCommandCallback, | 352 base::Bind(&InternetOptionsHandler::NetworkCommandCallback, |
356 base::Unretained(this))); | 353 base::Unretained(this))); |
357 web_ui()->RegisterMessageCallback(kRefreshNetworksMessage, | |
358 base::Bind(&InternetOptionsHandler::RefreshNetworksCallback, | |
359 base::Unretained(this))); | |
360 web_ui()->RegisterMessageCallback(kSetPreferNetworkMessage, | 354 web_ui()->RegisterMessageCallback(kSetPreferNetworkMessage, |
361 base::Bind(&InternetOptionsHandler::SetPreferNetworkCallback, | 355 base::Bind(&InternetOptionsHandler::SetPreferNetworkCallback, |
362 base::Unretained(this))); | 356 base::Unretained(this))); |
363 web_ui()->RegisterMessageCallback(kSetAutoConnectMessage, | 357 web_ui()->RegisterMessageCallback(kSetAutoConnectMessage, |
364 base::Bind(&InternetOptionsHandler::SetAutoConnectCallback, | 358 base::Bind(&InternetOptionsHandler::SetAutoConnectCallback, |
365 base::Unretained(this))); | 359 base::Unretained(this))); |
366 web_ui()->RegisterMessageCallback(kSetIPConfigMessage, | 360 web_ui()->RegisterMessageCallback(kSetIPConfigMessage, |
367 base::Bind(&InternetOptionsHandler::SetIPConfigCallback, | 361 base::Bind(&InternetOptionsHandler::SetIPConfigCallback, |
368 base::Unretained(this))); | 362 base::Unretained(this))); |
369 web_ui()->RegisterMessageCallback(kEnableWifiMessage, | |
370 base::Bind(&InternetOptionsHandler::EnableWifiCallback, | |
371 base::Unretained(this))); | |
372 web_ui()->RegisterMessageCallback(kDisableWifiMessage, | |
373 base::Bind(&InternetOptionsHandler::DisableWifiCallback, | |
374 base::Unretained(this))); | |
375 web_ui()->RegisterMessageCallback(kEnableCellularMessage, | |
376 base::Bind(&InternetOptionsHandler::EnableCellularCallback, | |
377 base::Unretained(this))); | |
378 web_ui()->RegisterMessageCallback(kDisableCellularMessage, | |
379 base::Bind(&InternetOptionsHandler::DisableCellularCallback, | |
380 base::Unretained(this))); | |
381 web_ui()->RegisterMessageCallback(kEnableWimaxMessage, | |
382 base::Bind(&InternetOptionsHandler::EnableWimaxCallback, | |
383 base::Unretained(this))); | |
384 web_ui()->RegisterMessageCallback(kDisableWimaxMessage, | |
385 base::Bind(&InternetOptionsHandler::DisableWimaxCallback, | |
386 base::Unretained(this))); | |
387 web_ui()->RegisterMessageCallback(kShowMorePlanInfoMessage, | 363 web_ui()->RegisterMessageCallback(kShowMorePlanInfoMessage, |
388 base::Bind(&InternetOptionsHandler::ShowMorePlanInfoCallback, | 364 base::Bind(&InternetOptionsHandler::ShowMorePlanInfoCallback, |
389 base::Unretained(this))); | 365 base::Unretained(this))); |
390 web_ui()->RegisterMessageCallback(kSetApnMessage, | 366 web_ui()->RegisterMessageCallback(kSetApnMessage, |
391 base::Bind(&InternetOptionsHandler::SetApnCallback, | 367 base::Bind(&InternetOptionsHandler::SetApnCallback, |
392 base::Unretained(this))); | 368 base::Unretained(this))); |
393 web_ui()->RegisterMessageCallback(kSetCarrierMessage, | 369 web_ui()->RegisterMessageCallback(kSetCarrierMessage, |
394 base::Bind(&InternetOptionsHandler::SetCarrierCallback, | 370 base::Bind(&InternetOptionsHandler::SetCarrierCallback, |
395 base::Unretained(this))); | 371 base::Unretained(this))); |
396 web_ui()->RegisterMessageCallback(kSetSimCardLockMessage, | 372 web_ui()->RegisterMessageCallback(kSimOperationMessage, |
397 base::Bind(&InternetOptionsHandler::SetSimCardLockCallback, | 373 base::Bind(&InternetOptionsHandler::SimOperationCallback, |
398 base::Unretained(this))); | |
399 web_ui()->RegisterMessageCallback(kChangePinMessage, | |
400 base::Bind(&InternetOptionsHandler::ChangePinCallback, | |
401 base::Unretained(this))); | 374 base::Unretained(this))); |
402 web_ui()->RegisterMessageCallback(kSetServerHostname, | 375 web_ui()->RegisterMessageCallback(kSetServerHostname, |
403 base::Bind(&InternetOptionsHandler::SetServerHostnameCallback, | 376 base::Bind(&InternetOptionsHandler::SetServerHostnameCallback, |
404 base::Unretained(this))); | 377 base::Unretained(this))); |
405 } | |
406 | 378 |
407 void InternetOptionsHandler::EnableWifiCallback(const base::ListValue* args) { | 379 // networkingPrivate methods |
408 NetworkHandler::Get()->network_state_handler()->SetTechnologyEnabled( | 380 web_ui()->RegisterMessageCallback(kDisableNetworkTypeMessage, |
409 NetworkTypePattern::WiFi(), true, | 381 base::Bind(&InternetOptionsHandler::DisableNetworkTypeCallback, |
410 base::Bind(&ShillError, "EnableWifiCallback")); | 382 base::Unretained(this))); |
411 } | 383 web_ui()->RegisterMessageCallback(kEnableNetworkTypeMessage, |
412 | 384 base::Bind(&InternetOptionsHandler::EnableNetworkTypeCallback, |
413 void InternetOptionsHandler::DisableWifiCallback(const base::ListValue* args) { | 385 base::Unretained(this))); |
414 NetworkHandler::Get()->network_state_handler()->SetTechnologyEnabled( | 386 web_ui()->RegisterMessageCallback(kGetManagedPropertiesMessage, |
415 NetworkTypePattern::WiFi(), false, | 387 base::Bind(&InternetOptionsHandler::GetManagedPropertiesCallback, |
416 base::Bind(&ShillError, "DisableWifiCallback")); | 388 base::Unretained(this))); |
417 } | 389 web_ui()->RegisterMessageCallback(kRequestNetworkScanMessage, |
418 | 390 base::Bind(&InternetOptionsHandler::RequestNetworkScanCallback, |
419 void InternetOptionsHandler::EnableCellularCallback( | 391 base::Unretained(this))); |
420 const base::ListValue* args) { | 392 web_ui()->RegisterMessageCallback(kStartConnectMessage, |
421 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); | 393 base::Bind(&InternetOptionsHandler::StartConnectCallback, |
422 const DeviceState* device = | 394 base::Unretained(this))); |
423 handler->GetDeviceStateByType(NetworkTypePattern::Cellular()); | 395 web_ui()->RegisterMessageCallback(kStartDisconnectMessage, |
424 if (!device) { | 396 base::Bind(&InternetOptionsHandler::StartDisconnectCallback, |
425 LOG(ERROR) << "Mobile device not found."; | 397 base::Unretained(this))); |
426 return; | |
427 } | |
428 if (!device->sim_lock_type().empty()) { | |
429 SimDialogDelegate::ShowDialog(GetNativeWindow(), | |
430 SimDialogDelegate::SIM_DIALOG_UNLOCK); | |
431 return; | |
432 } | |
433 if (!handler->IsTechnologyEnabled(NetworkTypePattern::Cellular())) { | |
434 handler->SetTechnologyEnabled( | |
435 NetworkTypePattern::Cellular(), true, | |
436 base::Bind(&ShillError, "EnableCellularCallback")); | |
437 return; | |
438 } | |
439 if (device->IsSimAbsent()) { | |
440 mobile_config_ui::DisplayConfigDialog(); | |
441 return; | |
442 } | |
443 LOG(ERROR) << "EnableCellularCallback called for enabled mobile device"; | |
444 } | |
445 | |
446 void InternetOptionsHandler::DisableCellularCallback( | |
447 const base::ListValue* args) { | |
448 NetworkHandler::Get()->network_state_handler()->SetTechnologyEnabled( | |
449 NetworkTypePattern::Mobile(), false, | |
450 base::Bind(&ShillError, "DisableCellularCallback")); | |
451 } | |
452 | |
453 void InternetOptionsHandler::EnableWimaxCallback(const base::ListValue* args) { | |
454 NetworkHandler::Get()->network_state_handler()->SetTechnologyEnabled( | |
455 NetworkTypePattern::Wimax(), true, | |
456 base::Bind(&ShillError, "EnableWimaxCallback")); | |
457 } | |
458 | |
459 void InternetOptionsHandler::DisableWimaxCallback(const base::ListValue* args) { | |
460 NetworkHandler::Get()->network_state_handler()->SetTechnologyEnabled( | |
461 NetworkTypePattern::Wimax(), false, | |
462 base::Bind(&ShillError, "DisableWimaxCallback")); | |
463 } | 398 } |
464 | 399 |
465 void InternetOptionsHandler::ShowMorePlanInfoCallback( | 400 void InternetOptionsHandler::ShowMorePlanInfoCallback( |
466 const base::ListValue* args) { | 401 const base::ListValue* args) { |
467 if (!web_ui()) | 402 if (!web_ui()) |
468 return; | 403 return; |
469 std::string service_path; | 404 std::string service_path; |
470 if (args->GetSize() != 1 || !args->GetString(0, &service_path)) { | 405 if (args->GetSize() != 1 || !args->GetString(0, &service_path)) { |
471 NOTREACHED(); | 406 NOTREACHED(); |
472 return; | 407 return; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
533 base::Bind(&ShillError, "SetApnProperties")); | 468 base::Bind(&ShillError, "SetApnProperties")); |
534 } | 469 } |
535 | 470 |
536 void InternetOptionsHandler::CarrierStatusCallback() { | 471 void InternetOptionsHandler::CarrierStatusCallback() { |
537 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); | 472 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); |
538 const DeviceState* device = | 473 const DeviceState* device = |
539 handler->GetDeviceStateByType(NetworkTypePattern::Cellular()); | 474 handler->GetDeviceStateByType(NetworkTypePattern::Cellular()); |
540 if (device && (device->carrier() == shill::kCarrierSprint)) { | 475 if (device && (device->carrier() == shill::kCarrierSprint)) { |
541 const NetworkState* network = | 476 const NetworkState* network = |
542 handler->FirstNetworkByType(NetworkTypePattern::Cellular()); | 477 handler->FirstNetworkByType(NetworkTypePattern::Cellular()); |
543 if (network) { | 478 if (network && network->path() == details_path_) { |
544 ash::network_connect::ActivateCellular(network->path()); | 479 ash::network_connect::ActivateCellular(network->path()); |
545 UpdateConnectionData(network->path()); | 480 UpdateConnectionData(network->path()); |
546 } | 481 } |
547 } | 482 } |
548 UpdateCarrier(); | 483 UpdateCarrier(); |
549 } | 484 } |
550 | 485 |
551 void InternetOptionsHandler::SetCarrierCallback(const base::ListValue* args) { | 486 void InternetOptionsHandler::SetCarrierCallback(const base::ListValue* args) { |
552 std::string service_path; | 487 std::string service_path; |
553 std::string carrier; | 488 std::string carrier; |
(...skipping 10 matching lines...) Expand all Loading... |
564 return; | 499 return; |
565 } | 500 } |
566 NetworkHandler::Get()->network_device_handler()->SetCarrier( | 501 NetworkHandler::Get()->network_device_handler()->SetCarrier( |
567 device->path(), | 502 device->path(), |
568 carrier, | 503 carrier, |
569 base::Bind(&InternetOptionsHandler::CarrierStatusCallback, | 504 base::Bind(&InternetOptionsHandler::CarrierStatusCallback, |
570 weak_factory_.GetWeakPtr()), | 505 weak_factory_.GetWeakPtr()), |
571 base::Bind(&ShillError, "SetCarrierCallback")); | 506 base::Bind(&ShillError, "SetCarrierCallback")); |
572 } | 507 } |
573 | 508 |
574 void InternetOptionsHandler::SetSimCardLockCallback( | 509 void InternetOptionsHandler::SimOperationCallback(const base::ListValue* args) { |
575 const base::ListValue* args) { | 510 std::string operation; |
576 bool require_pin_new_value; | 511 if (args->GetSize() != 1 || !args->GetString(0, &operation)) { |
577 if (!args->GetBoolean(0, &require_pin_new_value)) { | |
578 NOTREACHED(); | 512 NOTREACHED(); |
579 return; | 513 return; |
580 } | 514 } |
| 515 if (operation == kTagSimOpConfigure) { |
| 516 mobile_config_ui::DisplayConfigDialog(); |
| 517 return; |
| 518 } |
581 // 1. Bring up SIM unlock dialog, pass new RequirePin setting in URL. | 519 // 1. Bring up SIM unlock dialog, pass new RequirePin setting in URL. |
582 // 2. Dialog will ask for current PIN in any case. | 520 // 2. Dialog will ask for current PIN in any case. |
583 // 3. If card is locked it will first call PIN unlock operation | 521 // 3. If card is locked it will first call PIN unlock operation |
584 // 4. Then it will call Set RequirePin, passing the same PIN. | 522 // 4. Then it will call Set RequirePin, passing the same PIN. |
585 // 5. The dialog may change device properties, in which case | 523 // 5. The dialog may change device properties, in which case |
586 // DevicePropertiesUpdated() will get called which will update the UI. | 524 // DevicePropertiesUpdated() will get called which will update the UI. |
587 SimDialogDelegate::SimDialogMode mode; | 525 SimDialogDelegate::SimDialogMode mode; |
588 if (require_pin_new_value) | 526 if (operation == kTagSimOpSetLocked) { |
589 mode = SimDialogDelegate::SIM_DIALOG_SET_LOCK_ON; | 527 mode = SimDialogDelegate::SIM_DIALOG_SET_LOCK_ON; |
590 else | 528 } else if (operation == kTagSimOpSetUnlocked) { |
591 mode = SimDialogDelegate::SIM_DIALOG_SET_LOCK_OFF; | 529 mode = SimDialogDelegate::SIM_DIALOG_SET_LOCK_OFF; |
| 530 } else if (operation == kTagSimOpUnlock) { |
| 531 mode = SimDialogDelegate::SIM_DIALOG_UNLOCK; |
| 532 } else if (operation == kTagSimOpChangePin) { |
| 533 mode = SimDialogDelegate::SIM_DIALOG_CHANGE_PIN; |
| 534 } else { |
| 535 NOTREACHED(); |
| 536 return; |
| 537 } |
592 SimDialogDelegate::ShowDialog(GetNativeWindow(), mode); | 538 SimDialogDelegate::ShowDialog(GetNativeWindow(), mode); |
593 } | 539 } |
594 | 540 |
595 void InternetOptionsHandler::ChangePinCallback(const base::ListValue* args) { | 541 //////////////////////////////////////////////////////////////////////////////// |
596 SimDialogDelegate::ShowDialog(GetNativeWindow(), | 542 // networkingPrivate implementation methods. TODO(stevenjb): Use the |
597 SimDialogDelegate::SIM_DIALOG_CHANGE_PIN); | 543 // networkingPrivate API directly in the settings JS and deprecate these |
| 544 // methods. crbug.com/279351. |
| 545 |
| 546 void InternetOptionsHandler::DisableNetworkTypeCallback( |
| 547 const base::ListValue* args) { |
| 548 std::string type; |
| 549 if (!args->GetString(0, &type)) { |
| 550 NOTREACHED(); |
| 551 return; |
| 552 } |
| 553 NetworkHandler::Get()->network_state_handler()->SetTechnologyEnabled( |
| 554 chromeos::onc::NetworkTypePatternFromOncType(type), false, |
| 555 base::Bind(&ShillError, "DisableNetworkType")); |
598 } | 556 } |
599 | 557 |
600 void InternetOptionsHandler::RefreshNetworksCallback( | 558 void InternetOptionsHandler::EnableNetworkTypeCallback( |
| 559 const base::ListValue* args) { |
| 560 std::string type; |
| 561 if (!args->GetString(0, &type)) { |
| 562 NOTREACHED(); |
| 563 return; |
| 564 } |
| 565 NetworkHandler::Get()->network_state_handler()->SetTechnologyEnabled( |
| 566 chromeos::onc::NetworkTypePatternFromOncType(type), true, |
| 567 base::Bind(&ShillError, "EnableNetworkType")); |
| 568 } |
| 569 |
| 570 void InternetOptionsHandler::GetManagedPropertiesCallback( |
| 571 const base::ListValue* args) { |
| 572 std::string service_path; |
| 573 if (!args->GetString(0, &service_path)) { |
| 574 NOTREACHED(); |
| 575 return; |
| 576 } |
| 577 NetworkHandler::Get()->managed_network_configuration_handler() |
| 578 ->GetManagedProperties( |
| 579 LoginState::Get()->primary_user_hash(), |
| 580 service_path, |
| 581 base::Bind( |
| 582 &InternetOptionsHandler::PopulateDictionaryDetailsCallback, |
| 583 weak_factory_.GetWeakPtr()), |
| 584 base::Bind(&ShillError, "GetManagedProperties")); |
| 585 } |
| 586 |
| 587 void InternetOptionsHandler::RequestNetworkScanCallback( |
601 const base::ListValue* args) { | 588 const base::ListValue* args) { |
602 NetworkHandler::Get()->network_state_handler()->RequestScan(); | 589 NetworkHandler::Get()->network_state_handler()->RequestScan(); |
603 } | 590 } |
604 | 591 |
| 592 void InternetOptionsHandler::StartConnectCallback(const base::ListValue* args) { |
| 593 std::string service_path; |
| 594 if (!args->GetString(0, &service_path)) { |
| 595 NOTREACHED(); |
| 596 return; |
| 597 } |
| 598 ash::network_connect::ConnectToNetwork(service_path, GetNativeWindow()); |
| 599 } |
| 600 |
| 601 void InternetOptionsHandler::StartDisconnectCallback( |
| 602 const base::ListValue* args) { |
| 603 std::string service_path; |
| 604 if (!args->GetString(0, &service_path)) { |
| 605 NOTREACHED(); |
| 606 return; |
| 607 } |
| 608 NetworkHandler::Get()->network_connection_handler()->DisconnectNetwork( |
| 609 service_path, |
| 610 base::Bind(&base::DoNothing), |
| 611 base::Bind(&ShillError, "StartDisconnectCallback")); |
| 612 } |
| 613 |
| 614 //////////////////////////////////////////////////////////////////////////////// |
| 615 |
605 std::string InternetOptionsHandler::GetIconDataUrl(int resource_id) const { | 616 std::string InternetOptionsHandler::GetIconDataUrl(int resource_id) const { |
606 gfx::ImageSkia* icon = | 617 gfx::ImageSkia* icon = |
607 ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id); | 618 ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id); |
608 gfx::ImageSkiaRep image_rep = icon->GetRepresentation( | 619 gfx::ImageSkiaRep image_rep = icon->GetRepresentation( |
609 web_ui()->GetDeviceScaleFactor()); | 620 web_ui()->GetDeviceScaleFactor()); |
610 return webui::GetBitmapDataUrl(image_rep.sk_bitmap()); | 621 return webui::GetBitmapDataUrl(image_rep.sk_bitmap()); |
611 } | 622 } |
612 | 623 |
613 void InternetOptionsHandler::RefreshNetworkData() { | 624 void InternetOptionsHandler::RefreshNetworkData() { |
614 base::DictionaryValue dictionary; | 625 base::DictionaryValue dictionary; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
652 void InternetOptionsHandler::NetworkListChanged() { | 663 void InternetOptionsHandler::NetworkListChanged() { |
653 if (!web_ui()) | 664 if (!web_ui()) |
654 return; | 665 return; |
655 RefreshNetworkData(); | 666 RefreshNetworkData(); |
656 } | 667 } |
657 | 668 |
658 void InternetOptionsHandler::NetworkConnectionStateChanged( | 669 void InternetOptionsHandler::NetworkConnectionStateChanged( |
659 const NetworkState* network) { | 670 const NetworkState* network) { |
660 if (!web_ui()) | 671 if (!web_ui()) |
661 return; | 672 return; |
662 // Update the connection data for the detailed view when the connection state | 673 if (network->path() == details_path_) |
663 // of any network changes. | 674 UpdateConnectionData(network->path()); |
664 if (!details_path_.empty()) | |
665 UpdateConnectionData(details_path_); | |
666 } | 675 } |
667 | 676 |
668 void InternetOptionsHandler::NetworkPropertiesUpdated( | 677 void InternetOptionsHandler::NetworkPropertiesUpdated( |
669 const NetworkState* network) { | 678 const NetworkState* network) { |
670 if (!web_ui()) | 679 if (!web_ui()) |
671 return; | 680 return; |
672 RefreshNetworkData(); | 681 RefreshNetworkData(); |
673 UpdateConnectionData(network->path()); | 682 if (network->path() == details_path_) |
| 683 UpdateConnectionData(network->path()); |
674 } | 684 } |
675 | 685 |
676 void InternetOptionsHandler::DevicePropertiesUpdated( | 686 void InternetOptionsHandler::DevicePropertiesUpdated( |
677 const DeviceState* device) { | 687 const DeviceState* device) { |
678 if (!web_ui()) | 688 if (!web_ui()) |
679 return; | 689 return; |
680 if (device->type() != shill::kTypeCellular) | 690 if (device->type() != shill::kTypeCellular) |
681 return; | 691 return; |
682 const NetworkState* network = | 692 const NetworkState* network = |
683 NetworkHandler::Get()->network_state_handler()->FirstNetworkByType( | 693 NetworkHandler::Get()->network_state_handler()->FirstNetworkByType( |
684 NetworkTypePattern::Cellular()); | 694 NetworkTypePattern::Cellular()); |
685 if (network) | 695 if (network && network->path() == details_path_) |
686 UpdateConnectionData(network->path()); // Update sim lock status. | 696 UpdateConnectionData(network->path()); |
687 } | 697 } |
688 | 698 |
689 void InternetOptionsHandler::SetServerHostnameCallback( | 699 void InternetOptionsHandler::SetServerHostnameCallback( |
690 const base::ListValue* args) { | 700 const base::ListValue* args) { |
691 std::string service_path, server_hostname; | 701 std::string service_path, server_hostname; |
692 if (args->GetSize() < 2 || | 702 if (args->GetSize() < 2 || |
693 !args->GetString(0, &service_path) || | 703 !args->GetString(0, &service_path) || |
694 !args->GetString(1, &server_hostname)) { | 704 !args->GetString(1, &server_hostname)) { |
695 NOTREACHED(); | 705 NOTREACHED(); |
696 return; | 706 return; |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 } | 842 } |
833 | 843 |
834 void InternetOptionsHandler::PopulateDictionaryDetailsCallback( | 844 void InternetOptionsHandler::PopulateDictionaryDetailsCallback( |
835 const std::string& service_path, | 845 const std::string& service_path, |
836 const base::DictionaryValue& onc_properties) { | 846 const base::DictionaryValue& onc_properties) { |
837 const NetworkState* network = GetNetworkState(service_path); | 847 const NetworkState* network = GetNetworkState(service_path); |
838 if (!network) { | 848 if (!network) { |
839 LOG(ERROR) << "Network properties not found: " << service_path; | 849 LOG(ERROR) << "Network properties not found: " << service_path; |
840 return; | 850 return; |
841 } | 851 } |
842 | |
843 details_path_ = service_path; | |
844 | |
845 scoped_ptr<base::DictionaryValue> dictionary = | 852 scoped_ptr<base::DictionaryValue> dictionary = |
846 PopulateConnectionDetails(network, onc_properties); | 853 PopulateConnectionDetails(network, onc_properties); |
847 | 854 |
848 // Show details dialog | 855 // Show details dialog |
849 web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, *dictionary); | 856 web_ui()->CallJavascriptFunction(kSendNetworkDetailsFunction, *dictionary); |
850 } | 857 } |
851 | 858 |
852 gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const { | 859 gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const { |
853 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); | 860 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); |
854 } | 861 } |
855 | 862 |
856 float InternetOptionsHandler::GetScaleFactor() const { | 863 float InternetOptionsHandler::GetScaleFactor() const { |
857 return web_ui()->GetDeviceScaleFactor(); | 864 return web_ui()->GetDeviceScaleFactor(); |
858 } | 865 } |
859 | 866 |
(...skipping 21 matching lines...) Expand all Loading... |
881 } | 888 } |
882 // Process commands that do not require an existing network. | 889 // Process commands that do not require an existing network. |
883 if (command == kTagAddConnection) { | 890 if (command == kTagAddConnection) { |
884 AddConnection(type); | 891 AddConnection(type); |
885 } else if (command == kTagForget) { | 892 } else if (command == kTagForget) { |
886 NetworkHandler::Get()->network_configuration_handler()-> | 893 NetworkHandler::Get()->network_configuration_handler()-> |
887 RemoveConfiguration( | 894 RemoveConfiguration( |
888 service_path, | 895 service_path, |
889 base::Bind(&base::DoNothing), | 896 base::Bind(&base::DoNothing), |
890 base::Bind(&ShillError, "NetworkCommand: " + command)); | 897 base::Bind(&ShillError, "NetworkCommand: " + command)); |
891 } else if (command == kTagOptions) { | 898 } else if (command == kTagShowDetails) { |
892 NetworkHandler::Get() | 899 SendShowDetailedInfo(service_path); |
893 ->managed_network_configuration_handler() | |
894 ->GetManagedProperties( | |
895 LoginState::Get()->primary_user_hash(), | |
896 service_path, | |
897 base::Bind( | |
898 &InternetOptionsHandler::PopulateDictionaryDetailsCallback, | |
899 weak_factory_.GetWeakPtr()), | |
900 base::Bind(&ShillError, "NetworkCommand: " + command)); | |
901 } else if (command == kTagConnect) { | |
902 ash::network_connect::ConnectToNetwork(service_path, GetNativeWindow()); | |
903 } else if (command == kTagDisconnect) { | |
904 NetworkHandler::Get()->network_connection_handler()->DisconnectNetwork( | |
905 service_path, | |
906 base::Bind(&base::DoNothing), | |
907 base::Bind(&ShillError, "NetworkCommand: " + command)); | |
908 } else if (command == kTagConfigure) { | 900 } else if (command == kTagConfigure) { |
909 NetworkConfigView::Show(service_path, GetNativeWindow()); | 901 NetworkConfigView::Show(service_path, GetNativeWindow()); |
910 } else if (command == kTagActivate && type == shill::kTypeCellular) { | 902 } else if (command == kTagActivate && type == shill::kTypeCellular) { |
911 ash::network_connect::ActivateCellular(service_path); | 903 ash::network_connect::ActivateCellular(service_path); |
912 // Activation may update network properties (e.g. ActivationState), so | 904 // Activation may update network properties (e.g. ActivationState), so |
913 // request them here in case they change. | 905 // request them here in case they change. |
914 UpdateConnectionData(service_path); | 906 UpdateConnectionData(service_path); |
915 } else { | 907 } else { |
916 VLOG(1) << "Unknown command: " << command; | 908 LOG(ERROR) << "Unknown internet options command: " << command; |
917 NOTREACHED(); | 909 NOTREACHED(); |
918 } | 910 } |
919 } | 911 } |
920 | 912 |
921 void InternetOptionsHandler::AddConnection(const std::string& type) { | 913 void InternetOptionsHandler::AddConnection(const std::string& type) { |
922 if (type == shill::kTypeWifi) { | 914 if (type == shill::kTypeWifi) { |
923 NetworkConfigView::ShowForType(shill::kTypeWifi, GetNativeWindow()); | 915 NetworkConfigView::ShowForType(shill::kTypeWifi, GetNativeWindow()); |
924 } else if (type == shill::kTypeVPN) { | 916 } else if (type == shill::kTypeVPN) { |
925 NetworkConfigView::ShowForType(shill::kTypeVPN, GetNativeWindow()); | 917 NetworkConfigView::ShowForType(shill::kTypeVPN, GetNativeWindow()); |
926 } else if (type == shill::kTypeCellular) { | 918 } else if (type == shill::kTypeCellular) { |
927 ChooseMobileNetworkDialog::ShowDialog(GetNativeWindow()); | 919 ChooseMobileNetworkDialog::ShowDialog(GetNativeWindow()); |
928 } else { | 920 } else { |
929 LOG(ERROR) << "Unsupported type for AddConnection"; | 921 LOG(ERROR) << "Unsupported type for AddConnection"; |
930 } | 922 } |
931 } | 923 } |
932 | 924 |
| 925 void InternetOptionsHandler::SendShowDetailedInfo( |
| 926 const std::string& service_path) { |
| 927 details_path_ = service_path; |
| 928 |
| 929 scoped_ptr<base::DictionaryValue> dictionary(new base::DictionaryValue); |
| 930 const NetworkState* network = GetNetworkState(service_path); |
| 931 if (network) { |
| 932 dictionary->SetString(kNetworkInfoKeyServicePath, service_path); |
| 933 dictionary->SetString(kNetworkInfoKeyGUID, network->guid()); |
| 934 if (network->type() == shill::kTypeCellular) { |
| 935 dictionary->SetBoolean( |
| 936 kTagCarrierSelectFlag, |
| 937 CommandLine::ForCurrentProcess() |
| 938 ->HasSwitch(chromeos::switches::kEnableCarrierSwitching)); |
| 939 dictionary->SetBoolean(kTagShowViewAccountButton, |
| 940 ShowViewAccountButton(network)); |
| 941 } |
| 942 } |
| 943 web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, *dictionary); |
| 944 } |
| 945 |
933 base::ListValue* InternetOptionsHandler::GetWiredList() { | 946 base::ListValue* InternetOptionsHandler::GetWiredList() { |
934 base::ListValue* list = new base::ListValue(); | 947 base::ListValue* list = new base::ListValue(); |
935 const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> | 948 const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> |
936 FirstNetworkByType(NetworkTypePattern::Ethernet()); | 949 FirstNetworkByType(NetworkTypePattern::Ethernet()); |
937 if (!network) | 950 if (!network) |
938 return list; | 951 return list; |
939 list->Append(BuildNetworkDictionary(network, GetScaleFactor(), GetPrefs())); | 952 list->Append(BuildNetworkDictionary(network, GetScaleFactor(), GetPrefs())); |
940 return list; | 953 return list; |
941 } | 954 } |
942 | 955 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1001 dictionary->Set(kTagVpnList, GetVPNList()); | 1014 dictionary->Set(kTagVpnList, GetVPNList()); |
1002 dictionary->Set(kTagRememberedList, GetRememberedList()); | 1015 dictionary->Set(kTagRememberedList, GetRememberedList()); |
1003 | 1016 |
1004 dictionary->SetBoolean( | 1017 dictionary->SetBoolean( |
1005 kTagWifiAvailable, | 1018 kTagWifiAvailable, |
1006 handler->IsTechnologyAvailable(NetworkTypePattern::WiFi())); | 1019 handler->IsTechnologyAvailable(NetworkTypePattern::WiFi())); |
1007 dictionary->SetBoolean( | 1020 dictionary->SetBoolean( |
1008 kTagWifiEnabled, | 1021 kTagWifiEnabled, |
1009 handler->IsTechnologyEnabled(NetworkTypePattern::WiFi())); | 1022 handler->IsTechnologyEnabled(NetworkTypePattern::WiFi())); |
1010 | 1023 |
| 1024 const DeviceState* cellular = |
| 1025 handler->GetDeviceStateByType(NetworkTypePattern::Mobile()); |
1011 dictionary->SetBoolean( | 1026 dictionary->SetBoolean( |
1012 kTagCellularAvailable, | 1027 kTagCellularAvailable, |
1013 handler->IsTechnologyAvailable(NetworkTypePattern::Mobile())); | 1028 handler->IsTechnologyAvailable(NetworkTypePattern::Mobile())); |
1014 dictionary->SetBoolean( | 1029 dictionary->SetBoolean( |
1015 kTagCellularEnabled, | 1030 kTagCellularEnabled, |
1016 handler->IsTechnologyEnabled(NetworkTypePattern::Mobile())); | 1031 handler->IsTechnologyEnabled(NetworkTypePattern::Mobile())); |
1017 const DeviceState* cellular = | 1032 dictionary->SetBoolean(kTagCellularSupportsScan, |
1018 handler->GetDeviceStateByType(NetworkTypePattern::Mobile()); | 1033 cellular && cellular->support_network_scan()); |
1019 dictionary->SetBoolean( | 1034 dictionary->SetBoolean(kTagCellularSimAbsent, |
1020 kTagCellularSupportsScan, | 1035 cellular && cellular->IsSimAbsent()); |
1021 cellular && cellular->support_network_scan()); | 1036 dictionary->SetString(kTagCellularSimLockType, |
| 1037 cellular ? cellular->sim_lock_type() : ""); |
1022 | 1038 |
1023 dictionary->SetBoolean( | 1039 dictionary->SetBoolean( |
1024 kTagWimaxAvailable, | 1040 kTagWimaxAvailable, |
1025 handler->IsTechnologyAvailable(NetworkTypePattern::Wimax())); | 1041 handler->IsTechnologyAvailable(NetworkTypePattern::Wimax())); |
1026 dictionary->SetBoolean( | 1042 dictionary->SetBoolean( |
1027 kTagWimaxEnabled, | 1043 kTagWimaxEnabled, |
1028 handler->IsTechnologyEnabled(NetworkTypePattern::Wimax())); | 1044 handler->IsTechnologyEnabled(NetworkTypePattern::Wimax())); |
1029 } | 1045 } |
1030 | 1046 |
1031 } // namespace options | 1047 } // namespace options |
1032 } // namespace chromeos | 1048 } // namespace chromeos |
OLD | NEW |