1 // Copyright (c) 2010 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 NET_BASE_NETWORK_CHANGE_NOTIFIER_WIN_H_ 6 #define NET_BASE_NETWORK_CHANGE_NOTIFIER_WIN_H_ 7 #pragma once 8 9 #include <windows.h> 10 11 #include "base/basictypes.h" 12 #include "base/timer.h" 13 #include "base/win/object_watcher.h" 14 #include "net/base/network_change_notifier.h" 15 16 namespace net { 17 18 class NetworkChangeNotifierWin : public NetworkChangeNotifier, 19 public base::win::ObjectWatcher::Delegate { 20 public: 21 NetworkChangeNotifierWin(); 22 23 private: 24 virtual ~NetworkChangeNotifierWin(); 25 26 // NetworkChangeNotifier methods: 27 virtual bool IsCurrentlyOffline() const; 28 29 // ObjectWatcher::Delegate methods: 30 virtual void OnObjectSignaled(HANDLE object); 31 32 // Begins listening for a single subsequent address change. 33 void WatchForAddressChange(); 34 35 // Forwards online state notifications to parent class. 36 void NotifyParentOfOnlineStateChange(); 37 38 base::win::ObjectWatcher addr_watcher_; 39 OVERLAPPED addr_overlapped_; 40 41 base::OneShotTimer<NetworkChangeNotifierWin> timer_; 42 43 DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifierWin); 44 }; 45 46 } // namespace net 47 48 #endif // NET_BASE_NETWORK_CHANGE_NOTIFIER_WIN_H_ 49