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