diff options
author | hanxi <hanxi@chromium.org> | 2014-10-09 06:27:11 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-09 13:27:32 +0000 |
commit | 3328d99286e14e8c31b922c995fb7de7804bba69 (patch) | |
tree | 48663f478ded6b62f3999937e879dddb930cdd4a | |
parent | 3c200fad33da10ca7b7bda1bba471d80ac570649 (diff) | |
download | chromium_src-3328d99286e14e8c31b922c995fb7de7804bba69.zip chromium_src-3328d99286e14e8c31b922c995fb7de7804bba69.tar.gz chromium_src-3328d99286e14e8c31b922c995fb7de7804bba69.tar.bz2 |
Fix bug: AppShell: CHECK failure in PeerConnection init.
The bug was caused due to a missing step to reset the url_request_getter in resource_context_ after initializing a url_request_context_getter in extensions::ShellBrowserContext, refer to CL (https://codereview.chromium.org/615583003/). To fix this bug, a refactor is done in this CL, including:
- ExtensionURLRequestContextGetter was originally implemented in the wrong directory. It's only used by app_shell, hence it belongs in extensions/shell/browser. Rename and move ExtensionURLRequestContextGetter to extensions::ShellURLRequestContextGetter and put it in extensions/shell/browser. Also share code as much as possible with content::ShellURLRequestContextGetter;
- Rename and move ExtensionNetworkDelegate to extensions::ShellNetworkDelegate and live in extensions/shell/browser;
- Reuse content/shell/common/shell_switches.h for kDumpRenderTree.
BUG=420698
Review URL: https://codereview.chromium.org/631203003
Cr-Commit-Position: refs/heads/master@{#298862}
18 files changed, 213 insertions, 414 deletions
diff --git a/content/shell/browser/shell_browser_context.cc b/content/shell/browser/shell_browser_context.cc index 7a99e8d..308ed38 100644 --- a/content/shell/browser/shell_browser_context.cc +++ b/content/shell/browser/shell_browser_context.cc @@ -12,11 +12,9 @@ #include "base/path_service.h" #include "base/threading/thread.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/resource_context.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/content_switches.h" #include "content/shell/browser/shell_download_manager_delegate.h" -#include "content/shell/browser/shell_url_request_context_getter.h" #include "content/shell/common/shell_switches.h" #if defined(OS_WIN) @@ -29,38 +27,32 @@ namespace content { -class ShellBrowserContext::ShellResourceContext : public ResourceContext { - public: - ShellResourceContext() : getter_(NULL) {} - virtual ~ShellResourceContext() {} - - // ResourceContext implementation: - virtual net::HostResolver* GetHostResolver() override { - CHECK(getter_); - return getter_->host_resolver(); - } - virtual net::URLRequestContext* GetRequestContext() override { - CHECK(getter_); - return getter_->GetURLRequestContext(); - } +ShellBrowserContext::ShellResourceContext::ShellResourceContext() + : getter_(NULL) { +} - void set_url_request_context_getter(ShellURLRequestContextGetter* getter) { - getter_ = getter; - } +ShellBrowserContext::ShellResourceContext::~ShellResourceContext() { +} - private: - ShellURLRequestContextGetter* getter_; +net::HostResolver* +ShellBrowserContext::ShellResourceContext::GetHostResolver() { + CHECK(getter_); + return getter_->host_resolver(); +} - DISALLOW_COPY_AND_ASSIGN(ShellResourceContext); -}; +net::URLRequestContext* +ShellBrowserContext::ShellResourceContext::GetRequestContext() { + CHECK(getter_); + return getter_->GetURLRequestContext(); +} ShellBrowserContext::ShellBrowserContext(bool off_the_record, net::NetLog* net_log) - : off_the_record_(off_the_record), + : resource_context_(new ShellResourceContext), + off_the_record_(off_the_record), net_log_(net_log), ignore_certificate_errors_(false), - guest_manager_(NULL), - resource_context_(new ShellResourceContext) { + guest_manager_(NULL) { InitWhileIOAllowed(); } diff --git a/content/shell/browser/shell_browser_context.h b/content/shell/browser/shell_browser_context.h index f015344..81e8b94 100644 --- a/content/shell/browser/shell_browser_context.h +++ b/content/shell/browser/shell_browser_context.h @@ -11,6 +11,8 @@ #include "base/memory/scoped_ptr.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/browser/resource_context.h" +#include "content/shell/browser/shell_url_request_context_getter.h" #include "net/url_request/url_request_job_factory.h" namespace net { @@ -20,9 +22,7 @@ class NetLog; namespace content { class DownloadManagerDelegate; -class ResourceContext; class ShellDownloadManagerDelegate; -class ShellURLRequestContextGetter; class ShellBrowserContext : public BrowserContext { public: @@ -63,8 +63,40 @@ class ShellBrowserContext : public BrowserContext { ProtocolHandlerMap* protocol_handlers, URLRequestInterceptorScopedVector request_interceptors); + protected: + // Contains URLRequestContextGetter required for resource loading. + class ShellResourceContext : public ResourceContext { + public: + ShellResourceContext(); + virtual ~ShellResourceContext(); + + // ResourceContext implementation: + virtual net::HostResolver* GetHostResolver() override; + virtual net::URLRequestContext* GetRequestContext() override; + + void set_url_request_context_getter(ShellURLRequestContextGetter* getter) { + getter_ = getter; + } + + private: + ShellURLRequestContextGetter* getter_; + + DISALLOW_COPY_AND_ASSIGN(ShellResourceContext); + }; + + ShellURLRequestContextGetter* url_request_context_getter() { + return url_request_getter_.get(); + } + + // Used by ShellBrowserContext to initiate and set different types of + // URLRequestContextGetter. + void set_url_request_context_getter(ShellURLRequestContextGetter* getter) { + url_request_getter_ = getter; + } + + scoped_ptr<ShellResourceContext> resource_context_; + private: - class ShellResourceContext; // Performs initialization of the ShellBrowserContext while IO is still // allowed on the current thread. @@ -75,7 +107,6 @@ class ShellBrowserContext : public BrowserContext { bool ignore_certificate_errors_; base::FilePath path_; BrowserPluginGuestManager* guest_manager_; - scoped_ptr<ShellResourceContext> resource_context_; scoped_ptr<ShellDownloadManagerDelegate> download_manager_delegate_; scoped_refptr<ShellURLRequestContextGetter> url_request_getter_; diff --git a/content/shell/browser/shell_url_request_context_getter.cc b/content/shell/browser/shell_url_request_context_getter.cc index c606d13..4788d28 100644 --- a/content/shell/browser/shell_url_request_context_getter.cc +++ b/content/shell/browser/shell_url_request_context_getter.cc @@ -91,6 +91,10 @@ ShellURLRequestContextGetter::ShellURLRequestContextGetter( ShellURLRequestContextGetter::~ShellURLRequestContextGetter() { } +net::NetworkDelegate* ShellURLRequestContextGetter::CreateNetworkDelegate() { + return new ShellNetworkDelegate; +} + net::URLRequestContext* ShellURLRequestContextGetter::GetURLRequestContext() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); @@ -99,7 +103,7 @@ net::URLRequestContext* ShellURLRequestContextGetter::GetURLRequestContext() { url_request_context_.reset(new net::URLRequestContext()); url_request_context_->set_net_log(net_log_); - network_delegate_.reset(new ShellNetworkDelegate); + network_delegate_.reset(CreateNetworkDelegate()); if (command_line.HasSwitch(switches::kDumpRenderTree)) ShellNetworkDelegate::SetAcceptAllCookies(false); url_request_context_->set_network_delegate(network_delegate_.get()); diff --git a/content/shell/browser/shell_url_request_context_getter.h b/content/shell/browser/shell_url_request_context_getter.h index 810e602..665c964 100644 --- a/content/shell/browser/shell_url_request_context_getter.h +++ b/content/shell/browser/shell_url_request_context_getter.h @@ -44,6 +44,9 @@ class ShellURLRequestContextGetter : public net::URLRequestContextGetter { virtual scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() const override; + // Used by subclasses to create their own implementation of NetworkDelegate. + virtual net::NetworkDelegate* CreateNetworkDelegate(); + net::HostResolver* host_resolver(); protected: diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn index 1825783..3358c6a 100644 --- a/extensions/browser/BUILD.gn +++ b/extensions/browser/BUILD.gn @@ -310,8 +310,6 @@ source_set("browser") { "extension_icon_image.h", "extension_message_filter.cc", "extension_message_filter.h", - "extension_network_delegate.cc", - "extension_network_delegate.h", "extension_pref_store.cc", "extension_pref_store.h", "extension_pref_value_map.cc", @@ -336,8 +334,6 @@ source_set("browser") { "extension_system.h", "extension_system_provider.cc", "extension_system_provider.h", - "extension_url_request_context_getter.cc", - "extension_url_request_context_getter.h", "extension_util.cc", "extension_util.h", "extension_web_contents_observer.cc", diff --git a/extensions/browser/extension_url_request_context_getter.cc b/extensions/browser/extension_url_request_context_getter.cc deleted file mode 100644 index 78826d1..0000000 --- a/extensions/browser/extension_url_request_context_getter.cc +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright 2014 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 "extensions/browser/extension_url_request_context_getter.h" - -#include "base/command_line.h" -#include "base/logging.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_split.h" -#include "base/strings/string_util.h" -#include "base/threading/sequenced_worker_pool.h" -#include "base/threading/worker_pool.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/cookie_store_factory.h" -#include "content/public/browser/resource_request_info.h" -#include "content/public/common/content_switches.h" -#include "extensions/browser/extension_network_delegate.h" -#include "extensions/browser/info_map.h" -#include "extensions/common/constants.h" -#include "extensions/common/switches.h" -#include "net/base/cache_type.h" -#include "net/cert/cert_verifier.h" -#include "net/cookies/cookie_monster.h" -#include "net/dns/host_resolver.h" -#include "net/dns/mapped_host_resolver.h" -#include "net/http/http_auth_handler_factory.h" -#include "net/http/http_cache.h" -#include "net/http/http_network_session.h" -#include "net/http/http_server_properties_impl.h" -#include "net/http/transport_security_state.h" -#include "net/proxy/proxy_service.h" -#include "net/ssl/channel_id_service.h" -#include "net/ssl/default_channel_id_store.h" -#include "net/ssl/ssl_config_service_defaults.h" -#include "net/url_request/data_protocol_handler.h" -#include "net/url_request/file_protocol_handler.h" -#include "net/url_request/static_http_user_agent_settings.h" -#include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_storage.h" -#include "net/url_request/url_request_intercepting_job_factory.h" -#include "net/url_request/url_request_job_factory_impl.h" -#include "url/url_constants.h" - -namespace extensions { - -namespace { -void InstallProtocolHandlers(net::URLRequestJobFactoryImpl* job_factory, - content::ProtocolHandlerMap* protocol_handlers) { - for (content::ProtocolHandlerMap::iterator it = - protocol_handlers->begin(); - it != protocol_handlers->end(); - ++it) { - bool set_protocol = job_factory->SetProtocolHandler( - it->first, it->second.release()); - DCHECK(set_protocol); - } - protocol_handlers->clear(); -} - -} // namespace - -ExtensionURLRequestContextGetter::ExtensionURLRequestContextGetter( - void* browser_context, - bool ignore_certificate_errors, - const base::FilePath& base_path, - base::MessageLoop* io_loop, - base::MessageLoop* file_loop, - content::ProtocolHandlerMap* protocol_handlers, - content::URLRequestInterceptorScopedVector request_interceptors, - net::NetLog* net_log, - InfoMap* extension_info_map) - : browser_context_(browser_context), - ignore_certificate_errors_(ignore_certificate_errors), - base_path_(base_path), - io_loop_(io_loop), - file_loop_(file_loop), - net_log_(net_log), - extension_info_map_(extension_info_map), - request_interceptors_(request_interceptors.Pass()) { - // Must first be created on the UI thread. - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); - std::swap(protocol_handlers_, *protocol_handlers); - - // We must create the proxy config service on the UI loop on Linux because it - // must synchronously run on the glib message loop. This will be passed to - // the URLRequestContextStorage on the IO thread in GetURLRequestContext(). - if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) { - proxy_config_service_.reset( - net::ProxyService::CreateSystemProxyConfigService( - io_loop_->message_loop_proxy(), file_loop_->message_loop_proxy())); - } -} - -ExtensionURLRequestContextGetter::~ExtensionURLRequestContextGetter() { -} - -net::URLRequestContext* -ExtensionURLRequestContextGetter::GetURLRequestContext() { - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); - - if (!url_request_context_) { - const CommandLine& command_line = *CommandLine::ForCurrentProcess(); - - url_request_context_.reset(new net::URLRequestContext()); - url_request_context_->set_net_log(net_log_); - network_delegate_.reset( - new ExtensionNetworkDelegate(browser_context_, extension_info_map_)); - if (command_line.HasSwitch(switches::kDumpRenderTree)) - ExtensionNetworkDelegate::SetAcceptAllCookies(false); - url_request_context_->set_network_delegate(network_delegate_.get()); - storage_.reset( - new net::URLRequestContextStorage(url_request_context_.get())); - storage_->set_cookie_store(CreateCookieStore(content::CookieStoreConfig())); - storage_->set_channel_id_service(new net::ChannelIDService( - new net::DefaultChannelIDStore(NULL), - base::WorkerPool::GetTaskRunner(true))); - - scoped_ptr<net::HostResolver> host_resolver( - net::HostResolver::CreateDefaultResolver( - url_request_context_->net_log())); - - storage_->set_cert_verifier(net::CertVerifier::CreateDefault()); - storage_->set_transport_security_state(new net::TransportSecurityState); - if (command_line.HasSwitch(switches::kDumpRenderTree)) { - storage_->set_proxy_service(net::ProxyService::CreateDirect()); - } else { - // TODO(jam): use v8 if possible, look at chrome code. - storage_->set_proxy_service( - net::ProxyService::CreateUsingSystemProxyResolver( - proxy_config_service_.release(), - 0, - url_request_context_->net_log())); - } - storage_->set_ssl_config_service(new net::SSLConfigServiceDefaults); - storage_->set_http_auth_handler_factory( - net::HttpAuthHandlerFactory::CreateDefault(host_resolver.get())); - storage_->set_http_server_properties( - scoped_ptr<net::HttpServerProperties>( - new net::HttpServerPropertiesImpl())); - - base::FilePath cache_path = base_path_.Append(FILE_PATH_LITERAL("Cache")); - net::HttpCache::DefaultBackend* main_backend = - new net::HttpCache::DefaultBackend( - net::DISK_CACHE, -#if defined(OS_ANDROID) - // TODO(rdsmith): Remove when default backend for Android is - // changed to simple cache. - net::CACHE_BACKEND_SIMPLE, -#else - net::CACHE_BACKEND_DEFAULT, -#endif - cache_path, - 0, - content::BrowserThread::GetMessageLoopProxyForThread( - content::BrowserThread::CACHE)); - - net::HttpNetworkSession::Params network_session_params; - network_session_params.cert_verifier = - url_request_context_->cert_verifier(); - network_session_params.transport_security_state = - url_request_context_->transport_security_state(); - network_session_params.channel_id_service = - url_request_context_->channel_id_service(); - network_session_params.proxy_service = - url_request_context_->proxy_service(); - network_session_params.ssl_config_service = - url_request_context_->ssl_config_service(); - network_session_params.http_auth_handler_factory = - url_request_context_->http_auth_handler_factory(); - network_session_params.network_delegate = - network_delegate_.get(); - network_session_params.http_server_properties = - url_request_context_->http_server_properties(); - network_session_params.net_log = - url_request_context_->net_log(); - network_session_params.ignore_certificate_errors = - ignore_certificate_errors_; - if (command_line.HasSwitch(::switches::kTestingFixedHttpPort)) { - int value; - base::StringToInt(command_line.GetSwitchValueASCII( - ::switches::kTestingFixedHttpPort), &value); - network_session_params.testing_fixed_http_port = value; - } - if (command_line.HasSwitch(::switches::kTestingFixedHttpsPort)) { - int value; - base::StringToInt(command_line.GetSwitchValueASCII( - ::switches::kTestingFixedHttpsPort), &value); - network_session_params.testing_fixed_https_port = value; - } - if (command_line.HasSwitch(::switches::kHostResolverRules)) { - scoped_ptr<net::MappedHostResolver> mapped_host_resolver( - new net::MappedHostResolver(host_resolver.Pass())); - mapped_host_resolver->SetRulesFromString( - command_line.GetSwitchValueASCII(::switches::kHostResolverRules)); - host_resolver = mapped_host_resolver.Pass(); - } - - // Give |storage_| ownership at the end in case it's |mapped_host_resolver|. - storage_->set_host_resolver(host_resolver.Pass()); - network_session_params.host_resolver = - url_request_context_->host_resolver(); - - net::HttpCache* main_cache = new net::HttpCache( - network_session_params, main_backend); - storage_->set_http_transaction_factory(main_cache); - - scoped_ptr<net::URLRequestJobFactoryImpl> job_factory( - new net::URLRequestJobFactoryImpl()); - // Keep ProtocolHandlers added in sync with - // ShellContentBrowserClient::IsHandledURL(). - InstallProtocolHandlers(job_factory.get(), &protocol_handlers_); - bool set_protocol = job_factory->SetProtocolHandler( - url::kDataScheme, new net::DataProtocolHandler); - DCHECK(set_protocol); -#if !defined(DISABLE_FILE_SUPPORT) - set_protocol = job_factory->SetProtocolHandler( - url::kFileScheme, - new net::FileProtocolHandler( - content::BrowserThread::GetBlockingPool()-> - GetTaskRunnerWithShutdownBehavior( - base::SequencedWorkerPool::SKIP_ON_SHUTDOWN))); - DCHECK(set_protocol); -#endif - - // Set up interceptors in the reverse order. - scoped_ptr<net::URLRequestJobFactory> top_job_factory = - job_factory.PassAs<net::URLRequestJobFactory>(); - for (content::URLRequestInterceptorScopedVector::reverse_iterator i = - request_interceptors_.rbegin(); - i != request_interceptors_.rend(); - ++i) { - top_job_factory.reset(new net::URLRequestInterceptingJobFactory( - top_job_factory.Pass(), make_scoped_ptr(*i))); - } - request_interceptors_.weak_clear(); - - storage_->set_job_factory(top_job_factory.release()); - } - - return url_request_context_.get(); -} - -scoped_refptr<base::SingleThreadTaskRunner> - ExtensionURLRequestContextGetter::GetNetworkTaskRunner() const { - return content::BrowserThread::GetMessageLoopProxyForThread( - content::BrowserThread::IO); -} - -} // namespace extensions diff --git a/extensions/browser/extension_url_request_context_getter.h b/extensions/browser/extension_url_request_context_getter.h deleted file mode 100644 index b0cc68f7a..0000000 --- a/extensions/browser/extension_url_request_context_getter.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2013 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. - -#ifndef EXTENSIONS_BROWSER_EXTENSION_URL_REQUEST_CONTEXT_GETTER_H_ -#define EXTENSIONS_BROWSER_EXTENSION_URL_REQUEST_CONTEXT_GETTER_H_ - -#include "base/files/file_path.h" -#include "base/memory/ref_counted.h" -#include "base/memory/scoped_ptr.h" -#include "content/public/browser/content_browser_client.h" -#include "net/url_request/url_request_context_getter.h" -#include "net/url_request/url_request_job_factory.h" - -namespace base { -class MessageLoop; -} - -namespace net { -class NetworkDelegate; -class NetLog; -class ProxyConfigService; -class URLRequestContextStorage; -} - -namespace extensions { - -class InfoMap; - -class ExtensionURLRequestContextGetter : public net::URLRequestContextGetter { - public: - explicit ExtensionURLRequestContextGetter( - void* browser_context, - bool ignore_certificate_errors, - const base::FilePath& base_path, - base::MessageLoop* io_loop, - base::MessageLoop* file_loop, - content::ProtocolHandlerMap* protocol_handlers, - content::URLRequestInterceptorScopedVector request_interceptors, - net::NetLog* net_log, - InfoMap* extension_info_map); - - // net::URLRequestContextGetter implementation. - virtual net::URLRequestContext* GetURLRequestContext() OVERRIDE; - virtual scoped_refptr<base::SingleThreadTaskRunner> - GetNetworkTaskRunner() const OVERRIDE; - -protected: - virtual ~ExtensionURLRequestContextGetter(); -private: - void* browser_context_; - bool ignore_certificate_errors_; - base::FilePath base_path_; - base::MessageLoop* io_loop_; - base::MessageLoop* file_loop_; - net::NetLog* net_log_; - InfoMap* extension_info_map_; - - scoped_ptr<net::ProxyConfigService> proxy_config_service_; - scoped_ptr<net::NetworkDelegate> network_delegate_; - scoped_ptr<net::URLRequestContextStorage> storage_; - scoped_ptr<net::URLRequestContext> url_request_context_; - content::ProtocolHandlerMap protocol_handlers_; - content::URLRequestInterceptorScopedVector request_interceptors_; - -private: - DISALLOW_COPY_AND_ASSIGN(ExtensionURLRequestContextGetter); -}; - -} // namespace extensions - -#endif // EXTENSIONS_BROWSER_EXTENSION_URL_REQUEST_CONTEXT_GETTER_H_ diff --git a/extensions/common/switches.cc b/extensions/common/switches.cc index 9e6ffd2..31f9d28 100644 --- a/extensions/common/switches.cc +++ b/extensions/common/switches.cc @@ -16,9 +16,6 @@ const char kAllowHTTPBackgroundPage[] = "allow-http-background-page"; const char kAllowLegacyExtensionManifests[] = "allow-legacy-extension-manifests"; -// Request pages to be dumped as text once they finished loading. -const char kDumpRenderTree[] = "dump-render-tree"; - // Enables extension options to be embedded in chrome://extensions rather than // a new tab. const char kEmbeddedExtensionOptions[] = "embedded-extension-options"; diff --git a/extensions/common/switches.h b/extensions/common/switches.h index 92b5f2a..196931f 100644 --- a/extensions/common/switches.h +++ b/extensions/common/switches.h @@ -13,7 +13,6 @@ namespace switches { extern const char kAllowHTTPBackgroundPage[]; extern const char kAllowLegacyExtensionManifests[]; -extern const char kDumpRenderTree[]; extern const char kEmbeddedExtensionOptions[]; extern const char kEnableAppsShowOnFirstPaint[]; extern const char kEnableAppWindowControls[]; diff --git a/extensions/extensions.gyp b/extensions/extensions.gyp index ac1eb6e..166937f 100644 --- a/extensions/extensions.gyp +++ b/extensions/extensions.gyp @@ -595,8 +595,6 @@ 'browser/extension_icon_image.h', 'browser/extension_message_filter.cc', 'browser/extension_message_filter.h', - 'browser/extension_network_delegate.cc', - 'browser/extension_network_delegate.h', 'browser/extension_pref_store.cc', 'browser/extension_pref_store.h', 'browser/extension_pref_value_map.cc', @@ -621,8 +619,6 @@ 'browser/extension_system.h', 'browser/extension_system_provider.cc', 'browser/extension_system_provider.h', - 'browser/extension_url_request_context_getter.cc', - 'browser/extension_url_request_context_getter.h', 'browser/extension_util.cc', 'browser/extension_util.h', 'browser/extension_web_contents_observer.cc', diff --git a/extensions/shell/app_shell.gyp b/extensions/shell/app_shell.gyp index 2284655..94993a9 100644 --- a/extensions/shell/app_shell.gyp +++ b/extensions/shell/app_shell.gyp @@ -86,12 +86,16 @@ 'browser/shell_native_app_window.h', 'browser/shell_network_controller_chromeos.cc', 'browser/shell_network_controller_chromeos.h', + 'browser/shell_network_delegate.cc', + 'browser/shell_network_delegate.h', 'browser/shell_omaha_query_params_delegate.cc', 'browser/shell_omaha_query_params_delegate.h', 'browser/shell_runtime_api_delegate.cc', 'browser/shell_runtime_api_delegate.h', 'browser/shell_special_storage_policy.cc', 'browser/shell_special_storage_policy.h', + 'browser/shell_url_request_context_getter.cc', + 'browser/shell_url_request_context_getter.h', 'browser/shell_web_contents_modal_dialog_manager.cc', 'common/shell_content_client.cc', 'common/shell_content_client.h', diff --git a/extensions/shell/browser/DEPS b/extensions/shell/browser/DEPS index 4771a7b..5cb55ce 100644 --- a/extensions/shell/browser/DEPS +++ b/extensions/shell/browser/DEPS @@ -13,6 +13,7 @@ include_rules = [ "+content/shell/browser/shell_browser_context.h", "+content/shell/browser/shell_devtools_delegate.h", "+content/shell/browser/shell_net_log.h", + "+content/shell/browser/shell_url_request_context_getter.h", # For device backend support. "+device/core", diff --git a/extensions/shell/browser/shell_browser_context.cc b/extensions/shell/browser/shell_browser_context.cc index 8659de1..064dbf3 100644 --- a/extensions/shell/browser/shell_browser_context.cc +++ b/extensions/shell/browser/shell_browser_context.cc @@ -7,26 +7,28 @@ #include "base/command_line.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/content_switches.h" -#include "extensions/browser/extension_network_delegate.h" -#include "extensions/browser/extension_url_request_context_getter.h" #include "extensions/browser/guest_view/guest_view_manager.h" -#include "extensions/common/switches.h" +#include "extensions/shell/browser/shell_network_delegate.h" #include "extensions/shell/browser/shell_special_storage_policy.h" +#include "extensions/shell/browser/shell_url_request_context_getter.h" namespace extensions { +namespace { + +bool IgnoreCertificateErrors() { + return base::CommandLine::ForCurrentProcess()->HasSwitch( + ::switches::kIgnoreCertificateErrors); +} + +} // namespace + // Create a normal recording browser context. If we used an incognito context // then app_shell would also have to create a normal context and manage both. ShellBrowserContext::ShellBrowserContext(net::NetLog* net_log) : content::ShellBrowserContext(false, NULL), net_log_(net_log), - ignore_certificate_errors_(false), storage_policy_(new ShellSpecialStoragePolicy) { - base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); - if (cmd_line->HasSwitch(::switches::kIgnoreCertificateErrors) || - cmd_line->HasSwitch(switches::kDumpRenderTree)) { - ignore_certificate_errors_ = true; - } } ShellBrowserContext::~ShellBrowserContext() { @@ -44,11 +46,11 @@ net::URLRequestContextGetter* ShellBrowserContext::CreateRequestContext( content::ProtocolHandlerMap* protocol_handlers, content::URLRequestInterceptorScopedVector request_interceptors, InfoMap* extension_info_map) { - DCHECK(!url_request_context_getter_.get()); - url_request_context_getter_ = - new extensions::ExtensionURLRequestContextGetter( + DCHECK(!url_request_context_getter()); + set_url_request_context_getter( + new ShellURLRequestContextGetter( this, - ignore_certificate_errors_, + IgnoreCertificateErrors(), GetPath(), content::BrowserThread::UnsafeGetMessageLoopForThread( content::BrowserThread::IO), @@ -57,24 +59,24 @@ net::URLRequestContextGetter* ShellBrowserContext::CreateRequestContext( protocol_handlers, request_interceptors.Pass(), net_log_, - extension_info_map); - Init(); - return url_request_context_getter_.get(); -} - -void ShellBrowserContext::Init(){ - content:: BrowserThread:: PostTask( + extension_info_map)); + resource_context_->set_url_request_context_getter( + url_request_context_getter()); + content::BrowserThread::PostTask( content::BrowserThread::IO, FROM_HERE, base::Bind( - &ShellBrowserContext::InitializationOnIOThread, + &ShellBrowserContext::InitURLRequestContextOnIOThread, base::Unretained(this))); + return url_request_context_getter(); } -void ShellBrowserContext::InitializationOnIOThread() { +void ShellBrowserContext::InitURLRequestContextOnIOThread() { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); - url_request_context_getter_->GetURLRequestContext(); + // GetURLRequestContext() will create a URLRequestContext if it isn't + // initialized. + url_request_context_getter()->GetURLRequestContext(); } void ShellBrowserContext::ProfileFunctionCallOnNonProfileBrowserContext1() { diff --git a/extensions/shell/browser/shell_browser_context.h b/extensions/shell/browser/shell_browser_context.h index 11ad208..b763777 100644 --- a/extensions/shell/browser/shell_browser_context.h +++ b/extensions/shell/browser/shell_browser_context.h @@ -54,12 +54,9 @@ class ShellBrowserContext : public content::ShellBrowserContext { virtual void ProfileFunctionCallOnNonProfileBrowserContext15(); private: - void Init(); - void InitializationOnIOThread(); + void InitURLRequestContextOnIOThread(); net::NetLog* net_log_; - bool ignore_certificate_errors_; scoped_refptr<storage::SpecialStoragePolicy> storage_policy_; - scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; DISALLOW_COPY_AND_ASSIGN(ShellBrowserContext); }; diff --git a/extensions/browser/extension_network_delegate.cc b/extensions/shell/browser/shell_network_delegate.cc index 50516df..b148bc3 100644 --- a/extensions/browser/extension_network_delegate.cc +++ b/extensions/shell/browser/shell_network_delegate.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "extensions/browser/extension_network_delegate.h" +#include "extensions/shell/browser/shell_network_delegate.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/resource_request_info.h" @@ -18,19 +18,19 @@ namespace { bool g_accept_all_cookies = true; } -ExtensionNetworkDelegate::ExtensionNetworkDelegate( +ShellNetworkDelegate::ShellNetworkDelegate( void* browser_context, InfoMap* extension_info_map) { browser_context_ = browser_context; extension_info_map_ = extension_info_map; } -ExtensionNetworkDelegate::~ExtensionNetworkDelegate() {} +ShellNetworkDelegate::~ShellNetworkDelegate() {} -void ExtensionNetworkDelegate::SetAcceptAllCookies(bool accept) { +void ShellNetworkDelegate::SetAcceptAllCookies(bool accept) { g_accept_all_cookies = accept; } -int ExtensionNetworkDelegate::OnBeforeURLRequest( +int ShellNetworkDelegate::OnBeforeURLRequest( net::URLRequest* request, const net::CompletionCallback& callback, GURL* new_url) { @@ -38,7 +38,7 @@ int ExtensionNetworkDelegate::OnBeforeURLRequest( browser_context_, extension_info_map_.get(), request, callback, new_url); } -int ExtensionNetworkDelegate::OnBeforeSendHeaders( +int ShellNetworkDelegate::OnBeforeSendHeaders( net::URLRequest* request, const net::CompletionCallback& callback, net::HttpRequestHeaders* headers) { @@ -46,14 +46,14 @@ int ExtensionNetworkDelegate::OnBeforeSendHeaders( browser_context_, extension_info_map_.get(), request, callback, headers); } -void ExtensionNetworkDelegate::OnSendHeaders( +void ShellNetworkDelegate::OnSendHeaders( net::URLRequest* request, const net::HttpRequestHeaders& headers) { ExtensionWebRequestEventRouter::GetInstance()->OnSendHeaders( browser_context_, extension_info_map_.get(), request, headers); } -int ExtensionNetworkDelegate::OnHeadersReceived( +int ShellNetworkDelegate::OnHeadersReceived( net::URLRequest* request, const net::CompletionCallback& callback, const net::HttpResponseHeaders* original_response_headers, @@ -69,7 +69,7 @@ int ExtensionNetworkDelegate::OnHeadersReceived( allowed_unsafe_redirect_url); } -void ExtensionNetworkDelegate::OnBeforeRedirect( +void ShellNetworkDelegate::OnBeforeRedirect( net::URLRequest* request, const GURL& new_location) { ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRedirect( @@ -77,13 +77,13 @@ void ExtensionNetworkDelegate::OnBeforeRedirect( } -void ExtensionNetworkDelegate::OnResponseStarted( +void ShellNetworkDelegate::OnResponseStarted( net::URLRequest* request) { ExtensionWebRequestEventRouter::GetInstance()->OnResponseStarted( browser_context_, extension_info_map_.get(), request); } -void ExtensionNetworkDelegate::OnCompleted( +void ShellNetworkDelegate::OnCompleted( net::URLRequest* request, bool started) { if (request->status().status() == net::URLRequestStatus::SUCCESS) { @@ -107,19 +107,19 @@ void ExtensionNetworkDelegate::OnCompleted( NOTREACHED(); } -void ExtensionNetworkDelegate::OnURLRequestDestroyed( +void ShellNetworkDelegate::OnURLRequestDestroyed( net::URLRequest* request) { ExtensionWebRequestEventRouter::GetInstance()->OnURLRequestDestroyed( browser_context_, request); } -void ExtensionNetworkDelegate::OnPACScriptError( +void ShellNetworkDelegate::OnPACScriptError( int line_number, const base::string16& error) { } net::NetworkDelegate::AuthRequiredResponse -ExtensionNetworkDelegate::OnAuthRequired( +ShellNetworkDelegate::OnAuthRequired( net::URLRequest* request, const net::AuthChallengeInfo& auth_info, const AuthCallback& callback, diff --git a/extensions/browser/extension_network_delegate.h b/extensions/shell/browser/shell_network_delegate.h index e27707b..bd37c3e 100644 --- a/extensions/browser/extension_network_delegate.h +++ b/extensions/shell/browser/shell_network_delegate.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef EXTENSIONS_BROWSER_EXTENSION_NETNETWORK_DELEGATE_H_ -#define EXTENSIONS_BROWSER_EXTENSION_NETNETWORK_DELEGATE_H_ +#ifndef EXTENSIONS_SHELL_BROWSER_SHELL_NETNETWORK_DELEGATE_H_ +#define EXTENSIONS_SHELL_BROWSER_SHELL_NETNETWORK_DELEGATE_H_ #include "extensions/browser/info_map.h" #include "net/base/network_delegate.h" @@ -12,11 +12,10 @@ namespace extensions { class InfoMap; -class ExtensionNetworkDelegate : public net::NetworkDelegate { +class ShellNetworkDelegate : public net::NetworkDelegate { public: - explicit ExtensionNetworkDelegate( - void* browser_context, InfoMap* extension_info_map); - virtual ~ExtensionNetworkDelegate(); + ShellNetworkDelegate(void* browser_context, InfoMap* extension_info_map); + virtual ~ShellNetworkDelegate(); static void SetAcceptAllCookies(bool accept); @@ -52,9 +51,9 @@ class ExtensionNetworkDelegate : public net::NetworkDelegate { void* browser_context_; scoped_refptr<extensions::InfoMap> extension_info_map_; - DISALLOW_COPY_AND_ASSIGN(ExtensionNetworkDelegate); + DISALLOW_COPY_AND_ASSIGN(ShellNetworkDelegate); }; } // namespace extensions -#endif // EXTENSIONS_BROWSER_EXTENSION_NETNETWORK_DELEGATE_H_ +#endif // EXTENSIONS_SHELL_BROWSER_SHELL_NETNETWORK_DELEGATE_H_ diff --git a/extensions/shell/browser/shell_url_request_context_getter.cc b/extensions/shell/browser/shell_url_request_context_getter.cc new file mode 100644 index 0000000..e151e02 --- /dev/null +++ b/extensions/shell/browser/shell_url_request_context_getter.cc @@ -0,0 +1,42 @@ +// Copyright 2014 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 "extensions/shell/browser/shell_url_request_context_getter.h" + +#include "content/public/browser/resource_request_info.h" +#include "extensions/browser/info_map.h" +#include "extensions/shell/browser/shell_network_delegate.h" + +namespace extensions { + +ShellURLRequestContextGetter::ShellURLRequestContextGetter( + content::BrowserContext* browser_context, + bool ignore_certificate_errors, + const base::FilePath& base_path, + base::MessageLoop* io_loop, + base::MessageLoop* file_loop, + content::ProtocolHandlerMap* protocol_handlers, + content::URLRequestInterceptorScopedVector request_interceptors, + net::NetLog* net_log, + InfoMap* extension_info_map) + : content::ShellURLRequestContextGetter(ignore_certificate_errors, + base_path, + io_loop, + file_loop, + protocol_handlers, + request_interceptors.Pass(), + net_log), + browser_context_(browser_context), + extension_info_map_(extension_info_map) { +} + +ShellURLRequestContextGetter::~ShellURLRequestContextGetter() { +} + +net::NetworkDelegate* +ShellURLRequestContextGetter::CreateNetworkDelegate() { + return new ShellNetworkDelegate(browser_context_, extension_info_map_); +} + +} // namespace extensions diff --git a/extensions/shell/browser/shell_url_request_context_getter.h b/extensions/shell/browser/shell_url_request_context_getter.h new file mode 100644 index 0000000..7926ade --- /dev/null +++ b/extensions/shell/browser/shell_url_request_context_getter.h @@ -0,0 +1,58 @@ +// Copyright 2013 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. + +#ifndef EXTENSIONS_SHELL_BROWSER_SHELL_URL_REQUEST_CONTEXT_GETTER_H_ +#define EXTENSIONS_SHELL_BROWSER_SHELL_URL_REQUEST_CONTEXT_GETTER_H_ + +#include "base/files/file_path.h" +#include "content/shell/browser/shell_url_request_context_getter.h" + +namespace base { +class MessageLoop; +} + +namespace content { +class BrowserContext; +} + +namespace net { +class NetworkDelegate; +class NetLog; +} + +namespace extensions { + +class InfoMap; + +class ShellURLRequestContextGetter : + public content::ShellURLRequestContextGetter { + public: + ShellURLRequestContextGetter( + content::BrowserContext* browser_context, + bool ignore_certificate_errors, + const base::FilePath& base_path, + base::MessageLoop* io_loop, + base::MessageLoop* file_loop, + content::ProtocolHandlerMap* protocol_handlers, + content::URLRequestInterceptorScopedVector request_interceptors, + net::NetLog* net_log, + InfoMap* extension_info_map); + + // content::ShellURLRequestContextGetter implementation. + virtual net::NetworkDelegate* CreateNetworkDelegate() override; + +protected: + virtual ~ShellURLRequestContextGetter(); + +private: + content::BrowserContext* browser_context_; + InfoMap* extension_info_map_; + +private: + DISALLOW_COPY_AND_ASSIGN(ShellURLRequestContextGetter); +}; + +} // namespace extensions + +#endif // EXTENSIONS_SHELL_BROWSER_SHELL_URL_REQUEST_CONTEXT_GETTER_H_ |