#ifndef CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSION_SYSTEM_H_
#define CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSION_SYSTEM_H_
#include <string>
#include "base/memory/raw_ptr.h"
#include "base/one_shot_event.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/unloaded_extension_reason.h"
#include "extensions/buildflags/buildflags.h"
static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE));
class Profile;
#if BUILDFLAG(IS_CHROMEOS)
namespace extensions {
class ExtensionsPermissionsTracker;
}
namespace chromeos {
class DeviceLocalAccountManagementPolicyProvider;
class SigninScreenPolicyProvider;
}
#endif
namespace value_store {
class ValueStoreFactory;
class ValueStoreFactoryImpl;
}
namespace extensions {
class ChromeExtensionSystemSharedFactory;
class UninstallPingSender;
class InstallGate;
class ChromeExtensionSystem : public ExtensionSystem {
public:
using InstallUpdateCallback = ExtensionSystem::InstallUpdateCallback;
explicit ChromeExtensionSystem(Profile* profile);
ChromeExtensionSystem(const ChromeExtensionSystem&) = delete;
ChromeExtensionSystem& operator=(const ChromeExtensionSystem&) = delete;
~ChromeExtensionSystem() override;
void Shutdown() override;
void InitForRegularProfile(bool extensions_enabled) override;
ExtensionService* extension_service() override;
ManagementPolicy* management_policy() override;
ServiceWorkerManager* service_worker_manager() override;
UserScriptManager* user_script_manager() override;
StateStore* state_store() override;
StateStore* rules_store() override;
StateStore* dynamic_user_scripts_store() override;
scoped_refptr<value_store::ValueStoreFactory> store_factory()
override;
QuotaService* quota_service() override;
AppSorting* app_sorting() override;
const base::OneShotEvent& ready() const override;
bool is_ready() const override;
ContentVerifier* content_verifier() override;
std::unique_ptr<ExtensionSet> GetDependentExtensions(
const Extension* extension) override;
void InstallUpdate(const std::string& extension_id,
const std::string& public_key,
const base::FilePath& unpacked_dir,
bool install_immediately,
InstallUpdateCallback install_update_callback) override;
void PerformActionBasedOnOmahaAttributes(
const std::string& extension_id,
const base::Value::Dict& attributes) override;
#if BUILDFLAG(ARKWEB_ARKWEB_EXTENSIONS)
ExtensionRegistryInfoManager* GetExtensionRegistryInfoManager() override;
#endif
private:
friend class ChromeExtensionSystemSharedFactory;
class Shared : public KeyedService {
public:
explicit Shared(Profile* profile);
~Shared() override;
virtual void InitPrefs();
void RegisterManagementPolicyProviders();
void InitInstallGates();
void Init(bool extensions_enabled);
void Shutdown() override;
StateStore* state_store();
StateStore* rules_store();
StateStore* dynamic_user_scripts_store();
scoped_refptr<value_store::ValueStoreFactory> store_factory() const;
ExtensionService* extension_service();
ManagementPolicy* management_policy();
ServiceWorkerManager* service_worker_manager();
UserScriptManager* user_script_manager();
QuotaService* quota_service();
AppSorting* app_sorting();
const base::OneShotEvent& ready() const { return ready_; }
bool is_ready() const { return ready_.is_signaled(); }
ContentVerifier* content_verifier();
private:
raw_ptr<Profile> profile_;
std::unique_ptr<StateStore> state_store_;
std::unique_ptr<StateStore> rules_store_;
std::unique_ptr<StateStore> dynamic_user_scripts_store_;
scoped_refptr<value_store::ValueStoreFactoryImpl> store_factory_;
std::unique_ptr<ServiceWorkerManager> service_worker_manager_;
std::unique_ptr<UserScriptManager> user_script_manager_;
std::unique_ptr<ExtensionService> extension_service_;
std::unique_ptr<ManagementPolicy> management_policy_;
std::unique_ptr<QuotaService> quota_service_;
std::unique_ptr<AppSorting> app_sorting_;
std::unique_ptr<InstallGate> update_install_gate_;
scoped_refptr<ContentVerifier> content_verifier_;
std::unique_ptr<UninstallPingSender> uninstall_ping_sender_;
#if BUILDFLAG(IS_CHROMEOS)
std::unique_ptr<chromeos::DeviceLocalAccountManagementPolicyProvider>
device_local_account_management_policy_provider_;
std::unique_ptr<chromeos::SigninScreenPolicyProvider>
signin_screen_policy_provider_;
std::unique_ptr<InstallGate> kiosk_app_update_install_gate_;
std::unique_ptr<ExtensionsPermissionsTracker>
extensions_permissions_tracker_;
#endif
base::OneShotEvent ready_;
};
raw_ptr<Profile> profile_;
raw_ptr<Shared> shared_;
#if BUILDFLAG(ARKWEB_ARKWEB_EXTENSIONS)
std::unique_ptr<ExtensionRegistryInfoManager> extension_registry_info_manager_;
#endif
};
}
#endif