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..37c645dcf631ff5aaada9cc3e0de937ca7ffa702 |
--- /dev/null |
+++ b/headless/lib/browser/headless_browser_context.cc |
@@ -0,0 +1,173 @@ |
+// 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/environment.h" |
+#include "content/public/browser/storage_partition.h" |
+#include "content/public/browser/resource_context.h" |
+#include "headless/lib/browser/headless_url_request_context_getter.h" |
+#include "content/public/browser/browser_thread.h" |
+ |
+#if defined(OS_WIN) |
+#include "base/base_paths_win.h" |
+#elif defined(OS_LINUX) |
+#include "base/nix/xdg_util.h" |
+#elif defined(OS_MACOSX) |
+#include "base/base_paths_mac.h" |
+#endif |
+ |
+namespace headless { |
+ |
+HeadlessBrowserContext::HeadlessBrowserContext() |
+ : resource_context_(new HeadlessResourceContext) { |
+ InitWhileIOAllowed(); |
+} |
+ |
+HeadlessBrowserContext::~HeadlessBrowserContext() { |
+ if (resource_context_) { |
+ content::BrowserThread::DeleteSoon( |
+ content::BrowserThread::IO, |
+ FROM_HERE, |
+ resource_context_.release()); |
+ } |
+} |
+ |
+HeadlessBrowserContext::HeadlessResourceContext::HeadlessResourceContext() |
+ : getter_(NULL) { } |
+ |
+HeadlessBrowserContext::HeadlessResourceContext::~HeadlessResourceContext() { } |
+ |
+net::HostResolver* |
+HeadlessBrowserContext::HeadlessResourceContext::GetHostResolver() { |
+ CHECK(getter_); |
+ return getter_->host_resolver(); |
+} |
+ |
+net::URLRequestContext* |
+HeadlessBrowserContext::HeadlessResourceContext::GetRequestContext() { |
+ CHECK(getter_); |
+ return getter_->GetURLRequestContext(); |
+} |
+ |
+ |
+void HeadlessBrowserContext::InitWhileIOAllowed() { |
+ #if defined(OS_WIN) |
+ CHECK(PathService::Get(base::DIR_LOCAL_APP_DATA, &path_)); |
+ path_ = path_.Append(std::wstring(L"headless_shell")); |
+#elif defined(OS_LINUX) |
+ scoped_ptr<base::Environment> env(base::Environment::Create()); |
+ base::FilePath config_dir( |
+ base::nix::GetXDGDirectory(env.get(), |
+ base::nix::kXdgConfigHomeEnvVar, |
+ base::nix::kDotConfigDir)); |
+ path_ = config_dir.Append("headless_shell"); |
+#elif defined(OS_MACOSX) |
+ CHECK(PathService::Get(base::DIR_APP_DATA, &path_)); |
+ |
+ path_ = path_.Append("Headless Chromium Shell"); |
+#elif defined(OS_ANDROID) |
+ CHECK(PathService::Get(base::DIR_ANDROID_APP_DATA, &path_)); |
+ path_ = path_.Append(FILE_PATH_LITERAL("headless_shell")); |
+#else |
+ NOTIMPLEMENTED(); |
+#endif |
+} |
+ |
+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; |
+} |
+ |
+net::URLRequestContextGetter* HeadlessBrowserContext::CreateRequestContext( |
+ content::ProtocolHandlerMap* protocol_handlers, |
+ content::URLRequestInterceptorScopedVector request_interceptors) { |
+ DCHECK(!url_request_getter_.get()); |
+ url_request_getter_ = CreateURLRequestContextGetter( |
+ protocol_handlers, request_interceptors.Pass()); |
+ resource_context_->set_url_request_context_getter(url_request_getter_.get()); |
+ return url_request_getter_.get(); |
+} |
+ |
+HeadlessURLRequestContextGetter* |
+HeadlessBrowserContext::CreateURLRequestContextGetter( |
+ content::ProtocolHandlerMap* protocol_handlers, |
+ content::URLRequestInterceptorScopedVector request_interceptors) { |
+ return new HeadlessURLRequestContextGetter( |
+ true /* ignore_certificate_errors */, |
+ GetPath(), |
+ content::BrowserThread::UnsafeGetMessageLoopForThread(content::BrowserThread::IO), |
+ content::BrowserThread::UnsafeGetMessageLoopForThread(content::BrowserThread::FILE), |
+ protocol_handlers, |
+ request_interceptors.Pass(), |
+ NULL); |
+} |
+ |
+} // namespace headless |