15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_NETWORK_DROPDOWN_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_NETWORK_DROPDOWN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/status/network_menu.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_state_handler_observer.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/chromeos/network/network_icon_animation_observer.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUI; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkMenuWebUI; 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class NetworkState; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Class which implements network dropdown menu using WebUI. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkDropdown : public NetworkMenu::Delegate, 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public NetworkStateHandlerObserver, 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public ui::network_icon::AnimationObserver { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch class Actor { 302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch public: 312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual ~Actor() {} 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void OnConnectToNetworkRequested() = 0; 332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch }; 342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch NetworkDropdown(Actor* actor, content::WebUI* web_ui, bool oobe); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NetworkDropdown(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This method should be called, when item with the given id is chosen. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnItemChosen(int id); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // NetworkMenu::Delegate 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OpenButtonOptions() OVERRIDE; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldOpenButtonOptions() const OVERRIDE; 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void OnConnectToNetworkRequested() OVERRIDE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // NetworkStateHandlerObserver 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void DefaultNetworkChanged(const NetworkState* network) OVERRIDE; 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void NetworkConnectionStateChanged( 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const NetworkState* network) OVERRIDE; 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void NetworkListChanged() OVERRIDE; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // network_icon::AnimationObserver 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void NetworkIconChanged() OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Refreshes control state. Usually there's no need to do it manually 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as control refreshes itself on network state change. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should be called on language change. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Refresh(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetNetworkIconAndText(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Request a network scan and refreshes control state. Should be called 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by |network_scan_timer_| only. 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void RequestNetworkScan(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The Network menu. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<NetworkMenuWebUI> network_menu_; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 712385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch Actor* actor_; 722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebUI* web_ui_; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Is the dropdown shown on one of the OOBE screens. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool oobe_; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Timer used to periodically force network scan. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RepeatingTimer<NetworkDropdown> network_scan_timer_; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkDropdown); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_NETWORK_DROPDOWN_H_ 87