summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhanxi <hanxi@chromium.org>2014-10-09 06:27:11 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-09 13:27:32 +0000
commit3328d99286e14e8c31b922c995fb7de7804bba69 (patch)
tree48663f478ded6b62f3999937e879dddb930cdd4a
parent3c200fad33da10ca7b7bda1bba471d80ac570649 (diff)
downloadchromium_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}
-rw-r--r--content/shell/browser/shell_browser_context.cc44
-rw-r--r--content/shell/browser/shell_browser_context.h39
-rw-r--r--content/shell/browser/shell_url_request_context_getter.cc6
-rw-r--r--content/shell/browser/shell_url_request_context_getter.h3
-rw-r--r--extensions/browser/BUILD.gn4
-rw-r--r--extensions/browser/extension_url_request_context_getter.cc250
-rw-r--r--extensions/browser/extension_url_request_context_getter.h72
-rw-r--r--extensions/common/switches.cc3
-rw-r--r--extensions/common/switches.h1
-rw-r--r--extensions/extensions.gyp4
-rw-r--r--extensions/shell/app_shell.gyp4
-rw-r--r--extensions/shell/browser/DEPS1
-rw-r--r--extensions/shell/browser/shell_browser_context.cc48
-rw-r--r--extensions/shell/browser/shell_browser_context.h5
-rw-r--r--extensions/shell/browser/shell_network_delegate.cc (renamed from extensions/browser/extension_network_delegate.cc)28
-rw-r--r--extensions/shell/browser/shell_network_delegate.h (renamed from extensions/browser/extension_network_delegate.h)15
-rw-r--r--extensions/shell/browser/shell_url_request_context_getter.cc42
-rw-r--r--extensions/shell/browser/shell_url_request_context_getter.h58
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_