summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-07-16 11:45:35 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-07-17 08:59:23 +0000
commit552906b0f222c5d5dd11b9fd73829d510980461a (patch)
tree3a11e6ed0538a81dd83b20cf3a4783e297f26d91 /chromium/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc
parent1b05827804eaf047779b597718c03e7d38344261 (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.cc79
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.