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

Side by Side Diff: chrome/browser/chromeos/status/network_menu.cc

Issue 9690021: chromeos: Refactor some network related code in preparation for the uber tray. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 9 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
« no previous file with comments | « chrome/browser/chromeos/status/network_menu.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/chromeos/status/network_menu.h" 5 #include "chrome/browser/chromeos/status/network_menu.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 views::View* item = submenu->child_at(i); 80 views::View* item = submenu->child_at(i);
81 if (item->id() == views::MenuItemView::kMenuItemViewID) { 81 if (item->id() == views::MenuItemView::kMenuItemViewID) {
82 views::MenuItemView* menu_item = 82 views::MenuItemView* menu_item =
83 static_cast<views::MenuItemView*>(item); 83 static_cast<views::MenuItemView*>(item);
84 SetMenuMargins(menu_item, top, bottom); 84 SetMenuMargins(menu_item, top, bottom);
85 } 85 }
86 } 86 }
87 } 87 }
88 } 88 }
89 89
90 // Activate a cellular network.
91 void ActivateCellular(const chromeos::CellularNetwork* cellular) {
92 DCHECK(cellular);
93 Browser* browser = BrowserList::GetLastActive();
94 if (!browser)
95 return;
96 browser->OpenMobilePlanTabAndActivate();
97 }
98
90 } // namespace 99 } // namespace
91 100
92 namespace chromeos { 101 namespace chromeos {
93 102
94 class NetworkMenuModel : public ui::MenuModel { 103 class NetworkMenuModel : public ui::MenuModel {
95 public: 104 public:
96 struct MenuItem { 105 struct MenuItem {
97 MenuItem() 106 MenuItem()
98 : type(ui::MenuModel::TYPE_SEPARATOR), 107 : type(ui::MenuModel::TYPE_SEPARATOR),
99 sub_menu_model(NULL), 108 sub_menu_model(NULL),
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 // Top up URL of the current carrier on empty string if there's none. 204 // Top up URL of the current carrier on empty string if there's none.
196 std::string top_up_url_; 205 std::string top_up_url_;
197 206
198 // Carrier ID which top up URL is initialized for. 207 // Carrier ID which top up URL is initialized for.
199 // Used to update top up URL only when cellular carrier has changed. 208 // Used to update top up URL only when cellular carrier has changed.
200 std::string carrier_id_; 209 std::string carrier_id_;
201 210
202 private: 211 private:
203 // Show a NetworkConfigView modal dialog instance. 212 // Show a NetworkConfigView modal dialog instance.
204 void ShowNetworkConfigView(NetworkConfigView* view) const; 213 void ShowNetworkConfigView(NetworkConfigView* view) const;
205 // Activate a cellular network.
206 void ActivateCellular(const CellularNetwork* cellular) const;
207 // Open a dialog to set up and connect to a network. 214 // Open a dialog to set up and connect to a network.
208 void ShowOther(ConnectionType type) const; 215 void ShowOther(ConnectionType type) const;
209 216
210 DISALLOW_COPY_AND_ASSIGN(NetworkMenuModel); 217 DISALLOW_COPY_AND_ASSIGN(NetworkMenuModel);
211 }; 218 };
212 219
213
214 class MoreMenuModel : public NetworkMenuModel { 220 class MoreMenuModel : public NetworkMenuModel {
215 public: 221 public:
216 explicit MoreMenuModel(const base::WeakPtr<NetworkMenu> owner) 222 explicit MoreMenuModel(const base::WeakPtr<NetworkMenu> owner)
217 : NetworkMenuModel(owner) {} 223 : NetworkMenuModel(owner) {}
218 virtual ~MoreMenuModel() {} 224 virtual ~MoreMenuModel() {}
219 225
220 // NetworkMenuModel implementation. 226 // NetworkMenuModel implementation.
221 virtual void InitMenuItems(bool should_open_button_options) OVERRIDE; 227 virtual void InitMenuItems(bool should_open_button_options) OVERRIDE;
222 228
223 // ui::MenuModel implementation 229 // ui::MenuModel implementation
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 int auto_connect) const { 280 int auto_connect) const {
275 int flags = menu_items_[index].flags; 281 int flags = menu_items_[index].flags;
276 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); 282 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
277 const std::string& service_path = menu_items_[index].service_path; 283 const std::string& service_path = menu_items_[index].service_path;
278 if (flags & FLAG_WIFI) { 284 if (flags & FLAG_WIFI) {
279 WifiNetwork* wifi = cros->FindWifiNetworkByPath(service_path); 285 WifiNetwork* wifi = cros->FindWifiNetworkByPath(service_path);
280 if (wifi) { 286 if (wifi) {
281 // Connect or reconnect. 287 // Connect or reconnect.
282 if (auto_connect >= 0) 288 if (auto_connect >= 0)
283 wifi->SetAutoConnect(auto_connect ? true : false); 289 wifi->SetAutoConnect(auto_connect ? true : false);
284 if (wifi->connecting_or_connected()) { 290 owner_->ConnectToNetwork(wifi);
285 // Show the config settings for the active network.
286 owner_->ShowTabbedNetworkSettings(wifi);
287 } else {
288 wifi->AttemptConnection(base::Bind(&NetworkMenu::DoConnect,
289 owner_,
290 wifi));
291 }
292 } else { 291 } else {
293 // If we are attempting to connect to a network that no longer exists, 292 // If we are attempting to connect to a network that no longer exists,
294 // display a notification. 293 // display a notification.
295 LOG(WARNING) << "Wi-fi network does not exist to connect to: " 294 LOG(WARNING) << "Wi-fi network does not exist to connect to: "
296 << service_path; 295 << service_path;
297 // TODO(stevenjb): Show notification. 296 // TODO(stevenjb): Show notification.
298 } 297 }
299 } else if (flags & FLAG_CELLULAR) { 298 } else if (flags & FLAG_CELLULAR) {
300 CellularNetwork* cellular = cros->FindCellularNetworkByPath( 299 CellularNetwork* cellular = cros->FindCellularNetworkByPath(
301 service_path); 300 service_path);
302 if (cellular) { 301 if (cellular) {
303 if ((cellular->activation_state() != ACTIVATION_STATE_ACTIVATED && 302 owner_->ConnectToNetwork(cellular);
304 cellular->activation_state() != ACTIVATION_STATE_UNKNOWN) ||
305 cellular->needs_new_plan()) {
306 ActivateCellular(cellular);
307 } else if (cellular->connecting_or_connected()) {
308 // Cellular network is connecting or connected,
309 // so we show the config settings for the cellular network.
310 owner_->ShowTabbedNetworkSettings(cellular);
311 } else {
312 // Clicked on a disconnected cellular network, so connect to it.
313 cros->ConnectToCellularNetwork(cellular);
314 }
315 } else { 303 } else {
316 // If we are attempting to connect to a network that no longer exists, 304 // If we are attempting to connect to a network that no longer exists,
317 // display a notification. 305 // display a notification.
318 LOG(WARNING) << "Cellular network does not exist to connect to: " 306 LOG(WARNING) << "Cellular network does not exist to connect to: "
319 << service_path; 307 << service_path;
320 // TODO(stevenjb): Show notification. 308 // TODO(stevenjb): Show notification.
321 } 309 }
322 } else if (flags & FLAG_ADD_WIFI) { 310 } else if (flags & FLAG_ADD_WIFI) {
323 ShowOther(TYPE_WIFI); 311 ShowOther(TYPE_WIFI);
324 } else if (flags & FLAG_ADD_CELLULAR) { 312 } else if (flags & FLAG_ADD_CELLULAR) {
325 ShowOther(TYPE_CELLULAR); 313 ShowOther(TYPE_CELLULAR);
326 } else if (flags & FLAG_ADD_VPN) { 314 } else if (flags & FLAG_ADD_VPN) {
327 ShowOther(TYPE_VPN); 315 ShowOther(TYPE_VPN);
328 } else if (flags & FLAG_VPN) { 316 } else if (flags & FLAG_VPN) {
329 VirtualNetwork* vpn = cros->FindVirtualNetworkByPath(service_path); 317 VirtualNetwork* vpn = cros->FindVirtualNetworkByPath(service_path);
330 if (vpn) { 318 if (vpn) {
331 // Connect or reconnect. 319 owner_->ConnectToNetwork(vpn);
332 if (vpn->connecting_or_connected()) {
333 // Show the config settings for the connected network.
334 if (cros->connected_network())
335 owner_->ShowTabbedNetworkSettings(cros->connected_network());
336 } else {
337 vpn->AttemptConnection(base::Bind(&NetworkMenu::DoConnect,
338 owner_,
339 vpn));
340 }
341 } else { 320 } else {
342 // If we are attempting to connect to a network that no longer exists, 321 // If we are attempting to connect to a network that no longer exists,
343 // display a notification. 322 // display a notification.
344 LOG(WARNING) << "VPN does not exist to connect to: " << service_path; 323 LOG(WARNING) << "VPN does not exist to connect to: " << service_path;
345 // TODO(stevenjb): Show notification. 324 // TODO(stevenjb): Show notification.
346 } 325 }
347 } 326 }
348 } 327 }
349 328
329 void NetworkMenu::ConnectToNetwork(Network* network) {
330 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
331 switch (network->type()) {
332 case TYPE_ETHERNET: {
333 ShowTabbedNetworkSettings(network);
334 break;
335 }
336 case TYPE_WIFI: {
337 WifiNetwork* wifi = static_cast<WifiNetwork*>(network);
338 if (wifi->connecting_or_connected()) {
339 ShowTabbedNetworkSettings(wifi);
340 } else {
341 wifi->AttemptConnection(base::Bind(&NetworkMenu::DoConnect,
342 weak_pointer_factory_.GetWeakPtr(),
343 wifi));
344 }
345 break;
346 }
347
348 case TYPE_CELLULAR: {
349 CellularNetwork* cell = static_cast<CellularNetwork*>(network);
350 if (cell->NeedsActivation()) {
351 ActivateCellular(cell);
352 } else if (cell->connecting_or_connected()) {
353 // Cellular network is connecting or connected,
354 // so we show the config settings for the cellular network.
355 ShowTabbedNetworkSettings(cell);
356 } else {
357 // Clicked on a disconnected cellular network, so connect to it.
358 cros->ConnectToCellularNetwork(cell);
359 }
360 break;
361 }
362
363 case TYPE_VPN: {
364 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network);
365 // Connect or reconnect.
366 if (vpn->connecting_or_connected()) {
367 ShowTabbedNetworkSettings(vpn);
368 } else {
369 vpn->AttemptConnection(base::Bind(&NetworkMenu::DoConnect,
370 weak_pointer_factory_.GetWeakPtr(),
371 vpn));
372 }
373 break;
374 }
375
376 default:
377 break;
378 }
379 }
380
350 //////////////////////////////////////////////////////////////////////////////// 381 ////////////////////////////////////////////////////////////////////////////////
351 // NetworkMenuModel, ui::MenuModel implementation: 382 // NetworkMenuModel, ui::MenuModel implementation:
352 383
353 bool NetworkMenuModel::HasIcons() const { 384 bool NetworkMenuModel::HasIcons() const {
354 return true; 385 return true;
355 } 386 }
356 387
357 int NetworkMenuModel::GetItemCount() const { 388 int NetworkMenuModel::GetItemCount() const {
358 return static_cast<int>(menu_items_.size()); 389 return static_cast<int>(menu_items_.size());
359 } 390 }
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 } else if (cellular->sim_lock_state() == SIM_UNLOCKED || 475 } else if (cellular->sim_lock_state() == SIM_UNLOCKED ||
445 cellular->sim_lock_state() == SIM_UNKNOWN) { 476 cellular->sim_lock_state() == SIM_UNKNOWN) {
446 cros->EnableCellularNetworkDevice(!cros->cellular_enabled()); 477 cros->EnableCellularNetworkDevice(!cros->cellular_enabled());
447 } else { 478 } else {
448 SimDialogDelegate::ShowDialog(owner_->delegate()->GetNativeWindow(), 479 SimDialogDelegate::ShowDialog(owner_->delegate()->GetNativeWindow(),
449 SimDialogDelegate::SIM_DIALOG_UNLOCK); 480 SimDialogDelegate::SIM_DIALOG_UNLOCK);
450 } 481 }
451 } else if (flags & FLAG_TOGGLE_OFFLINE) { 482 } else if (flags & FLAG_TOGGLE_OFFLINE) {
452 cros->EnableOfflineMode(!cros->offline_mode()); 483 cros->EnableOfflineMode(!cros->offline_mode());
453 } else if (flags & FLAG_ETHERNET) { 484 } else if (flags & FLAG_ETHERNET) {
454 if (cros->ethernet_connected()) { 485 if (cros->ethernet_connected())
455 owner_->ShowTabbedNetworkSettings(cros->ethernet_network()); 486 owner_->ShowTabbedNetworkSettings(cros->ethernet_network());
456 }
457 } else if (flags & (FLAG_WIFI | FLAG_ADD_WIFI | 487 } else if (flags & (FLAG_WIFI | FLAG_ADD_WIFI |
458 FLAG_CELLULAR | FLAG_ADD_CELLULAR | 488 FLAG_CELLULAR | FLAG_ADD_CELLULAR |
459 FLAG_VPN | FLAG_ADD_VPN)) { 489 FLAG_VPN | FLAG_ADD_VPN)) {
460 ConnectToNetworkAt(index, std::string(), std::string(), -1); 490 ConnectToNetworkAt(index, std::string(), std::string(), -1);
461 } else if (flags & FLAG_DISCONNECT_VPN) { 491 } else if (flags & FLAG_DISCONNECT_VPN) {
462 const VirtualNetwork* active_vpn = cros->virtual_network(); 492 const VirtualNetwork* active_vpn = cros->virtual_network();
463 if (active_vpn) 493 if (active_vpn)
464 cros->DisconnectFromNetwork(active_vpn); 494 cros->DisconnectFromNetwork(active_vpn);
465 } else if (flags & FLAG_VIEW_ACCOUNT) { 495 } else if (flags & FLAG_VIEW_ACCOUNT) {
466 Browser* browser = BrowserList::GetLastActive(); 496 Browser* browser = BrowserList::GetLastActive();
467 if (browser) 497 if (browser)
468 browser->ShowSingletonTab(GURL(top_up_url_)); 498 browser->ShowSingletonTab(GURL(top_up_url_));
469 } 499 }
470 } 500 }
471 501
472 void NetworkMenuModel::SetMenuModelDelegate(ui::MenuModelDelegate* delegate) { 502 void NetworkMenuModel::SetMenuModelDelegate(ui::MenuModelDelegate* delegate) {
473 } 503 }
474 504
475 //////////////////////////////////////////////////////////////////////////////// 505 ////////////////////////////////////////////////////////////////////////////////
476 // NetworkMenuModel, private methods: 506 // NetworkMenuModel, private methods:
477 507
478 void NetworkMenuModel::ShowNetworkConfigView(NetworkConfigView* view) const { 508 void NetworkMenuModel::ShowNetworkConfigView(NetworkConfigView* view) const {
479 views::Widget* window = browser::CreateViewsWindow( 509 views::Widget* window = browser::CreateViewsWindow(
480 owner_->delegate()->GetNativeWindow(), view, STYLE_GENERIC); 510 owner_->delegate()->GetNativeWindow(), view, STYLE_GENERIC);
481 window->SetAlwaysOnTop(true); 511 window->SetAlwaysOnTop(true);
482 window->Show(); 512 window->Show();
483 } 513 }
484 514
485 void NetworkMenuModel::ActivateCellular(const CellularNetwork* cellular) const {
486 DCHECK(cellular);
487 Browser* browser = BrowserList::GetLastActive();
488 if (!browser)
489 return;
490 browser->OpenMobilePlanTabAndActivate();
491 }
492
493 void NetworkMenuModel::ShowOther(ConnectionType type) const { 515 void NetworkMenuModel::ShowOther(ConnectionType type) const {
494 if (type == TYPE_CELLULAR) { 516 if (type == TYPE_CELLULAR) {
495 ChooseMobileNetworkDialog::ShowDialog( 517 ChooseMobileNetworkDialog::ShowDialog(
496 owner_->delegate()->GetNativeWindow()); 518 owner_->delegate()->GetNativeWindow());
497 } else { 519 } else {
498 ShowNetworkConfigView(new NetworkConfigView(type)); 520 ShowNetworkConfigView(new NetworkConfigView(type));
499 } 521 }
500 } 522 }
501 523
502 //////////////////////////////////////////////////////////////////////////////// 524 ////////////////////////////////////////////////////////////////////////////////
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 delegate_->GetMenuButton(), bounds, views::MenuItemView::TOPRIGHT, 1055 delegate_->GetMenuButton(), bounds, views::MenuItemView::TOPRIGHT,
1034 views::MenuRunner::HAS_MNEMONICS) == views::MenuRunner::MENU_DELETED) 1056 views::MenuRunner::HAS_MNEMONICS) == views::MenuRunner::MENU_DELETED)
1035 return; 1057 return;
1036 } 1058 }
1037 1059
1038 void NetworkMenu::ShowTabbedNetworkSettings(const Network* network) const { 1060 void NetworkMenu::ShowTabbedNetworkSettings(const Network* network) const {
1039 DCHECK(network); 1061 DCHECK(network);
1040 Browser* browser = BrowserList::GetLastActive(); 1062 Browser* browser = BrowserList::GetLastActive();
1041 if (!browser) 1063 if (!browser)
1042 return; 1064 return;
1065
1066 // In case of a VPN, show the config settings for the connected network.
1067 if (network->type() == chromeos::TYPE_VPN) {
1068 network = CrosLibrary::Get()->GetNetworkLibrary()->connected_network();
1069 if (!network)
1070 return;
1071 }
1072
1043 std::string network_name(network->name()); 1073 std::string network_name(network->name());
1044 if (network_name.empty() && network->type() == chromeos::TYPE_ETHERNET) { 1074 if (network_name.empty() && network->type() == chromeos::TYPE_ETHERNET) {
1045 network_name = l10n_util::GetStringUTF8( 1075 network_name = l10n_util::GetStringUTF8(
1046 IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); 1076 IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET);
1047 } 1077 }
1048 std::string page = StringPrintf( 1078 std::string page = StringPrintf(
1049 "%s?servicePath=%s&networkType=%d&networkName=%s", 1079 "%s?servicePath=%s&networkType=%d&networkName=%s",
1050 chrome::kInternetOptionsSubPage, 1080 chrome::kInternetOptionsSubPage,
1051 net::EscapeUrlEncodedData(network->service_path(), true).c_str(), 1081 net::EscapeUrlEncodedData(network->service_path(), true).c_str(),
1052 network->type(), 1082 network->type(),
(...skipping 29 matching lines...) Expand all
1082 window->Show(); 1112 window->Show();
1083 } else { 1113 } else {
1084 cros->ConnectToWifiNetwork(wifi); 1114 cros->ConnectToWifiNetwork(wifi);
1085 // Connection failures are responsible for updating the UI, including 1115 // Connection failures are responsible for updating the UI, including
1086 // reopening dialogs. 1116 // reopening dialogs.
1087 } 1117 }
1088 } 1118 }
1089 } 1119 }
1090 1120
1091 } // namespace chromeos 1121 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/status/network_menu.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698