Chromium Code Reviews| Index: headless/lib/browser/headless_browser_context.cc |
| diff --git a/headless/lib/browser/headless_browser_context.cc b/headless/lib/browser/headless_browser_context.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..be45d50f562ab7b6e6ae70a512bdca66c07518e5 |
| --- /dev/null |
| +++ b/headless/lib/browser/headless_browser_context.cc |
| @@ -0,0 +1,159 @@ |
| +// Copyright 2015 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 "headless/lib/browser/headless_browser_context.h" |
| + |
| +#include "base/path_service.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "content/public/browser/resource_context.h" |
| +#include "content/public/browser/storage_partition.h" |
| +#include "headless/lib/browser/headless_url_request_context_getter.h" |
| +#include "net/url_request/url_request_context.h" |
| + |
| +namespace headless { |
| + |
| +HeadlessBrowserContext::HeadlessBrowserContext( |
| + const HeadlessBrowser::Options& options) |
| + : resource_context_(new HeadlessResourceContext), options_(options) { |
| + InitWhileIOAllowed(); |
| +} |
| + |
| +HeadlessBrowserContext::~HeadlessBrowserContext() { |
| + if (resource_context_) { |
| + content::BrowserThread::DeleteSoon(content::BrowserThread::IO, FROM_HERE, |
| + resource_context_.release()); |
| + } |
| +} |
| + |
| +HeadlessBrowserContext::HeadlessResourceContext::HeadlessResourceContext() |
| + : getter_(nullptr) {} |
| + |
| +HeadlessBrowserContext::HeadlessResourceContext::~HeadlessResourceContext() {} |
| + |
| +net::HostResolver* |
| +HeadlessBrowserContext::HeadlessResourceContext::GetHostResolver() { |
| + CHECK(getter_); |
| + return getter_->GetURLRequestContext()->host_resolver(); |
| +} |
| + |
| +net::URLRequestContext* |
| +HeadlessBrowserContext::HeadlessResourceContext::GetRequestContext() { |
| + CHECK(getter_); |
| + return getter_->GetURLRequestContext(); |
| +} |
| + |
| +void HeadlessBrowserContext::InitWhileIOAllowed() { |
| + // TODO(skyostil): Allow the embedder to override this. |
| + PathService::Get(base::DIR_EXE, &path_); |
| +} |
| + |
| +scoped_ptr<content::ZoomLevelDelegate> |
| +HeadlessBrowserContext::CreateZoomLevelDelegate( |
| + const base::FilePath& partition_path) { |
| + return scoped_ptr<content::ZoomLevelDelegate>(); |
| +} |
| + |
| +base::FilePath HeadlessBrowserContext::GetPath() const { |
| + return path_; |
| +} |
| + |
| +bool HeadlessBrowserContext::IsOffTheRecord() const { |
| + return false; |
| +} |
| + |
| +net::URLRequestContextGetter* HeadlessBrowserContext::GetRequestContext() { |
| + return GetDefaultStoragePartition(this)->GetURLRequestContext(); |
| +} |
| + |
| +net::URLRequestContextGetter* |
| +HeadlessBrowserContext::GetRequestContextForRenderProcess( |
| + int renderer_child_id) { |
| + return GetRequestContext(); |
| +} |
| + |
| +net::URLRequestContextGetter* HeadlessBrowserContext::GetMediaRequestContext() { |
| + return GetRequestContext(); |
| +} |
| + |
| +net::URLRequestContextGetter* |
| +HeadlessBrowserContext::GetMediaRequestContextForRenderProcess( |
| + int renderer_child_id) { |
| + return GetRequestContext(); |
| +} |
| + |
| +net::URLRequestContextGetter* |
| +HeadlessBrowserContext::GetMediaRequestContextForStoragePartition( |
| + const base::FilePath& partition_path, |
| + bool in_memory) { |
| + return GetRequestContext(); |
| +} |
| + |
| +content::ResourceContext* HeadlessBrowserContext::GetResourceContext() { |
| + return resource_context_.get(); |
| +} |
| + |
| +content::DownloadManagerDelegate* |
| +HeadlessBrowserContext::GetDownloadManagerDelegate() { |
| + return nullptr; |
| +} |
| + |
| +content::BrowserPluginGuestManager* HeadlessBrowserContext::GetGuestManager() { |
| + // TODO(altimin): Should be non-null? (is null in content/shell). |
| + return nullptr; |
| +} |
| + |
| +storage::SpecialStoragePolicy* |
| +HeadlessBrowserContext::GetSpecialStoragePolicy() { |
| + return nullptr; |
| +} |
| + |
| +content::PushMessagingService* |
| +HeadlessBrowserContext::GetPushMessagingService() { |
| + return nullptr; |
| +} |
| + |
| +content::SSLHostStateDelegate* |
| +HeadlessBrowserContext::GetSSLHostStateDelegate() { |
| + return nullptr; |
| +} |
| + |
| +content::PermissionManager* HeadlessBrowserContext::GetPermissionManager() { |
| + return nullptr; |
| +} |
| + |
| +content::BackgroundSyncController* |
| +HeadlessBrowserContext::GetBackgroundSyncController() { |
| + return nullptr; |
| +} |
| + |
| +scoped_refptr<net::URLRequestContextGetter> |
| +HeadlessBrowserContext::CreateRequestContext( |
| + content::ProtocolHandlerMap* protocol_handlers, |
| + content::URLRequestInterceptorScopedVector request_interceptors) { |
| + DCHECK(!url_request_getter_.get()); |
| + if (options().url_request_context_getter) { |
| + url_request_getter_ = options().url_request_context_getter; |
| + } else { |
| + url_request_getter_ = CreateURLRequestContextGetter( |
| + protocol_handlers, std::move(request_interceptors)); |
| + } |
|
Ryan Sleevi
2016/02/22 22:01:21
This leaves me really uncomfortable, from an API d
Sami
2016/02/23 20:19:07
Agreed on all points. I think we're still finding
|
| + resource_context_->set_url_request_context_getter(url_request_getter_.get()); |
| + return url_request_getter_; |
| +} |
| + |
| +HeadlessURLRequestContextGetter* |
| +HeadlessBrowserContext::CreateURLRequestContextGetter( |
| + content::ProtocolHandlerMap* protocol_handlers, |
| + content::URLRequestInterceptorScopedVector request_interceptors) { |
| + return new HeadlessURLRequestContextGetter( |
| + true /* ignore_certificate_errors */, GetPath(), |
|
Ryan Sleevi
2016/02/22 21:11:13
SECURITY: *woah* this is a really really scary fla
Sami
2016/02/23 20:19:07
Wow, I'm not sure why this flag was set this way -
|
| + content::BrowserThread::UnsafeGetMessageLoopForThread( |
| + content::BrowserThread::IO), |
| + content::BrowserThread::UnsafeGetMessageLoopForThread( |
| + content::BrowserThread::FILE), |
|
Ryan Sleevi
2016/02/22 21:11:13
DESIGN: I cannot see any reason for you to pass th
Sami
2016/02/23 20:19:07
Hmm, looks like this was some relic in Content She
|
| + protocol_handlers, std::move(request_interceptors), nullptr /* net_log */, |
| + options()); |
| +} |
| + |
| +} // namespace headless |