Delete unused classes AutoDetectProxy and SslSocketFactory.

SslSocketFactory is unused since https://codereview.webrtc.org/2506983002, and it's the last
user of AutoDetectProxy.

Also move HttpListenServer and SocksProxyServer to the rtc_base_tests_utils gn target, since they're used by tests only.

BUG=webrtc:6424

Review-Url: https://codereview.webrtc.org/2541453002
Cr-Commit-Position: refs/heads/master@{#16576}
diff --git a/webrtc/base/BUILD.gn b/webrtc/base/BUILD.gn
index 13ad5fd..fca0e0e 100644
--- a/webrtc/base/BUILD.gn
+++ b/webrtc/base/BUILD.gn
@@ -378,8 +378,6 @@
     "asynctcpsocket.h",
     "asyncudpsocket.cc",
     "asyncudpsocket.h",
-    "autodetectproxy.cc",
-    "autodetectproxy.h",
     "common.cc",
     "common.h",
     "crc32.cc",
@@ -429,8 +427,6 @@
     "opensslstreamadapter.h",
     "physicalsocketserver.cc",
     "physicalsocketserver.h",
-    "proxydetect.cc",
-    "proxydetect.h",
     "proxyinfo.cc",
     "proxyinfo.h",
     "ratelimiter.cc",
@@ -469,8 +465,6 @@
     "sslfingerprint.h",
     "sslidentity.cc",
     "sslidentity.h",
-    "sslsocketfactory.cc",
-    "sslsocketfactory.h",
     "sslstreamadapter.cc",
     "sslstreamadapter.h",
     "stream.cc",
@@ -504,8 +498,6 @@
     sources += [
       "callback.h",
       "fileutils_mock.h",
-      "httpserver.cc",
-      "httpserver.h",
       "json.cc",
       "json.h",
       "logsinks.cc",
@@ -513,8 +505,6 @@
       "mathutils.h",
       "optionsfile.cc",
       "optionsfile.h",
-      "proxyserver.cc",
-      "proxyserver.h",
       "rollingaccumulator.h",
       "scopedptrcollection.h",
       "sslroots.h",
@@ -710,12 +700,16 @@
       "firewallsocketserver.cc",
       "firewallsocketserver.h",
       "gunit.h",
+      "httpserver.cc",
+      "httpserver.h",
       "natserver.cc",
       "natserver.h",
       "natsocketfactory.cc",
       "natsocketfactory.h",
       "nattypes.cc",
       "nattypes.h",
+      "proxyserver.cc",
+      "proxyserver.h",
       "sigslottester.h",
       "sigslottester.h.pump",
       "testbase64.h",
@@ -853,7 +847,6 @@
   rtc_source_set("rtc_base_unittests") {
     testonly = true
     sources = [
-      "autodetectproxy_unittest.cc",
       "callback_unittest.cc",
       "crc32_unittest.cc",
       "filerotatingstream_unittest.cc",
@@ -869,7 +862,6 @@
       "network_unittest.cc",
       "optionsfile_unittest.cc",
       "proxy_unittest.cc",
-      "proxydetect_unittest.cc",
       "ratelimiter_unittest.cc",
       "rollingaccumulator_unittest.cc",
       "rtccertificate_unittest.cc",
diff --git a/webrtc/base/autodetectproxy.cc b/webrtc/base/autodetectproxy.cc
deleted file mode 100644
index 0ec6ecc..0000000
--- a/webrtc/base/autodetectproxy.cc
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "webrtc/base/autodetectproxy.h"
-#include "webrtc/base/checks.h"
-#include "webrtc/base/httpcommon.h"
-#include "webrtc/base/httpcommon-inl.h"
-#include "webrtc/base/nethelpers.h"
-
-namespace rtc {
-
-static const ProxyType TEST_ORDER[] = {
-  PROXY_HTTPS, PROXY_SOCKS5, PROXY_UNKNOWN
-};
-
-static const int kSavedStringLimit = 128;
-
-static void SaveStringToStack(char *dst,
-                              const std::string &src,
-                              size_t dst_size) {
-  strncpy(dst, src.c_str(), dst_size - 1);
-  dst[dst_size - 1] = '\0';
-}
-
-AutoDetectProxy::AutoDetectProxy(const std::string& user_agent)
-    : agent_(user_agent), resolver_(NULL), socket_(NULL), next_(0) {
-}
-
-bool AutoDetectProxy::GetProxyForUrl(const char* agent,
-                                     const char* url,
-                                     rtc::ProxyInfo* proxy) {
-  return GetProxySettingsForUrl(agent, url, proxy, true);
-}
-
-AutoDetectProxy::~AutoDetectProxy() {
-  if (resolver_) {
-    resolver_->Destroy(false);
-  }
-}
-
-void AutoDetectProxy::DoWork() {
-  // TODO: Try connecting to server_url without proxy first here?
-  if (!server_url_.empty()) {
-    LOG(LS_INFO) << "GetProxySettingsForUrl(" << server_url_ << ") - start";
-    GetProxyForUrl(agent_.c_str(), server_url_.c_str(), &proxy_);
-    LOG(LS_INFO) << "GetProxySettingsForUrl - stop";
-  }
-  Url<char> url(proxy_.address.HostAsURIString());
-  if (url.valid()) {
-    LOG(LS_WARNING) << "AutoDetectProxy removing http prefix on proxy host";
-    proxy_.address.SetIP(url.host());
-  }
-  LOG(LS_INFO) << "AutoDetectProxy found proxy at " << proxy_.address;
-  if (proxy_.type == PROXY_UNKNOWN) {
-    LOG(LS_INFO) << "AutoDetectProxy initiating proxy classification";
-    Next();
-    // Process I/O until Stop()
-    Thread::Current()->ProcessMessages(Thread::kForever);
-    // Clean up the autodetect socket, from the thread that created it
-    delete socket_;
-  }
-  // TODO: If we found a proxy, try to use it to verify that it
-  // works by sending a request to server_url. This could either be
-  // done here or by the HttpPortAllocator.
-}
-
-void AutoDetectProxy::OnMessage(Message *msg) {
-  if (MSG_UNRESOLVABLE == msg->message_id) {
-    // If we can't resolve the proxy, skip straight to failure.
-    Complete(PROXY_UNKNOWN);
-  } else if (MSG_TIMEOUT == msg->message_id) {
-    OnTimeout();
-  } else {
-    // This must be the ST_MSG_WORKER_DONE message that deletes the
-    // AutoDetectProxy object. We have observed crashes within this stack that
-    // seem to be highly reproducible for a small subset of users and thus are
-    // probably correlated with a specific proxy setting, so copy potentially
-    // relevant information onto the stack to make it available in Windows
-    // minidumps.
-
-    // Save the user agent and the number of auto-detection passes that we
-    // needed.
-    char agent[kSavedStringLimit];
-    SaveStringToStack(agent, agent_, sizeof agent);
-
-    int next = next_;
-
-    // Now the detected proxy config (minus the password field, which could be
-    // sensitive).
-    ProxyType type = proxy().type;
-
-    char address_hostname[kSavedStringLimit];
-    SaveStringToStack(address_hostname,
-                      proxy().address.hostname(),
-                      sizeof address_hostname);
-
-    IPAddress address_ip = proxy().address.ipaddr();
-
-    uint16_t address_port = proxy().address.port();
-
-    char autoconfig_url[kSavedStringLimit];
-    SaveStringToStack(autoconfig_url,
-                      proxy().autoconfig_url,
-                      sizeof autoconfig_url);
-
-    bool autodetect = proxy().autodetect;
-
-    char bypass_list[kSavedStringLimit];
-    SaveStringToStack(bypass_list, proxy().bypass_list, sizeof bypass_list);
-
-    char username[kSavedStringLimit];
-    SaveStringToStack(username, proxy().username, sizeof username);
-
-    SignalThread::OnMessage(msg);
-
-    // Log the gathered data at a log level that will never actually be enabled
-    // so that the compiler is forced to retain the data on the stack.
-    LOG(LS_SENSITIVE) << agent << " " << next << " " << type << " "
-                      << address_hostname << " " << address_ip << " "
-                      << address_port << " " << autoconfig_url << " "
-                      << autodetect << " " << bypass_list << " " << username;
-  }
-}
-
-void AutoDetectProxy::OnResolveResult(AsyncResolverInterface* resolver) {
-  if (resolver != resolver_) {
-    return;
-  }
-  int error = resolver_->GetError();
-  if (error == 0) {
-    LOG(LS_VERBOSE) << "Resolved " << proxy_.address << " to "
-                    << resolver_->address();
-    proxy_.address = resolver_->address();
-    if (!DoConnect()) {
-      Thread::Current()->Post(RTC_FROM_HERE, this, MSG_TIMEOUT);
-    }
-  } else {
-    LOG(LS_INFO) << "Failed to resolve " << resolver_->address();
-    resolver_->Destroy(false);
-    resolver_ = NULL;
-    proxy_.address = SocketAddress();
-    Thread::Current()->Post(RTC_FROM_HERE, this, MSG_UNRESOLVABLE);
-  }
-}
-
-void AutoDetectProxy::Next() {
-  if (TEST_ORDER[next_] >= PROXY_UNKNOWN) {
-    Complete(PROXY_UNKNOWN);
-    return;
-  }
-
-  LOG(LS_VERBOSE) << "AutoDetectProxy connecting to "
-                  << proxy_.address.ToSensitiveString();
-
-  if (socket_) {
-    Thread::Current()->Clear(this, MSG_TIMEOUT);
-    Thread::Current()->Clear(this, MSG_UNRESOLVABLE);
-    socket_->Close();
-    Thread::Current()->Dispose(socket_);
-    socket_ = NULL;
-  }
-  int timeout = 2000;
-  if (proxy_.address.IsUnresolvedIP()) {
-    // Launch an asyncresolver. This thread will spin waiting for it.
-    timeout += 2000;
-    if (!resolver_) {
-      resolver_ = new AsyncResolver();
-    }
-    resolver_->SignalDone.connect(this, &AutoDetectProxy::OnResolveResult);
-    resolver_->Start(proxy_.address);
-  } else {
-    if (!DoConnect()) {
-      Thread::Current()->Post(RTC_FROM_HERE, this, MSG_TIMEOUT);
-      return;
-    }
-  }
-  Thread::Current()->PostDelayed(RTC_FROM_HERE, timeout, this, MSG_TIMEOUT);
-}
-
-bool AutoDetectProxy::DoConnect() {
-  if (resolver_) {
-    resolver_->Destroy(false);
-    resolver_ = NULL;
-  }
-  socket_ =
-      Thread::Current()->socketserver()->CreateAsyncSocket(
-          proxy_.address.family(), SOCK_STREAM);
-  if (!socket_) {
-    LOG(LS_VERBOSE) << "Unable to create socket for " << proxy_.address;
-    return false;
-  }
-  socket_->SignalConnectEvent.connect(this, &AutoDetectProxy::OnConnectEvent);
-  socket_->SignalReadEvent.connect(this, &AutoDetectProxy::OnReadEvent);
-  socket_->SignalCloseEvent.connect(this, &AutoDetectProxy::OnCloseEvent);
-  socket_->Connect(proxy_.address);
-  return true;
-}
-
-void AutoDetectProxy::Complete(ProxyType type) {
-  Thread::Current()->Clear(this, MSG_TIMEOUT);
-  Thread::Current()->Clear(this, MSG_UNRESOLVABLE);
-  if (socket_) {
-    socket_->Close();
-  }
-
-  proxy_.type = type;
-  LoggingSeverity sev = (proxy_.type == PROXY_UNKNOWN) ? LS_ERROR : LS_INFO;
-  LOG_V(sev) << "AutoDetectProxy detected "
-             << proxy_.address.ToSensitiveString()
-             << " as type " << proxy_.type;
-
-  Thread::Current()->Quit();
-}
-
-void AutoDetectProxy::OnConnectEvent(AsyncSocket * socket) {
-  std::string probe;
-
-  switch (TEST_ORDER[next_]) {
-    case PROXY_HTTPS:
-      probe.assign("CONNECT www.google.com:443 HTTP/1.0\r\n"
-                   "User-Agent: ");
-      probe.append(agent_);
-      probe.append("\r\n"
-                   "Host: www.google.com\r\n"
-                   "Content-Length: 0\r\n"
-                   "Proxy-Connection: Keep-Alive\r\n"
-                   "\r\n");
-      break;
-    case PROXY_SOCKS5:
-      probe.assign("\005\001\000", 3);
-      break;
-    default:
-      RTC_NOTREACHED();
-      return;
-  }
-
-  LOG(LS_VERBOSE) << "AutoDetectProxy probing type " << TEST_ORDER[next_]
-                  << " sending " << probe.size() << " bytes";
-  socket_->Send(probe.data(), probe.size());
-}
-
-void AutoDetectProxy::OnReadEvent(AsyncSocket * socket) {
-  char data[257];
-  int len = socket_->Recv(data, 256, nullptr);
-  if (len > 0) {
-    data[len] = 0;
-    LOG(LS_VERBOSE) << "AutoDetectProxy read " << len << " bytes";
-  }
-
-  switch (TEST_ORDER[next_]) {
-    case PROXY_HTTPS:
-      if ((len >= 2) && (data[0] == '\x05')) {
-        Complete(PROXY_SOCKS5);
-        return;
-      }
-      if ((len >= 5) && (strncmp(data, "HTTP/", 5) == 0)) {
-        Complete(PROXY_HTTPS);
-        return;
-      }
-      break;
-    case PROXY_SOCKS5:
-      if ((len >= 2) && (data[0] == '\x05')) {
-        Complete(PROXY_SOCKS5);
-        return;
-      }
-      break;
-    default:
-      RTC_NOTREACHED();
-      return;
-  }
-
-  ++next_;
-  Next();
-}
-
-void AutoDetectProxy::OnTimeout() {
-  LOG(LS_VERBOSE) << "Timed out waiting for AsyncResolver.";
-  // If a resolver timed out we shouldn't try to use it again since it may be
-  // in the middle of resolving the last address.
-  if (resolver_) {
-    resolver_->SignalDone.disconnect(this);
-    resolver_->Destroy(false);
-    resolver_ = nullptr;
-  }
-  ++next_;
-  Next();
-}
-
-void AutoDetectProxy::OnCloseEvent(AsyncSocket * socket, int error) {
-  LOG(LS_VERBOSE) << "AutoDetectProxy closed with error: " << error;
-  ++next_;
-  Next();
-}
-
-}  // namespace rtc
diff --git a/webrtc/base/autodetectproxy.h b/webrtc/base/autodetectproxy.h
deleted file mode 100644
index 1788a03..0000000
--- a/webrtc/base/autodetectproxy.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef WEBRTC_BASE_AUTODETECTPROXY_H_
-#define WEBRTC_BASE_AUTODETECTPROXY_H_
-
-#include <string>
-
-#include "webrtc/base/constructormagic.h"
-#include "webrtc/base/cryptstring.h"
-#include "webrtc/base/proxydetect.h"
-#include "webrtc/base/proxyinfo.h"
-#include "webrtc/base/signalthread.h"
-
-namespace rtc {
-
-///////////////////////////////////////////////////////////////////////////////
-// AutoDetectProxy
-///////////////////////////////////////////////////////////////////////////////
-
-class AsyncResolverInterface;
-class AsyncSocket;
-
-class AutoDetectProxy : public SignalThread {
- public:
-  explicit AutoDetectProxy(const std::string& user_agent);
-
-  const ProxyInfo& proxy() const { return proxy_; }
-
-  void set_server_url(const std::string& url) {
-    server_url_ = url;
-  }
-  void set_proxy(const SocketAddress& proxy) {
-    proxy_.type = PROXY_UNKNOWN;
-    proxy_.address = proxy;
-  }
-  void set_auth_info(bool use_auth, const std::string& username,
-                     const CryptString& password) {
-    if (use_auth) {
-      proxy_.username = username;
-      proxy_.password = password;
-    }
-  }
-  // Default implementation of GetProxySettingsForUrl. Override for special
-  // implementation.
-  virtual bool GetProxyForUrl(const char* agent,
-                              const char* url,
-                              rtc::ProxyInfo* proxy);
-  enum { MSG_TIMEOUT = SignalThread::ST_MSG_FIRST_AVAILABLE,
-         MSG_UNRESOLVABLE,
-         ADP_MSG_FIRST_AVAILABLE};
-
- protected:
-  ~AutoDetectProxy() override;
-
-  // SignalThread Interface
-  void DoWork() override;
-  void OnMessage(Message* msg) override;
-
-  void Next();
-  void Complete(ProxyType type);
-
-  void OnConnectEvent(AsyncSocket * socket);
-  void OnReadEvent(AsyncSocket * socket);
-  void OnCloseEvent(AsyncSocket * socket, int error);
-  void OnTimeout();
-  void OnResolveResult(AsyncResolverInterface* resolver);
-  bool DoConnect();
-
- private:
-  std::string agent_;
-  std::string server_url_;
-  ProxyInfo proxy_;
-  AsyncResolverInterface* resolver_;
-  AsyncSocket* socket_;
-  int next_;
-
-  RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(AutoDetectProxy);
-};
-
-}  // namespace rtc
-
-#endif  // WEBRTC_BASE_AUTODETECTPROXY_H_
diff --git a/webrtc/base/autodetectproxy_unittest.cc b/webrtc/base/autodetectproxy_unittest.cc
deleted file mode 100644
index 2ae7a6a..0000000
--- a/webrtc/base/autodetectproxy_unittest.cc
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "webrtc/base/autodetectproxy.h"
-#include "webrtc/base/gunit.h"
-#include "webrtc/base/httpcommon.h"
-#include "webrtc/base/httpcommon-inl.h"
-
-namespace rtc {
-
-static const char kUserAgent[] = "";
-static const char kPath[] = "/";
-static const char kHost[] = "relay.google.com";
-static const uint16_t kPort = 443;
-static const bool kSecure = true;
-// At most, AutoDetectProxy should take ~6 seconds. Each connect step is
-// allotted 2 seconds, with the initial resolution + connect given an
-// extra 2 seconds. The slowest case is:
-// 1) Resolution + HTTPS takes full 4 seconds and fails (but resolution
-// succeeds).
-// 2) SOCKS5 takes the full 2 seconds.
-// Socket creation time seems unbounded, and has been observed to take >1 second
-// on a linux machine under load. As such, we allow for 10 seconds for timeout,
-// though could still end up with some flakiness.
-static const int kTimeoutMs = 10000;
-
-class AutoDetectProxyTest : public testing::Test, public sigslot::has_slots<> {
- public:
-  AutoDetectProxyTest() : auto_detect_proxy_(NULL), done_(false) {}
-
- protected:
-  bool Create(const std::string& user_agent,
-              const std::string& path,
-              const std::string& host,
-              uint16_t port,
-              bool secure,
-              bool startnow) {
-    auto_detect_proxy_ = new AutoDetectProxy(user_agent);
-    EXPECT_TRUE(auto_detect_proxy_ != NULL);
-    if (!auto_detect_proxy_) {
-      return false;
-    }
-    Url<char> host_url(path, host, port);
-    host_url.set_secure(secure);
-    auto_detect_proxy_->set_server_url(host_url.url());
-    auto_detect_proxy_->SignalWorkDone.connect(
-        this,
-        &AutoDetectProxyTest::OnWorkDone);
-    if (startnow) {
-      auto_detect_proxy_->Start();
-    }
-    return true;
-  }
-
-  bool Run(int timeout_ms) {
-    EXPECT_TRUE_WAIT(done_, timeout_ms);
-    return done_;
-  }
-
-  void SetProxy(const SocketAddress& proxy) {
-    auto_detect_proxy_->set_proxy(proxy);
-  }
-
-  void Start() {
-    auto_detect_proxy_->Start();
-  }
-
-  void TestCopesWithProxy(const SocketAddress& proxy) {
-    // Tests that at least autodetect doesn't crash for a given proxy address.
-    ASSERT_TRUE(Create(kUserAgent,
-                       kPath,
-                       kHost,
-                       kPort,
-                       kSecure,
-                       false));
-    SetProxy(proxy);
-    Start();
-    ASSERT_TRUE(Run(kTimeoutMs));
-  }
-
- private:
-  void OnWorkDone(rtc::SignalThread *thread) {
-    AutoDetectProxy *auto_detect_proxy =
-        static_cast<rtc::AutoDetectProxy *>(thread);
-    EXPECT_TRUE(auto_detect_proxy == auto_detect_proxy_);
-    auto_detect_proxy_ = NULL;
-    auto_detect_proxy->Release();
-    done_ = true;
-  }
-
-  AutoDetectProxy *auto_detect_proxy_;
-  bool done_;
-};
-
-TEST_F(AutoDetectProxyTest, TestDetectUnresolvedProxy) {
-  TestCopesWithProxy(rtc::SocketAddress("localhost", 9999));
-}
-
-TEST_F(AutoDetectProxyTest, TestDetectUnresolvableProxy) {
-  TestCopesWithProxy(rtc::SocketAddress("invalid", 9999));
-}
-
-TEST_F(AutoDetectProxyTest, TestDetectIPv6Proxy) {
-  TestCopesWithProxy(rtc::SocketAddress("::1", 9999));
-}
-
-TEST_F(AutoDetectProxyTest, TestDetectIPv4Proxy) {
-  TestCopesWithProxy(rtc::SocketAddress("127.0.0.1", 9999));
-}
-
-// Test that proxy detection completes successfully. (Does not actually verify
-// the correct detection result since we don't know what proxy to expect on an
-// arbitrary machine.)
-TEST_F(AutoDetectProxyTest, TestProxyDetection) {
-  ASSERT_TRUE(Create(kUserAgent,
-                     kPath,
-                     kHost,
-                     kPort,
-                     kSecure,
-                     true));
-  ASSERT_TRUE(Run(kTimeoutMs));
-}
-
-}  // namespace rtc
diff --git a/webrtc/base/proxy_unittest.cc b/webrtc/base/proxy_unittest.cc
index 4dba0dd..5c5a748 100644
--- a/webrtc/base/proxy_unittest.cc
+++ b/webrtc/base/proxy_unittest.cc
@@ -10,7 +10,6 @@
 
 #include <memory>
 #include <string>
-#include "webrtc/base/autodetectproxy.h"
 #include "webrtc/base/gunit.h"
 #include "webrtc/base/httpserver.h"
 #include "webrtc/base/proxyserver.h"
@@ -29,18 +28,6 @@
 static const SocketAddress kHttpsProxyExtAddr("1.2.3.5", 0);
 static const SocketAddress kBogusProxyIntAddr("1.2.3.4", 999);
 
-// Used to run a proxy detect on the current thread. Otherwise we would need
-// to make both threads share the same VirtualSocketServer.
-class AutoDetectProxyRunner : public rtc::AutoDetectProxy {
- public:
-  explicit AutoDetectProxyRunner(const std::string& agent)
-      : AutoDetectProxy(agent) {}
-  void Run() {
-    DoWork();
-    Thread::Current()->Restart();  // needed to reset the messagequeue
-  }
-};
-
 // Sets up a virtual socket server and HTTPS/SOCKS5 proxy servers.
 class ProxyTest : public testing::Test {
  public:
@@ -57,16 +44,6 @@
 
   rtc::SocketServer* ss() { return ss_.get(); }
 
-  rtc::ProxyType DetectProxyType(const SocketAddress& address) {
-    rtc::ProxyType type;
-    AutoDetectProxyRunner* detect = new AutoDetectProxyRunner("unittest/1.0");
-    detect->set_proxy(address);
-    detect->Run();  // blocks until done
-    type = detect->proxy().type;
-    detect->Destroy(false);
-    return type;
-  }
-
  private:
   std::unique_ptr<rtc::SocketServer> ss_;
   std::unique_ptr<rtc::SocksProxyServer> socks_;
@@ -99,38 +76,3 @@
   EXPECT_TRUE(client.CheckNextPacket("foo", 3, NULL));
   EXPECT_TRUE(client.CheckNoPacket());
 }
-
-/*
-// Tests whether we can use a HTTPS proxy to connect to a server.
-TEST_F(ProxyTest, TestHttpsConnect) {
-  AsyncSocket* socket = ss()->CreateAsyncSocket(SOCK_STREAM);
-  AsyncHttpsProxySocket* proxy_socket = new AsyncHttpsProxySocket(
-      socket, "unittest/1.0", kHttpsProxyIntAddress, "", CryptString());
-  TestClient client(new AsyncTCPSocket(proxy_socket));
-  TestEchoServer server(Thread::Current(), SocketAddress());
-
-  EXPECT_TRUE(client.Connect(server.address()));
-  EXPECT_TRUE(client.CheckConnected());
-  EXPECT_EQ(server.address(), client.remote_address());
-  client.Send("foo", 3);
-  EXPECT_TRUE(client.CheckNextPacket("foo", 3, NULL));
-  EXPECT_TRUE(client.CheckNoPacket());
-}
-*/
-
-// Tests whether we can autodetect a SOCKS5 proxy.
-TEST_F(ProxyTest, TestAutoDetectSocks5) {
-  EXPECT_EQ(rtc::PROXY_SOCKS5, DetectProxyType(kSocksProxyIntAddr));
-}
-
-/*
-// Tests whether we can autodetect a HTTPS proxy.
-TEST_F(ProxyTest, TestAutoDetectHttps) {
-  EXPECT_EQ(rtc::PROXY_HTTPS, DetectProxyType(kHttpsProxyIntAddr));
-}
-*/
-
-// Tests whether we fail properly for no proxy.
-TEST_F(ProxyTest, TestAutoDetectBogus) {
-  EXPECT_EQ(rtc::PROXY_UNKNOWN, DetectProxyType(kBogusProxyIntAddr));
-}
diff --git a/webrtc/base/proxydetect.cc b/webrtc/base/proxydetect.cc
deleted file mode 100644
index b0fa304..0000000
--- a/webrtc/base/proxydetect.cc
+++ /dev/null
@@ -1,1292 +0,0 @@
-/*
- *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "webrtc/base/proxydetect.h"
-
-#if defined(WEBRTC_WIN)
-#include "webrtc/base/win32.h"
-#include <shlobj.h>
-#endif  // WEBRTC_WIN
-
-#if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
-#include <SystemConfiguration/SystemConfiguration.h>
-#include <CoreFoundation/CoreFoundation.h>
-#include <CoreServices/CoreServices.h>
-#include <Security/Security.h>
-#include "macconversion.h"
-#include "webrtc/base/unixfilesystem.h"
-#endif
-
-#ifdef WEBRTC_IOS
-#include <CFNetwork/CFNetwork.h>
-#include "macconversion.h"
-#endif
-
-#include <map>
-#include <memory>
-
-#include "webrtc/base/arraysize.h"
-#include "webrtc/base/checks.h"
-#include "webrtc/base/common.h"
-#include "webrtc/base/fileutils.h"
-#include "webrtc/base/httpcommon.h"
-#include "webrtc/base/httpcommon-inl.h"
-#include "webrtc/base/pathutils.h"
-#include "webrtc/base/stringutils.h"
-
-#define _TRY_JSPROXY 0
-#define _TRY_WM_FINDPROXY 0
-
-#if defined(WEBRTC_WIN)
-#define _TRY_WINHTTP 1
-#define _TRY_IE_LAN_SETTINGS 1
-#else
-#define _TRY_WINHTTP 0
-#define _TRY_IE_LAN_SETTINGS 0
-#endif  // WEBRTC_WIN
-
-// For all platforms try Firefox.
-#define _TRY_FIREFOX 1
-
-// Use profiles.ini to find the correct profile for this user.
-// If not set, we'll just look for the default one.
-#define USE_FIREFOX_PROFILES_INI 1
-
-static const size_t kMaxLineLength = 1024;
-static const char kFirefoxPattern[] = "Firefox";
-static const char kInternetExplorerPattern[] = "MSIE";
-
-struct StringMap {
- public:
-  void Add(const char * name, const char * value) { map_[name] = value; }
-  const std::string& Get(const char * name, const char * def = "") const {
-    std::map<std::string, std::string>::const_iterator it =
-        map_.find(name);
-    if (it != map_.end())
-      return it->second;
-    def_ = def;
-    return def_;
-  }
-  bool IsSet(const char * name) const {
-    return (map_.find(name) != map_.end());
-  }
- private:
-  std::map<std::string, std::string> map_;
-  mutable std::string def_;
-};
-
-enum UserAgent {
-  UA_FIREFOX,
-  UA_INTERNETEXPLORER,
-  UA_OTHER,
-  UA_UNKNOWN
-};
-
-#if _TRY_WINHTTP
-//#include <winhttp.h>
-// Note: From winhttp.h
-
-const char WINHTTP[] = "winhttp";
-
-typedef LPVOID HINTERNET;
-
-typedef struct {
-  DWORD  dwAccessType;      // see WINHTTP_ACCESS_* types below
-  LPWSTR lpszProxy;         // proxy server list
-  LPWSTR lpszProxyBypass;   // proxy bypass list
-} WINHTTP_PROXY_INFO, * LPWINHTTP_PROXY_INFO;
-
-typedef struct {
-  DWORD   dwFlags;
-  DWORD   dwAutoDetectFlags;
-  LPCWSTR lpszAutoConfigUrl;
-  LPVOID  lpvReserved;
-  DWORD   dwReserved;
-  BOOL    fAutoLogonIfChallenged;
-} WINHTTP_AUTOPROXY_OPTIONS;
-
-typedef struct {
-  BOOL    fAutoDetect;
-  LPWSTR  lpszAutoConfigUrl;
-  LPWSTR  lpszProxy;
-  LPWSTR  lpszProxyBypass;
-} WINHTTP_CURRENT_USER_IE_PROXY_CONFIG;
-
-extern "C" {
-  typedef HINTERNET (WINAPI * pfnWinHttpOpen)
-      (
-          IN LPCWSTR pwszUserAgent,
-          IN DWORD   dwAccessType,
-          IN LPCWSTR pwszProxyName   OPTIONAL,
-          IN LPCWSTR pwszProxyBypass OPTIONAL,
-          IN DWORD   dwFlags
-          );
-  typedef BOOL (STDAPICALLTYPE * pfnWinHttpCloseHandle)
-      (
-          IN HINTERNET hInternet
-          );
-  typedef BOOL (STDAPICALLTYPE * pfnWinHttpGetProxyForUrl)
-      (
-          IN  HINTERNET                   hSession,
-          IN  LPCWSTR                     lpcwszUrl,
-          IN  WINHTTP_AUTOPROXY_OPTIONS * pAutoProxyOptions,
-          OUT WINHTTP_PROXY_INFO *        pProxyInfo
-          );
-  typedef BOOL (STDAPICALLTYPE * pfnWinHttpGetIEProxyConfig)
-      (
-          IN OUT WINHTTP_CURRENT_USER_IE_PROXY_CONFIG * pProxyConfig
-          );
-
-} // extern "C"
-
-#define WINHTTP_AUTOPROXY_AUTO_DETECT           0x00000001
-#define WINHTTP_AUTOPROXY_CONFIG_URL            0x00000002
-#define WINHTTP_AUTOPROXY_RUN_INPROCESS         0x00010000
-#define WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY   0x00020000
-#define WINHTTP_AUTO_DETECT_TYPE_DHCP           0x00000001
-#define WINHTTP_AUTO_DETECT_TYPE_DNS_A          0x00000002
-#define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY               0
-#define WINHTTP_ACCESS_TYPE_NO_PROXY                    1
-#define WINHTTP_ACCESS_TYPE_NAMED_PROXY                 3
-#define WINHTTP_NO_PROXY_NAME     NULL
-#define WINHTTP_NO_PROXY_BYPASS   NULL
-
-#endif // _TRY_WINHTTP
-
-#if _TRY_JSPROXY
-extern "C" {
-  typedef BOOL (STDAPICALLTYPE * pfnInternetGetProxyInfo)
-      (
-          LPCSTR lpszUrl,
-          DWORD dwUrlLength,
-          LPSTR lpszUrlHostName,
-          DWORD dwUrlHostNameLength,
-          LPSTR * lplpszProxyHostName,
-          LPDWORD lpdwProxyHostNameLength
-          );
-} // extern "C"
-#endif // _TRY_JSPROXY
-
-#if _TRY_WM_FINDPROXY
-#include <comutil.h>
-#include <wmnetsourcecreator.h>
-#include <wmsinternaladminnetsource.h>
-#endif // _TRY_WM_FINDPROXY
-
-#if _TRY_IE_LAN_SETTINGS
-#include <wininet.h>
-#include <string>
-#endif // _TRY_IE_LAN_SETTINGS
-
-namespace rtc {
-
-//////////////////////////////////////////////////////////////////////
-// Utility Functions
-//////////////////////////////////////////////////////////////////////
-
-#if defined(WEBRTC_WIN)
-#ifdef _UNICODE
-
-typedef std::wstring tstring;
-std::string Utf8String(const tstring& str) { return ToUtf8(str); }
-
-#else  // !_UNICODE
-
-typedef std::string tstring;
-std::string Utf8String(const tstring& str) { return str; }
-
-#endif  // !_UNICODE
-#endif  // WEBRTC_WIN
-
-bool ProxyItemMatch(const Url<char>& url, char * item, size_t len) {
-  // hostname:443
-  if (char * port = ::strchr(item, ':')) {
-    *port++ = '\0';
-    if (url.port() != atol(port)) {
-      return false;
-    }
-  }
-
-  // A.B.C.D or A.B.C.D/24
-  int a, b, c, d, m;
-  int match = sscanf(item, "%d.%d.%d.%d/%d", &a, &b, &c, &d, &m);
-  if (match >= 4) {
-    uint32_t ip = ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) |
-                  (d & 0xFF);
-    if ((match < 5) || (m > 32))
-      m = 32;
-    else if (m < 0)
-      m = 0;
-    uint32_t mask = (m == 0) ? 0 : (~0UL) << (32 - m);
-    SocketAddress addr(url.host(), 0);
-    // TODO: Support IPv6 proxyitems. This code block is IPv4 only anyway.
-    return !addr.IsUnresolvedIP() &&
-        ((addr.ipaddr().v4AddressAsHostOrderInteger() & mask) == (ip & mask));
-  }
-
-  // .foo.com
-  if (*item == '.') {
-    size_t hostlen = url.host().length();
-    return (hostlen > len)
-        && (stricmp(url.host().c_str() + (hostlen - len), item) == 0);
-  }
-
-  // localhost or www.*.com
-  if (!string_match(url.host().c_str(), item))
-    return false;
-
-  return true;
-}
-
-bool ProxyListMatch(const Url<char>& url, const std::string& proxy_list,
-                    char sep) {
-  const size_t BUFSIZE = 256;
-  char buffer[BUFSIZE];
-  const char* list = proxy_list.c_str();
-  while (*list) {
-    // Remove leading space
-    if (isspace(*list)) {
-      ++list;
-      continue;
-    }
-    // Break on separator
-    size_t len;
-    const char * start = list;
-    if (const char * end = ::strchr(list, sep)) {
-      len = (end - list);
-      list += len + 1;
-    } else {
-      len = strlen(list);
-      list += len;
-    }
-    // Remove trailing space
-    while ((len > 0) && isspace(start[len-1]))
-      --len;
-    // Check for oversized entry
-    if (len >= BUFSIZE)
-      continue;
-    memcpy(buffer, start, len);
-    buffer[len] = 0;
-    if (!ProxyItemMatch(url, buffer, len))
-      continue;
-    return true;
-  }
-  return false;
-}
-
-bool Better(ProxyType lhs, const ProxyType rhs) {
-  // PROXY_NONE, PROXY_HTTPS, PROXY_SOCKS5, PROXY_UNKNOWN
-  const int PROXY_VALUE[5] = { 0, 2, 3, 1 };
-  return (PROXY_VALUE[lhs] > PROXY_VALUE[rhs]);
-}
-
-bool ParseProxy(const std::string& saddress, ProxyInfo* proxy) {
-  const size_t kMaxAddressLength = 1024;
-  // Allow semicolon, space, or tab as an address separator
-  const char* const kAddressSeparator = " ;\t";
-
-  ProxyType ptype;
-  std::string host;
-  uint16_t port;
-
-  const char* address = saddress.c_str();
-  while (*address) {
-    size_t len;
-    const char * start = address;
-    if (const char * sep = strchr(address, kAddressSeparator)) {
-      len = (sep - address);
-      address += len + 1;
-      while (*address != '\0' && ::strchr(kAddressSeparator, *address)) {
-        address += 1;
-      }
-    } else {
-      len = strlen(address);
-      address += len;
-    }
-
-    if (len > kMaxAddressLength - 1) {
-      LOG(LS_WARNING) << "Proxy address too long [" << start << "]";
-      continue;
-    }
-
-    char buffer[kMaxAddressLength];
-    memcpy(buffer, start, len);
-    buffer[len] = 0;
-
-    char * colon = ::strchr(buffer, ':');
-    if (!colon) {
-      LOG(LS_WARNING) << "Proxy address without port [" << buffer << "]";
-      continue;
-    }
-
-    *colon = 0;
-    char * endptr;
-    port = static_cast<uint16_t>(strtol(colon + 1, &endptr, 0));
-    if (*endptr != 0) {
-      LOG(LS_WARNING) << "Proxy address with invalid port [" << buffer << "]";
-      continue;
-    }
-
-    if (char * equals = ::strchr(buffer, '=')) {
-      *equals = 0;
-      host = equals + 1;
-      if (_stricmp(buffer, "socks") == 0) {
-        ptype = PROXY_SOCKS5;
-      } else if (_stricmp(buffer, "https") == 0) {
-        ptype = PROXY_HTTPS;
-      } else {
-        LOG(LS_WARNING) << "Proxy address with unknown protocol ["
-                        << buffer << "]";
-        ptype = PROXY_UNKNOWN;
-      }
-    } else {
-      host = buffer;
-      ptype = PROXY_UNKNOWN;
-    }
-
-    if (Better(ptype, proxy->type)) {
-      proxy->type = ptype;
-      proxy->address.SetIP(host);
-      proxy->address.SetPort(port);
-    }
-  }
-
-  return proxy->type != PROXY_NONE;
-}
-
-UserAgent GetAgent(const char* agent) {
-  if (agent) {
-    std::string agent_str(agent);
-    if (agent_str.find(kFirefoxPattern) != std::string::npos) {
-      return UA_FIREFOX;
-    } else if (agent_str.find(kInternetExplorerPattern) != std::string::npos) {
-      return UA_INTERNETEXPLORER;
-    } else if (agent_str.empty()) {
-      return UA_UNKNOWN;
-    }
-  }
-  return UA_OTHER;
-}
-
-bool EndsWith(const std::string& a, const std::string& b) {
-  if (b.size() > a.size()) {
-    return false;
-  }
-  int result = a.compare(a.size() - b.size(), b.size(), b);
-  return result == 0;
-}
-
-bool GetFirefoxProfilePath(Pathname* path) {
-#if defined(WEBRTC_WIN)
-  wchar_t w_path[MAX_PATH];
-  if (SHGetFolderPath(0, CSIDL_APPDATA, 0, SHGFP_TYPE_CURRENT, w_path) !=
-      S_OK) {
-    LOG(LS_ERROR) << "SHGetFolderPath failed";
-    return false;
-  }
-  path->SetFolder(ToUtf8(w_path, wcslen(w_path)));
-  path->AppendFolder("Mozilla");
-  path->AppendFolder("Firefox");
-#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
-  rtc::UnixFilesystem filesystem;
-  filesystem.SetApplicationName("Firefox");
-  bool result = filesystem.GetAppDataFolder(path, true);
-  return result;
-#else
-  char* user_home = getenv("HOME");
-  if (user_home == NULL) {
-    return false;
-  }
-  path->SetFolder(std::string(user_home));
-  path->AppendFolder(".mozilla");
-  path->AppendFolder("firefox");
-#endif  // WEBRTC_WIN
-  return true;
-}
-
-bool GetDefaultFirefoxProfile(Pathname* profile_path) {
-  RTC_DCHECK(NULL != profile_path);
-  Pathname path;
-  if (!GetFirefoxProfilePath(&path)) {
-    return false;
-  }
-
-#if USE_FIREFOX_PROFILES_INI
-  // [Profile0]
-  // Name=default
-  // IsRelative=1
-  // Path=Profiles/2de53ejb.default
-  // Default=1
-
-  // Note: we are looking for the first entry with "Default=1", or the last
-  // entry in the file
-  path.SetFilename("profiles.ini");
-  std::unique_ptr<FileStream> fs(Filesystem::OpenFile(path, "r"));
-  if (!fs) {
-    return false;
-  }
-  Pathname candidate;
-  bool relative = true;
-  std::string line;
-  while (fs->ReadLine(&line) == SR_SUCCESS) {
-    if (line.length() == 0) {
-      continue;
-    }
-    if (line.at(0) == '[') {
-      relative = true;
-      candidate.clear();
-    } else if (line.find("IsRelative=") == 0 &&
-               line.length() >= 12) {
-      // TODO: The initial Linux public launch revealed a fairly
-      // high number of machines where IsRelative= did not have anything after
-      // it. Perhaps that is legal profiles.ini syntax?
-      relative = (line.at(11) != '0');
-    } else if (line.find("Path=") == 0 &&
-               line.length() >= 6) {
-      if (relative) {
-        candidate = path;
-      } else {
-        candidate.clear();
-      }
-      candidate.AppendFolder(line.substr(5));
-    } else if (line.find("Default=") == 0 &&
-               line.length() >= 9) {
-      if ((line.at(8) != '0') && !candidate.empty()) {
-        break;
-      }
-    }
-  }
-  fs->Close();
-  if (candidate.empty()) {
-    return false;
-  }
-  profile_path->SetPathname(candidate.pathname());
-
-#else // !USE_FIREFOX_PROFILES_INI
-  path.AppendFolder("Profiles");
-  DirectoryIterator* it = Filesystem::IterateDirectory();
-  it->Iterate(path);
-  std::string extension(".default");
-  while (!EndsWith(it->Name(), extension)) {
-    if (!it->Next()) {
-      return false;
-    }
-  }
-
-  profile_path->SetPathname(path);
-  profile->AppendFolder("Profiles");
-  profile->AppendFolder(it->Name());
-  delete it;
-
-#endif // !USE_FIREFOX_PROFILES_INI
-
-  return true;
-}
-
-bool ReadFirefoxPrefs(const Pathname& filename,
-                      const char * prefix,
-                      StringMap* settings) {
-  std::unique_ptr<FileStream> fs(Filesystem::OpenFile(filename, "r"));
-  if (!fs) {
-    LOG(LS_ERROR) << "Failed to open file: " << filename.pathname();
-    return false;
-  }
-
-  std::string line;
-  while (fs->ReadLine(&line) == SR_SUCCESS) {
-    size_t prefix_len = strlen(prefix);
-
-    // Skip blank lines and too long lines.
-    if ((line.length() == 0) || (line.length() > kMaxLineLength)
-        || (line.at(0) == '#') || line.compare(0, 2, "/*") == 0
-        || line.compare(0, 2, " *") == 0) {
-      continue;
-    }
-
-    char buffer[kMaxLineLength];
-    strcpyn(buffer, sizeof(buffer), line.c_str());
-    int nstart = 0, nend = 0, vstart = 0, vend = 0;
-    sscanf(buffer, "user_pref(\"%n%*[^\"]%n\", %n%*[^)]%n);",
-           &nstart, &nend, &vstart, &vend);
-    if (vend > 0) {
-      char* name = buffer + nstart;
-      name[nend - nstart] = 0;
-      if ((vend - vstart >= 2) && (buffer[vstart] == '"')) {
-        vstart += 1;
-        vend -= 1;
-      }
-      char* value = buffer + vstart;
-      value[vend - vstart] = 0;
-      if ((strncmp(name, prefix, prefix_len) == 0) && *value) {
-        settings->Add(name + prefix_len, value);
-      }
-    } else {
-      LOG_F(LS_WARNING) << "Unparsed pref [" << buffer << "]";
-    }
-  }
-  fs->Close();
-  return true;
-}
-
-bool GetFirefoxProxySettings(const char* url, ProxyInfo* proxy) {
-  Url<char> purl(url);
-  Pathname path;
-  bool success = false;
-  if (GetDefaultFirefoxProfile(&path)) {
-    StringMap settings;
-    path.SetFilename("prefs.js");
-    if (ReadFirefoxPrefs(path, "network.proxy.", &settings)) {
-      success = true;
-      proxy->bypass_list =
-          settings.Get("no_proxies_on", "localhost, 127.0.0.1");
-      if (settings.Get("type") == "1") {
-        // User has manually specified a proxy, try to figure out what
-        // type it is.
-        if (ProxyListMatch(purl, proxy->bypass_list.c_str(), ',')) {
-          // Our url is in the list of url's to bypass proxy.
-        } else if (settings.Get("share_proxy_settings") == "true") {
-          proxy->type = PROXY_UNKNOWN;
-          proxy->address.SetIP(settings.Get("http"));
-          proxy->address.SetPort(atoi(settings.Get("http_port").c_str()));
-        } else if (settings.IsSet("socks")) {
-          proxy->type = PROXY_SOCKS5;
-          proxy->address.SetIP(settings.Get("socks"));
-          proxy->address.SetPort(atoi(settings.Get("socks_port").c_str()));
-        } else if (settings.IsSet("ssl")) {
-          proxy->type = PROXY_HTTPS;
-          proxy->address.SetIP(settings.Get("ssl"));
-          proxy->address.SetPort(atoi(settings.Get("ssl_port").c_str()));
-        } else if (settings.IsSet("http")) {
-          proxy->type = PROXY_HTTPS;
-          proxy->address.SetIP(settings.Get("http"));
-          proxy->address.SetPort(atoi(settings.Get("http_port").c_str()));
-        }
-      } else if (settings.Get("type") == "2") {
-        // Browser is configured to get proxy settings from a given url.
-        proxy->autoconfig_url = settings.Get("autoconfig_url").c_str();
-      } else if (settings.Get("type") == "4") {
-        // Browser is configured to auto detect proxy config.
-        proxy->autodetect = true;
-      } else {
-        // No proxy set.
-      }
-    }
-  }
-  return success;
-}
-
-#if defined(WEBRTC_WIN)  // Windows specific implementation for reading Internet
-              // Explorer proxy settings.
-
-void LogGetProxyFault() {
-  LOG_GLEM(LERROR, WINHTTP) << "WinHttpGetProxyForUrl faulted!!";
-}
-
-BOOL MyWinHttpGetProxyForUrl(pfnWinHttpGetProxyForUrl pWHGPFU,
-                             HINTERNET hWinHttp, LPCWSTR url,
-                             WINHTTP_AUTOPROXY_OPTIONS *options,
-                             WINHTTP_PROXY_INFO *info) {
-  // WinHttpGetProxyForUrl() can call plugins which can crash.
-  // In the case of McAfee scriptproxy.dll, it does crash in
-  // older versions. Try to catch crashes here and treat as an
-  // error.
-  BOOL success = FALSE;
-
-#if (_HAS_EXCEPTIONS == 0)
-  __try {
-    success = pWHGPFU(hWinHttp, url, options, info);
-  } __except(EXCEPTION_EXECUTE_HANDLER) {
-    // This is a separate function to avoid
-    // Visual C++ error 2712 when compiling with C++ EH
-    LogGetProxyFault();
-  }
-#else
-  success = pWHGPFU(hWinHttp, url, options, info);
-#endif  // (_HAS_EXCEPTIONS == 0)
-
-  return success;
-}
-
-bool IsDefaultBrowserFirefox() {
-  HKEY key;
-  LONG result = RegOpenKeyEx(HKEY_CLASSES_ROOT, L"http\\shell\\open\\command",
-                             0, KEY_READ, &key);
-  if (ERROR_SUCCESS != result)
-    return false;
-
-  DWORD size, type;
-  bool success = false;
-  result = RegQueryValueEx(key, L"", 0, &type, NULL, &size);
-  if (result == ERROR_SUCCESS && type == REG_SZ) {
-    wchar_t* value = new wchar_t[size+1];
-    BYTE* buffer = reinterpret_cast<BYTE*>(value);
-    result = RegQueryValueEx(key, L"", 0, &type, buffer, &size);
-    if (result == ERROR_SUCCESS) {
-      // Size returned by RegQueryValueEx is in bytes, convert to number of
-      // wchar_t's.
-      size /= sizeof(value[0]);
-      value[size] = L'\0';
-      for (size_t i = 0; i < size; ++i) {
-        value[i] = tolowercase(value[i]);
-      }
-      success = (NULL != strstr(value, L"firefox.exe"));
-    }
-    delete[] value;
-  }
-
-  RegCloseKey(key);
-  return success;
-}
-
-bool GetWinHttpProxySettings(const char* url, ProxyInfo* proxy) {
-  HMODULE winhttp_handle = LoadLibrary(L"winhttp.dll");
-  if (winhttp_handle == NULL) {
-    LOG(LS_ERROR) << "Failed to load winhttp.dll.";
-    return false;
-  }
-  WINHTTP_CURRENT_USER_IE_PROXY_CONFIG iecfg;
-  memset(&iecfg, 0, sizeof(iecfg));
-  Url<char> purl(url);
-  pfnWinHttpGetIEProxyConfig pWHGIEPC =
-      reinterpret_cast<pfnWinHttpGetIEProxyConfig>(
-          GetProcAddress(winhttp_handle,
-                         "WinHttpGetIEProxyConfigForCurrentUser"));
-  bool success = false;
-  if (pWHGIEPC && pWHGIEPC(&iecfg)) {
-    // We were read proxy config successfully.
-    success = true;
-    if (iecfg.fAutoDetect) {
-      proxy->autodetect = true;
-    }
-    if (iecfg.lpszAutoConfigUrl) {
-      proxy->autoconfig_url = ToUtf8(iecfg.lpszAutoConfigUrl);
-      GlobalFree(iecfg.lpszAutoConfigUrl);
-    }
-    if (iecfg.lpszProxyBypass) {
-      proxy->bypass_list = ToUtf8(iecfg.lpszProxyBypass);
-      GlobalFree(iecfg.lpszProxyBypass);
-    }
-    if (iecfg.lpszProxy) {
-      if (!ProxyListMatch(purl, proxy->bypass_list, ';')) {
-        ParseProxy(ToUtf8(iecfg.lpszProxy), proxy);
-      }
-      GlobalFree(iecfg.lpszProxy);
-    }
-  }
-  FreeLibrary(winhttp_handle);
-  return success;
-}
-
-// Uses the WinHTTP API to auto detect proxy for the given url. Firefox and IE
-// have slightly different option dialogs for proxy settings. In Firefox,
-// either a location of a proxy configuration file can be specified or auto
-// detection can be selected. In IE theese two options can be independently
-// selected. For the case where both options are selected (only IE) we try to
-// fetch the config file first, and if that fails we'll perform an auto
-// detection.
-//
-// Returns true if we successfully performed an auto detection not depending on
-// whether we found a proxy or not. Returns false on error.
-bool WinHttpAutoDetectProxyForUrl(const char* agent, const char* url,
-                                  ProxyInfo* proxy) {
-  Url<char> purl(url);
-  bool success = true;
-  HMODULE winhttp_handle = LoadLibrary(L"winhttp.dll");
-  if (winhttp_handle == NULL) {
-    LOG(LS_ERROR) << "Failed to load winhttp.dll.";
-    return false;
-  }
-  pfnWinHttpOpen pWHO =
-      reinterpret_cast<pfnWinHttpOpen>(GetProcAddress(winhttp_handle,
-                                                      "WinHttpOpen"));
-  pfnWinHttpCloseHandle pWHCH =
-      reinterpret_cast<pfnWinHttpCloseHandle>(
-          GetProcAddress(winhttp_handle, "WinHttpCloseHandle"));
-  pfnWinHttpGetProxyForUrl pWHGPFU =
-      reinterpret_cast<pfnWinHttpGetProxyForUrl>(
-          GetProcAddress(winhttp_handle, "WinHttpGetProxyForUrl"));
-  if (pWHO && pWHCH && pWHGPFU) {
-    if (HINTERNET hWinHttp = pWHO(ToUtf16(agent).c_str(),
-                                  WINHTTP_ACCESS_TYPE_NO_PROXY,
-                                  WINHTTP_NO_PROXY_NAME,
-                                  WINHTTP_NO_PROXY_BYPASS,
-                                  0)) {
-      BOOL result = FALSE;
-      WINHTTP_PROXY_INFO info;
-      memset(&info, 0, sizeof(info));
-      if (proxy->autodetect) {
-        // Use DHCP and DNS to try to find any proxy to use.
-        WINHTTP_AUTOPROXY_OPTIONS options;
-        memset(&options, 0, sizeof(options));
-        options.fAutoLogonIfChallenged = TRUE;
-
-        options.dwFlags |= WINHTTP_AUTOPROXY_AUTO_DETECT;
-        options.dwAutoDetectFlags |= WINHTTP_AUTO_DETECT_TYPE_DHCP
-            | WINHTTP_AUTO_DETECT_TYPE_DNS_A;
-        result = MyWinHttpGetProxyForUrl(
-            pWHGPFU, hWinHttp, ToUtf16(url).c_str(), &options, &info);
-      }
-      if (!result && !proxy->autoconfig_url.empty()) {
-        // We have the location of a proxy config file. Download it and
-        // execute it to find proxy settings for our url.
-        WINHTTP_AUTOPROXY_OPTIONS options;
-        memset(&options, 0, sizeof(options));
-        memset(&info, 0, sizeof(info));
-        options.fAutoLogonIfChallenged = TRUE;
-
-        std::wstring autoconfig_url16((ToUtf16)(proxy->autoconfig_url));
-        options.dwFlags |= WINHTTP_AUTOPROXY_CONFIG_URL;
-        options.lpszAutoConfigUrl = autoconfig_url16.c_str();
-
-        result = MyWinHttpGetProxyForUrl(
-            pWHGPFU, hWinHttp, ToUtf16(url).c_str(), &options, &info);
-      }
-      if (result) {
-        // Either the given auto config url was valid or auto
-        // detection found a proxy on this network.
-        if (info.lpszProxy) {
-          // TODO: Does this bypass list differ from the list
-          // retreived from GetWinHttpProxySettings earlier?
-          if (info.lpszProxyBypass) {
-            proxy->bypass_list = ToUtf8(info.lpszProxyBypass);
-            GlobalFree(info.lpszProxyBypass);
-          } else {
-            proxy->bypass_list.clear();
-          }
-          if (!ProxyListMatch(purl, proxy->bypass_list, ';')) {
-            // Found proxy for this URL. If parsing the address turns
-            // out ok then we are successful.
-            success = ParseProxy(ToUtf8(info.lpszProxy), proxy);
-          }
-          GlobalFree(info.lpszProxy);
-        }
-      } else {
-        // We could not find any proxy for this url.
-        LOG(LS_INFO) << "No proxy detected for " << url;
-      }
-      pWHCH(hWinHttp);
-    }
-  } else {
-    LOG(LS_ERROR) << "Failed loading WinHTTP functions.";
-    success = false;
-  }
-  FreeLibrary(winhttp_handle);
-  return success;
-}
-
-#if 0  // Below functions currently not used.
-
-bool GetJsProxySettings(const char* url, ProxyInfo* proxy) {
-  Url<char> purl(url);
-  bool success = false;
-
-  if (HMODULE hModJS = LoadLibrary(_T("jsproxy.dll"))) {
-    pfnInternetGetProxyInfo pIGPI =
-        reinterpret_cast<pfnInternetGetProxyInfo>(
-            GetProcAddress(hModJS, "InternetGetProxyInfo"));
-    if (pIGPI) {
-      char proxy[256], host[256];
-      memset(proxy, 0, sizeof(proxy));
-      char * ptr = proxy;
-      DWORD proxylen = sizeof(proxy);
-      std::string surl = Utf8String(url);
-      DWORD hostlen = _snprintf(host, sizeof(host), "http%s://%S",
-                                purl.secure() ? "s" : "", purl.server());
-      if (pIGPI(surl.data(), surl.size(), host, hostlen, &ptr, &proxylen)) {
-        LOG(INFO) << "Proxy: " << proxy;
-      } else {
-        LOG_GLE(INFO) << "InternetGetProxyInfo";
-      }
-    }
-    FreeLibrary(hModJS);
-  }
-  return success;
-}
-
-bool GetWmProxySettings(const char* url, ProxyInfo* proxy) {
-  Url<char> purl(url);
-  bool success = false;
-
-  INSNetSourceCreator * nsc = 0;
-  HRESULT hr = CoCreateInstance(CLSID_ClientNetManager, 0, CLSCTX_ALL,
-                                IID_INSNetSourceCreator, (LPVOID *) &nsc);
-  if (SUCCEEDED(hr)) {
-    if (SUCCEEDED(hr = nsc->Initialize())) {
-      VARIANT dispatch;
-      VariantInit(&dispatch);
-      if (SUCCEEDED(hr = nsc->GetNetSourceAdminInterface(L"http", &dispatch))) {
-        IWMSInternalAdminNetSource * ians = 0;
-        if (SUCCEEDED(hr = dispatch.pdispVal->QueryInterface(
-                IID_IWMSInternalAdminNetSource, (LPVOID *) &ians))) {
-          _bstr_t host(purl.server());
-          BSTR proxy = 0;
-          BOOL bProxyEnabled = FALSE;
-          DWORD port, context = 0;
-          if (SUCCEEDED(hr = ians->FindProxyForURL(
-                  L"http", host, &bProxyEnabled, &proxy, &port, &context))) {
-            success = true;
-            if (bProxyEnabled) {
-              _bstr_t sproxy = proxy;
-              proxy->ptype = PT_HTTPS;
-              proxy->host = sproxy;
-              proxy->port = port;
-            }
-          }
-          SysFreeString(proxy);
-          if (FAILED(hr = ians->ShutdownProxyContext(context))) {
-            LOG(LS_INFO) << "IWMSInternalAdminNetSource::ShutdownProxyContext"
-                         << "failed: " << hr;
-          }
-          ians->Release();
-        }
-      }
-      VariantClear(&dispatch);
-      if (FAILED(hr = nsc->Shutdown())) {
-        LOG(LS_INFO) << "INSNetSourceCreator::Shutdown failed: " << hr;
-      }
-    }
-    nsc->Release();
-  }
-  return success;
-}
-
-bool GetIePerConnectionProxySettings(const char* url, ProxyInfo* proxy) {
-  Url<char> purl(url);
-  bool success = false;
-
-  INTERNET_PER_CONN_OPTION_LIST list;
-  INTERNET_PER_CONN_OPTION options[3];
-  memset(&list, 0, sizeof(list));
-  memset(&options, 0, sizeof(options));
-
-  list.dwSize = sizeof(list);
-  list.dwOptionCount = 3;
-  list.pOptions = options;
-  options[0].dwOption = INTERNET_PER_CONN_FLAGS;
-  options[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
-  options[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
-  DWORD dwSize = sizeof(list);
-
-  if (!InternetQueryOption(0, INTERNET_OPTION_PER_CONNECTION_OPTION, &list,
-                           &dwSize)) {
-    LOG(LS_INFO) << "InternetQueryOption failed: " << GetLastError();
-  } else if ((options[0].Value.dwValue & PROXY_TYPE_PROXY) != 0) {
-    success = true;
-    if (!ProxyListMatch(purl, nonnull(options[2].Value.pszValue), _T(';'))) {
-      ParseProxy(nonnull(options[1].Value.pszValue), proxy);
-    }
-  } else if ((options[0].Value.dwValue & PROXY_TYPE_DIRECT) != 0) {
-    success = true;
-  } else {
-    LOG(LS_INFO) << "unknown internet access type: "
-                 << options[0].Value.dwValue;
-  }
-  if (options[1].Value.pszValue) {
-    GlobalFree(options[1].Value.pszValue);
-  }
-  if (options[2].Value.pszValue) {
-    GlobalFree(options[2].Value.pszValue);
-  }
-  return success;
-}
-
-#endif  // 0
-
-// Uses the InternetQueryOption function to retrieve proxy settings
-// from the registry. This will only give us the 'static' settings,
-// ie, not any information about auto config etc.
-bool GetIeLanProxySettings(const char* url, ProxyInfo* proxy) {
-  Url<char> purl(url);
-  bool success = false;
-
-  wchar_t buffer[1024];
-  memset(buffer, 0, sizeof(buffer));
-  INTERNET_PROXY_INFO * info = reinterpret_cast<INTERNET_PROXY_INFO *>(buffer);
-  DWORD dwSize = sizeof(buffer);
-
-  if (!InternetQueryOption(0, INTERNET_OPTION_PROXY, info, &dwSize)) {
-    LOG(LS_INFO) << "InternetQueryOption failed: " << GetLastError();
-  } else if (info->dwAccessType == INTERNET_OPEN_TYPE_DIRECT) {
-    success = true;
-  } else if (info->dwAccessType == INTERNET_OPEN_TYPE_PROXY) {
-    success = true;
-    if (!ProxyListMatch(purl, nonnull(reinterpret_cast<const char*>(
-            info->lpszProxyBypass)), ' ')) {
-      ParseProxy(nonnull(reinterpret_cast<const char*>(info->lpszProxy)),
-                 proxy);
-    }
-  } else {
-    LOG(LS_INFO) << "unknown internet access type: " << info->dwAccessType;
-  }
-  return success;
-}
-
-bool GetIeProxySettings(const char* agent, const char* url, ProxyInfo* proxy) {
-  bool success = GetWinHttpProxySettings(url, proxy);
-  if (!success) {
-    // TODO: Should always call this if no proxy were detected by
-    // GetWinHttpProxySettings?
-    // WinHttp failed. Try using the InternetOptionQuery method instead.
-    return GetIeLanProxySettings(url, proxy);
-  }
-  return true;
-}
-
-#endif  // WEBRTC_WIN
-
-#if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)  // WEBRTC_MAC && !defined(WEBRTC_IOS) specific implementation for reading system wide
-            // proxy settings.
-
-bool p_getProxyInfoForTypeFromDictWithKeys(ProxyInfo* proxy,
-                                           ProxyType type,
-                                           const CFDictionaryRef proxyDict,
-                                           const CFStringRef enabledKey,
-                                           const CFStringRef hostKey,
-                                           const CFStringRef portKey) {
-  // whether or not we set up the proxy info.
-  bool result = false;
-
-  // we use this as a scratch variable for determining if operations
-  // succeeded.
-  bool converted = false;
-
-  // the data we need to construct the SocketAddress for the proxy.
-  std::string hostname;
-  int port;
-
-  if ((proxyDict != NULL) &&
-      (CFGetTypeID(proxyDict) == CFDictionaryGetTypeID())) {
-    // CoreFoundation stuff that we'll have to get from
-    // the dictionaries and interpret or convert into more usable formats.
-    CFNumberRef enabledCFNum;
-    CFNumberRef portCFNum;
-    CFStringRef hostCFStr;
-
-    enabledCFNum = (CFNumberRef)CFDictionaryGetValue(proxyDict, enabledKey);
-
-    if (p_isCFNumberTrue(enabledCFNum)) {
-      // let's see if we can get the address and port.
-      hostCFStr = (CFStringRef)CFDictionaryGetValue(proxyDict, hostKey);
-      converted = p_convertHostCFStringRefToCPPString(hostCFStr, hostname);
-      if (converted) {
-        portCFNum = (CFNumberRef)CFDictionaryGetValue(proxyDict, portKey);
-        converted = p_convertCFNumberToInt(portCFNum, &port);
-        if (converted) {
-          // we have something enabled, with a hostname and a port.
-          // That's sufficient to set up the proxy info.
-          proxy->type = type;
-          proxy->address.SetIP(hostname);
-          proxy->address.SetPort(port);
-          result = true;
-        }
-      }
-    }
-  }
-
-  return result;
-}
-
-// Looks for proxy information in the given dictionary,
-// return true if it found sufficient information to define one,
-// false otherwise.  This is guaranteed to not change the values in proxy
-// unless a full-fledged proxy description was discovered in the dictionary.
-// However, at the present time this does not support username or password.
-// Checks first for a SOCKS proxy, then for HTTPS, then HTTP.
-bool GetMacProxySettingsFromDictionary(ProxyInfo* proxy,
-                                       const CFDictionaryRef proxyDict) {
-  // the function result.
-  bool gotProxy = false;
-
-
-  // first we see if there's a SOCKS proxy in place.
-  gotProxy = p_getProxyInfoForTypeFromDictWithKeys(proxy,
-                                                   PROXY_SOCKS5,
-                                                   proxyDict,
-                                                   kSCPropNetProxiesSOCKSEnable,
-                                                   kSCPropNetProxiesSOCKSProxy,
-                                                   kSCPropNetProxiesSOCKSPort);
-
-  if (!gotProxy) {
-    // okay, no SOCKS proxy, let's look for https.
-    gotProxy = p_getProxyInfoForTypeFromDictWithKeys(proxy,
-                                               PROXY_HTTPS,
-                                               proxyDict,
-                                               kSCPropNetProxiesHTTPSEnable,
-                                               kSCPropNetProxiesHTTPSProxy,
-                                               kSCPropNetProxiesHTTPSPort);
-    if (!gotProxy) {
-      // Finally, try HTTP proxy. Note that flute doesn't
-      // differentiate between HTTPS and HTTP, hence we are using the
-      // same flute type here, ie. PROXY_HTTPS.
-      gotProxy = p_getProxyInfoForTypeFromDictWithKeys(
-          proxy, PROXY_HTTPS, proxyDict, kSCPropNetProxiesHTTPEnable,
-          kSCPropNetProxiesHTTPProxy, kSCPropNetProxiesHTTPPort);
-    }
-  }
-  return gotProxy;
-}
-
-// TODO(hughv) Update keychain functions. They work on 10.8, but are depricated.
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-bool p_putPasswordInProxyInfo(ProxyInfo* proxy) {
-  bool result = true;  // by default we assume we're good.
-  // for all we know there isn't any password.  We'll set to false
-  // if we find a problem.
-
-  // Ask the keychain for an internet password search for the given protocol.
-  OSStatus oss = 0;
-  SecKeychainAttributeList attrList;
-  attrList.count = 3;
-  SecKeychainAttribute attributes[3];
-  attrList.attr = attributes;
-
-  attributes[0].tag = kSecProtocolItemAttr;
-  attributes[0].length = sizeof(SecProtocolType);
-  SecProtocolType protocol;
-  switch (proxy->type) {
-    case PROXY_HTTPS :
-      protocol = kSecProtocolTypeHTTPS;
-      break;
-    case PROXY_SOCKS5 :
-      protocol = kSecProtocolTypeSOCKS;
-      break;
-    default :
-      LOG(LS_ERROR) << "asked for proxy password for unknown proxy type.";
-      result = false;
-      break;
-  }
-  attributes[0].data = &protocol;
-
-  UInt32 port = proxy->address.port();
-  attributes[1].tag = kSecPortItemAttr;
-  attributes[1].length = sizeof(UInt32);
-  attributes[1].data = &port;
-
-  std::string ip = proxy->address.ipaddr().ToString();
-  attributes[2].tag = kSecServerItemAttr;
-  attributes[2].length = ip.length();
-  attributes[2].data = const_cast<char*>(ip.c_str());
-
-  if (result) {
-    LOG(LS_INFO) << "trying to get proxy username/password";
-    SecKeychainSearchRef sref;
-    oss = SecKeychainSearchCreateFromAttributes(NULL,
-                                                kSecInternetPasswordItemClass,
-                                                &attrList, &sref);
-    if (0 == oss) {
-      LOG(LS_INFO) << "SecKeychainSearchCreateFromAttributes was good";
-      // Get the first item, if there is one.
-      SecKeychainItemRef iref;
-      oss = SecKeychainSearchCopyNext(sref, &iref);
-      if (0 == oss) {
-        LOG(LS_INFO) << "...looks like we have the username/password data";
-        // If there is, get the username and the password.
-
-        SecKeychainAttributeInfo attribsToGet;
-        attribsToGet.count = 1;
-        UInt32 tag = kSecAccountItemAttr;
-        UInt32 format = CSSM_DB_ATTRIBUTE_FORMAT_STRING;
-        void *data;
-        UInt32 length;
-        SecKeychainAttributeList *localList;
-
-        attribsToGet.tag = &tag;
-        attribsToGet.format = &format;
-        OSStatus copyres = SecKeychainItemCopyAttributesAndData(iref,
-                                                                &attribsToGet,
-                                                                NULL,
-                                                                &localList,
-                                                                &length,
-                                                                &data);
-        if (0 == copyres) {
-          LOG(LS_INFO) << "...and we can pull it out.";
-          // now, we know from experimentation (sadly not from docs)
-          // that the username is in the local attribute list,
-          // and the password in the data,
-          // both without null termination but with info on their length.
-          // grab the password from the data.
-          std::string password;
-          password.append(static_cast<const char*>(data), length);
-
-          // make the password into a CryptString
-          // huh, at the time of writing, you can't.
-          // so we'll skip that for now and come back to it later.
-
-          // now put the username in the proxy.
-          if (1 <= localList->attr->length) {
-            proxy->username.append(
-                static_cast<const char*>(localList->attr->data),
-                localList->attr->length);
-            LOG(LS_INFO) << "username is " << proxy->username;
-          } else {
-            LOG(LS_ERROR) << "got keychain entry with no username";
-            result = false;
-          }
-        } else {
-          LOG(LS_ERROR) << "couldn't copy info from keychain.";
-          result = false;
-        }
-        SecKeychainItemFreeAttributesAndData(localList, data);
-      } else if (errSecItemNotFound == oss) {
-        LOG(LS_INFO) << "...username/password info not found";
-      } else {
-        // oooh, neither 0 nor itemNotFound.
-        LOG(LS_ERROR) << "Couldn't get keychain information, error code" << oss;
-        result = false;
-      }
-    } else if (errSecItemNotFound == oss) {  // noop
-    } else {
-      // oooh, neither 0 nor itemNotFound.
-      LOG(LS_ERROR) << "Couldn't get keychain information, error code" << oss;
-      result = false;
-    }
-  }
-
-  return result;
-}
-
-bool GetMacProxySettings(ProxyInfo* proxy) {
-  // based on the Apple Technical Q&A QA1234
-  // http://developer.apple.com/qa/qa2001/qa1234.html
-  CFDictionaryRef proxyDict = SCDynamicStoreCopyProxies(NULL);
-  bool result = false;
-
-  if (proxyDict != NULL) {
-    // sending it off to another function makes it easier to unit test
-    // since we can make our own dictionary to hand to that function.
-    result = GetMacProxySettingsFromDictionary(proxy, proxyDict);
-
-    if (result) {
-      result = p_putPasswordInProxyInfo(proxy);
-    }
-
-    CFRelease(proxyDict);
-  } else {
-    LOG(LS_ERROR) << "SCDynamicStoreCopyProxies failed";
-  }
-
-  return result;
-}
-#endif  // WEBRTC_MAC && !defined(WEBRTC_IOS)
-
-#ifdef WEBRTC_IOS
-// iOS has only http proxy
-bool GetiOSProxySettings(ProxyInfo* proxy) {
-
-  bool result = false;
-
-  CFDictionaryRef proxy_dict = CFNetworkCopySystemProxySettings();
-  if (!proxy_dict) {
-    LOG(LS_ERROR) << "CFNetworkCopySystemProxySettings failed";
-    return false;
-  }
-
-  CFNumberRef proxiesHTTPEnable = (CFNumberRef)CFDictionaryGetValue(
-    proxy_dict, kCFNetworkProxiesHTTPEnable);
-  if (!p_isCFNumberTrue(proxiesHTTPEnable)) {
-    CFRelease(proxy_dict);
-    return false;
-  }
-
-  CFStringRef proxy_address = (CFStringRef)CFDictionaryGetValue(
-    proxy_dict, kCFNetworkProxiesHTTPProxy);
-  CFNumberRef proxy_port = (CFNumberRef)CFDictionaryGetValue(
-    proxy_dict, kCFNetworkProxiesHTTPPort);
-
-  // the data we need to construct the SocketAddress for the proxy.
-  std::string hostname;
-  int port;
-  if (p_convertHostCFStringRefToCPPString(proxy_address, hostname) &&
-      p_convertCFNumberToInt(proxy_port, &port)) {
-      // We have something enabled, with a hostname and a port.
-      // That's sufficient to set up the proxy info.
-      // Finally, try HTTP proxy. Note that flute doesn't
-      // differentiate between HTTPS and HTTP, hence we are using the
-      // same flute type here, ie. PROXY_HTTPS.
-      proxy->type = PROXY_HTTPS;
-
-      proxy->address.SetIP(hostname);
-      proxy->address.SetPort(port);
-      result = true;
-  }
-
-  CFRelease(proxy_dict);
-
-  return result;
-}
-#endif // WEBRTC_IOS
-
-bool AutoDetectProxySettings(const char* agent, const char* url,
-                             ProxyInfo* proxy) {
-#if defined(WEBRTC_WIN)
-  return WinHttpAutoDetectProxyForUrl(agent, url, proxy);
-#else
-  LOG(LS_WARNING) << "Proxy auto-detection not implemented for this platform";
-  return false;
-#endif
-}
-
-bool GetSystemDefaultProxySettings(const char* agent, const char* url,
-                                   ProxyInfo* proxy) {
-#if defined(WEBRTC_WIN)
-  return GetIeProxySettings(agent, url, proxy);
-#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
-  return GetMacProxySettings(proxy);
-#elif defined(WEBRTC_IOS)
-  return GetiOSProxySettings(proxy);
-#else
-  // TODO: Get System settings if browser is not firefox.
-  return GetFirefoxProxySettings(url, proxy);
-#endif
-}
-
-bool GetProxySettingsForUrl(const char* agent, const char* url,
-                            ProxyInfo* proxy, bool long_operation) {
-  UserAgent a = GetAgent(agent);
-  bool result;
-  switch (a) {
-    case UA_FIREFOX: {
-      result = GetFirefoxProxySettings(url, proxy);
-      break;
-    }
-#if defined(WEBRTC_WIN)
-    case UA_INTERNETEXPLORER:
-      result = GetIeProxySettings(agent, url, proxy);
-      break;
-    case UA_UNKNOWN:
-      // Agent not defined, check default browser.
-      if (IsDefaultBrowserFirefox()) {
-        result = GetFirefoxProxySettings(url, proxy);
-      } else {
-        result = GetIeProxySettings(agent, url, proxy);
-      }
-      break;
-#endif  // WEBRTC_WIN
-    default:
-      result = GetSystemDefaultProxySettings(agent, url, proxy);
-      break;
-  }
-
-  // TODO: Consider using the 'long_operation' parameter to
-  // decide whether to do the auto detection.
-  if (result && (proxy->autodetect ||
-                 !proxy->autoconfig_url.empty())) {
-    // Use WinHTTP to auto detect proxy for us.
-    result = AutoDetectProxySettings(agent, url, proxy);
-    if (!result) {
-      // Either auto detection is not supported or we simply didn't
-      // find any proxy, reset type.
-      proxy->type = rtc::PROXY_NONE;
-    }
-  }
-  return result;
-}
-
-}  // namespace rtc
diff --git a/webrtc/base/proxydetect.h b/webrtc/base/proxydetect.h
deleted file mode 100644
index 708c332..0000000
--- a/webrtc/base/proxydetect.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- *  Copyright 2007 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef _PROXYDETECT_H_
-#define _PROXYDETECT_H_
-
-#include "webrtc/base/proxyinfo.h"
-
-namespace rtc {
-// Auto-detect the proxy server.  Returns true if a proxy is configured,
-// although hostname may be empty if the proxy is not required for
-// the given URL.
-
-bool GetProxySettingsForUrl(const char* agent, const char* url,
-                            rtc::ProxyInfo* proxy,
-                            bool long_operation = false);
-
-}  // namespace rtc
-
-#endif  // _PROXYDETECT_H_
diff --git a/webrtc/base/proxydetect_unittest.cc b/webrtc/base/proxydetect_unittest.cc
deleted file mode 100644
index ca0b428..0000000
--- a/webrtc/base/proxydetect_unittest.cc
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- *  Copyright 2010 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <string>
-
-#include "webrtc/base/fileutils_mock.h"
-#include "webrtc/base/proxydetect.h"
-
-namespace rtc {
-
-static const std::string kFirefoxProfilesIni =
-  "[Profile0]\n"
-  "Name=default\n"
-  "IsRelative=1\n"
-  "Path=Profiles/2de53ejb.default\n"
-  "Default=1\n";
-
-static const std::string kFirefoxHeader =
-  "# Mozilla User Preferences\n"
-  "\n"
-  "/* Some Comments\n"
-  "*\n"
-  "*/\n"
-  "\n";
-
-static const std::string kFirefoxCorruptHeader =
-  "iuahueqe32164";
-
-static const std::string kProxyAddress = "proxy.net.com";
-
-// Mocking out platform specific path to firefox prefs file.
-class FirefoxPrefsFileSystem : public FakeFileSystem {
- public:
-  explicit FirefoxPrefsFileSystem(const std::vector<File>& all_files) :
-      FakeFileSystem(all_files) {
-  }
-  virtual FileStream* OpenFile(const Pathname& filename,
-                               const std::string& mode) {
-    // TODO: We could have a platform dependent check of paths here.
-    std::string name = filename.basename();
-    name.append(filename.extension());
-    EXPECT_TRUE(name.compare("prefs.js") == 0 ||
-                name.compare("profiles.ini") == 0);
-    FileStream* stream = FakeFileSystem::OpenFile(name, mode);
-    return stream;
-  }
-};
-
-class ProxyDetectTest : public testing::Test {
-};
-
-bool GetProxyInfo(const std::string prefs, ProxyInfo* info) {
-  std::vector<rtc::FakeFileSystem::File> files;
-  files.push_back(rtc::FakeFileSystem::File("profiles.ini",
-                                                  kFirefoxProfilesIni));
-  files.push_back(rtc::FakeFileSystem::File("prefs.js", prefs));
-  rtc::FilesystemScope fs(new rtc::FirefoxPrefsFileSystem(files));
-  return GetProxySettingsForUrl("Firefox", "www.google.com", info, false);
-}
-
-// Verifies that an empty Firefox prefs file results in no proxy detected.
-TEST_F(ProxyDetectTest, DISABLED_TestFirefoxEmptyPrefs) {
-  ProxyInfo proxy_info;
-  EXPECT_TRUE(GetProxyInfo(kFirefoxHeader, &proxy_info));
-  EXPECT_EQ(PROXY_NONE, proxy_info.type);
-}
-
-// Verifies that corrupted prefs file results in no proxy detected.
-TEST_F(ProxyDetectTest, DISABLED_TestFirefoxCorruptedPrefs) {
-  ProxyInfo proxy_info;
-  EXPECT_TRUE(GetProxyInfo(kFirefoxCorruptHeader, &proxy_info));
-  EXPECT_EQ(PROXY_NONE, proxy_info.type);
-}
-
-// Verifies that SOCKS5 proxy is detected if configured. SOCKS uses a
-// handshake protocol to inform the proxy software about the
-// connection that the client is trying to make and may be used for
-// any form of TCP or UDP socket connection.
-TEST_F(ProxyDetectTest, DISABLED_TestFirefoxProxySocks) {
-  ProxyInfo proxy_info;
-  SocketAddress proxy_address("proxy.socks.com", 6666);
-  std::string prefs(kFirefoxHeader);
-  prefs.append("user_pref(\"network.proxy.socks\", \"proxy.socks.com\");\n");
-  prefs.append("user_pref(\"network.proxy.socks_port\", 6666);\n");
-  prefs.append("user_pref(\"network.proxy.type\", 1);\n");
-
-  EXPECT_TRUE(GetProxyInfo(prefs, &proxy_info));
-
-  EXPECT_EQ(PROXY_SOCKS5, proxy_info.type);
-  EXPECT_EQ(proxy_address, proxy_info.address);
-}
-
-// Verified that SSL proxy is detected if configured. SSL proxy is an
-// extention of a HTTP proxy to support secure connections.
-TEST_F(ProxyDetectTest, DISABLED_TestFirefoxProxySsl) {
-  ProxyInfo proxy_info;
-  SocketAddress proxy_address("proxy.ssl.com", 7777);
-  std::string prefs(kFirefoxHeader);
-
-  prefs.append("user_pref(\"network.proxy.ssl\", \"proxy.ssl.com\");\n");
-  prefs.append("user_pref(\"network.proxy.ssl_port\", 7777);\n");
-  prefs.append("user_pref(\"network.proxy.type\", 1);\n");
-
-  EXPECT_TRUE(GetProxyInfo(prefs, &proxy_info));
-
-  EXPECT_EQ(PROXY_HTTPS, proxy_info.type);
-  EXPECT_EQ(proxy_address, proxy_info.address);
-}
-
-// Verifies that a HTTP proxy is detected if configured.
-TEST_F(ProxyDetectTest, DISABLED_TestFirefoxProxyHttp) {
-  ProxyInfo proxy_info;
-  SocketAddress proxy_address("proxy.http.com", 8888);
-  std::string prefs(kFirefoxHeader);
-
-  prefs.append("user_pref(\"network.proxy.http\", \"proxy.http.com\");\n");
-  prefs.append("user_pref(\"network.proxy.http_port\", 8888);\n");
-  prefs.append("user_pref(\"network.proxy.type\", 1);\n");
-
-  EXPECT_TRUE(GetProxyInfo(prefs, &proxy_info));
-
-  EXPECT_EQ(PROXY_HTTPS, proxy_info.type);
-  EXPECT_EQ(proxy_address, proxy_info.address);
-}
-
-// Verifies detection of automatic proxy detection.
-TEST_F(ProxyDetectTest, DISABLED_TestFirefoxProxyAuto) {
-  ProxyInfo proxy_info;
-  std::string prefs(kFirefoxHeader);
-
-  prefs.append("user_pref(\"network.proxy.type\", 4);\n");
-
-  EXPECT_TRUE(GetProxyInfo(prefs, &proxy_info));
-
-  EXPECT_EQ(PROXY_NONE, proxy_info.type);
-  EXPECT_TRUE(proxy_info.autodetect);
-  EXPECT_TRUE(proxy_info.autoconfig_url.empty());
-}
-
-// Verifies detection of automatic proxy detection using a static url
-// to config file.
-TEST_F(ProxyDetectTest, DISABLED_TestFirefoxProxyAutoUrl) {
-  ProxyInfo proxy_info;
-  std::string prefs(kFirefoxHeader);
-
-  prefs.append(
-      "user_pref(\"network.proxy.autoconfig_url\", \"http://a/b.pac\");\n");
-  prefs.append("user_pref(\"network.proxy.type\", 2);\n");
-
-  EXPECT_TRUE(GetProxyInfo(prefs, &proxy_info));
-
-  EXPECT_FALSE(proxy_info.autodetect);
-  EXPECT_EQ(PROXY_NONE, proxy_info.type);
-  EXPECT_EQ(0, proxy_info.autoconfig_url.compare("http://a/b.pac"));
-}
-
-}  // namespace rtc
diff --git a/webrtc/base/sslsocketfactory.cc b/webrtc/base/sslsocketfactory.cc
deleted file mode 100644
index 01d7d81..0000000
--- a/webrtc/base/sslsocketfactory.cc
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- *  Copyright 2007 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <memory>
-
-#include "webrtc/base/autodetectproxy.h"
-#include "webrtc/base/checks.h"
-#include "webrtc/base/httpcommon.h"
-#include "webrtc/base/httpcommon-inl.h"
-#include "webrtc/base/socketadapters.h"
-#include "webrtc/base/ssladapter.h"
-#include "webrtc/base/sslsocketfactory.h"
-
-namespace rtc {
-
-///////////////////////////////////////////////////////////////////////////////
-// ProxySocketAdapter
-// TODO: Consider combining AutoDetectProxy and ProxySocketAdapter.  I think
-// the socket adapter is the more appropriate idiom for automatic proxy
-// detection.  We may or may not want to combine proxydetect.* as well.
-///////////////////////////////////////////////////////////////////////////////
-
-class ProxySocketAdapter : public AsyncSocketAdapter {
- public:
-  ProxySocketAdapter(SslSocketFactory* factory, int family, int type)
-      : AsyncSocketAdapter(NULL), factory_(factory), family_(family),
-        type_(type), detect_(NULL) {
-  }
-  ~ProxySocketAdapter() override {
-    Close();
-  }
-
-  int Connect(const SocketAddress& addr) override {
-    RTC_DCHECK(NULL == detect_);
-    RTC_DCHECK(NULL == socket_);
-    remote_ = addr;
-    if (remote_.IsAnyIP() && remote_.hostname().empty()) {
-      LOG_F(LS_ERROR) << "Empty address";
-      return SOCKET_ERROR;
-    }
-    Url<char> url("/", remote_.HostAsURIString(), remote_.port());
-    detect_ = new AutoDetectProxy(factory_->agent_);
-    detect_->set_server_url(url.url());
-    detect_->SignalWorkDone.connect(this,
-        &ProxySocketAdapter::OnProxyDetectionComplete);
-    detect_->Start();
-    return SOCKET_ERROR;
-  }
-  int GetError() const override {
-    if (socket_) {
-      return socket_->GetError();
-    }
-    return detect_ ? EWOULDBLOCK : EADDRNOTAVAIL;
-  }
-  int Close() override {
-    if (socket_) {
-      return socket_->Close();
-    }
-    if (detect_) {
-      detect_->Destroy(false);
-      detect_ = NULL;
-    }
-    return 0;
-  }
-  ConnState GetState() const override {
-    if (socket_) {
-      return socket_->GetState();
-    }
-    return detect_ ? CS_CONNECTING : CS_CLOSED;
-  }
-
-private:
-  // AutoDetectProxy Slots
-  void OnProxyDetectionComplete(SignalThread* thread) {
-    RTC_DCHECK(detect_ == thread);
-    Attach(factory_->CreateProxySocket(detect_->proxy(), family_, type_));
-    detect_->Release();
-    detect_ = NULL;
-    if (0 == AsyncSocketAdapter::Connect(remote_)) {
-      SignalConnectEvent(this);
-    } else if (!IsBlockingError(socket_->GetError())) {
-      SignalCloseEvent(this, socket_->GetError());
-    }
-  }
-
-  SslSocketFactory* factory_;
-  int family_;
-  int type_;
-  SocketAddress remote_;
-  AutoDetectProxy* detect_;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// SslSocketFactory
-///////////////////////////////////////////////////////////////////////////////
-
-SslSocketFactory::SslSocketFactory(SocketFactory* factory,
-                                   const std::string& user_agent)
-    : factory_(factory),
-      agent_(user_agent),
-      autodetect_proxy_(true),
-      force_connect_(false),
-      logging_level_(LS_VERBOSE),
-      binary_mode_(false),
-      ignore_bad_cert_(false) {
-}
-
-SslSocketFactory::~SslSocketFactory() = default;
-
-Socket* SslSocketFactory::CreateSocket(int type) {
-  return CreateSocket(AF_INET, type);
-}
-
-Socket* SslSocketFactory::CreateSocket(int family, int type) {
-  return factory_->CreateSocket(family, type);
-}
-
-AsyncSocket* SslSocketFactory::CreateAsyncSocket(int type) {
-  return CreateAsyncSocket(AF_INET, type);
-}
-
-AsyncSocket* SslSocketFactory::CreateAsyncSocket(int family, int type) {
-  if (autodetect_proxy_) {
-    return new ProxySocketAdapter(this, family, type);
-  } else {
-    return CreateProxySocket(proxy_, family, type);
-  }
-}
-
-
-AsyncSocket* SslSocketFactory::CreateProxySocket(const ProxyInfo& proxy,
-                                                 int family,
-                                                 int type) {
-  AsyncSocket* socket = factory_->CreateAsyncSocket(family, type);
-  if (!socket)
-    return NULL;
-
-  // Binary logging happens at the lowest level
-  if (!logging_label_.empty() && binary_mode_) {
-    socket = new LoggingSocketAdapter(socket, logging_level_,
-                                      logging_label_.c_str(), binary_mode_);
-  }
-
-  if (proxy.type) {
-    AsyncSocket* proxy_socket = 0;
-    if (proxy_.type == PROXY_SOCKS5) {
-      proxy_socket = new AsyncSocksProxySocket(socket, proxy.address,
-                                               proxy.username, proxy.password);
-    } else {
-      // Note: we are trying unknown proxies as HTTPS currently
-      AsyncHttpsProxySocket* http_proxy =
-          new AsyncHttpsProxySocket(socket, agent_, proxy.address,
-                                    proxy.username, proxy.password);
-      http_proxy->SetForceConnect(force_connect_ || !hostname_.empty());
-      proxy_socket = http_proxy;
-    }
-    if (!proxy_socket) {
-      delete socket;
-      return NULL;
-    }
-    socket = proxy_socket;  // for our purposes the proxy is now the socket
-  }
-
-  if (!hostname_.empty()) {
-    std::unique_ptr<SSLAdapter> ssl_adapter(SSLAdapter::Create(socket));
-    if (!ssl_adapter) {
-      LOG_F(LS_ERROR) << "SSL unavailable";
-      delete socket;
-      return NULL;
-    }
-
-    ssl_adapter->set_ignore_bad_cert(ignore_bad_cert_);
-    if (ssl_adapter->StartSSL(hostname_.c_str(), true) != 0) {
-      LOG_F(LS_ERROR) << "SSL failed to start.";
-      return NULL;
-    }
-    socket = ssl_adapter.release();
-  }
-
-  // Regular logging occurs at the highest level
-  if (!logging_label_.empty() && !binary_mode_) {
-    socket = new LoggingSocketAdapter(socket, logging_level_,
-                                      logging_label_.c_str(), binary_mode_);
-  }
-  return socket;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-}  // namespace rtc
diff --git a/webrtc/base/sslsocketfactory.h b/webrtc/base/sslsocketfactory.h
deleted file mode 100644
index 792c15c..0000000
--- a/webrtc/base/sslsocketfactory.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *  Copyright 2007 The WebRTC Project Authors. All rights reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef WEBRTC_BASE_SSLSOCKETFACTORY_H__
-#define WEBRTC_BASE_SSLSOCKETFACTORY_H__
-
-#include "webrtc/base/proxyinfo.h"
-#include "webrtc/base/socketserver.h"
-
-namespace rtc {
-
-///////////////////////////////////////////////////////////////////////////////
-// SslSocketFactory
-///////////////////////////////////////////////////////////////////////////////
-
-class SslSocketFactory : public SocketFactory {
- public:
-  SslSocketFactory(SocketFactory* factory, const std::string& user_agent);
-  ~SslSocketFactory() override;
-
-  void SetAutoDetectProxy() {
-    autodetect_proxy_ = true;
-  }
-  void SetForceConnect(bool force) {
-    force_connect_ = force;
-  }
-  void SetProxy(const ProxyInfo& proxy) {
-    autodetect_proxy_ = false;
-    proxy_ = proxy;
-  }
-  bool autodetect_proxy() const { return autodetect_proxy_; }
-  const ProxyInfo& proxy() const { return proxy_; }
-
-  void UseSSL(const char* hostname) { hostname_ = hostname; }
-  void DisableSSL() { hostname_.clear(); }
-  void SetIgnoreBadCert(bool ignore) { ignore_bad_cert_ = ignore; }
-  bool ignore_bad_cert() const { return ignore_bad_cert_; }
-
-  void SetLogging(LoggingSeverity level, const std::string& label, 
-                  bool binary_mode = false) {
-    logging_level_ = level;
-    logging_label_ = label;
-    binary_mode_ = binary_mode;
-  }
-
-  // SocketFactory Interface
-  Socket* CreateSocket(int type) override;
-  Socket* CreateSocket(int family, int type) override;
-
-  AsyncSocket* CreateAsyncSocket(int type) override;
-  AsyncSocket* CreateAsyncSocket(int family, int type) override;
-
- private:
-  friend class ProxySocketAdapter;
-  AsyncSocket* CreateProxySocket(const ProxyInfo& proxy, int family, int type);
-
-  SocketFactory* factory_;
-  std::string agent_;
-  bool autodetect_proxy_, force_connect_;
-  ProxyInfo proxy_;
-  std::string hostname_, logging_label_;
-  LoggingSeverity logging_level_;
-  bool binary_mode_;
-  bool ignore_bad_cert_;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-}  // namespace rtc
-
-#endif  // WEBRTC_BASE_SSLSOCKETFACTORY_H__