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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ 6 #define CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/weak_ptr.h" 13 #include "base/strings/string16.h" 14 #include "ui/gfx/native_widget_types.h" // gfx::NativeWindow 15 16 class Browser; 17 18 namespace ui { 19 class MenuModel; 20 } 21 22 namespace views { 23 class MenuItemView; 24 class MenuButton; 25 class MenuRunner; 26 } 27 28 namespace chromeos { 29 30 class NetworkMenuModel; 31 32 // This class builds and manages a ui::MenuModel used to build network 33 // menus. It does not represent an actual menu widget. The menu is populated 34 // with the list of wifi and mobile networks, and handles connecting to 35 // existing networks or spawning UI to configure a new network. 36 // 37 // This class is now only used to build the dropdown menu in the oobe and 38 // other web based login screen UI. See ash::NetworkStateListDetailedView for 39 // the status area network list. TODO(stevenjb): Integrate this with the 40 // login UI code. 41 // 42 // The network menu model looks like this: 43 // 44 // <icon> Ethernet 45 // <icon> Wifi Network A 46 // <icon> Wifi Network B 47 // <icon> Wifi Network C 48 // <icon> Cellular Network A 49 // <icon> Cellular Network B 50 // <icon> Cellular Network C 51 // <icon> Other Wi-Fi network... 52 // -------------------------------- 53 // Disable Wifi 54 // Disable Celluar 55 // -------------------------------- 56 // <IP Address> 57 // Proxy settings... 58 // 59 // <icon> will show the strength of the wifi/cellular networks. 60 // The label will be BOLD if the network is currently connected. 61 62 class NetworkMenu { 63 public: 64 class Delegate { 65 public: 66 virtual ~Delegate(); 67 virtual gfx::NativeWindow GetNativeWindow() const = 0; 68 virtual void OpenButtonOptions() = 0; 69 virtual bool ShouldOpenButtonOptions() const = 0; 70 virtual void OnConnectToNetworkRequested( 71 const std::string& service_path) = 0; 72 }; 73 74 explicit NetworkMenu(Delegate* delegate); 75 virtual ~NetworkMenu(); 76 77 // Access to menu definition. 78 ui::MenuModel* GetMenuModel(); 79 80 // Update the menu (e.g. when the network list or status has changed). 81 virtual void UpdateMenu(); 82 83 private: 84 friend class NetworkMenuModel; 85 86 // Getters. delegate()87 Delegate* delegate() const { return delegate_; } 88 89 // Weak ptr to delegate. 90 Delegate* delegate_; 91 92 // Set to true if we are currently refreshing the menu. 93 bool refreshing_menu_; 94 95 // The network menu. 96 scoped_ptr<NetworkMenuModel> main_menu_model_; 97 98 // Weak pointer factory so we can start connections at a later time 99 // without worrying that they will actually try to happen after the lifetime 100 // of this object. 101 base::WeakPtrFactory<NetworkMenu> weak_pointer_factory_; 102 103 DISALLOW_COPY_AND_ASSIGN(NetworkMenu); 104 }; 105 106 } // namespace chromeos 107 108 #endif // CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_ 109