| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/chromeos/status/network_menu.h" | 5 #include "chrome/browser/chromeos/status/network_menu.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 } else { | 89 } else { |
| 90 info->status = kNetworkStatusDisconnected; | 90 info->status = kNetworkStatusDisconnected; |
| 91 info->message = l10n_util::GetStringUTF8( | 91 info->message = l10n_util::GetStringUTF8( |
| 92 IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); | 92 IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); |
| 93 } | 93 } |
| 94 } else { | 94 } else { |
| 95 info->status = kNetworkStatusDisconnected; | 95 info->status = kNetworkStatusDisconnected; |
| 96 info->message = l10n_util::GetStringUTF8( | 96 info->message = l10n_util::GetStringUTF8( |
| 97 IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); | 97 IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); |
| 98 } | 98 } |
| 99 if (wifi.encrypted()) { |
| 100 if (wifi.IsCertificateLoaded() || |
| 101 wifi.encryption() == SECURITY_8021X) { |
| 102 info->need_passphrase = false; |
| 103 } else { |
| 104 info->need_passphrase = true; |
| 105 } |
| 106 } else { |
| 107 info->need_passphrase = false; |
| 108 } |
| 99 info->ip_address = wifi.ip_address(); | 109 info->ip_address = wifi.ip_address(); |
| 100 info->need_passphrase = wifi.encrypted(); | |
| 101 info->remembered = wifi.favorite(); | 110 info->remembered = wifi.favorite(); |
| 102 } else { | 111 } else { |
| 103 res = false; // Network not found, hide entry. | 112 res = false; // Network not found, hide entry. |
| 104 } | 113 } |
| 105 } else if (flags & FLAG_CELLULAR) { | 114 } else if (flags & FLAG_CELLULAR) { |
| 106 CellularNetwork cellular; | 115 CellularNetwork cellular; |
| 107 bool found = cros->FindCellularNetworkByPath( | 116 bool found = cros->FindCellularNetworkByPath( |
| 108 menu_items_[index].wireless_path, &cellular); | 117 menu_items_[index].wireless_path, &cellular); |
| 109 if (found) { | 118 if (found) { |
| 110 info->network_type = kNetworkTypeCellular; | 119 info->network_type = kNetworkTypeCellular; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); | 153 IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); |
| 145 info->network_type = kNetworkTypeOther; | 154 info->network_type = kNetworkTypeOther; |
| 146 info->need_passphrase = true; | 155 info->need_passphrase = true; |
| 147 info->remembered = true; | 156 info->remembered = true; |
| 148 } else { | 157 } else { |
| 149 // Not a network, e.g options, separator. | 158 // Not a network, e.g options, separator. |
| 150 } | 159 } |
| 151 return res; | 160 return res; |
| 152 } | 161 } |
| 153 | 162 |
| 154 void NetworkMenu::ConnectToNetworkAt(int index, | 163 bool NetworkMenu::ConnectToNetworkAt(int index, |
| 155 const std::string& passphrase, | 164 const std::string& passphrase, |
| 156 const std::string& identity) const { | 165 const std::string& ssid, |
| 166 int remember) const { |
| 157 int flags = menu_items_[index].flags; | 167 int flags = menu_items_[index].flags; |
| 158 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); | 168 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
| 159 if (flags & FLAG_WIFI) { | 169 if (flags & FLAG_WIFI) { |
| 160 WifiNetwork wifi; | 170 WifiNetwork wifi; |
| 161 bool found = cros->FindWifiNetworkByPath( | 171 bool found = cros->FindWifiNetworkByPath( |
| 162 menu_items_[index].wireless_path, &wifi); | 172 menu_items_[index].wireless_path, &wifi); |
| 163 if (found) { | 173 if (found) { |
| 164 // Connect or reconnect. | 174 // Connect or reconnect. |
| 175 if (remember >= 0) |
| 176 wifi.set_favorite(remember ? true : false); |
| 165 if (wifi.encrypted()) { | 177 if (wifi.encrypted()) { |
| 166 if (wifi.IsCertificateLoaded()) { | 178 if (wifi.IsCertificateLoaded()) { |
| 167 cros->ConnectToWifiNetwork(wifi, std::string(), | 179 cros->ConnectToWifiNetwork(wifi, std::string(), std::string(), |
| 168 std::string(), wifi.cert_path()); | 180 wifi.cert_path()); |
| 181 } else if (wifi.encryption() == SECURITY_8021X) { |
| 182 // Show the wifi settings/dialog to load/select a certificate. |
| 183 ShowWifi(wifi, true); |
| 169 } else { | 184 } else { |
| 170 // TODO(stevenjb): use passphrase/identity once provided. | 185 cros->ConnectToWifiNetwork(wifi, passphrase, std::string(), |
| 171 // cros->ConnectToWifiNetwork(wifi, passphrase, | 186 std::string()); |
| 172 // identity, menu_items[index].path); | |
| 173 const bool kFocusLogin = true; | |
| 174 ShowNetworkConfigView(new NetworkConfigView(wifi, true), kFocusLogin); | |
| 175 } | 187 } |
| 176 } else { | 188 } else { |
| 177 cros->ConnectToWifiNetwork(wifi, std::string(), | 189 cros->ConnectToWifiNetwork(wifi, std::string(), std::string(), |
| 178 std::string(), std::string()); | 190 std::string()); |
| 179 } | 191 } |
| 180 } | 192 } |
| 181 } else if (flags & FLAG_CELLULAR) { | 193 } else if (flags & FLAG_CELLULAR) { |
| 182 CellularNetwork cellular; | 194 CellularNetwork cellular; |
| 183 bool found = cros->FindCellularNetworkByPath( | 195 bool found = cros->FindCellularNetworkByPath( |
| 184 menu_items_[index].wireless_path, &cellular); | 196 menu_items_[index].wireless_path, &cellular); |
| 185 if (found) { | 197 if (found) { |
| 186 // Connect or reconnect. | 198 // Connect or reconnect. |
| 187 cros->ConnectToCellularNetwork(cellular); | 199 cros->ConnectToCellularNetwork(cellular); |
| 188 } | 200 } |
| 189 } else if (flags & FLAG_OTHER_NETWORK) { | 201 } else if (flags & FLAG_OTHER_NETWORK) { |
| 190 const bool kFocusLogin = true; | 202 bool favorite = remember == 0 ? false : true; // default is true |
| 191 ShowNetworkConfigView(new NetworkConfigView(), kFocusLogin); | 203 cros->ConnectToWifiNetwork(ssid, passphrase, std::string(), std::string(), |
| 204 favorite); |
| 192 } | 205 } |
| 206 return true; |
| 193 } | 207 } |
| 194 | 208 |
| 195 //////////////////////////////////////////////////////////////////////////////// | 209 //////////////////////////////////////////////////////////////////////////////// |
| 196 // NetworkMenu, menus::MenuModel implementation: | 210 // NetworkMenu, menus::MenuModel implementation: |
| 197 | 211 |
| 198 int NetworkMenu::GetItemCount() const { | 212 int NetworkMenu::GetItemCount() const { |
| 199 return static_cast<int>(menu_items_.size()); | 213 return static_cast<int>(menu_items_.size()); |
| 200 } | 214 } |
| 201 | 215 |
| 202 menus::MenuModel::ItemType NetworkMenu::GetTypeAt(int index) const { | 216 menus::MenuModel::ItemType NetworkMenu::GetTypeAt(int index) const { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 OpenButtonOptions(); | 255 OpenButtonOptions(); |
| 242 } else if (flags & FLAG_TOGGLE_ETHERNET) { | 256 } else if (flags & FLAG_TOGGLE_ETHERNET) { |
| 243 cros->EnableEthernetNetworkDevice(!cros->ethernet_enabled()); | 257 cros->EnableEthernetNetworkDevice(!cros->ethernet_enabled()); |
| 244 } else if (flags & FLAG_TOGGLE_WIFI) { | 258 } else if (flags & FLAG_TOGGLE_WIFI) { |
| 245 cros->EnableWifiNetworkDevice(!cros->wifi_enabled()); | 259 cros->EnableWifiNetworkDevice(!cros->wifi_enabled()); |
| 246 } else if (flags & FLAG_TOGGLE_CELLULAR) { | 260 } else if (flags & FLAG_TOGGLE_CELLULAR) { |
| 247 cros->EnableCellularNetworkDevice(!cros->cellular_enabled()); | 261 cros->EnableCellularNetworkDevice(!cros->cellular_enabled()); |
| 248 } else if (flags & FLAG_TOGGLE_OFFLINE) { | 262 } else if (flags & FLAG_TOGGLE_OFFLINE) { |
| 249 cros->EnableOfflineMode(!cros->offline_mode()); | 263 cros->EnableOfflineMode(!cros->offline_mode()); |
| 250 } else if (flags & FLAG_OTHER_NETWORK) { | 264 } else if (flags & FLAG_OTHER_NETWORK) { |
| 251 const bool kFocusLogin = true; | 265 ShowOther(); |
| 252 ShowNetworkConfigView(new NetworkConfigView(), kFocusLogin); | |
| 253 } else if (flags & FLAG_ETHERNET) { | 266 } else if (flags & FLAG_ETHERNET) { |
| 254 if (cros->ethernet_connected()) { | 267 if (cros->ethernet_connected()) { |
| 255 if (CommandLine::ForCurrentProcess()->HasSwitch( | 268 ShowEthernet(cros->ethernet_network()); |
| 256 switches::kEnableTabbedOptions)) { | |
| 257 ShowTabbedNetworkSettings(cros->ethernet_network()); | |
| 258 } else { | |
| 259 ShowNetworkConfigView( | |
| 260 new NetworkConfigView(cros->ethernet_network()), false); | |
| 261 } | |
| 262 } | 269 } |
| 263 } else if (flags & FLAG_WIFI) { | 270 } else if (flags & FLAG_WIFI) { |
| 264 WifiNetwork wifi; | 271 WifiNetwork wifi; |
| 265 bool wifi_exists = cros->FindWifiNetworkByPath( | 272 bool wifi_exists = cros->FindWifiNetworkByPath( |
| 266 menu_items_[index].wireless_path, &wifi); | 273 menu_items_[index].wireless_path, &wifi); |
| 267 if (!wifi_exists) { | 274 if (!wifi_exists) { |
| 268 // If we are attempting to connect to a network that no longer exists, | 275 // If we are attempting to connect to a network that no longer exists, |
| 269 // display a notification. | 276 // display a notification. |
| 270 // TODO(stevenjb): Show notification. | 277 // TODO(stevenjb): Show notification. |
| 271 } else if (wifi.name() == cros->wifi_name()) { | 278 } else if (wifi.name() == cros->wifi_name()) { |
| 272 if (cros->wifi_connected()) { | 279 // Show the config settings for the active network. |
| 273 // If we are already connected, show the config settings. | 280 ShowWifi(wifi, false); |
| 274 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
| 275 switches::kEnableTabbedOptions)) { | |
| 276 ShowTabbedNetworkSettings(wifi); | |
| 277 } else { | |
| 278 ShowNetworkConfigView(new NetworkConfigView(wifi, false), false); | |
| 279 } | |
| 280 } else { | |
| 281 // TODO(stevenjb): Connection in progress. Show dialog? | |
| 282 } | |
| 283 } else { | 281 } else { |
| 284 // If wifi network is not encrypted, then directly connect. | 282 ConnectToNetworkAt(index, std::string(), std::string(), -1); |
| 285 // Otherwise, open the password dialog window. | |
| 286 if (!wifi.encrypted()) { | |
| 287 cros->ConnectToWifiNetwork(wifi, std::string(), | |
| 288 std::string(), std::string()); | |
| 289 } else { | |
| 290 const bool kFocusLogin = true; | |
| 291 ShowNetworkConfigView(new NetworkConfigView(wifi, true), kFocusLogin); | |
| 292 } | |
| 293 } | 283 } |
| 294 } else if (flags & FLAG_CELLULAR) { | 284 } else if (flags & FLAG_CELLULAR) { |
| 295 CellularNetwork cellular; | 285 CellularNetwork cellular; |
| 296 bool cellular_exists = cros->FindCellularNetworkByPath( | 286 bool cellular_exists = cros->FindCellularNetworkByPath( |
| 297 menu_items_[index].wireless_path, &cellular); | 287 menu_items_[index].wireless_path, &cellular); |
| 298 | |
| 299 if (!cellular_exists) { | 288 if (!cellular_exists) { |
| 300 // If we are attempting to connect to a network that no longer exists, | 289 // If we are attempting to connect to a network that no longer exists, |
| 301 // display a notification. | 290 // display a notification. |
| 302 // TODO(stevenjb): Show notification. | 291 // TODO(stevenjb): Show notification. |
| 303 } else if (cellular.name() == cros->cellular_name()) { | 292 } else if (cellular.name() == cros->cellular_name()) { |
| 304 // If clicked on a network that we are already connected to or we are | 293 // Show the config settings for the cellular network. |
| 305 // currently trying to connect to, then open config dialog. | 294 ShowCellular(cellular, false); |
| 306 if (cros->cellular_connected()) { | |
| 307 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
| 308 switches::kEnableTabbedOptions)) { | |
| 309 ShowTabbedNetworkSettings(cellular); | |
| 310 } else { | |
| 311 ShowNetworkConfigView(new NetworkConfigView(cellular), false); | |
| 312 } | |
| 313 } else { | |
| 314 // TODO(stevenjb): Connection in progress. Show dialog? | |
| 315 } | |
| 316 } else { | 295 } else { |
| 317 cros->ConnectToCellularNetwork(cellular); | 296 ConnectToNetworkAt(index, std::string(), std::string(), -1); |
| 318 } | 297 } |
| 319 } | 298 } |
| 320 } | 299 } |
| 321 | 300 |
| 322 void NetworkMenu::SetFirstLevelMenuWidth(int width) { | 301 void NetworkMenu::SetFirstLevelMenuWidth(int width) { |
| 323 min_width_ = width; | 302 min_width_ = width; |
| 324 // This actually has no effect since menu is rebuilt before showing. | 303 // This actually has no effect since menu is rebuilt before showing. |
| 325 network_menu_->SetMinimumWidth(width); | 304 network_menu_->SetMinimumWidth(width); |
| 326 } | 305 } |
| 327 | 306 |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 // Network settings. | 497 // Network settings. |
| 519 if (ShouldOpenButtonOptions()) { | 498 if (ShouldOpenButtonOptions()) { |
| 520 label = | 499 label = |
| 521 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_OPEN_OPTIONS_DIALOG); | 500 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_OPEN_OPTIONS_DIALOG); |
| 522 menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, | 501 menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, |
| 523 SkBitmap(), std::string(), FLAG_OPTIONS)); | 502 SkBitmap(), std::string(), FLAG_OPTIONS)); |
| 524 } | 503 } |
| 525 } | 504 } |
| 526 } | 505 } |
| 527 | 506 |
| 528 void NetworkMenu::ShowTabbedNetworkSettings(const Network& network) { | 507 void NetworkMenu::ShowTabbedNetworkSettings(const Network& network) const { |
| 529 Browser* browser = BrowserList::GetLastActive(); | 508 Browser* browser = BrowserList::GetLastActive(); |
| 530 if (!browser) | 509 if (!browser) |
| 531 return; | 510 return; |
| 532 std::string page = StringPrintf("%s?servicePath=%s&networkType=%d", | 511 std::string page = StringPrintf("%s?servicePath=%s&networkType=%d", |
| 533 chrome::kInternetOptionsSubPage, | 512 chrome::kInternetOptionsSubPage, |
| 534 EscapeUrlEncodedData(network.service_path()).c_str(), | 513 EscapeUrlEncodedData(network.service_path()).c_str(), |
| 535 network.type()); | 514 network.type()); |
| 536 browser->ShowOptionsTab(page); | 515 browser->ShowOptionsTab(page); |
| 537 } | 516 } |
| 538 | 517 |
| 539 // TODO(stevenjb): deprecate this once all of the UI is embedded in the menu. | 518 // TODO(stevenjb): deprecate this once we've committed to the embedded |
| 519 // menu UI and fully deprecated NetworkConfigView. |
| 540 void NetworkMenu::ShowNetworkConfigView(NetworkConfigView* view, | 520 void NetworkMenu::ShowNetworkConfigView(NetworkConfigView* view, |
| 541 bool focus_login) const { | 521 bool focus_login) const { |
| 542 view->set_browser_mode(IsBrowserMode()); | 522 view->set_browser_mode(IsBrowserMode()); |
| 543 views::Window* window = browser::CreateViewsWindow( | 523 views::Window* window = browser::CreateViewsWindow( |
| 544 GetNativeWindow(), gfx::Rect(), view); | 524 GetNativeWindow(), gfx::Rect(), view); |
| 545 window->SetIsAlwaysOnTop(true); | 525 window->SetIsAlwaysOnTop(true); |
| 546 window->Show(); | 526 window->Show(); |
| 547 if (focus_login) | 527 if (focus_login) |
| 548 view->SetLoginTextfieldFocus(); | 528 view->SetLoginTextfieldFocus(); |
| 549 } | 529 } |
| 550 | 530 |
| 531 void NetworkMenu::ShowWifi(const WifiNetwork& wifi, bool focus_login) const{ |
| 532 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 533 switches::kEnableTabbedOptions)) { |
| 534 ShowTabbedNetworkSettings(wifi); |
| 535 } else { |
| 536 ShowNetworkConfigView(new NetworkConfigView(wifi, true), focus_login); |
| 537 } |
| 538 } |
| 539 |
| 540 void NetworkMenu::ShowCellular(const CellularNetwork& cellular, |
| 541 bool focus_login) const { |
| 542 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 543 switches::kEnableTabbedOptions)) { |
| 544 ShowTabbedNetworkSettings(cellular); |
| 545 } else { |
| 546 ShowNetworkConfigView(new NetworkConfigView(cellular), focus_login); |
| 547 } |
| 548 } |
| 549 |
| 550 void NetworkMenu::ShowEthernet(const EthernetNetwork& ethernet) const { |
| 551 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 552 switches::kEnableTabbedOptions)) { |
| 553 ShowTabbedNetworkSettings(ethernet); |
| 554 } else { |
| 555 ShowNetworkConfigView(new NetworkConfigView(ethernet), false); |
| 556 } |
| 557 } |
| 558 |
| 559 void NetworkMenu::ShowOther() const { |
| 560 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 561 switches::kEnableTabbedOptions)) { |
| 562 Browser* browser = BrowserList::GetLastActive(); |
| 563 if (browser) { |
| 564 std::string page = StringPrintf("%s?networkType=%d", |
| 565 chrome::kInternetOptionsSubPage, |
| 566 chromeos::TYPE_WIFI); |
| 567 browser->ShowOptionsTab(page); |
| 568 } |
| 569 } else { |
| 570 const bool kFocusLogin = true; |
| 571 ShowNetworkConfigView(new NetworkConfigView(), kFocusLogin); |
| 572 } |
| 573 } |
| 574 |
| 551 } // namespace chromeos | 575 } // namespace chromeos |
| OLD | NEW |