blob: 6f7213761a581cc73e67a6014628db0f58a3aa06 [file] [log] [blame]
// 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.
#include "chrome/browser/web_applications/extension_status_utils.h"
#include "base/one_shot_event.h"
#include "chrome/browser/extensions/extension_management.h"
#include "chrome/browser/extensions/preinstalled_apps.h"
#include "chrome/common/extensions/extension_constants.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/common/constants.h"
namespace {
const char* g_preinstalled_app_for_testing = nullptr;
} // namespace
namespace extensions {
bool IsExtensionBlockedByPolicy(content::BrowserContext* context,
const std::string& extension_id) {
auto* registry = ExtensionRegistry::Get(context);
// May be nullptr in unit tests.
if (!registry)
return false;
const Extension* extension = registry->GetInstalledExtension(extension_id);
ExtensionManagement* management =
ExtensionManagementFactory::GetForBrowserContext(context);
ExtensionManagement::InstallationMode mode =
extension ? management->GetInstallationMode(extension)
: management->GetInstallationMode(extension_id,
/*update_url=*/std::string());
return mode == ExtensionManagement::INSTALLATION_BLOCKED ||
mode == ExtensionManagement::INSTALLATION_REMOVED;
}
bool IsExtensionInstalled(content::BrowserContext* context,
const std::string& extension_id) {
auto* registry = ExtensionRegistry::Get(context);
// May be nullptr in unit tests.
return registry && registry->GetInstalledExtension(extension_id);
}
bool IsExternalExtensionUninstalled(content::BrowserContext* context,
const std::string& extension_id) {
auto* prefs = ExtensionPrefs::Get(context);
// May be nullptr in unit tests.
return prefs && prefs->IsExternalExtensionUninstalled(extension_id);
}
void OnExtensionSystemReady(content::BrowserContext* context,
base::OnceClosure callback) {
ExtensionSystem::Get(context)->ready().Post(FROM_HERE, std::move(callback));
}
bool DidPreinstalledAppsPerformNewInstallation(Profile* profile) {
#if !BUILDFLAG(IS_CHROMEOS_ASH)
return preinstalled_apps::Provider::DidPerformNewInstallationForProfile(
profile);
#else
return false;
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
}
bool IsPreinstalledAppId(const std::string& app_id) {
if (g_preinstalled_app_for_testing &&
app_id == g_preinstalled_app_for_testing)
return true;
return app_id == extension_misc::kGmailAppId ||
app_id == extension_misc::kGoogleDocAppId ||
app_id == extension_misc::kDriveHostedAppId ||
app_id == extension_misc::kGoogleSheetsAppId ||
app_id == extension_misc::kGoogleSlidesAppId ||
app_id == extension_misc::kYoutubeAppId;
}
void SetPreinstalledAppIdForTesting(const char* app_id) {
g_preinstalled_app_for_testing = app_id;
}
} // namespace extensions