summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/proxy_cros_settings_parser.cc20
1 files changed, 16 insertions, 4 deletions
diff --git a/chrome/browser/chromeos/proxy_cros_settings_parser.cc b/chrome/browser/chromeos/proxy_cros_settings_parser.cc
index 1f5e8c1..7ec1bf2 100644
--- a/chrome/browser/chromeos/proxy_cros_settings_parser.cc
+++ b/chrome/browser/chromeos/proxy_cros_settings_parser.cc
@@ -70,11 +70,23 @@ base::Value* CreateServerPortValue(
net::ProxyServer CreateProxyServer(std::string host,
uint16 port,
net::ProxyServer::Scheme scheme) {
- if (host.length() == 0 && port == 0)
+ if (host.empty() && port == 0)
return net::ProxyServer();
- if (port == 0)
- port = net::ProxyServer::GetDefaultPortForScheme(scheme);
- net::HostPortPair host_port_pair(host, port);
+ uint16 default_port = net::ProxyServer::GetDefaultPortForScheme(scheme);
+ net::HostPortPair host_port_pair;
+ // Check if host is a valid URL or a string of valid format <server>::<port>.
+ GURL url(host);
+ if (url.is_valid()) // See if host is URL.
+ host_port_pair = net::HostPortPair::FromURL(url);
+ if (host_port_pair.host().empty()) // See if host is <server>::<port>.
+ host_port_pair = net::HostPortPair::FromString(host);
+ if (host_port_pair.host().empty()) // Host is not URL or <server>::<port>.
+ host_port_pair = net::HostPortPair(host, port);
+ // Formal parameter port overrides what may have been specified in host.
+ if (port != 0 && port != default_port)
+ host_port_pair.set_port(port);
+ else if (host_port_pair.port() == 0) // No port in host, use default.
+ host_port_pair.set_port(default_port);
return net::ProxyServer(scheme, host_port_pair);
}