// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef NET_BASE_NETWORK_CHANGE_NOTIFIER_H_
#define NET_BASE_NETWORK_CHANGE_NOTIFIER_H_
#include "base/basictypes.h"
#include "base/non_thread_safe.h"
namespace net {
// NetworkChangeNotifier monitors the system for network changes, and notifies
// observers on those events.
class NetworkChangeNotifier : public NonThreadSafe {
public:
class Observer {
public:
virtual ~Observer() {}
// Will be called when the IP address of the primary interface changes.
// This includes when the primary interface itself changes.
virtual void OnIPAddressChanged() = 0;
protected:
Observer() {}
private:
DISALLOW_COPY_AND_ASSIGN(Observer);
};
NetworkChangeNotifier() {}
virtual ~NetworkChangeNotifier() {}
// These functions add and remove observers to/from the NetworkChangeNotifier.
// Each call to AddObserver() must be matched with a corresponding call to
// RemoveObserver() with the same parameter. Observers must remove themselves
// before they get deleted, otherwise the NetworkChangeNotifier may try to
// notify the wrong object.
virtual void AddObserver(Observer* observer) = 0;
virtual void RemoveObserver(Observer* observer) = 0;
// This will create the platform specific default NetworkChangeNotifier.
static NetworkChangeNotifier* CreateDefaultNetworkChangeNotifier();
private:
DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifier);
};
} // namespace net
#endif // NET_BASE_NETWORK_CHANGE_NOTIFIER_H_