• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_NETWORK_STATE_NOTIFIER_H_
6 #define CHROME_BROWSER_CHROMEOS_NETWORK_STATE_NOTIFIER_H_
7 #pragma once
8 
9 #include "chrome/browser/chromeos/cros/network_library.h"
10 
11 #include "base/memory/singleton.h"
12 #include "base/task.h"
13 #include "base/time.h"
14 
15 namespace chromeos {
16 
17 // NetworkStateDetails contains the information about
18 // network status.
19 class NetworkStateDetails {
20  public:
21   enum State {
22     UNKNOWN = 0,
23     DISCONNECTED,
24     CONNECTING,
25     CONNECTED,
26   };
27 
state()28   State state() const {
29     return state_;
30   }
31 
32  private:
33   friend class NetworkStateNotifier;
34 
NetworkStateDetails(State state)35   explicit NetworkStateDetails(State state)
36       : state_(state) {
37   }
38 
39   State state_;
40 
41   DISALLOW_COPY_AND_ASSIGN(NetworkStateDetails);
42 };
43 
44 // NetworkStateNotifier sends notification when network state has
45 // chagned. Notification is sent in UI thread.
46 // TODO(oshima): port this to other platform. merge with
47 // NetworkChangeNotifier if possible.
48 class NetworkStateNotifier : public NetworkLibrary::NetworkManagerObserver {
49  public:
50   // Returns the singleton instance of the network state notifier;
51   static NetworkStateNotifier* GetInstance();
52 
53   // The duration of being in offline. The value is undefined when
54   // when network is connected.
55   static base::TimeDelta GetOfflineDuration();
56 
57   // Returns true if the network is connected.
is_connected()58   static bool is_connected() {
59     return GetInstance()->state_ == NetworkStateDetails::CONNECTED;
60   }
61 
62   // NetworkLibrary::NetworkManagerObserver implementation.
63   virtual void OnNetworkManagerChanged(NetworkLibrary* cros);
64 
65  private:
66   friend struct DefaultSingletonTraits<NetworkStateNotifier>;
67 
68   // Retrieve the current state from libcros.
69   static NetworkStateDetails::State RetrieveState();
70 
71   NetworkStateNotifier();
72   virtual ~NetworkStateNotifier();
73 
74   // Update the current state and sends notification to observers.
75   // This should be invoked in UI thread.
76   void UpdateNetworkState(NetworkStateDetails::State new_state);
77 
78   // A factory to post a task in UI thread.
79   ScopedRunnableMethodFactory<NetworkStateNotifier> task_factory_;
80 
81   // The current network state.
82   NetworkStateDetails::State state_;
83 
84   // The start time of offline.
85   base::Time offline_start_time_;
86 
87   DISALLOW_COPY_AND_ASSIGN(NetworkStateNotifier);
88 };
89 
90 }  // namespace chromeos
91 
92 #endif  // CHROME_BROWSER_CHROMEOS_NETWORK_STATE_NOTIFIER_H_
93