Index: net/base/network_config_watcher_mac.cc |
diff --git a/net/base/network_config_watcher_mac.cc b/net/base/network_config_watcher_mac.cc |
deleted file mode 100644 |
index bdf75c39ad2a8ac677386bfa760a133446eb18e2..0000000000000000000000000000000000000000 |
--- a/net/base/network_config_watcher_mac.cc |
+++ /dev/null |
@@ -1,132 +0,0 @@ |
-// Copyright (c) 2012 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. |
- |
-#include "net/base/network_config_watcher_mac.h" |
- |
-#include <algorithm> |
- |
-#include "base/bind.h" |
-#include "base/compiler_specific.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/threading/thread.h" |
-#include "base/threading/thread_restrictions.h" |
- |
-namespace net { |
- |
-namespace { |
- |
-#if !defined(OS_IOS) |
-// Called back by OS. Calls OnNetworkConfigChange(). |
-void DynamicStoreCallback(SCDynamicStoreRef /* store */, |
- CFArrayRef changed_keys, |
- void* config_delegate) { |
- NetworkConfigWatcherMac::Delegate* net_config_delegate = |
- static_cast<NetworkConfigWatcherMac::Delegate*>(config_delegate); |
- net_config_delegate->OnNetworkConfigChange(changed_keys); |
-} |
-#endif // !defined(OS_IOS) |
- |
-class NetworkConfigWatcherMacThread : public base::Thread { |
- public: |
- NetworkConfigWatcherMacThread(NetworkConfigWatcherMac::Delegate* delegate); |
- ~NetworkConfigWatcherMacThread() override; |
- |
- protected: |
- // base::Thread |
- void Init() override; |
- void CleanUp() override; |
- |
- private: |
- // 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 InitNotifications(); |
- |
- base::ScopedCFTypeRef<CFRunLoopSourceRef> run_loop_source_; |
- NetworkConfigWatcherMac::Delegate* const delegate_; |
- base::WeakPtrFactory<NetworkConfigWatcherMacThread> weak_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(NetworkConfigWatcherMacThread); |
-}; |
- |
-NetworkConfigWatcherMacThread::NetworkConfigWatcherMacThread( |
- NetworkConfigWatcherMac::Delegate* delegate) |
- : base::Thread("NetworkConfigWatcher"), |
- delegate_(delegate), |
- weak_factory_(this) {} |
- |
-NetworkConfigWatcherMacThread::~NetworkConfigWatcherMacThread() { |
- // Allow IO because Stop() calls PlatformThread::Join(), which is a blocking |
- // operation. This is expected during shutdown. |
- base::ThreadRestrictions::ScopedAllowIO allow_io; |
- |
- Stop(); |
-} |
- |
-void NetworkConfigWatcherMacThread::Init() { |
- // Disallow IO to make sure NetworkConfigWatcherMacThread's helper thread does |
- // not perform blocking operations. |
- base::ThreadRestrictions::SetIOAllowed(false); |
- |
- delegate_->Init(); |
- |
- // TODO(willchan): Look to see if there's a better signal for when it's ok to |
- // initialize this, rather than just delaying it by a fixed time. |
- const base::TimeDelta kInitializationDelay = base::TimeDelta::FromSeconds(1); |
- message_loop()->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&NetworkConfigWatcherMacThread::InitNotifications, |
- weak_factory_.GetWeakPtr()), |
- kInitializationDelay); |
-} |
- |
-void NetworkConfigWatcherMacThread::CleanUp() { |
- if (!run_loop_source_.get()) |
- return; |
- |
- CFRunLoopRemoveSource(CFRunLoopGetCurrent(), run_loop_source_.get(), |
- kCFRunLoopCommonModes); |
- run_loop_source_.reset(); |
-} |
- |
-void NetworkConfigWatcherMacThread::InitNotifications() { |
-#if !defined(OS_IOS) |
- // SCDynamicStore API does not exist on iOS. |
- // Add a run loop source for a dynamic store to the current run loop. |
- SCDynamicStoreContext context = { |
- 0, // Version 0. |
- delegate_, // User data. |
- NULL, // This is not reference counted. No retain function. |
- NULL, // This is not reference counted. No release function. |
- NULL, // No description for this. |
- }; |
- base::ScopedCFTypeRef<SCDynamicStoreRef> store(SCDynamicStoreCreate( |
- NULL, CFSTR("org.chromium"), DynamicStoreCallback, &context)); |
- run_loop_source_.reset(SCDynamicStoreCreateRunLoopSource( |
- NULL, store.get(), 0)); |
- CFRunLoopAddSource(CFRunLoopGetCurrent(), run_loop_source_.get(), |
- kCFRunLoopCommonModes); |
-#endif // !defined(OS_IOS) |
- |
- // Set up notifications for interface and IP address changes. |
- delegate_->StartReachabilityNotifications(); |
-#if !defined(OS_IOS) |
- delegate_->SetDynamicStoreNotificationKeys(store.get()); |
-#endif // !defined(OS_IOS) |
-} |
- |
-} // namespace |
- |
-NetworkConfigWatcherMac::NetworkConfigWatcherMac(Delegate* delegate) |
- : notifier_thread_(new NetworkConfigWatcherMacThread(delegate)) { |
- // We create this notifier thread because the notification implementation |
- // needs a thread with a CFRunLoop, and there's no guarantee that |
- // MessageLoop::current() meets that criterion. |
- base::Thread::Options thread_options(base::MessageLoop::TYPE_UI, 0); |
- notifier_thread_->StartWithOptions(thread_options); |
-} |
- |
-NetworkConfigWatcherMac::~NetworkConfigWatcherMac() {} |
- |
-} // namespace net |