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

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

Issue 10827283: This updates the StaticIP configuration UI to match new mocks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleanup for review Created 8 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/options2/chromeos/internet_options_handler.h" 5 #include "chrome/browser/ui/webui/options2/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>
11 #include <vector> 11 #include <vector>
12 12
13 #include "ash/shell.h" 13 #include "ash/shell.h"
14 #include "ash/shell_delegate.h" 14 #include "ash/shell_delegate.h"
15 #include "base/base64.h" 15 #include "base/base64.h"
16 #include "base/basictypes.h" 16 #include "base/basictypes.h"
17 #include "base/bind.h" 17 #include "base/bind.h"
18 #include "base/bind_helpers.h" 18 #include "base/bind_helpers.h"
19 #include "base/command_line.h" 19 #include "base/command_line.h"
20 #include "base/i18n/time_formatting.h" 20 #include "base/i18n/time_formatting.h"
21 #include "base/json/json_writer.h"
21 #include "base/string16.h" 22 #include "base/string16.h"
22 #include "base/string_number_conversions.h" 23 #include "base/string_number_conversions.h"
23 #include "base/stringprintf.h" 24 #include "base/stringprintf.h"
24 #include "base/time.h" 25 #include "base/time.h"
25 #include "base/utf_string_conversions.h" 26 #include "base/utf_string_conversions.h"
26 #include "base/values.h" 27 #include "base/values.h"
27 #include "chrome/browser/browser_process.h" 28 #include "chrome/browser/browser_process.h"
28 #include "chrome/browser/chromeos/choose_mobile_network_dialog.h" 29 #include "chrome/browser/chromeos/choose_mobile_network_dialog.h"
29 #include "chrome/browser/chromeos/cros/cros_library.h" 30 #include "chrome/browser/chromeos/cros/cros_library.h"
31 #include "chrome/browser/chromeos/cros/cros_network_functions.h"
30 #include "chrome/browser/chromeos/cros/network_library.h" 32 #include "chrome/browser/chromeos/cros/network_library.h"
31 #include "chrome/browser/chromeos/cros/onc_constants.h" 33 #include "chrome/browser/chromeos/cros/onc_constants.h"
32 #include "chrome/browser/chromeos/enrollment_dialog_view.h" 34 #include "chrome/browser/chromeos/enrollment_dialog_view.h"
33 #include "chrome/browser/chromeos/mobile_config.h" 35 #include "chrome/browser/chromeos/mobile_config.h"
34 #include "chrome/browser/chromeos/options/network_config_view.h" 36 #include "chrome/browser/chromeos/options/network_config_view.h"
35 #include "chrome/browser/chromeos/proxy_config_service_impl.h" 37 #include "chrome/browser/chromeos/proxy_config_service_impl.h"
36 #include "chrome/browser/chromeos/settings/cros_settings.h" 38 #include "chrome/browser/chromeos/settings/cros_settings.h"
37 #include "chrome/browser/chromeos/sim_dialog_delegate.h" 39 #include "chrome/browser/chromeos/sim_dialog_delegate.h"
38 #include "chrome/browser/chromeos/status/network_menu_icon.h" 40 #include "chrome/browser/chromeos/status/network_menu_icon.h"
39 #include "chrome/browser/net/pref_proxy_config_tracker.h" 41 #include "chrome/browser/net/pref_proxy_config_tracker.h"
40 #include "chrome/browser/profiles/profile.h" 42 #include "chrome/browser/profiles/profile.h"
41 #include "chrome/browser/profiles/profile_manager.h" 43 #include "chrome/browser/profiles/profile_manager.h"
42 #include "chrome/browser/ui/browser.h" 44 #include "chrome/browser/ui/browser.h"
43 #include "chrome/browser/ui/browser_finder.h" 45 #include "chrome/browser/ui/browser_finder.h"
44 #include "chrome/browser/ui/browser_window.h" 46 #include "chrome/browser/ui/browser_window.h"
45 #include "chrome/browser/ui/singleton_tabs.h" 47 #include "chrome/browser/ui/singleton_tabs.h"
46 #include "chrome/browser/ui/webui/web_ui_util.h" 48 #include "chrome/browser/ui/webui/web_ui_util.h"
47 #include "chrome/common/chrome_notification_types.h" 49 #include "chrome/common/chrome_notification_types.h"
48 #include "chrome/common/chrome_switches.h" 50 #include "chrome/common/chrome_switches.h"
49 #include "chrome/common/time_format.h" 51 #include "chrome/common/time_format.h"
50 #include "content/public/browser/notification_service.h" 52 #include "content/public/browser/notification_service.h"
51 #include "content/public/browser/web_contents.h" 53 #include "content/public/browser/web_contents.h"
52 #include "content/public/browser/web_ui.h" 54 #include "content/public/browser/web_ui.h"
53 #include "grit/chromium_strings.h" 55 #include "grit/chromium_strings.h"
54 #include "grit/generated_resources.h" 56 #include "grit/generated_resources.h"
55 #include "grit/locale_settings.h" 57 #include "grit/locale_settings.h"
56 #include "grit/theme_resources.h" 58 #include "grit/theme_resources.h"
59 #include "third_party/cros_system_api/dbus/service_constants.h"
57 #include "ui/base/l10n/l10n_util.h" 60 #include "ui/base/l10n/l10n_util.h"
58 #include "ui/base/layout.h" 61 #include "ui/base/layout.h"
59 #include "ui/base/resource/resource_bundle.h" 62 #include "ui/base/resource/resource_bundle.h"
60 #include "ui/gfx/display.h" 63 #include "ui/gfx/display.h"
61 #include "ui/gfx/image/image_skia.h" 64 #include "ui/gfx/image/image_skia.h"
62 #include "ui/gfx/screen.h" 65 #include "ui/gfx/screen.h"
63 #include "ui/views/widget/widget.h" 66 #include "ui/views/widget/widget.h"
64 67
65 namespace { 68 namespace {
66 69
67 static const char kOtherNetworksFakePath[] = "?"; 70 static const char kOtherNetworksFakePath[] = "?";
68 71
69 // Keys for the network description dictionary passed to the web ui. Make sure 72 // Keys for the network description dictionary passed to the web ui. Make sure
70 // to keep the strings in sync with what the Javascript side uses. 73 // to keep the strings in sync with what the Javascript side uses.
71 const char kNetworkInfoKeyActivationState[] = "activation_state"; 74 const char kNetworkInfoKeyActivationState[] = "activation_state";
72 const char kNetworkInfoKeyConnectable[] = "connectable"; 75 const char kNetworkInfoKeyConnectable[] = "connectable";
73 const char kNetworkInfoKeyConnected[] = "connected"; 76 const char kNetworkInfoKeyConnected[] = "connected";
74 const char kNetworkInfoKeyConnecting[] = "connecting"; 77 const char kNetworkInfoKeyConnecting[] = "connecting";
75 const char kNetworkInfoKeyIconURL[] = "iconURL"; 78 const char kNetworkInfoKeyIconURL[] = "iconURL";
76 const char kNetworkInfoKeyNeedsNewPlan[] = "needs_new_plan"; 79 const char kNetworkInfoKeyNeedsNewPlan[] = "needs_new_plan";
77 const char kNetworkInfoKeyNetworkName[] = "networkName"; 80 const char kNetworkInfoKeyNetworkName[] = "networkName";
78 const char kNetworkInfoKeyNetworkStatus[] = "networkStatus"; 81 const char kNetworkInfoKeyNetworkStatus[] = "networkStatus";
79 const char kNetworkInfoKeyNetworkType[] = "networkType"; 82 const char kNetworkInfoKeyNetworkType[] = "networkType";
80 const char kNetworkInfoKeyRemembered[] = "remembered"; 83 const char kNetworkInfoKeyRemembered[] = "remembered";
81 const char kNetworkInfoKeyServicePath[] = "servicePath"; 84 const char kNetworkInfoKeyServicePath[] = "servicePath";
82 const char kNetworkInfoKeyPolicyManaged[] = "policyManaged"; 85 const char kNetworkInfoKeyPolicyManaged[] = "policyManaged";
83 86
87 // Google public name servers (DNS).
88 const char kGoogleNameServers[] = "8.8.4.4,8.8.8.8";
89
84 // A helper class for building network information dictionaries to be sent to 90 // A helper class for building network information dictionaries to be sent to
85 // the webui code. 91 // the webui code.
86 class NetworkInfoDictionary { 92 class NetworkInfoDictionary {
87 public: 93 public:
88 // Initializes the dictionary with default values. 94 // Initializes the dictionary with default values.
89 explicit NetworkInfoDictionary(float icon_scale); 95 explicit NetworkInfoDictionary(float icon_scale);
90 96
91 // Copies in service path, connect{ing|ed|able} flags and connection type from 97 // Copies in service path, connect{ing|ed|able} flags and connection type from
92 // the provided network object. Also chooses an appropriate icon based on the 98 // the provided network object. Also chooses an appropriate icon based on the
93 // network type. 99 // network type.
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 network_info->SetString(kNetworkInfoKeyNetworkName, name_); 259 network_info->SetString(kNetworkInfoKeyNetworkName, name_);
254 network_info->SetString(kNetworkInfoKeyNetworkStatus, status); 260 network_info->SetString(kNetworkInfoKeyNetworkStatus, status);
255 network_info->SetInteger(kNetworkInfoKeyNetworkType, 261 network_info->SetInteger(kNetworkInfoKeyNetworkType,
256 static_cast<int>(connection_type_)); 262 static_cast<int>(connection_type_));
257 network_info->SetBoolean(kNetworkInfoKeyRemembered, remembered_); 263 network_info->SetBoolean(kNetworkInfoKeyRemembered, remembered_);
258 network_info->SetString(kNetworkInfoKeyServicePath, service_path_); 264 network_info->SetString(kNetworkInfoKeyServicePath, service_path_);
259 network_info->SetBoolean(kNetworkInfoKeyPolicyManaged, policy_managed_); 265 network_info->SetBoolean(kNetworkInfoKeyPolicyManaged, policy_managed_);
260 return network_info.release(); 266 return network_info.release();
261 } 267 }
262 268
269 // Pulls IP information out of a shill service properties dictionary. If
270 // |static_ip| is true, then it fetches "StaticIP.*" properties. If not, then it
271 // fetches "SavedIP.*" properties. Caller must take ownership of returned
272 // dictionary. If non-NULL, |ip_parameters_set| returns a count of the number
273 // of IP routing parameters that get set.
274 DictionaryValue* BuildIPInfoDictionary(const DictionaryValue& shill_properties,
275 bool static_ip,
276 int* routing_parameters_set) {
277 std::string address_key;
278 std::string prefix_len_key;
279 std::string gateway_key;
280 std::string name_servers_key;
281 if (static_ip) {
282 address_key = shill::kStaticIPAddressProperty;
283 prefix_len_key = shill::kStaticIPPrefixlenProperty;
284 gateway_key = shill::kStaticIPGatewayProperty;
285 name_servers_key = shill::kStaticIPNameServersProperty;
286 } else {
287 address_key = shill::kSavedIPAddressProperty;
288 prefix_len_key = shill::kSavedIPPrefixlenProperty;
289 gateway_key = shill::kSavedIPGatewayProperty;
290 name_servers_key = shill::kSavedIPNameServersProperty;
291 }
292
293 scoped_ptr<DictionaryValue> ip_info_dict(new DictionaryValue);
294 std::string value;
stevenjb 2012/08/13 17:43:44 nit: I think this would be more readable using sep
Greg Spencer (Chromium) 2012/08/13 23:53:44 Done.
295 int routing_parameters = 0;
296 if (shill_properties.GetStringWithoutPathExpansion(address_key, &value)) {
297 ip_info_dict->SetString("address", value);
stevenjb 2012/08/13 17:43:44 "address" and other JS (I assume?) keys should be
Greg Spencer (Chromium) 2012/08/13 23:53:44 Done, but I'd like to point out that there are sev
stevenjb 2012/08/14 01:06:38 Thanks for doing these. Anything that is used as a
Greg Spencer (Chromium) 2012/08/14 01:19:27 OK, I do agree that they *should* be. I'll take a
298 VLOG(2) << "Found " << address_key << ": " << value;
299 routing_parameters++;
300 }
301 int prefix_len = -1;
302 if (shill_properties.GetIntegerWithoutPathExpansion(
303 prefix_len_key, &prefix_len)) {
304 ip_info_dict->SetInteger("prefixLength", prefix_len);
305 ip_info_dict->SetString("netmask",
306 chromeos::CrosPrefixLengthToNetmask(prefix_len));
307 VLOG(2) << "Found " << prefix_len_key << ": "
308 << prefix_len
309 << " (" << chromeos::CrosPrefixLengthToNetmask(prefix_len) << ")";
310 routing_parameters++;
311 }
312 value.clear();
313 if (shill_properties.GetStringWithoutPathExpansion(gateway_key, &value)) {
314 ip_info_dict->SetString("gateway", value);
315 VLOG(2) << "Found " << gateway_key << ": " << value;
316 routing_parameters++;
317 }
318 if (routing_parameters_set)
319 *routing_parameters_set = routing_parameters;
320
321 value.clear();
322 if (shill_properties.GetStringWithoutPathExpansion(
323 name_servers_key, &value)) {
324 ip_info_dict->SetString("nameServers", value);
325 VLOG(2) << "Found " << name_servers_key << ": " << value;
326 }
327
328 return ip_info_dict.release();
329 }
330
263 } // namespace 331 } // namespace
264 332
265 namespace options2 { 333 namespace options2 {
266 334
267 InternetOptionsHandler::InternetOptionsHandler() 335 InternetOptionsHandler::InternetOptionsHandler()
268 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { 336 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
269 registrar_.Add(this, chrome::NOTIFICATION_REQUIRE_PIN_SETTING_CHANGE_ENDED, 337 registrar_.Add(this, chrome::NOTIFICATION_REQUIRE_PIN_SETTING_CHANGE_ENDED,
270 content::NotificationService::AllSources()); 338 content::NotificationService::AllSources());
271 registrar_.Add(this, chrome::NOTIFICATION_ENTER_PIN_ENDED, 339 registrar_.Add(this, chrome::NOTIFICATION_ENTER_PIN_ENDED,
272 content::NotificationService::AllSources()); 340 content::NotificationService::AllSources());
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CHANGE_PROXY_BUTTON }, 399 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CHANGE_PROXY_BUTTON },
332 { "managedNetwork", IDS_OPTIONS_SETTINGS_MANAGED_NETWORK }, 400 { "managedNetwork", IDS_OPTIONS_SETTINGS_MANAGED_NETWORK },
333 { "wifiNetworkTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_CONNECTION }, 401 { "wifiNetworkTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_CONNECTION },
334 { "vpnTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_VPN }, 402 { "vpnTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_VPN },
335 { "cellularPlanTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_PLAN }, 403 { "cellularPlanTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_PLAN },
336 { "cellularConnTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_CONNECTION }, 404 { "cellularConnTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_CONNECTION },
337 { "cellularDeviceTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_DEVICE }, 405 { "cellularDeviceTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_DEVICE },
338 { "networkTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_NETWORK }, 406 { "networkTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_NETWORK },
339 { "securityTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_SECURITY }, 407 { "securityTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_SECURITY },
340 { "proxyTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_PROXY }, 408 { "proxyTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_PROXY },
341 { "useDHCP", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_USE_DHCP },
342 { "useStaticIP", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_USE_STATIC_IP },
343 { "connectionState", IDS_OPTIONS_SETTINGS_INTERNET_CONNECTION_STATE }, 409 { "connectionState", IDS_OPTIONS_SETTINGS_INTERNET_CONNECTION_STATE },
344 { "inetAddress", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_ADDRESS }, 410 { "inetAddress", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_ADDRESS },
345 { "inetSubnetAddress", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SUBNETMASK }, 411 { "inetNetmask", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SUBNETMASK },
346 { "inetGateway", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_GATEWAY }, 412 { "inetGateway", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_GATEWAY },
347 { "inetDns", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_DNSSERVER }, 413 { "inetNameServers", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_DNSSERVER },
414 { "ipAutomaticConfiguration",
415 IDS_OPTIONS_SETTINGS_INTERNET_IP_AUTOMATIC_CONFIGURATION },
416 { "automaticNameServers",
417 IDS_OPTIONS_SETTINGS_INTERNET_AUTOMATIC_NAME_SERVERS },
418 { "userNameServer1", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_1 },
419 { "userNameServer2", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_2 },
420 { "userNameServer3", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_3 },
421 { "userNameServer4", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_4 },
422 { "googleNameServers", IDS_OPTIONS_SETTINGS_INTERNET_GOOGLE_NAME_SERVERS },
423 { "userNameServers", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVERS },
348 { "hardwareAddress", 424 { "hardwareAddress",
349 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_HARDWARE_ADDRESS }, 425 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_HARDWARE_ADDRESS },
350 { "detailsInternetDismiss", IDS_CLOSE }, 426 { "detailsInternetDismiss", IDS_CLOSE },
351 { "activateButton", IDS_OPTIONS_SETTINGS_ACTIVATE }, 427 { "activateButton", IDS_OPTIONS_SETTINGS_ACTIVATE },
352 { "buyplanButton", IDS_OPTIONS_SETTINGS_BUY_PLAN }, 428 { "buyplanButton", IDS_OPTIONS_SETTINGS_BUY_PLAN },
353 { "connectButton", IDS_OPTIONS_SETTINGS_CONNECT }, 429 { "connectButton", IDS_OPTIONS_SETTINGS_CONNECT },
354 { "disconnectButton", IDS_OPTIONS_SETTINGS_DISCONNECT }, 430 { "disconnectButton", IDS_OPTIONS_SETTINGS_DISCONNECT },
355 { "viewAccountButton", IDS_STATUSBAR_NETWORK_VIEW_ACCOUNT }, 431 { "viewAccountButton", IDS_STATUSBAR_NETWORK_VIEW_ACCOUNT },
356 432
357 // TODO(zelidrag): Change details title to Wimax once we get strings. 433 // TODO(zelidrag): Change details title to Wimax once we get strings.
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 if (!network) 880 if (!network)
805 return; 881 return;
806 882
807 bool auto_connect = auto_connect_str == "true"; 883 bool auto_connect = auto_connect_str == "true";
808 if (auto_connect != network->auto_connect()) 884 if (auto_connect != network->auto_connect())
809 network->SetAutoConnect(auto_connect); 885 network->SetAutoConnect(auto_connect);
810 } 886 }
811 887
812 void InternetOptionsHandler::SetIPConfigCallback(const ListValue* args) { 888 void InternetOptionsHandler::SetIPConfigCallback(const ListValue* args) {
813 std::string service_path; 889 std::string service_path;
814 std::string dhcp_str; 890 std::string dhcp_for_ip;
815 std::string address; 891 std::string address;
816 std::string netmask; 892 std::string netmask;
817 std::string gateway; 893 std::string gateway;
894 std::string name_server_type;
818 std::string name_servers; 895 std::string name_servers;
819 896
820 if (args->GetSize() < 6 || 897 if (args->GetSize() < 7 ||
821 !args->GetString(0, &service_path) || 898 !args->GetString(0, &service_path) ||
822 !args->GetString(1, &dhcp_str) || 899 !args->GetString(1, &dhcp_for_ip) ||
823 !args->GetString(2, &address) || 900 !args->GetString(2, &address) ||
824 !args->GetString(3, &netmask) || 901 !args->GetString(3, &netmask) ||
825 !args->GetString(4, &gateway) || 902 !args->GetString(4, &gateway) ||
826 !args->GetString(5, &name_servers)) { 903 !args->GetString(5, &name_server_type) ||
904 !args->GetString(6, &name_servers)) {
827 NOTREACHED(); 905 NOTREACHED();
828 return; 906 return;
829 } 907 }
830 908
831 chromeos::Network* network = cros_->FindNetworkByPath(service_path); 909 int dhcp_usage_mask = 0;
832 if (!network) 910 if (dhcp_for_ip == "true") {
833 return; 911 dhcp_usage_mask = (chromeos::NetworkLibrary::USE_DHCP_ADDRESS |
912 chromeos::NetworkLibrary::USE_DHCP_NETMASK |
913 chromeos::NetworkLibrary::USE_DHCP_GATEWAY);
914 }
915 if (name_server_type == "automatic") {
stevenjb 2012/08/13 17:43:44 nit: kNameServerTypeAutomatic
Greg Spencer (Chromium) 2012/08/13 23:53:44 Done.
916 dhcp_usage_mask |= chromeos::NetworkLibrary::USE_DHCP_NAME_SERVERS;
917 name_servers.clear();
918 } else if (name_server_type == "google") {
stevenjb 2012/08/13 17:43:44 nit: kNameServerTypeGoogle
Greg Spencer (Chromium) 2012/08/13 23:53:44 Done.
919 name_servers = kGoogleNameServers;
920 }
834 921
835 cros_->SetIPConfig(chromeos::NetworkIPConfig(network->device_path(), 922 cros_->SetIPParameters(service_path,
836 dhcp_str == "true" ? chromeos::IPCONFIG_TYPE_DHCP : 923 address,
837 chromeos::IPCONFIG_TYPE_IPV4, 924 netmask,
838 address, netmask, gateway, name_servers)); 925 gateway,
926 name_servers,
927 dhcp_usage_mask);
839 } 928 }
840 929
841 void InternetOptionsHandler::PopulateDictionaryDetails( 930 void InternetOptionsHandler::PopulateDictionaryDetails(
842 const chromeos::Network* network) { 931 const chromeos::Network* network) {
843 DCHECK(network); 932 DCHECK(network);
844 933
934 // Send off an asynchronous request to Shill to get the service properties
935 // before we continue.
stevenjb 2012/08/13 17:43:44 nit: 'before we continue' implies waiting to me; '
Greg Spencer (Chromium) 2012/08/13 23:53:44 Done.
936 chromeos::CrosRequestNetworkServiceProperties(
937 network->service_path(),
938 base::Bind(&InternetOptionsHandler::PopulateDictionaryDetailsCallback,
939 weak_factory_.GetWeakPtr(), network));
940 }
941
942 void InternetOptionsHandler::PopulateDictionaryDetailsCallback(
943 const chromeos::Network* network,
944 const std::string& service_path,
945 const base::DictionaryValue* shill_properties) {
946 if (VLOG_IS_ON(2)) {
947 std::string properties_json;
948 base::JSONWriter::WriteWithOptions(shill_properties,
949 base::JSONWriter::OPTIONS_PRETTY_PRINT,
950 &properties_json);
951 VLOG(2) << "Shill Properties: " << std::endl << properties_json;
952 }
953
845 if (web_ui()) { 954 if (web_ui()) {
846 Profile::FromWebUI(web_ui())->GetProxyConfigTracker()->UISetCurrentNetwork( 955 Profile::FromWebUI(web_ui())->GetProxyConfigTracker()->UISetCurrentNetwork(
847 network->service_path()); 956 network->service_path());
848 } 957 }
849 958
850 const chromeos::NetworkUIData& ui_data = network->ui_data(); 959 const chromeos::NetworkUIData& ui_data = network->ui_data();
851 const base::DictionaryValue* onc = 960 const base::DictionaryValue* onc =
852 cros_->FindOncForNetwork(network->unique_id()); 961 cros_->FindOncForNetwork(network->unique_id());
853 962
854 DictionaryValue dictionary; 963 base::DictionaryValue dictionary;
855 std::string hardware_address; 964 std::string hardware_address;
856 chromeos::NetworkIPConfigVector ipconfigs = cros_->GetIPConfigs( 965 chromeos::NetworkIPConfigVector ipconfigs = cros_->GetIPConfigs(
857 network->device_path(), &hardware_address, 966 network->device_path(), &hardware_address,
858 chromeos::NetworkLibrary::FORMAT_COLON_SEPARATED_HEX); 967 chromeos::NetworkLibrary::FORMAT_COLON_SEPARATED_HEX);
859 if (!hardware_address.empty()) 968 if (!hardware_address.empty())
860 dictionary.SetString("hardwareAddress", hardware_address); 969 dictionary.SetString("hardwareAddress", hardware_address);
861 970
862 scoped_ptr<DictionaryValue> ipconfig_dhcp; 971 // The DHCP IPConfig contains the values that are actually in use at the
863 scoped_ptr<DictionaryValue> ipconfig_static; 972 // moment, even if some are overridden by static IP values.
973 scoped_ptr<DictionaryValue> ipconfig_dhcp(new DictionaryValue);
974 std::string ipconfig_name_servers;
864 for (chromeos::NetworkIPConfigVector::const_iterator it = ipconfigs.begin(); 975 for (chromeos::NetworkIPConfigVector::const_iterator it = ipconfigs.begin();
865 it != ipconfigs.end(); ++it) { 976 it != ipconfigs.end(); ++it) {
866 const chromeos::NetworkIPConfig& ipconfig = *it; 977 const chromeos::NetworkIPConfig& ipconfig = *it;
867 scoped_ptr<DictionaryValue> ipconfig_dict(new DictionaryValue()); 978 if (ipconfig.type == chromeos::IPCONFIG_TYPE_DHCP) {
868 ipconfig_dict->SetString("address", ipconfig.address); 979 ipconfig_dhcp->SetString("address", ipconfig.address);
stevenjb 2012/08/13 17:43:44 Use consts
Greg Spencer (Chromium) 2012/08/13 23:53:44 Done.
869 ipconfig_dict->SetString("subnetAddress", ipconfig.netmask); 980 VLOG(2) << "Found DHCP Address: " << ipconfig.address;
870 ipconfig_dict->SetString("gateway", ipconfig.gateway); 981 ipconfig_dhcp->SetString("netmask", ipconfig.netmask);
871 ipconfig_dict->SetString("dns", ipconfig.name_servers); 982 VLOG(2) << "Found DHCP Netmask: " << ipconfig.netmask;
872 if (ipconfig.type == chromeos::IPCONFIG_TYPE_DHCP) 983 ipconfig_dhcp->SetString("gateway", ipconfig.gateway);
873 ipconfig_dhcp.reset(ipconfig_dict.release()); 984 VLOG(2) << "Found DHCP Gateway: " << ipconfig.gateway;
874 else if (ipconfig.type == chromeos::IPCONFIG_TYPE_IPV4) 985 ipconfig_dhcp->SetString("nameServers", ipconfig.name_servers);
875 ipconfig_static.reset(ipconfig_dict.release()); 986 ipconfig_name_servers = ipconfig.name_servers; // save for later
987 VLOG(2) << "Found DHCP Name Servers: " << ipconfig.name_servers;
988 break;
989 }
876 } 990 }
877 991
878 chromeos::NetworkPropertyUIData ipconfig_dhcp_ui_data(ui_data); 992 chromeos::NetworkPropertyUIData ipconfig_dhcp_ui_data(ui_data);
879 SetValueDictionary(&dictionary, "ipconfigDHCP", ipconfig_dhcp.release(), 993
994 chromeos::NetworkPropertyUIData static_ip_ui_data(ui_data);
995 int automatic_ip_config;
996 scoped_ptr<DictionaryValue> static_ip_dict(
997 BuildIPInfoDictionary(*shill_properties, true, &automatic_ip_config));
998 dictionary.SetBoolean("ipAutoConfig", automatic_ip_config == 0);
stevenjb 2012/08/13 17:43:44 Use const here and below
Greg Spencer (Chromium) 2012/08/13 23:53:44 Done in my changes at least. Do you want me to fi
999 DCHECK(automatic_ip_config == 3 || automatic_ip_config == 0)
1000 << "UI doesn't support automatic specification of individual "
1001 << "static ip parameters.";
1002 scoped_ptr<DictionaryValue> saved_ip_dict(
1003 BuildIPInfoDictionary(*shill_properties, false, NULL));
1004 dictionary.Set("savedIP", saved_ip_dict.release());
1005
1006 // Determine what kind of name server setting we have by comparing the
1007 // StaticIP and Google values with the ipconfig values.
1008 std::string name_server_type = "automatic";
1009 std::string static_ip_nameservers;
1010 static_ip_dict->GetString("nameServers", &static_ip_nameservers);
1011 if (!static_ip_nameservers.empty() &&
1012 static_ip_nameservers == ipconfig_name_servers) {
1013 name_server_type = "user";
1014 }
1015 if (ipconfig_name_servers == kGoogleNameServers) {
1016 name_server_type = "google";
1017 }
1018
1019 SetValueDictionary(&dictionary, "ipconfig", ipconfig_dhcp.release(),
880 ipconfig_dhcp_ui_data); 1020 ipconfig_dhcp_ui_data);
881 chromeos::NetworkPropertyUIData ipconfig_static_ui_data(ui_data); 1021 SetValueDictionary(&dictionary, "staticIP", static_ip_dict.release(),
882 SetValueDictionary(&dictionary, "ipconfigStatic", ipconfig_static.release(), 1022 static_ip_ui_data);
883 ipconfig_static_ui_data);
884 1023
885 chromeos::ConnectionType type = network->type(); 1024 chromeos::ConnectionType type = network->type();
886 dictionary.SetInteger("type", type); 1025 dictionary.SetInteger("type", type);
887 dictionary.SetString("servicePath", network->service_path()); 1026 dictionary.SetString("servicePath", network->service_path());
888 dictionary.SetBoolean("connecting", network->connecting()); 1027 dictionary.SetBoolean("connecting", network->connecting());
889 dictionary.SetBoolean("connected", network->connected()); 1028 dictionary.SetBoolean("connected", network->connected());
890 dictionary.SetString("connectionState", network->GetStateString()); 1029 dictionary.SetString("connectionState", network->GetStateString());
891 dictionary.SetString("networkName", network->name()); 1030 dictionary.SetString("networkName", network->name());
1031 dictionary.SetString("nameServerType", name_server_type);
1032 dictionary.SetString("nameServersGoogle", kGoogleNameServers);
892 1033
893 // Only show proxy for remembered networks. 1034 // Only show proxy for remembered networks.
894 chromeos::NetworkProfileType network_profile = network->profile_type(); 1035 chromeos::NetworkProfileType network_profile = network->profile_type();
895 dictionary.SetBoolean("showProxy", network_profile != chromeos::PROFILE_NONE); 1036 dictionary.SetBoolean("showProxy", network_profile != chromeos::PROFILE_NONE);
896 1037
897 // Enable static ip config for ethernet. For wifi, enable if flag is set. 1038 // Enable static ip config for ethernet. For wifi, enable if flag is set.
898 bool staticIPConfig = type == chromeos::TYPE_ETHERNET || 1039 bool staticIPConfig = type == chromeos::TYPE_ETHERNET ||
899 (type == chromeos::TYPE_WIFI && 1040 (type == chromeos::TYPE_WIFI &&
900 CommandLine::ForCurrentProcess()->HasSwitch( 1041 CommandLine::ForCurrentProcess()->HasSwitch(
901 switches::kEnableStaticIPConfig)); 1042 switches::kEnableStaticIPConfig));
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
1464 if (default_value) 1605 if (default_value)
1465 value_dict->Set("default", default_value->DeepCopy()); 1606 value_dict->Set("default", default_value->DeepCopy());
1466 if (ui_data.managed()) 1607 if (ui_data.managed())
1467 value_dict->SetString("controlledBy", "policy"); 1608 value_dict->SetString("controlledBy", "policy");
1468 else if (ui_data.recommended()) 1609 else if (ui_data.recommended())
1469 value_dict->SetString("controlledBy", "recommended"); 1610 value_dict->SetString("controlledBy", "recommended");
1470 settings->Set(key, value_dict); 1611 settings->Set(key, value_dict);
1471 } 1612 }
1472 1613
1473 } // namespace options2 1614 } // namespace options2
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698