// Copyright 2019 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 WEBLAYER_BROWSER_PROFILE_IMPL_H_ #define WEBLAYER_BROWSER_PROFILE_IMPL_H_ #include "base/files/file_path.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "build/build_config.h" #include "weblayer/browser/i18n_util.h" #include "weblayer/public/profile.h" #if defined(OS_ANDROID) #include #include "base/android/scoped_java_ref.h" #endif namespace content { class BrowserContext; } namespace weblayer { class BrowserContextImpl; class CookieManagerImpl; class ProfileImpl : public Profile { public: // Return the cache directory path for this BrowserContext. On some // platforms, file in cache directory may be deleted by the operating // system. So it is suitable for storing data that can be recreated such // as caches. // |context| must not be null. static base::FilePath GetCachePath(content::BrowserContext* context); explicit ProfileImpl(const std::string& name); ~ProfileImpl() override; // Returns the ProfileImpl from the specified BrowserContext. static ProfileImpl* FromBrowserContext( content::BrowserContext* browser_context); content::BrowserContext* GetBrowserContext(); // Called when the download subsystem has finished initializing. By this point // information about downloads that were interrupted by a previous crash would // be available. void DownloadsInitialized(); // Path data is stored at, empty if off-the-record. const base::FilePath& data_path() const { return data_path_; } DownloadDelegate* download_delegate() { return download_delegate_; } // Profile implementation: bool DeleteDataFromDisk(base::OnceClosure done_callback) override; void ClearBrowsingData(const std::vector& data_types, base::Time from_time, base::Time to_time, base::OnceClosure callback) override; void SetDownloadDirectory(const base::FilePath& directory) override; void SetDownloadDelegate(DownloadDelegate* delegate) override; CookieManager* GetCookieManager() override; #if defined(OS_ANDROID) ProfileImpl(JNIEnv* env, const base::android::JavaParamRef& path, const base::android::JavaParamRef& java_profile); jboolean DeleteDataFromDisk( JNIEnv* env, const base::android::JavaRef& j_completion_callback); void ClearBrowsingData( JNIEnv* env, const base::android::JavaParamRef& j_data_types, const jlong j_from_time_millis, const jlong j_to_time_millis, const base::android::JavaRef& j_callback); void SetDownloadDirectory( JNIEnv* env, const base::android::JavaParamRef& directory); jlong GetCookieManager(JNIEnv* env); void EnsureBrowserContextInitialized(JNIEnv* env); #endif void IncrementBrowserImplCount(); void DecrementBrowserImplCount(); const base::FilePath& download_directory() { return download_directory_; } // Get the directory where BrowserPersister stores tab state data. This will // be a real file path even for the off-the-record profile. base::FilePath GetBrowserPersisterDataBaseDir() const; private: class DataClearer; void ClearRendererCache(); // Callback when the system locale has been updated. void OnLocaleChanged(); const std::string name_; base::FilePath data_path_; std::unique_ptr browser_context_; base::FilePath download_directory_; DownloadDelegate* download_delegate_ = nullptr; std::unique_ptr locale_change_subscription_; std::unique_ptr cookie_manager_; size_t num_browser_impl_ = 0u; #if defined(OS_ANDROID) base::android::ScopedJavaGlobalRef java_profile_; #endif DISALLOW_COPY_AND_ASSIGN(ProfileImpl); }; } // namespace weblayer #endif // WEBLAYER_BROWSER_PROFILE_IMPL_H_