summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/ui/webui/app_management
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/ui/webui/app_management')
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management.mojom3
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.cc66
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.h28
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc94
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management_ui.cc140
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management_ui.h41
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_