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 ASH_SYSTEM_CHROMEOS_NETWORK_TRAY_NETWORK_H
6#define ASH_SYSTEM_CHROMEOS_NETWORK_TRAY_NETWORK_H
7
8#include <set>
9
10#include "ash/system/chromeos/network/network_observer.h"
11#include "ash/system/chromeos/network/network_portal_detector_observer.h"
12#include "ash/system/chromeos/network/tray_network_state_observer.h"
13#include "ash/system/tray/system_tray_item.h"
14#include "base/memory/scoped_ptr.h"
15#include "base/time/time.h"
16
17namespace chromeos {
18class NetworkState;
19}
20
21namespace ash {
22namespace tray {
23class NetworkDefaultView;
24class NetworkDetailedView;
25class NetworkTrayView;
26}
27
28class TrayNetwork : public SystemTrayItem,
29                    public NetworkObserver,
30                    public NetworkPortalDetectorObserver,
31                    public TrayNetworkStateObserver::Delegate {
32 public:
33  explicit TrayNetwork(SystemTray* system_tray);
34  virtual ~TrayNetwork();
35
36  tray::NetworkDetailedView* detailed() { return detailed_; }
37
38  // SystemTrayItem
39  virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE;
40  virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE;
41  virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE;
42  virtual void DestroyTrayView() OVERRIDE;
43  virtual void DestroyDefaultView() OVERRIDE;
44  virtual void DestroyDetailedView() OVERRIDE;
45  virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE;
46  virtual void UpdateAfterShelfAlignmentChange(
47      ShelfAlignment alignment) OVERRIDE;
48
49  // NetworkObserver
50  virtual void RequestToggleWifi() OVERRIDE;
51
52  // NetworkPortalDetectorObserver
53  virtual void OnCaptivePortalDetected(
54      const std::string& service_path) OVERRIDE;
55
56  // TrayNetworkStateObserver::Delegate
57  virtual void NetworkStateChanged(bool list_changed) OVERRIDE;
58  virtual void NetworkServiceChanged(
59      const chromeos::NetworkState* network) OVERRIDE;
60
61 private:
62  tray::NetworkTrayView* tray_;
63  tray::NetworkDefaultView* default_;
64  tray::NetworkDetailedView* detailed_;
65  bool request_wifi_view_;
66  scoped_ptr<TrayNetworkStateObserver> network_state_observer_;
67
68  DISALLOW_COPY_AND_ASSIGN(TrayNetwork);
69};
70
71}  // namespace ash
72
73#endif  // ASH_SYSTEM_CHROMEOS_NETWORK_TRAY_NETWORK_H
74