|  | // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "net/base/proxy_server.h" | 
|  |  | 
|  | #include <CoreFoundation/CoreFoundation.h> | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "base/mac/foundation_util.h" | 
|  | #include "base/strings/sys_string_conversions.h" | 
|  | #include "starboard/types.h" | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | // static | 
|  | ProxyServer ProxyServer::FromDictionary(Scheme scheme, | 
|  | CFDictionaryRef dict, | 
|  | CFStringRef host_key, | 
|  | CFStringRef port_key) { | 
|  | if (scheme == SCHEME_INVALID || scheme == SCHEME_DIRECT) { | 
|  | // No hostname port to extract; we are done. | 
|  | return ProxyServer(scheme, HostPortPair()); | 
|  | } | 
|  |  | 
|  | CFStringRef host_ref = | 
|  | base::mac::GetValueFromDictionary<CFStringRef>(dict, host_key); | 
|  | if (!host_ref) { | 
|  | LOG(WARNING) << "Could not find expected key " | 
|  | << base::SysCFStringRefToUTF8(host_key) | 
|  | << " in the proxy dictionary"; | 
|  | return ProxyServer();  // Invalid. | 
|  | } | 
|  | std::string host = base::SysCFStringRefToUTF8(host_ref); | 
|  |  | 
|  | CFNumberRef port_ref = | 
|  | base::mac::GetValueFromDictionary<CFNumberRef>(dict, port_key); | 
|  | int port; | 
|  | if (port_ref) { | 
|  | CFNumberGetValue(port_ref, kCFNumberIntType, &port); | 
|  | } else { | 
|  | port = GetDefaultPortForScheme(scheme); | 
|  | } | 
|  |  | 
|  | return ProxyServer(scheme, HostPortPair(host, port)); | 
|  | } | 
|  |  | 
|  | }  // namespace net |