Index: net/proxy/proxy_resolver_js_bindings.cc |
diff --git a/net/proxy/proxy_resolver_js_bindings.cc b/net/proxy/proxy_resolver_js_bindings.cc |
deleted file mode 100644 |
index 84dcafda4dca6f680f2c79086c264c9b5ead1457..0000000000000000000000000000000000000000 |
--- a/net/proxy/proxy_resolver_js_bindings.cc |
+++ /dev/null |
@@ -1,291 +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/proxy/proxy_resolver_js_bindings.h" |
- |
-#include "base/bind.h" |
-#include "base/compiler_specific.h" |
-#include "base/logging.h" |
-#include "base/string_util.h" |
-#include "base/values.h" |
-#include "net/base/address_list.h" |
-#include "net/base/host_cache.h" |
-#include "net/base/host_resolver.h" |
-#include "net/base/net_errors.h" |
-#include "net/base/net_log.h" |
-#include "net/base/net_util.h" |
-#include "net/proxy/proxy_resolver_error_observer.h" |
-#include "net/proxy/proxy_resolver_request_context.h" |
-#include "net/proxy/sync_host_resolver.h" |
- |
-namespace net { |
- |
-namespace { |
- |
-// TTL for the per-request DNS cache. Applies to both successful and failed |
-// DNS resolutions. |
-const unsigned kCacheEntryTTLSeconds = 5 * 60; |
- |
-// Returns event parameters for a PAC error message (line number + message). |
-Value* NetLogErrorCallback(int line_number, |
- const string16* message, |
- NetLog::LogLevel /* log_level */) { |
- DictionaryValue* dict = new DictionaryValue(); |
- dict->SetInteger("line_number", line_number); |
- dict->SetString("message", *message); |
- return dict; |
-} |
- |
-// ProxyResolverJSBindings implementation. |
-class DefaultJSBindings : public ProxyResolverJSBindings { |
- public: |
- DefaultJSBindings(SyncHostResolver* host_resolver, |
- NetLog* net_log, |
- ProxyResolverErrorObserver* error_observer) |
- : host_resolver_(host_resolver), |
- net_log_(net_log), |
- error_observer_(error_observer) { |
- } |
- |
- // Handler for "alert(message)". |
- virtual void Alert(const string16& message) OVERRIDE { |
- VLOG(1) << "PAC-alert: " << message; |
- |
- // Send to the NetLog. |
- LogEventToCurrentRequestAndGlobally( |
- NetLog::TYPE_PAC_JAVASCRIPT_ALERT, |
- NetLog::StringCallback("message", &message)); |
- } |
- |
- // Handler for "myIpAddress()". |
- // TODO(eroman): Perhaps enumerate the interfaces directly, using |
- // getifaddrs(). |
- virtual bool MyIpAddress(std::string* first_ip_address) OVERRIDE { |
- LogEventToCurrentRequest(NetLog::PHASE_BEGIN, |
- NetLog::TYPE_PAC_JAVASCRIPT_MY_IP_ADDRESS); |
- |
- bool ok = MyIpAddressImpl(first_ip_address); |
- |
- LogEventToCurrentRequest(NetLog::PHASE_END, |
- NetLog::TYPE_PAC_JAVASCRIPT_MY_IP_ADDRESS); |
- return ok; |
- } |
- |
- // Handler for "myIpAddressEx()". |
- virtual bool MyIpAddressEx(std::string* ip_address_list) OVERRIDE { |
- LogEventToCurrentRequest(NetLog::PHASE_BEGIN, |
- NetLog::TYPE_PAC_JAVASCRIPT_MY_IP_ADDRESS_EX); |
- |
- bool ok = MyIpAddressExImpl(ip_address_list); |
- |
- LogEventToCurrentRequest(NetLog::PHASE_END, |
- NetLog::TYPE_PAC_JAVASCRIPT_MY_IP_ADDRESS_EX); |
- return ok; |
- } |
- |
- // Handler for "dnsResolve(host)". |
- virtual bool DnsResolve(const std::string& host, |
- std::string* first_ip_address) OVERRIDE { |
- LogEventToCurrentRequest(NetLog::PHASE_BEGIN, |
- NetLog::TYPE_PAC_JAVASCRIPT_DNS_RESOLVE); |
- |
- bool ok = DnsResolveImpl(host, first_ip_address); |
- |
- LogEventToCurrentRequest(NetLog::PHASE_END, |
- NetLog::TYPE_PAC_JAVASCRIPT_DNS_RESOLVE); |
- return ok; |
- } |
- |
- // Handler for "dnsResolveEx(host)". |
- virtual bool DnsResolveEx(const std::string& host, |
- std::string* ip_address_list) OVERRIDE { |
- LogEventToCurrentRequest(NetLog::PHASE_BEGIN, |
- NetLog::TYPE_PAC_JAVASCRIPT_DNS_RESOLVE_EX); |
- |
- bool ok = DnsResolveExImpl(host, ip_address_list); |
- |
- LogEventToCurrentRequest(NetLog::PHASE_END, |
- NetLog::TYPE_PAC_JAVASCRIPT_DNS_RESOLVE_EX); |
- return ok; |
- } |
- |
- // Handler for when an error is encountered. |line_number| may be -1. |
- virtual void OnError(int line_number, const string16& message) OVERRIDE { |
- // Send to the chrome log. |
- if (line_number == -1) |
- VLOG(1) << "PAC-error: " << message; |
- else |
- VLOG(1) << "PAC-error: " << "line: " << line_number << ": " << message; |
- |
- // Send the error to the NetLog. |
- LogEventToCurrentRequestAndGlobally( |
- NetLog::TYPE_PAC_JAVASCRIPT_ERROR, |
- base::Bind(&NetLogErrorCallback, line_number, &message)); |
- |
- if (error_observer_.get()) |
- error_observer_->OnPACScriptError(line_number, message); |
- } |
- |
- virtual void Shutdown() OVERRIDE { |
- host_resolver_->Shutdown(); |
- } |
- |
- private: |
- bool MyIpAddressImpl(std::string* first_ip_address) { |
- std::string my_hostname = GetHostName(); |
- if (my_hostname.empty()) |
- return false; |
- return DnsResolveImpl(my_hostname, first_ip_address); |
- } |
- |
- bool MyIpAddressExImpl(std::string* ip_address_list) { |
- std::string my_hostname = GetHostName(); |
- if (my_hostname.empty()) |
- return false; |
- return DnsResolveExImpl(my_hostname, ip_address_list); |
- } |
- |
- bool DnsResolveImpl(const std::string& host, |
- std::string* first_ip_address) { |
- // Do a sync resolve of the hostname (port doesn't matter). |
- // Disable IPv6 results. We do this because the PAC specification isn't |
- // really IPv6 friendly, and Internet Explorer also restricts to IPv4. |
- // Consequently a lot of existing PAC scripts assume they will only get |
- // IPv4 results, and will misbehave if they get an IPv6 result. |
- // See http://crbug.com/24641 for more details. |
- HostResolver::RequestInfo info(HostPortPair(host, 80)); |
- info.set_address_family(ADDRESS_FAMILY_IPV4); |
- AddressList address_list; |
- |
- int result = DnsResolveHelper(info, &address_list); |
- if (result != OK) |
- return false; |
- |
- // There may be multiple results; we will just use the first one. |
- // This returns empty string on failure. |
- *first_ip_address = address_list.front().ToStringWithoutPort(); |
- if (first_ip_address->empty()) |
- return false; |
- |
- return true; |
- } |
- |
- bool DnsResolveExImpl(const std::string& host, |
- std::string* ip_address_list) { |
- // Do a sync resolve of the hostname (port doesn't matter). |
- HostResolver::RequestInfo info(HostPortPair(host, 80)); |
- AddressList address_list; |
- int result = DnsResolveHelper(info, &address_list); |
- |
- if (result != OK) |
- return false; |
- |
- // Stringify all of the addresses in the address list, separated |
- // by semicolons. |
- std::string address_list_str; |
- for (AddressList::const_iterator iter = address_list.begin(); |
- iter != address_list.end(); ++iter) { |
- if (!address_list_str.empty()) |
- address_list_str += ";"; |
- const std::string address_string = iter->ToStringWithoutPort(); |
- if (address_string.empty()) |
- return false; |
- address_list_str += address_string; |
- } |
- |
- *ip_address_list = address_list_str; |
- return true; |
- } |
- |
- // Helper to execute a synchronous DNS resolve, using the per-request |
- // DNS cache if there is one. |
- int DnsResolveHelper(const HostResolver::RequestInfo& info, |
- AddressList* address_list) { |
- HostCache::Key cache_key(info.hostname(), |
- info.address_family(), |
- info.host_resolver_flags()); |
- |
- HostCache* host_cache = current_request_context() ? |
- current_request_context()->host_cache : NULL; |
- |
- // First try to service this request from the per-request DNS cache. |
- // (we cache DNS failures much more aggressively within the context |
- // of a FindProxyForURL() request). |
- if (host_cache) { |
- const HostCache::Entry* entry = |
- host_cache->Lookup(cache_key, base::TimeTicks::Now()); |
- if (entry) { |
- if (entry->error == OK) |
- *address_list = entry->addrlist; |
- return entry->error; |
- } |
- } |
- |
- // Otherwise ask the host resolver. |
- const BoundNetLog* net_log = GetNetLogForCurrentRequest(); |
- int result = host_resolver_->Resolve(info, |
- address_list, |
- net_log ? *net_log : BoundNetLog()); |
- |
- // Save the result back to the per-request DNS cache. |
- if (host_cache) { |
- host_cache->Set(cache_key, HostCache::Entry(result, *address_list), |
- base::TimeTicks::Now(), |
- base::TimeDelta::FromSeconds(kCacheEntryTTLSeconds)); |
- } |
- |
- return result; |
- } |
- |
- // May return NULL. |
- const BoundNetLog* GetNetLogForCurrentRequest() { |
- if (!current_request_context()) |
- return NULL; |
- return current_request_context()->net_log; |
- } |
- |
- void LogEventToCurrentRequest( |
- NetLog::EventPhase phase, |
- NetLog::EventType type) { |
- const BoundNetLog* net_log = GetNetLogForCurrentRequest(); |
- if (net_log) |
- net_log->AddEntry(type, phase); |
- } |
- |
- void LogEventToCurrentRequest( |
- NetLog::EventPhase phase, |
- NetLog::EventType type, |
- const NetLog::ParametersCallback& parameters_callback) { |
- const BoundNetLog* net_log = GetNetLogForCurrentRequest(); |
- if (net_log) |
- net_log->AddEntry(type, phase, parameters_callback); |
- } |
- |
- void LogEventToCurrentRequestAndGlobally( |
- NetLog::EventType type, |
- const NetLog::ParametersCallback& parameters_callback) { |
- LogEventToCurrentRequest(NetLog::PHASE_NONE, type, parameters_callback); |
- |
- // Emit to the global NetLog event stream. |
- if (net_log_) |
- net_log_->AddGlobalEntry(type, parameters_callback); |
- } |
- |
- scoped_ptr<SyncHostResolver> host_resolver_; |
- NetLog* net_log_; |
- scoped_ptr<ProxyResolverErrorObserver> error_observer_; |
- DISALLOW_COPY_AND_ASSIGN(DefaultJSBindings); |
-}; |
- |
-} // namespace |
- |
-// static |
-ProxyResolverJSBindings* ProxyResolverJSBindings::CreateDefault( |
- SyncHostResolver* host_resolver, |
- NetLog* net_log, |
- ProxyResolverErrorObserver* error_observer) { |
- return new DefaultJSBindings(host_resolver, net_log, error_observer); |
-} |
- |
-} // namespace net |