// 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 #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/browser/profile_disk_operations.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); static std::unique_ptr DestroyAndDeleteDataFromDisk( std::unique_ptr profile, base::OnceClosure done_callback); explicit ProfileImpl(const std::string& name); ~ProfileImpl() override; // Returns the ProfileImpl from the specified BrowserContext. static ProfileImpl* FromBrowserContext( content::BrowserContext* browser_context); static std::set GetAllProfiles(); // Allows getting notified when profiles are created or destroyed. class ProfileObserver { public: virtual void ProfileCreated(ProfileImpl* profile) {} virtual void ProfileDestroyed(ProfileImpl* profile) {} protected: virtual ~ProfileObserver() = default; }; static void AddProfileObserver(ProfileObserver* observer); static void RemoveProfileObserver(ProfileObserver* observer); BrowserContextImpl* 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 info_.data_path; } const std::string& name() const { return info_.name; } DownloadDelegate* download_delegate() { return download_delegate_; } // Profile implementation: 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; void GetBrowserPersistenceIds( base::OnceCallback)> callback) override; void RemoveBrowserPersistenceStorage( base::OnceCallback done_callback, base::flat_set ids) override; void SetBooleanSetting(SettingType type, bool value) override; bool GetBooleanSetting(SettingType type) override; void PrepareForPossibleCrossOriginNavigation() override; #if defined(OS_ANDROID) ProfileImpl(JNIEnv* env, const base::android::JavaParamRef& path, const base::android::JavaParamRef& java_profile); jint GetNumBrowserImpl(JNIEnv* env); jlong GetBrowserContext(JNIEnv* env); void DestroyAndDeleteDataFromDisk( 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); void SetBooleanSetting(JNIEnv* env, jint j_type, jboolean j_value); jboolean GetBooleanSetting(JNIEnv* env, jint j_type); void GetBrowserPersistenceIds( JNIEnv* env, const base::android::JavaRef& j_callback); void RemoveBrowserPersistenceStorage( JNIEnv* env, const base::android::JavaRef& j_ids, const base::android::JavaRef& j_callback); void PrepareForPossibleCrossOriginNavigation(JNIEnv* env); #endif 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; static void OnProfileMarked(std::unique_ptr profile, base::OnceClosure done_callback); static void NukeDataAfterRemovingData(std::unique_ptr profile, base::OnceClosure done_callback); static void DoNukeData(std::unique_ptr profile, base::OnceClosure done_callback); void ClearRendererCache(); // Callback when the system locale has been updated. void OnLocaleChanged(); // Returns the number of Browsers with this profile. int GetNumberOfBrowsers(); ProfileInfo info_; std::unique_ptr browser_context_; base::FilePath download_directory_; DownloadDelegate* download_delegate_ = nullptr; std::unique_ptr locale_change_subscription_; std::unique_ptr cookie_manager_; #if defined(OS_ANDROID) base::android::ScopedJavaGlobalRef java_profile_; #endif DISALLOW_COPY_AND_ASSIGN(ProfileImpl); }; } // namespace weblayer #endif // WEBLAYER_BROWSER_PROFILE_IMPL_H_