// Copyright (c) 2011 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 CEF_LIBCEF_BROWSER_BROWSER_CONTEXT_IMPL_H_ #define CEF_LIBCEF_BROWSER_BROWSER_CONTEXT_IMPL_H_ #pragma once #include "libcef/browser/browser_context.h" #include "libcef/browser/net/url_request_context_getter_impl.h" #include "base/files/file_path.h" #include "base/memory/ref_counted.h" #include "components/proxy_config/pref_proxy_config_tracker.h" #include "components/visitedlink/browser/visitedlink_delegate.h" class CefBrowserContextProxy; class CefDownloadManagerDelegate; class CefSSLHostStateDelegate; class CefVisitedLinkListener; namespace visitedlink { class VisitedLinkMaster; } // Isolated BrowserContext implementation. Life span is controlled by // CefBrowserMainParts for the global context and CefRequestContextImpl // for non-global contexts. Only accessed on the UI thread unless otherwise // indicated. See browser_context.h for an object relationship diagram. class CefBrowserContextImpl : public CefBrowserContext, public visitedlink::VisitedLinkDelegate { public: explicit CefBrowserContextImpl(const CefRequestContextSettings& settings); // Returns the existing instance, if any, associated with the specified // |cache_path|. static CefBrowserContextImpl* GetForCachePath( const base::FilePath& cache_path); // Returns the underlying CefBrowserContextImpl if any. static CefBrowserContextImpl* GetForContext(content::BrowserContext* context); // Returns all existing CefBrowserContextImpl. static std::vector GetAll(); // Must be called immediately after this object is created. void Initialize() override; // Track associated CefBrowserContextProxy objects. void AddProxy(const CefBrowserContextProxy* proxy); void RemoveProxy(const CefBrowserContextProxy* proxy); // Track associated CefRequestContextImpl objects. This object will delete // itself when the count reaches zero. void AddCefRequestContext(CefRequestContextImpl* context); void RemoveCefRequestContext(CefRequestContextImpl* context); CefRequestContextImpl* GetCefRequestContext(bool impl_only) const; // BrowserContext methods. base::FilePath GetPath() const override; std::unique_ptr CreateZoomLevelDelegate( const base::FilePath& partition_path) override; bool IsOffTheRecord() const override; content::DownloadManagerDelegate* GetDownloadManagerDelegate() override; content::BrowserPluginGuestManager* GetGuestManager() override; storage::SpecialStoragePolicy* GetSpecialStoragePolicy() override; content::PushMessagingService* GetPushMessagingService() override; content::SSLHostStateDelegate* GetSSLHostStateDelegate() override; content::PermissionControllerDelegate* GetPermissionControllerDelegate() override; content::BackgroundFetchDelegate* GetBackgroundFetchDelegate() override; content::BackgroundSyncController* GetBackgroundSyncController() override; content::BrowsingDataRemoverDelegate* GetBrowsingDataRemoverDelegate() override; net::URLRequestContextGetter* CreateRequestContext( content::ProtocolHandlerMap* protocol_handlers, content::URLRequestInterceptorScopedVector request_interceptors) override; net::URLRequestContextGetter* CreateRequestContextForStoragePartition( const base::FilePath& partition_path, bool in_memory, content::ProtocolHandlerMap* protocol_handlers, content::URLRequestInterceptorScopedVector request_interceptors) override; content::StoragePartition* GetStoragePartitionProxy( content::BrowserContext* browser_context, content::StoragePartition* partition_impl) override; // Profile methods. PrefService* GetPrefs() override; const PrefService* GetPrefs() const override; // CefBrowserContext methods. CefRequestContextImpl* GetCefRequestContext() const override; const CefRequestContextSettings& GetSettings() const override; CefRefPtr GetHandler() const override; HostContentSettingsMap* GetHostContentSettingsMap() override; void AddVisitedURLs(const std::vector& urls) override; // visitedlink::VisitedLinkDelegate methods. void RebuildTable(const scoped_refptr& enumerator) override; // Guaranteed to exist once this object has been initialized. scoped_refptr request_context_getter() const { return url_request_getter_; } private: // Allow deletion via std::unique_ptr(). friend std::default_delete; ~CefBrowserContextImpl() override; // Members initialized during construction are safe to access from any thread. CefRequestContextSettings settings_; base::FilePath cache_path_; // CefRequestContextImpl objects referencing this object. std::set request_context_set_; std::unique_ptr pref_service_; std::unique_ptr pref_proxy_config_tracker_; std::unique_ptr download_manager_delegate_; scoped_refptr url_request_getter_; std::unique_ptr ssl_host_state_delegate_; scoped_refptr host_content_settings_map_; std::unique_ptr visitedlink_master_; // |visitedlink_listener_| is owned by visitedlink_master_. CefVisitedLinkListener* visitedlink_listener_; DISALLOW_COPY_AND_ASSIGN(CefBrowserContextImpl); }; #endif // CEF_LIBCEF_BROWSER_BROWSER_CONTEXT_IMPL_H_