Index: net/dns/dns_config_watcher_mac.cc |
diff --git a/net/dns/dns_config_watcher_mac.cc b/net/dns/dns_config_watcher_mac.cc |
deleted file mode 100644 |
index 0139472cbd1b9e7d28bbcf4b556443a60ac11019..0000000000000000000000000000000000000000 |
--- a/net/dns/dns_config_watcher_mac.cc |
+++ /dev/null |
@@ -1,106 +0,0 @@ |
-// Copyright 2014 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/dns/dns_config_watcher_mac.h" |
- |
-#include <dlfcn.h> |
- |
-#include "base/lazy_instance.h" |
-#include "third_party/apple_apsl/dnsinfo.h" |
- |
-namespace { |
- |
-// dnsinfo symbols are available via libSystem.dylib, but can also be present in |
-// SystemConfiguration.framework. To avoid confusion, load them explicitly from |
-// libSystem.dylib. |
-class DnsInfoApi { |
- public: |
- typedef const char* (*dns_configuration_notify_key_t)(); |
- typedef dns_config_t* (*dns_configuration_copy_t)(); |
- typedef void (*dns_configuration_free_t)(dns_config_t*); |
- |
- DnsInfoApi() |
- : dns_configuration_notify_key(NULL), |
- dns_configuration_copy(NULL), |
- dns_configuration_free(NULL) { |
- handle_ = dlopen("/usr/lib/libSystem.dylib", |
- RTLD_LAZY | RTLD_NOLOAD); |
- if (!handle_) |
- return; |
- dns_configuration_notify_key = |
- reinterpret_cast<dns_configuration_notify_key_t>( |
- dlsym(handle_, "dns_configuration_notify_key")); |
- dns_configuration_copy = |
- reinterpret_cast<dns_configuration_copy_t>( |
- dlsym(handle_, "dns_configuration_copy")); |
- dns_configuration_free = |
- reinterpret_cast<dns_configuration_free_t>( |
- dlsym(handle_, "dns_configuration_free")); |
- } |
- |
- ~DnsInfoApi() { |
- if (handle_) |
- dlclose(handle_); |
- } |
- |
- dns_configuration_notify_key_t dns_configuration_notify_key; |
- dns_configuration_copy_t dns_configuration_copy; |
- dns_configuration_free_t dns_configuration_free; |
- |
- private: |
- void* handle_; |
-}; |
- |
-const DnsInfoApi& GetDnsInfoApi() { |
- static base::LazyInstance<DnsInfoApi>::Leaky api = LAZY_INSTANCE_INITIALIZER; |
- return api.Get(); |
-} |
- |
-struct DnsConfigTDeleter { |
- inline void operator()(dns_config_t* ptr) const { |
- if (GetDnsInfoApi().dns_configuration_free) |
- GetDnsInfoApi().dns_configuration_free(ptr); |
- } |
-}; |
- |
-} // namespace |
- |
-namespace net { |
-namespace internal { |
- |
-bool DnsConfigWatcher::Watch( |
- const base::Callback<void(bool succeeded)>& callback) { |
- if (!GetDnsInfoApi().dns_configuration_notify_key) |
- return false; |
- return watcher_.Watch(GetDnsInfoApi().dns_configuration_notify_key(), |
- callback); |
-} |
- |
-// static |
-ConfigParsePosixResult DnsConfigWatcher::CheckDnsConfig() { |
- if (!GetDnsInfoApi().dns_configuration_copy) |
- return CONFIG_PARSE_POSIX_NO_DNSINFO; |
- scoped_ptr<dns_config_t, DnsConfigTDeleter> dns_config( |
- GetDnsInfoApi().dns_configuration_copy()); |
- if (!dns_config) |
- return CONFIG_PARSE_POSIX_NO_DNSINFO; |
- |
- // TODO(szym): Parse dns_config_t for resolvers rather than res_state. |
- // DnsClient can't handle domain-specific unscoped resolvers. |
- unsigned num_resolvers = 0; |
- for (int i = 0; i < dns_config->n_resolver; ++i) { |
- dns_resolver_t* resolver = dns_config->resolver[i]; |
- if (!resolver->n_nameserver) |
- continue; |
- if (resolver->options && !strcmp(resolver->options, "mdns")) |
- continue; |
- ++num_resolvers; |
- } |
- if (num_resolvers > 1) |
- return CONFIG_PARSE_POSIX_UNHANDLED_OPTIONS; |
- return CONFIG_PARSE_POSIX_OK; |
-} |
- |
-} // namespace internal |
-} // namespace net |