| // 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 "chromecast/browser/cast_browser_context.h" |
| |
| #include "base/command_line.h" |
| #include "base/files/file_util.h" |
| #include "base/macros.h" |
| #include "base/path_service.h" |
| #include "chromecast/base/cast_paths.h" |
| #include "chromecast/browser/cast_download_manager_delegate.h" |
| #include "chromecast/browser/cast_permission_manager.h" |
| #include "chromecast/browser/url_request_context_factory.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 "net/url_request/url_request_context.h" |
| #include "net/url_request/url_request_context_getter.h" |
| |
| namespace chromecast { |
| namespace shell { |
| |
| class CastBrowserContext::CastResourceContext : |
| public content::ResourceContext { |
| public: |
| explicit CastResourceContext( |
| URLRequestContextFactory* url_request_context_factory) : |
| url_request_context_factory_(url_request_context_factory) {} |
| ~CastResourceContext() override {} |
| |
| // ResourceContext implementation: |
| net::HostResolver* GetHostResolver() override { |
| return url_request_context_factory_->GetMainGetter()-> |
| GetURLRequestContext()->host_resolver(); |
| } |
| |
| net::URLRequestContext* GetRequestContext() override { |
| return url_request_context_factory_->GetMainGetter()-> |
| GetURLRequestContext(); |
| } |
| |
| private: |
| URLRequestContextFactory* url_request_context_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(CastResourceContext); |
| }; |
| |
| CastBrowserContext::CastBrowserContext( |
| URLRequestContextFactory* url_request_context_factory) |
| : url_request_context_factory_(url_request_context_factory), |
| resource_context_(new CastResourceContext(url_request_context_factory)), |
| download_manager_delegate_(new CastDownloadManagerDelegate()) { |
| InitWhileIOAllowed(); |
| } |
| |
| CastBrowserContext::~CastBrowserContext() { |
| content::BrowserThread::DeleteSoon( |
| content::BrowserThread::IO, |
| FROM_HERE, |
| resource_context_.release()); |
| } |
| |
| void CastBrowserContext::InitWhileIOAllowed() { |
| #if defined(OS_ANDROID) |
| CHECK(PathService::Get(base::DIR_ANDROID_APP_DATA, &path_)); |
| path_ = path_.Append(FILE_PATH_LITERAL("cast_shell")); |
| |
| if (!base::PathExists(path_)) |
| base::CreateDirectory(path_); |
| #else |
| // Chromecast doesn't support user profiles nor does it have |
| // incognito mode. This means that all of the persistent |
| // data (currently only cookies and local storage) will be |
| // shared in a single location as defined here. |
| CHECK(PathService::Get(DIR_CAST_HOME, &path_)); |
| #endif // defined(OS_ANDROID) |
| } |
| |
| scoped_ptr<content::ZoomLevelDelegate> |
| CastBrowserContext::CreateZoomLevelDelegate( |
| const base::FilePath& partition_path) { |
| return nullptr; |
| } |
| |
| base::FilePath CastBrowserContext::GetPath() const { |
| return path_; |
| } |
| |
| bool CastBrowserContext::IsOffTheRecord() const { |
| return false; |
| } |
| |
| net::URLRequestContextGetter* CastBrowserContext::GetRequestContext() { |
| return GetDefaultStoragePartition(this)->GetURLRequestContext(); |
| } |
| |
| net::URLRequestContextGetter* |
| CastBrowserContext::GetRequestContextForRenderProcess(int renderer_child_id) { |
| return GetRequestContext(); |
| } |
| |
| net::URLRequestContextGetter* CastBrowserContext::GetMediaRequestContext() { |
| return url_request_context_factory_->GetMediaGetter(); |
| } |
| |
| net::URLRequestContextGetter* |
| CastBrowserContext::GetMediaRequestContextForRenderProcess( |
| int renderer_child_id) { |
| return GetMediaRequestContext(); |
| } |
| |
| net::URLRequestContextGetter* |
| CastBrowserContext::GetMediaRequestContextForStoragePartition( |
| const base::FilePath& partition_path, bool in_memory) { |
| return GetMediaRequestContext(); |
| } |
| |
| net::URLRequestContextGetter* CastBrowserContext::GetSystemRequestContext() { |
| return url_request_context_factory_->GetSystemGetter(); |
| } |
| |
| content::ResourceContext* CastBrowserContext::GetResourceContext() { |
| return resource_context_.get(); |
| } |
| |
| content::DownloadManagerDelegate* |
| CastBrowserContext::GetDownloadManagerDelegate() { |
| return download_manager_delegate_.get(); |
| } |
| |
| content::BrowserPluginGuestManager* CastBrowserContext::GetGuestManager() { |
| return nullptr; |
| } |
| |
| storage::SpecialStoragePolicy* CastBrowserContext::GetSpecialStoragePolicy() { |
| return nullptr; |
| } |
| |
| content::PushMessagingService* CastBrowserContext::GetPushMessagingService() { |
| return nullptr; |
| } |
| |
| content::SSLHostStateDelegate* CastBrowserContext::GetSSLHostStateDelegate() { |
| return nullptr; |
| } |
| |
| content::PermissionManager* CastBrowserContext::GetPermissionManager() { |
| if (!permission_manager_.get()) |
| permission_manager_.reset(new CastPermissionManager()); |
| return permission_manager_.get(); |
| } |
| |
| } // namespace shell |
| } // namespace chromecast |