hid: Update HidPinnedNotification to show extension names
Update HidPinnedNotification to show extension names and revise icon
string literals to match go/usb-hid-extension-permission-ux
documentation.
Bug: 1353104
Change-Id: I2ca50ae52aaeec9b6ce77a96425fbc342c7fb232
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4452088
Reviewed-by: Reilly Grant <[email protected]>
Commit-Queue: Jack Hsieh <[email protected]>
Code-Coverage: Findit <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1135568}
diff --git a/chrome/browser/hid/hid_pinned_notification.cc b/chrome/browser/hid/hid_pinned_notification.cc
index 3a847151..aa08dc47 100644
--- a/chrome/browser/hid/hid_pinned_notification.cc
+++ b/chrome/browser/hid/hid_pinned_notification.cc
@@ -3,19 +3,59 @@
// found in the LICENSE file.
#include "chrome/browser/hid/hid_pinned_notification.h"
+#include <string>
#include "base/containers/contains.h"
+#include "base/containers/flat_map.h"
+#include "base/i18n/message_formatter.h"
#include "base/strings/strcat.h"
+#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/browser/hid/hid_connection_tracker.h"
#include "chrome/browser/hid/hid_connection_tracker_factory.h"
#include "chrome/browser/notifications/system_notification_helper.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/grit/generated_resources.h"
#include "extensions/buildflags/buildflags.h"
+#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/image_model.h"
#include "ui/message_center/public/cpp/notification.h"
#include "ui/message_center/public/cpp/notification_delegate.h"
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+#include "extensions/browser/extension_registry.h"
+#include "extensions/common/constants.h"
+#endif // BUILDFLAG(ENABLE_EXTENSIONS)
+
+namespace {
+
+std::u16string GetMessageLabel(HidConnectionTracker* connection_tracker) {
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+ std::vector<std::u16string> extension_names;
+ for (const auto& [origin, state] : connection_tracker->origins()) {
+ CHECK_EQ(origin.scheme(), extensions::kExtensionScheme);
+ extension_names.push_back(base::UTF8ToUTF16(state.name));
+ }
+ CHECK(!extension_names.empty());
+ if (extension_names.size() == 1) {
+ return base::i18n::MessageFormatter::FormatWithNumberedArgs(
+ l10n_util::GetStringUTF16(IDS_WEBHID_SYSTEM_TRAY_ICON_EXTENSION_LIST),
+ 1, extension_names[0]);
+ } else if (extension_names.size() == 2) {
+ return base::i18n::MessageFormatter::FormatWithNumberedArgs(
+ l10n_util::GetStringUTF16(IDS_WEBHID_SYSTEM_TRAY_ICON_EXTENSION_LIST),
+ 2, extension_names[0], extension_names[1]);
+ }
+ return base::i18n::MessageFormatter::FormatWithNumberedArgs(
+ l10n_util::GetStringUTF16(IDS_WEBHID_SYSTEM_TRAY_ICON_EXTENSION_LIST),
+ static_cast<int>(extension_names.size()), extension_names[0],
+ extension_names[1], static_cast<int>(extension_names.size() - 2));
+#endif // BUILDFLAG(ENABLE_EXTENSIONS)
+ NOTREACHED_NORETURN();
+}
+
+} // namespace
+
HidPinnedNotification::HidPinnedNotification() = default;
HidPinnedNotification::~HidPinnedNotification() = default;
@@ -28,7 +68,7 @@
std::unique_ptr<message_center::Notification>
HidPinnedNotification::CreateNotification(Profile* profile) {
message_center::RichNotificationData data;
- data.buttons.emplace_back(GetManageHidDeviceButtonLabel(profile));
+ data.buttons.emplace_back(GetContentSettingsLabel());
auto delegate =
base::MakeRefCounted<message_center::HandleNotificationClickDelegate>(
base::BindRepeating(
@@ -54,8 +94,9 @@
DCHECK(hid_connection_tracker);
auto notification = std::make_unique<message_center::Notification>(
message_center::NOTIFICATION_TYPE_SIMPLE, notification_id,
- GetTitleLabel(hid_connection_tracker->total_connection_count()),
- /*message=*/std::u16string(), /*icon=*/ui::ImageModel(),
+ GetTitleLabel(hid_connection_tracker->origins().size(),
+ hid_connection_tracker->total_connection_count()),
+ GetMessageLabel(hid_connection_tracker), /*icon=*/ui::ImageModel(),
/*display_source=*/std::u16string(), /*origin_url=*/GURL(),
#if BUILDFLAG(IS_CHROMEOS_ASH)
message_center::NotifierId(message_center::NotifierType::SYSTEM_COMPONENT,
@@ -68,8 +109,8 @@
data, std::move(delegate));
notification->set_small_image(gfx::Image(GetStatusTrayIcon()));
notification->set_pinned(true);
- // Set to system priority so it will never timeout.
- notification->SetSystemPriority();
+ // Set to low priority so it doesn't create a popup.
+ notification->set_priority(message_center::LOW_PRIORITY);
return notification;
}