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