diff options
Diffstat (limited to 'chromium/chrome/browser/ui/webui/app_management')
6 files changed, 136 insertions, 236 deletions
diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management.mojom b/chromium/chrome/browser/ui/webui/app_management/app_management.mojom index c62180bf2b0..512730e3142 100644 --- a/chromium/chrome/browser/ui/webui/app_management/app_management.mojom +++ b/chromium/chrome/browser/ui/webui/app_management/app_management.mojom @@ -35,7 +35,8 @@ struct ExtensionAppPermissionMessage { }; interface PageHandlerFactory { - CreatePageHandler(Page page, PageHandler& handler); + CreatePageHandler(pending_remote<Page> page, + pending_receiver<PageHandler> handler); }; // Browser interface. diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.cc b/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.cc index 35c327bb3b8..227c34962ac 100644 --- a/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.cc +++ b/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.cc @@ -14,6 +14,7 @@ #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/app_management/app_management.mojom.h" #include "chrome/services/app_service/public/cpp/app_registry_cache.h" #include "chrome/services/app_service/public/mojom/types.mojom.h" #include "extensions/browser/extension_registry.h" @@ -21,9 +22,14 @@ #include "extensions/common/extension.h" #include "extensions/common/permissions/permission_message.h" #include "extensions/common/permissions/permissions_data.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/ui/app_list/arc/arc_app_utils.h" #include "components/arc/arc_prefs.h" #endif @@ -37,14 +43,21 @@ constexpr int kMinAndroidFrameworkVersion = 28; // Android P #endif constexpr char const* kAppIdsWithHiddenMoreSettings[] = { - extension_misc::kFilesManagerAppId, extensions::kWebStoreAppId, + extension_misc::kFilesManagerAppId, + extension_misc::kGeniusAppId, }; constexpr char const* kAppIdsWithHiddenPinToShelf[] = { extension_misc::kChromeAppId, }; +#if defined(OS_CHROMEOS) +constexpr char const* kAppIdsWithHiddenStoragePermission[] = { + arc::kPlayStoreAppId, +}; +#endif // OS_CHROMEOS + app_management::mojom::ExtensionAppPermissionMessagePtr CreateExtensionAppPermissionMessage( const extensions::PermissionMessage& message) { @@ -64,22 +77,23 @@ bool ShouldHidePinToShelf(const std::string app_id) { return base::Contains(kAppIdsWithHiddenPinToShelf, app_id); } +bool ShouldHideStoragePermission(const std::string app_id) { +#if defined(OS_CHROMEOS) + return base::Contains(kAppIdsWithHiddenStoragePermission, app_id); +#else + return false; +#endif +} } // namespace AppManagementPageHandler::AppManagementPageHandler( - app_management::mojom::PageHandlerRequest request, - app_management::mojom::PagePtr page, + mojo::PendingReceiver<app_management::mojom::PageHandler> receiver, + mojo::PendingRemote<app_management::mojom::Page> page, Profile* profile) - : binding_(this, std::move(request)), + : receiver_(this, std::move(receiver)), page_(std::move(page)), - profile_(profile) -#if defined(OS_CHROMEOS) - , - arc_app_list_prefs_observer_(this), - shelf_delegate_(this) -#endif -{ + profile_(profile) { apps::AppServiceProxy* proxy = apps::AppServiceProxyFactory::GetForProfile(profile_); @@ -138,7 +152,8 @@ void AppManagementPageHandler::GetApps(GetAppsCallback callback) { std::vector<app_management::mojom::AppPtr> apps; proxy->AppRegistryCache().ForEachApp( [this, &apps](const apps::AppUpdate& update) { - if (update.ShowInManagement() == apps::mojom::OptionalBool::kTrue) { + if (update.ShowInManagement() == apps::mojom::OptionalBool::kTrue && + update.Readiness() != apps::mojom::Readiness::kUninstalledByUser) { apps.push_back(CreateUIAppPtr(update)); } }); @@ -216,6 +231,12 @@ app_management::mojom::AppPtr AppManagementPageHandler::CreateUIAppPtr( const apps::AppUpdate& update) { base::flat_map<uint32_t, apps::mojom::PermissionPtr> permissions; for (const auto& permission : update.Permissions()) { + if (static_cast<app_management::mojom::ArcPermissionType>( + permission->permission_id) == + app_management::mojom::ArcPermissionType::STORAGE && + ShouldHideStoragePermission(update.AppId())) { + continue; + } permissions[permission->permission_id] = permission->Clone(); } @@ -246,19 +267,16 @@ app_management::mojom::AppPtr AppManagementPageHandler::CreateUIAppPtr( } void AppManagementPageHandler::OnAppUpdate(const apps::AppUpdate& update) { - if (update.ReadinessChanged() && - update.Readiness() == apps::mojom::Readiness::kUninstalledByUser) { - page_->OnAppRemoved(update.AppId()); - return; - } - - if (update.ShowInManagement() != apps::mojom::OptionalBool::kTrue) { - return; - } + if (update.ShowInManagementChanged() || update.ReadinessChanged()) { + if (update.ShowInManagement() == apps::mojom::OptionalBool::kTrue && + update.Readiness() == apps::mojom::Readiness::kReady) { + page_->OnAppAdded(CreateUIAppPtr(update)); + } - if (update.ReadinessChanged() && - update.Readiness() == apps::mojom::Readiness::kReady) { - page_->OnAppAdded(CreateUIAppPtr(update)); + if (update.ShowInManagement() == apps::mojom::OptionalBool::kFalse || + update.Readiness() == apps::mojom::Readiness::kUninstalledByUser) { + page_->OnAppRemoved(update.AppId()); + } } else { page_->OnAppChanged(CreateUIAppPtr(update)); } diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.h b/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.h index baeef297ebd..6bc45d49536 100644 --- a/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.h +++ b/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.h @@ -10,7 +10,10 @@ #include "chrome/browser/ui/webui/app_management/app_management.mojom.h" #include "chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.h" #include "chrome/services/app_service/public/cpp/app_registry_cache.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #if defined(OS_CHROMEOS) #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" @@ -19,16 +22,15 @@ class Profile; class AppManagementPageHandler : public app_management::mojom::PageHandler, - public apps::AppRegistryCache::Observer #if defined(OS_CHROMEOS) - , - public ArcAppListPrefs::Observer + public ArcAppListPrefs::Observer, #endif // OS_CHROMEOS -{ + public apps::AppRegistryCache::Observer { public: - AppManagementPageHandler(app_management::mojom::PageHandlerRequest request, - app_management::mojom::PagePtr page, - Profile* profile); + AppManagementPageHandler( + mojo::PendingReceiver<app_management::mojom::PageHandler> receiver, + mojo::PendingRemote<app_management::mojom::Page> page, + Profile* profile); ~AppManagementPageHandler() override; #if defined(OS_CHROMEOS) @@ -68,16 +70,16 @@ class AppManagementPageHandler : public app_management::mojom::PageHandler, const arc::mojom::ArcPackageInfo& package_info) override; #endif // OS_CHROMEOS - mojo::Binding<app_management::mojom::PageHandler> binding_; + mojo::Receiver<app_management::mojom::PageHandler> receiver_; - app_management::mojom::PagePtr page_; + mojo::Remote<app_management::mojom::Page> page_; Profile* profile_; #if defined(OS_CHROMEOS) - ScopedObserver<ArcAppListPrefs, AppManagementPageHandler> - arc_app_list_prefs_observer_; - AppManagementShelfDelegate shelf_delegate_; + ScopedObserver<ArcAppListPrefs, ArcAppListPrefs::Observer> + arc_app_list_prefs_observer_{this}; + AppManagementShelfDelegate shelf_delegate_{this}; #endif // OS_CHROMEOS DISALLOW_COPY_AND_ASSIGN(AppManagementPageHandler); diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc b/chromium/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc index 0a3d90a6dfd..5ea8f88ffef 100644 --- a/chromium/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc +++ b/chromium/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc @@ -17,21 +17,51 @@ using apps::mojom::OptionalBool; AppManagementShelfDelegate::AppManagementShelfDelegate( AppManagementPageHandler* page_handler) : page_handler_(page_handler) { - ChromeLauncherController::instance()->shelf_model()->AddObserver(this); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + shelf_model->AddObserver(this); } AppManagementShelfDelegate::~AppManagementShelfDelegate() { - ChromeLauncherController::instance()->shelf_model()->RemoveObserver(this); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + shelf_model->RemoveObserver(this); } bool AppManagementShelfDelegate::IsPinned(const std::string& app_id) { - return ChromeLauncherController::instance()->IsAppPinned(app_id); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return false; + } + return launcher_controller->IsAppPinned(app_id); } bool AppManagementShelfDelegate::IsPolicyPinned( const std::string& app_id) const { - auto* shelf_item = - ChromeLauncherController::instance()->GetItem(ash::ShelfID(app_id)); + auto* launcher_controller = ChromeLauncherController::instance(); + + if (!launcher_controller) { + return false; + } + + auto* shelf_item = launcher_controller->GetItem(ash::ShelfID(app_id)); + // If the app does not exist on the launcher, it has not been pinned by // policy. return shelf_item && shelf_item->pinned_by_policy; @@ -39,21 +69,39 @@ bool AppManagementShelfDelegate::IsPolicyPinned( void AppManagementShelfDelegate::SetPinned(const std::string& app_id, OptionalBool pinned) { + auto* launcher_controller = ChromeLauncherController::instance(); + + if (!launcher_controller) { + return; + } + if (pinned == OptionalBool::kTrue) { - ChromeLauncherController::instance()->PinAppWithID(app_id); + launcher_controller->PinAppWithID(app_id); } else if (pinned == OptionalBool::kFalse) { - ChromeLauncherController::instance()->UnpinAppWithID(app_id); + launcher_controller->UnpinAppWithID(app_id); } else { NOTREACHED(); } } void AppManagementShelfDelegate::ShelfItemAdded(int index) { - const std::string& app_id = ChromeLauncherController::instance() - ->shelf_model() - ->items()[index] - .id.app_id; - bool is_pinned = ChromeLauncherController::instance()->IsAppPinned(app_id); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + if (index >= shelf_model->item_count()) { + // index out of bounds. + return; + } + + const std::string& app_id = shelf_model->items()[index].id.app_id; + bool is_pinned = launcher_controller->IsAppPinned(app_id); page_handler_->OnPinnedChanged(app_id, is_pinned); } @@ -68,11 +116,23 @@ void AppManagementShelfDelegate::ShelfItemRemoved( void AppManagementShelfDelegate::ShelfItemChanged( int index, const ash::ShelfItem& old_item) { - const std::string& app_id = ChromeLauncherController::instance() - ->shelf_model() - ->items()[index] - .id.app_id; - bool is_pinned = ChromeLauncherController::instance()->IsAppPinned(app_id); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + if (index >= shelf_model->item_count()) { + // index out of bounds. + return; + } + + const std::string& app_id = shelf_model->items()[index].id.app_id; + bool is_pinned = launcher_controller->IsAppPinned(app_id); page_handler_->OnPinnedChanged(app_id, is_pinned); } diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management_ui.cc b/chromium/chrome/browser/ui/webui/app_management/app_management_ui.cc deleted file mode 100644 index 5d3ce3e4657..00000000000 --- a/chromium/chrome/browser/ui/webui/app_management/app_management_ui.cc +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2018 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/ui/webui/app_management/app_management_ui.h" - -#include <memory> -#include <utility> - -#include "base/bind.h" -#include "base/feature_list.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/webui/app_management/app_management_page_handler.h" -#include "chrome/browser/ui/webui/localized_string.h" -#include "chrome/browser/ui/webui/plural_string_handler.h" -#include "chrome/common/chrome_features.h" -#include "chrome/common/url_constants.h" -#include "chrome/grit/browser_resources.h" -#include "chrome/grit/chromium_strings.h" -#include "chrome/grit/generated_resources.h" -#include "components/prefs/pref_service.h" -#include "content/public/browser/web_ui.h" -#include "content/public/browser/web_ui_data_source.h" -#include "ui/base/resource/resource_bundle.h" - -namespace { - -content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) { - content::WebUIDataSource* source = - content::WebUIDataSource::Create(chrome::kChromeUIAppManagementHost); - - static constexpr LocalizedString kStrings[] = { - {"appListTitle", IDS_APP_MANAGEMENT_APP_LIST_TITLE}, - {"appNoPermission", IDS_APPLICATION_INFO_APP_NO_PERMISSIONS_TEXT}, - {"back", IDS_APP_MANAGEMENT_BACK}, - {"camera", IDS_APP_MANAGEMENT_CAMERA}, - {"contacts", IDS_APP_MANAGEMENT_CONTACTS}, - {"controlledByPolicy", IDS_CONTROLLED_SETTING_POLICY}, - {"lessApps", IDS_APP_MANAGEMENT_LESS_APPS}, - {"location", IDS_APP_MANAGEMENT_LOCATION}, - {"microphone", IDS_APP_MANAGEMENT_MICROPHONE}, - {"moreApps", IDS_APP_MANAGEMENT_MORE_APPS}, - {"moreSettings", IDS_APP_MANAGEMENT_MORE_SETTINGS}, - {"noSearchResults", IDS_APP_MANAGEMENT_NO_RESULTS}, - {"notifications", IDS_APP_MANAGEMENT_NOTIFICATIONS}, - {"notificationSublabel", IDS_APP_MANAGEMENT_NOTIFICATIONS_SUBLABEL}, - {"openAndroidSettings", IDS_APP_MANAGEMENT_ANDROID_SETTINGS}, - {"openExtensionsSettings", IDS_APP_MANAGEMENT_EXTENSIONS_SETTINGS}, - {"openSiteSettings", IDS_APP_MANAGEMENT_SITE_SETTING}, - {"permissions", IDS_APP_MANAGEMENT_PERMISSIONS}, - {"pinControlledByPolicy", IDS_APP_MANAGEMENT_PIN_ENFORCED_BY_POLICY}, - {"pinToShelf", IDS_APP_MANAGEMENT_PIN_TO_SHELF}, - {"searchPrompt", IDS_APP_MANAGEMENT_SEARCH_PROMPT}, - {"size", IDS_APP_MANAGEMENT_SIZE}, - {"storage", IDS_APP_MANAGEMENT_STORAGE}, - {"thisAppCan", IDS_APP_MANAGEMENT_THIS_APP_CAN}, - {"title", IDS_APP_MANAGEMENT_TITLE}, - {"uninstall", IDS_APP_MANAGEMENT_UNINSTALL_APP}, - {"version", IDS_APP_MANAGEMENT_VERSION}, - }; - AddLocalizedStringsBulk(source, kStrings, base::size(kStrings)); - -#if defined(OS_CHROMEOS) - source->AddBoolean( - "isSupportedArcVersion", - AppManagementPageHandler::IsCurrentArcVersionSupported(profile)); -#endif // OS_CHROMEOS - - source->AddResourcePath("app_management.mojom-lite.js", - IDR_APP_MANAGEMENT_MOJO_LITE_JS); - source->AddResourcePath("types.mojom-lite.js", - IDR_APP_MANAGEMENT_TYPES_MOJO_LITE_JS); - source->AddResourcePath("bitmap.mojom-lite.js", - IDR_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS); - source->AddResourcePath("image.mojom-lite.js", - IDR_APP_MANAGEMENT_IMAGE_MOJO_LITE_JS); - source->AddResourcePath("image_info.mojom-lite.js", - IDR_APP_MANAGEMENT_IMAGE_INFO_MOJO_LITE_JS); - - source->AddResourcePath("app.html", IDR_APP_MANAGEMENT_APP_HTML); - source->AddResourcePath("app.js", IDR_APP_MANAGEMENT_APP_JS); - source->AddResourcePath("expandable_app_list.html", - IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_HTML); - source->AddResourcePath("expandable_app_list.js", - IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_JS); - - source->SetDefaultResource(IDR_APP_MANAGEMENT_INDEX_HTML); - source->UseStringsJs(); - - return source; -} - -} // namespace - -/////////////////////////////////////////////////////////////////////////////// -// -// AppManagementUI -// -/////////////////////////////////////////////////////////////////////////////// - -AppManagementUI::AppManagementUI(content::WebUI* web_ui) - : ui::MojoWebUIController(web_ui, true), page_factory_binding_(this) { - Profile* profile = Profile::FromWebUI(web_ui); - - // Set up the data source. - content::WebUIDataSource* source = CreateAppManagementUIHTMLSource(profile); - content::WebUIDataSource::Add(profile, source); - - AddHandlerToRegistry(base::BindRepeating( - &AppManagementUI::BindPageHandlerFactory, base::Unretained(this))); - - auto plural_string_handler = std::make_unique<PluralStringHandler>(); - plural_string_handler->AddLocalizedString( - "appListPreview", IDS_APP_MANAGEMENT_APP_LIST_PREVIEW); - web_ui->AddMessageHandler(std::move(plural_string_handler)); -} - -AppManagementUI::~AppManagementUI() = default; - -bool AppManagementUI::IsEnabled() { - return base::FeatureList::IsEnabled(features::kAppManagement); -} - -void AppManagementUI::BindPageHandlerFactory( - app_management::mojom::PageHandlerFactoryRequest request) { - if (page_factory_binding_.is_bound()) { - page_factory_binding_.Unbind(); - } - - page_factory_binding_.Bind(std::move(request)); -} - -void AppManagementUI::CreatePageHandler( - app_management::mojom::PagePtr page, - app_management::mojom::PageHandlerRequest request) { - DCHECK(page); - - page_handler_ = std::make_unique<AppManagementPageHandler>( - std::move(request), std::move(page), Profile::FromWebUI(web_ui())); -} diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management_ui.h b/chromium/chrome/browser/ui/webui/app_management/app_management_ui.h deleted file mode 100644 index a0187ee104e..00000000000 --- a/chromium/chrome/browser/ui/webui/app_management/app_management_ui.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2018 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. - -#ifndef CHROME_BROWSER_UI_WEBUI_APP_MANAGEMENT_APP_MANAGEMENT_UI_H_ -#define CHROME_BROWSER_UI_WEBUI_APP_MANAGEMENT_APP_MANAGEMENT_UI_H_ - -#include <memory> - -#include "base/macros.h" -#include "chrome/browser/ui/webui/app_management/app_management.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" -#include "ui/webui/mojo_web_ui_controller.h" - -class AppManagementPageHandler; - -class AppManagementUI : public ui::MojoWebUIController, - public app_management::mojom::PageHandlerFactory { - public: - explicit AppManagementUI(content::WebUI* web_ui); - ~AppManagementUI() override; - - static bool IsEnabled(); - - private: - void BindPageHandlerFactory( - app_management::mojom::PageHandlerFactoryRequest request); - - // app_management::mojom::PageHandlerFactory: - void CreatePageHandler( - app_management::mojom::PagePtr page, - app_management::mojom::PageHandlerRequest request) override; - - std::unique_ptr<AppManagementPageHandler> page_handler_; - mojo::Binding<app_management::mojom::PageHandlerFactory> - page_factory_binding_; - - DISALLOW_COPY_AND_ASSIGN(AppManagementUI); -}; - -#endif // CHROME_BROWSER_UI_WEBUI_APP_MANAGEMENT_APP_MANAGEMENT_UI_H_ |