| Index: chrome/browser/net/chrome_url_request_context.cc | 
| =================================================================== | 
| --- chrome/browser/net/chrome_url_request_context.cc	(revision 10746) | 
| +++ chrome/browser/net/chrome_url_request_context.cc	(working copy) | 
| @@ -21,12 +21,12 @@ | 
| #include "net/proxy/proxy_service.h" | 
| #include "webkit/glue/webkit_glue.h" | 
|  | 
| -// Sets up proxy info if it was specified, otherwise returns NULL. The | 
| -// returned pointer MUST be deleted by the caller if non-NULL. | 
| -static net::ProxyInfo* CreateProxyInfo() { | 
| +// Sets up proxy info if overrides were specified on the command line. | 
| +// Otherwise returns NULL (meaning we should use the system defaults). | 
| +// The caller is responsible for deleting returned pointer. | 
| +static net::ProxyInfo* CreateProxyInfo(const CommandLine& command_line) { | 
| net::ProxyInfo* proxy_info = NULL; | 
|  | 
| -  const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 
| if (command_line.HasSwitch(switches::kProxyServer)) { | 
| proxy_info = new net::ProxyInfo(); | 
| const std::wstring& proxy_server = | 
| @@ -37,6 +37,24 @@ | 
| return proxy_info; | 
| } | 
|  | 
| +// Create a proxy service according to the options on command line. | 
| +static net::ProxyService* CreateProxyService(URLRequestContext* context, | 
| +                                             const CommandLine& command_line) { | 
| +  scoped_ptr<net::ProxyInfo> proxy_info(CreateProxyInfo(command_line)); | 
| + | 
| +  bool use_v8 = command_line.HasSwitch(switches::kV8ProxyResolver); | 
| +  if (use_v8 && command_line.HasSwitch(switches::kSingleProcess)) { | 
| +    // See the note about V8 multithreading in net/proxy/proxy_resolver_v8.h | 
| +    // to understand why we have this limitation. | 
| +    LOG(ERROR) << "Cannot use V8 Proxy resolver in single process mode."; | 
| +    use_v8 = false;  // Fallback to non-v8 implementation. | 
| +  } | 
| + | 
| +  return use_v8 ? | 
| +    net::ProxyService::CreateUsingV8Resolver(proxy_info.get(), context) : | 
| +    net::ProxyService::Create(proxy_info.get()); | 
| +} | 
| + | 
| // static | 
| ChromeURLRequestContext* ChromeURLRequestContext::CreateOriginal( | 
| Profile* profile, const FilePath& cookie_store_path, | 
| @@ -44,8 +62,8 @@ | 
| DCHECK(!profile->IsOffTheRecord()); | 
| ChromeURLRequestContext* context = new ChromeURLRequestContext(profile); | 
|  | 
| -  scoped_ptr<net::ProxyInfo> proxy_info(CreateProxyInfo()); | 
| -  context->proxy_service_ = net::ProxyService::Create(proxy_info.get()); | 
| +  context->proxy_service_ = CreateProxyService( | 
| +      context, *CommandLine::ForCurrentProcess()); | 
|  | 
| net::HttpCache* cache = | 
| new net::HttpCache(context->proxy_service_, | 
|  |