1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_BASE_NETWORK_CHANGE_NOTIFIER_WIN_H_ 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_BASE_NETWORK_CHANGE_NOTIFIER_WIN_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <windows.h> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/basictypes.h" 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/timer.h" 133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/win/object_watcher.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/network_change_notifier.h" 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net { 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NetworkChangeNotifierWin : public NetworkChangeNotifier, 193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen public base::win::ObjectWatcher::Delegate { 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott NetworkChangeNotifierWin(); 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual ~NetworkChangeNotifierWin(); 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // NetworkChangeNotifier methods: 27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual bool IsCurrentlyOffline() const; 28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ObjectWatcher::Delegate methods: 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnObjectSignaled(HANDLE object); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Begins listening for a single subsequent address change. 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void WatchForAddressChange(); 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Forwards online state notifications to parent class. 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void NotifyParentOfOnlineStateChange(); 37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 383f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen base::win::ObjectWatcher addr_watcher_; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OVERLAPPED addr_overlapped_; 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::OneShotTimer<NetworkChangeNotifierWin> timer_; 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifierWin); 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace net 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // NET_BASE_NETWORK_CHANGE_NOTIFIER_WIN_H_ 49