| // 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 |