| Index: net/base/network_change_notifier_mac.h
|
| ===================================================================
|
| --- net/base/network_change_notifier_mac.h (revision 50775)
|
| +++ net/base/network_change_notifier_mac.h (working copy)
|
| @@ -5,53 +5,51 @@
|
| #ifndef NET_BASE_NETWORK_CHANGE_NOTIFIER_MAC_H_
|
| #define NET_BASE_NETWORK_CHANGE_NOTIFIER_MAC_H_
|
|
|
| -#include "base/basictypes.h"
|
| -#include "base/non_thread_safe.h"
|
| -#include "base/observer_list.h"
|
| -#include "base/ref_counted.h"
|
| -#include "base/scoped_ptr.h"
|
| -#include "base/task.h"
|
| +#include <SystemConfiguration/SCDynamicStore.h>
|
| +
|
| +#include "base/message_loop.h"
|
| +#include "base/scoped_cftyperef.h"
|
| #include "net/base/network_change_notifier.h"
|
|
|
| -class MessageLoop;
|
| namespace base {
|
| class Thread;
|
| -} // namespace base
|
| +}
|
|
|
| namespace net {
|
|
|
| -class NetworkChangeNotifierMac : public NetworkChangeNotifier,
|
| - public NonThreadSafe {
|
| +class NetworkChangeNotifierMac : public MessageLoop::DestructionObserver,
|
| + public NetworkChangeNotifier {
|
| public:
|
| NetworkChangeNotifierMac();
|
|
|
| - void OnIPAddressChanged();
|
| + private:
|
| + virtual ~NetworkChangeNotifierMac();
|
|
|
| - // NetworkChangeNotifier methods:
|
| - virtual void AddObserver(Observer* observer);
|
| - virtual void RemoveObserver(Observer* observer);
|
| + // Called back by OS. Calls OnNetworkConfigChange().
|
| + static void DynamicStoreCallback(SCDynamicStoreRef /* store */,
|
| + CFArrayRef changed_keys,
|
| + void* config);
|
|
|
| - private:
|
| - friend class base::RefCounted<NetworkChangeNotifierMac>;
|
| + // MessageLoop::DestructionObserver:
|
| + virtual void WillDestroyCurrentMessageLoop();
|
|
|
| - virtual ~NetworkChangeNotifierMac();
|
| + // Called on the notifier thread to initialize the notification
|
| + // implementation. The SystemConfiguration calls in this function can lead to
|
| + // contention early on, so we invoke this function later on in startup to keep
|
| + // it fast.
|
| + void Init();
|
|
|
| - // Initializes the notifier thread. The SystemConfiguration calls in this
|
| - // function can lead to contention early on, so we invoke this function later
|
| - // on in startup to keep it fast.
|
| - // See http://crbug.com/34926 for details.
|
| - void InitializeNotifierThread(MessageLoop* loop);
|
| + // Called by DynamicStoreCallback() when something about the network config
|
| + // changes.
|
| + void OnNetworkConfigChange(CFArrayRef changed_keys);
|
|
|
| - // Receives the OS X network change notifications on this thread.
|
| + // The thread used to listen for notifications. This relays the notification
|
| + // to the registered observers without posting back to the thread the object
|
| + // was created on.
|
| scoped_ptr<base::Thread> notifier_thread_;
|
|
|
| - // TODO(willchan): Fix the URLRequestContextGetter leaks and flip the false to
|
| - // true so we assert that all observers have been removed.
|
| - ObserverList<Observer, false> observers_;
|
| + scoped_cftyperef<CFRunLoopSourceRef> run_loop_source_;
|
|
|
| - // Used to initialize the notifier thread.
|
| - ScopedRunnableMethodFactory<NetworkChangeNotifierMac> method_factory_;
|
| -
|
| DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifierMac);
|
| };
|
|
|
|
|