1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file. 4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef APPS_SHELL_BROWSER_SHELL_NETWORK_CONTROLLER_CHROMEOS_H_ 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define APPS_SHELL_BROWSER_SHELL_NETWORK_CONTROLLER_CHROMEOS_H_ 7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <string> 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/compiler_specific.h" 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/macros.h" 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/weak_ptr.h" 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/timer/timer.h" 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/values.h" 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chromeos/network/network_state_handler_observer.h" 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace apps { 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Handles network-related tasks for app_shell on Chrome OS. 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class ShellNetworkController : public chromeos::NetworkStateHandlerObserver { 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public: 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // This class must be instantiated after chromeos::DBusThreadManager and 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // destroyed before it. 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ShellNetworkController(); 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ~ShellNetworkController(); 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // chromeos::NetworkStateHandlerObserver overrides: 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void NetworkListChanged() OVERRIDE; 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DefaultNetworkChanged( 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const chromeos::NetworkState* state) OVERRIDE; 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private: 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Controls whether scanning is performed periodically. 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void SetScanningEnabled(bool enabled); 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Asks shill to scan for networks. 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void RequestScan(); 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // If not currently connected or connecting, chooses a wireless network and 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // asks shill to connect to it. 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void ConnectIfUnconnected(); 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Handles a successful or failed connection attempt. 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void HandleConnectionSuccess(); 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void HandleConnectionError( 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& error_name, 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<base::DictionaryValue> error_data); 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // True when ConnectIfUnconnected() has asked shill to connect but the attempt 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // hasn't succeeded or failed yet. This is tracked to avoid sending duplicate 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // requests before chromeos::NetworkStateHandler has acknowledged the initial 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // connection attempt. 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool waiting_for_connection_result_; 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Invokes RequestScan() periodically. 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::RepeatingTimer<ShellNetworkController> scan_timer_; 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::WeakPtrFactory<ShellNetworkController> weak_ptr_factory_; 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ShellNetworkController); 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}; 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace apps 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif // APPS_SHELL_BROWSER_SHELL_NETWORK_CONTROLLER_CHROMEOS_H_ 67