// Copyright 2020 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_BROWSER_IMPL_H_ #define WEBLAYER_BROWSER_BROWSER_IMPL_H_ #include #include #include "base/callback.h" #include "base/observer_list.h" #include "build/build_config.h" #include "weblayer/public/browser.h" #if defined(OS_ANDROID) #include "base/android/scoped_java_ref.h" #endif namespace base { class FilePath; } namespace content { class WebContents; } namespace weblayer { class BrowserPersister; class ProfileImpl; class TabImpl; class BrowserImpl : public Browser { public: BrowserImpl(const BrowserImpl&) = delete; BrowserImpl& operator=(const BrowserImpl&) = delete; ~BrowserImpl() override; BrowserPersister* browser_persister() { return browser_persister_.get(); } ProfileImpl* profile() { return profile_; } // Creates and adds a Tab from session restore. The returned tab is owned by // this Browser. TabImpl* CreateTabForSessionRestore( std::unique_ptr web_contents, const std::string& guid); #if defined(OS_ANDROID) void AddTab(JNIEnv* env, const base::android::JavaParamRef& caller, long native_tab); void RemoveTab(JNIEnv* env, const base::android::JavaParamRef& caller, long native_tab); base::android::ScopedJavaLocalRef GetTabs( JNIEnv* env, const base::android::JavaParamRef& caller); void SetActiveTab(JNIEnv* env, const base::android::JavaParamRef& caller, long native_tab); base::android::ScopedJavaLocalRef GetActiveTab( JNIEnv* env, const base::android::JavaParamRef& caller); void PrepareForShutdown(JNIEnv* env, const base::android::JavaParamRef& caller); base::android::ScopedJavaLocalRef GetPersistenceId( JNIEnv* env, const base::android::JavaParamRef& caller); void SaveBrowserPersisterIfNecessary( JNIEnv* env, const base::android::JavaParamRef& caller); base::android::ScopedJavaLocalRef GetBrowserPersisterCryptoKey( JNIEnv* env, const base::android::JavaParamRef& caller); base::android::ScopedJavaLocalRef GetMinimalPersistenceState( JNIEnv* env, const base::android::JavaParamRef& caller); void RestoreStateIfNecessary( JNIEnv* env, const base::android::JavaParamRef& caller, const base::android::JavaParamRef& j_persistence_id, const base::android::JavaParamRef& j_persistence_crypto_key, const base::android::JavaParamRef& j_minimal_persistence_state); void WebPreferencesChanged(JNIEnv* env); void OnFragmentStart(JNIEnv* env, const base::android::JavaParamRef& caller); #endif // Used in tests to specify a non-default max (0 means use the default). std::vector GetMinimalPersistenceState(int max_size_in_bytes); // Used by tests to specify a callback to listen to changes to visible // security state. void set_visible_security_state_callback_for_tests( base::OnceClosure closure) { visible_security_state_changed_callback_for_tests_ = std::move(closure); } bool GetPasswordEchoEnabled(); // Browser: Tab* AddTab(std::unique_ptr tab) override; std::unique_ptr RemoveTab(Tab* tab) override; void SetActiveTab(Tab* tab) override; Tab* GetActiveTab() override; std::vector GetTabs() override; void PrepareForShutdown() override; std::string GetPersistenceId() override; std::vector GetMinimalPersistenceState() override; void AddObserver(BrowserObserver* observer) override; void RemoveObserver(BrowserObserver* observer) override; void VisibleSecurityStateOfActiveTabChanged() override; private: // For creation. friend class Browser; #if defined(OS_ANDROID) friend BrowserImpl* CreateBrowserForAndroid( ProfileImpl*, const base::android::JavaParamRef&); #endif explicit BrowserImpl(ProfileImpl* profile); void RestoreStateIfNecessary(const PersistenceInfo& persistence_info); // Returns the path used by |browser_persister_|. base::FilePath GetBrowserPersisterDataPath(); #if defined(OS_ANDROID) base::android::ScopedJavaGlobalRef java_impl_; #endif base::ObserverList browser_observers_; ProfileImpl* const profile_; std::vector> tabs_; TabImpl* active_tab_ = nullptr; std::string persistence_id_; std::unique_ptr browser_persister_; base::OnceClosure visible_security_state_changed_callback_for_tests_; }; } // namespace weblayer #endif // WEBLAYER_BROWSER_BROWSER_IMPL_H_