diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-07-16 11:45:35 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-07-17 08:59:23 +0000 |
commit | 552906b0f222c5d5dd11b9fd73829d510980461a (patch) | |
tree | 3a11e6ed0538a81dd83b20cf3a4783e297f26d91 /chromium/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc | |
parent | 1b05827804eaf047779b597718c03e7d38344261 (diff) |
BASELINE: Update Chromium to 83.0.4103.122
Change-Id: Ie3a82f5bb0076eec2a7c6a6162326b4301ee291e
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc')
-rw-r--r-- | chromium/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc | 79 |
1 files changed, 75 insertions, 4 deletions
diff --git a/chromium/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc b/chromium/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc index 6de9df30f80..cc862ba6cb7 100644 --- a/chromium/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc +++ b/chromium/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc @@ -50,6 +50,7 @@ #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" +#include "extensions/common/api/management.h" #include "extensions/common/extension.h" #include "services/data_decoder/public/cpp/data_decoder.h" #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h" @@ -64,6 +65,13 @@ #include "components/arc/session/arc_bridge_service.h" #endif // OS_CHROMEOS +#if BUILDFLAG(ENABLE_SUPERVISED_USERS) +// TODO(https://crbug.com/1060801): Here and elsewhere, possibly switch build +// flag to #if defined(OS_CHROMEOS) +#include "chrome/browser/supervised_user/supervised_user_service.h" +#include "chrome/browser/supervised_user/supervised_user_service_factory.h" +#endif + namespace { #if defined(OS_CHROMEOS) @@ -227,7 +235,7 @@ class ChromeAppForLinkDelegate : public extensions::AppForLinkDelegate { auto web_app_info = std::make_unique<WebApplicationInfo>(); web_app_info->title = base::UTF8ToUTF16(title); web_app_info->app_url = launch_url; - web_app_info->display_mode = blink::mojom::DisplayMode::kBrowser; + web_app_info->display_mode = web_app::DisplayMode::kBrowser; web_app_info->open_as_window = false; if (!image_result.image.IsEmpty()) { @@ -246,6 +254,59 @@ class ChromeAppForLinkDelegate : public extensions::AppForLinkDelegate { base::RetainedRef(function))); } + extensions::api::management::ExtensionInfo CreateExtensionInfoFromWebApp( + const std::string& app_id, + content::BrowserContext* context) override { + auto* provider = web_app::WebAppProviderBase::GetProviderBase( + Profile::FromBrowserContext(context)); + DCHECK(provider); + const web_app::AppRegistrar& registrar = provider->registrar(); + + extensions::api::management::ExtensionInfo info; + info.id = app_id; + info.name = registrar.GetAppShortName(app_id); + info.enabled = registrar.IsLocallyInstalled(app_id); + info.install_type = + extensions::api::management::EXTENSION_INSTALL_TYPE_OTHER; + info.is_app = true; + info.type = extensions::api::management::EXTENSION_TYPE_HOSTED_APP; + info.app_launch_url = + std::make_unique<std::string>(registrar.GetAppLaunchURL(app_id).spec()); + + info.icons = + std::make_unique<std::vector<extensions::api::management::IconInfo>>(); + std::vector<WebApplicationIconInfo> icon_infos = + registrar.GetAppIconInfos(app_id); + info.icons->reserve(icon_infos.size()); + for (const WebApplicationIconInfo& web_app_icon_info : icon_infos) { + extensions::api::management::IconInfo icon_info; + icon_info.size = web_app_icon_info.square_size_px; + icon_info.url = web_app_icon_info.url.spec(); + info.icons->push_back(std::move(icon_info)); + } + + switch (registrar.GetAppDisplayMode(app_id)) { + case web_app::DisplayMode::kBrowser: + info.launch_type = + extensions::api::management::LAUNCH_TYPE_OPEN_AS_REGULAR_TAB; + break; + case web_app::DisplayMode::kMinimalUi: + case web_app::DisplayMode::kStandalone: + info.launch_type = + extensions::api::management::LAUNCH_TYPE_OPEN_AS_WINDOW; + break; + case web_app::DisplayMode::kFullscreen: + info.launch_type = + extensions::api::management::LAUNCH_TYPE_OPEN_FULL_SCREEN; + break; + case web_app::DisplayMode::kUndefined: + info.launch_type = extensions::api::management::LAUNCH_TYPE_NONE; + break; + } + + return info; + } + // Used for favicon loading tasks. base::CancelableTaskTracker cancelable_task_tracker_; @@ -422,9 +483,9 @@ ChromeManagementAPIDelegate::GenerateAppForLinkFunctionDelegate( favicon_service->GetFaviconImageForPageURL( launch_url, - base::Bind(&ChromeAppForLinkDelegate::OnFaviconForApp, - base::Unretained(delegate), base::RetainedRef(function), - context, title, launch_url), + base::BindOnce(&ChromeAppForLinkDelegate::OnFaviconForApp, + base::Unretained(delegate), base::RetainedRef(function), + context, title, launch_url), &delegate->cancelable_task_tracker_); return std::unique_ptr<extensions::AppForLinkDelegate>(delegate); @@ -524,6 +585,16 @@ void ChromeManagementAPIDelegate::EnableExtension( const extensions::Extension* extension = extensions::ExtensionRegistry::Get(context)->GetExtensionById( extension_id, extensions::ExtensionRegistry::EVERYTHING); + +#if BUILDFLAG(ENABLE_SUPERVISED_USERS) + // We add approval for the extension here under the assumption that prior + // to this point, the supervised child user has already been prompted + // for, and received parent permission to install the extension. + SupervisedUserService* supervised_user_service = + SupervisedUserServiceFactory::GetForBrowserContext(context); + supervised_user_service->AddOrUpdateExtensionApproval(*extension); +#endif + // If the extension was disabled for a permissions increase, the Management // API will have displayed a re-enable prompt to the user, so we know it's // safe to grant permissions here. |