| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef NET_BASE_NETWORK_CHANGE_NOTIFIER_LINUX_H_ | 5 #ifndef NET_BASE_NETWORK_CHANGE_NOTIFIER_LINUX_H_ |
| 6 #define NET_BASE_NETWORK_CHANGE_NOTIFIER_LINUX_H_ | 6 #define NET_BASE_NETWORK_CHANGE_NOTIFIER_LINUX_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/observer_list.h" | 10 #include "base/observer_list.h" |
| 11 #include "net/base/network_change_notifier.h" | 11 #include "net/base/network_change_notifier.h" |
| 12 | 12 |
| 13 namespace net { | 13 namespace net { |
| 14 | 14 |
| 15 class NetworkChangeNotifierLinux | 15 class NetworkChangeNotifierLinux |
| 16 : public NetworkChangeNotifier, public MessageLoopForIO::Watcher { | 16 : public NetworkChangeNotifier, |
| 17 public MessageLoopForIO::Watcher, |
| 18 public MessageLoop::DestructionObserver { |
| 17 public: | 19 public: |
| 18 NetworkChangeNotifierLinux(); | 20 NetworkChangeNotifierLinux(); |
| 19 | 21 |
| 20 // NetworkChangeNotifier methods: | 22 // NetworkChangeNotifier methods: |
| 21 | 23 |
| 22 virtual void AddObserver(Observer* observer) { | 24 virtual void AddObserver(Observer* observer) { |
| 23 observers_.AddObserver(observer); | 25 observers_.AddObserver(observer); |
| 24 } | 26 } |
| 25 | 27 |
| 26 virtual void RemoveObserver(Observer* observer) { | 28 virtual void RemoveObserver(Observer* observer) { |
| 27 observers_.RemoveObserver(observer); | 29 observers_.RemoveObserver(observer); |
| 28 } | 30 } |
| 29 | 31 |
| 30 // MessageLoopForIO::Watcher methods: | 32 // MessageLoopForIO::Watcher methods: |
| 31 | 33 |
| 32 virtual void OnFileCanReadWithoutBlocking(int fd); | 34 virtual void OnFileCanReadWithoutBlocking(int fd); |
| 33 virtual void OnFileCanWriteWithoutBlocking(int /* fd */); | 35 virtual void OnFileCanWriteWithoutBlocking(int /* fd */); |
| 34 | 36 |
| 37 // MessageLoop::DestructionObserver methods: |
| 38 |
| 39 virtual void WillDestroyCurrentMessageLoop(); |
| 40 |
| 35 private: | 41 private: |
| 36 virtual ~NetworkChangeNotifierLinux(); | 42 virtual ~NetworkChangeNotifierLinux(); |
| 37 | 43 |
| 38 // Starts listening for netlink messages. Also handles the messages if there | 44 // Starts listening for netlink messages. Also handles the messages if there |
| 39 // are any available on the netlink socket. | 45 // are any available on the netlink socket. |
| 40 void ListenForNotifications(); | 46 void ListenForNotifications(); |
| 41 | 47 |
| 42 // Attempts to read from the netlink socket into |buf| of length |len|. | 48 // Attempts to read from the netlink socket into |buf| of length |len|. |
| 43 // Returns the bytes read on synchronous success and ERR_IO_PENDING if the | 49 // Returns the bytes read on synchronous success and ERR_IO_PENDING if the |
| 44 // recv() would block. Otherwise, it returns a net error code. | 50 // recv() would block. Otherwise, it returns a net error code. |
| 45 int ReadNotificationMessage(char* buf, size_t len); | 51 int ReadNotificationMessage(char* buf, size_t len); |
| 46 | 52 |
| 53 // Stops watching the netlink file descriptor. |
| 54 void StopWatching(); |
| 55 |
| 47 ObserverList<Observer, true> observers_; | 56 ObserverList<Observer, true> observers_; |
| 48 | 57 |
| 49 int netlink_fd_; // This is the netlink socket descriptor. | 58 int netlink_fd_; // This is the netlink socket descriptor. |
| 50 MessageLoopForIO* const loop_; | 59 MessageLoopForIO* loop_; |
| 51 MessageLoopForIO::FileDescriptorWatcher netlink_watcher_; | 60 MessageLoopForIO::FileDescriptorWatcher netlink_watcher_; |
| 52 | 61 |
| 53 DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifierLinux); | 62 DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifierLinux); |
| 54 }; | 63 }; |
| 55 | 64 |
| 56 } // namespace net | 65 } // namespace net |
| 57 | 66 |
| 58 #endif // NET_BASE_NETWORK_CHANGE_NOTIFIER_LINUX_H_ | 67 #endif // NET_BASE_NETWORK_CHANGE_NOTIFIER_LINUX_H_ |
| OLD | NEW |