#include <optional>
#include <string>
#include <utility>
#include <vector>
#include "base/functional/callback.h"
#include "base/metrics/histogram_macros.h"
#include "base/one_shot_event.h"
#include "base/scoped_observation.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/apps/app_service/app_icon/app_icon_factory.h"
#include "chrome/browser/apps/app_service/app_launch_params.h"
#include "chrome/browser/apps/app_service/app_service_proxy.h"
#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
#include "chrome/browser/apps/app_service/launch_utils.h"
#include "chrome/browser/apps/app_service/publishers/extension_apps.h"
#include "chrome/browser/apps/app_service/publishers/extension_apps_enable_flow.h"
#include "chrome/browser/apps/app_service/publishers/extension_apps_util.h"
#include "chrome/browser/ash/app_list/extension_app_utils.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/launch_util.h"
#include "chrome/browser/prefs/incognito_mode_prefs.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_navigator.h"
#include "chrome/browser/ui/chrome_pages.h"
#include "chrome/browser/ui/extensions/app_launch_params.h"
#include "chrome/browser/ui/extensions/application_launch.h"
#include "chrome/browser/ui/extensions/extension_enable_flow.h"
#include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_metrics.h"
#include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
#include "components/services/app_service/public/cpp/app_launch_util.h"
#include "components/services/app_service/public/cpp/app_registry_cache.h"
#include "components/services/app_service/public/cpp/app_types.h"
#include "components/services/app_service/public/cpp/icon_types.h"
#include "components/services/app_service/public/cpp/intent.h"
#include "components/services/app_service/public/cpp/intent_filter_util.h"
#include "components/services/app_service/public/cpp/package_id.h"
#include "components/services/app_service/public/cpp/types_util.h"
#include "content/public/browser/clear_site_data_utils.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/extension_util.h"
#include "extensions/browser/ui_util.h"
#include "extensions/common/constants.h"
#include "extensions/common/extension_urls.h"
#include "extensions/common/manifest_handlers/options_page_info.h"
#include "extensions/common/switches.h"
#include "ui/base/window_open_disposition_utils.h"
#include "url/url_constants.h"
namespace {
apps::InstallReason GetInstallReason(const Profile* profile,
const extensions::Extension* extension) { … }
}
namespace apps {
ExtensionAppsBase::ExtensionAppsBase(AppServiceProxy* proxy, AppType app_type)
: … { … }
ExtensionAppsBase::~ExtensionAppsBase() = default;
void ExtensionAppsBase::OnExtensionUninstalled(
content::BrowserContext* browser_context,
const extensions::Extension* extension,
extensions::UninstallReason reason) { … }
void ExtensionAppsBase::SetShowInFields(const extensions::Extension* extension,
App& app) { … }
AppPtr ExtensionAppsBase::CreateAppImpl(const extensions::Extension* extension,
Readiness readiness) { … }
IconEffects ExtensionAppsBase::GetIconEffects(
const extensions::Extension* extension) { … }
content::WebContents* ExtensionAppsBase::LaunchAppWithIntentImpl(
const std::string& app_id,
int32_t event_flags,
IntentPtr intent,
LaunchSource launch_source,
WindowInfoPtr window_info,
LaunchCallback callback) { … }
content::WebContents* ExtensionAppsBase::LaunchImpl(AppLaunchParams&& params) { … }
void ExtensionAppsBase::LaunchAppWithParamsImpl(AppLaunchParams&& params,
LaunchCallback callback) { … }
const extensions::Extension* ExtensionAppsBase::MaybeGetExtension(
const std::string& app_id) { … }
void ExtensionAppsBase::Initialize() { … }
AppLaunchParams ExtensionAppsBase::ModifyAppLaunchParams(
const std::string& app_id,
LaunchSource launch_source,
AppLaunchParams params) { … }
void ExtensionAppsBase::OnExtensionsReady() { … }
void ExtensionAppsBase::LoadIcon(const std::string& app_id,
const IconKey& icon_key,
IconType icon_type,
int32_t size_hint_in_dip,
bool allow_placeholder_icon,
apps::LoadIconCallback callback) { … }
void ExtensionAppsBase::Launch(const std::string& app_id,
int32_t event_flags,
LaunchSource launch_source,
WindowInfoPtr window_info) { … }
void ExtensionAppsBase::LaunchAppWithFiles(
const std::string& app_id,
int32_t event_flags,
LaunchSource launch_source,
std::vector<base::FilePath> file_paths) { … }
void ExtensionAppsBase::LaunchAppWithIntent(const std::string& app_id,
int32_t event_flags,
IntentPtr intent,
LaunchSource launch_source,
WindowInfoPtr window_info,
LaunchCallback callback) { … }
void ExtensionAppsBase::LaunchAppWithParams(AppLaunchParams&& params,
LaunchCallback callback) { … }
void ExtensionAppsBase::Uninstall(const std::string& app_id,
UninstallSource uninstall_source,
bool clear_site_data,
bool report_abuse) { … }
void ExtensionAppsBase::OpenNativeSettings(const std::string& app_id) { … }
void ExtensionAppsBase::OnExtensionLastLaunchTimeChanged(
const std::string& app_id,
const base::Time& last_launch_time) { … }
void ExtensionAppsBase::OnExtensionPrefsWillBeDestroyed(
extensions::ExtensionPrefs* prefs) { … }
void ExtensionAppsBase::OnExtensionLoaded(
content::BrowserContext* browser_context,
const extensions::Extension* extension) { … }
void ExtensionAppsBase::OnExtensionUnloaded(
content::BrowserContext* browser_context,
const extensions::Extension* extension,
extensions::UnloadedExtensionReason reason) { … }
void ExtensionAppsBase::OnExtensionInstalled(
content::BrowserContext* browser_context,
const extensions::Extension* extension,
bool is_update) { … }
bool ExtensionAppsBase::RunExtensionEnableFlow(const std::string& app_id,
base::OnceClosure callback) { … }
void ExtensionAppsBase::ExtensionEnableFlowFinished(base::OnceClosure callback,
const std::string& app_id,
bool enabled) { … }
bool ExtensionAppsBase::ShouldShow(const extensions::Extension* extension,
Profile* profile) { … }
void ExtensionAppsBase::CreateAppVector(
const extensions::ExtensionSet& extensions,
Readiness readiness,
std::vector<AppPtr>* apps_out) { … }
}