Add USB printer notification for configuration required message
This change introduces a notification that will be displayed when a
user plugs in a USB printer that requires manual configuration. Clicking
the notification will open CrOS settings so the user can manually
configure the printer.
- Subsequent CL will call ShowConfigurationNotification() to show the
notification.
Bug: 951139
Change-Id: Ibff4d415de9c3ccf8eda45f470cfa30513468bb2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1606193
Reviewed-by: Lei Zhang <[email protected]>
Reviewed-by: Zentaro Kavanagh <[email protected]>
Commit-Queue: Lei Zhang <[email protected]>
Auto-Submit: Bailey Berro <[email protected]>
Cr-Commit-Position: refs/heads/master@{#661038}
diff --git a/chrome/browser/chromeos/printing/automatic_usb_printer_configurer_unittest.cc b/chrome/browser/chromeos/printing/automatic_usb_printer_configurer_unittest.cc
index 78a4b35..4e8dd7a 100644
--- a/chrome/browser/chromeos/printing/automatic_usb_printer_configurer_unittest.cc
+++ b/chrome/browser/chromeos/printing/automatic_usb_printer_configurer_unittest.cc
@@ -142,6 +142,10 @@
NOTIMPLEMENTED();
}
+ void ShowConfigurationNotification(const Printer& printer) override {
+ NOTIMPLEMENTED();
+ }
+
void RemoveNotification(const std::string& printer_id) override {
open_notifications_.erase(printer_id);
}
diff --git a/chrome/browser/chromeos/printing/cups_printers_manager_unittest.cc b/chrome/browser/chromeos/printing/cups_printers_manager_unittest.cc
index b9c73fd..6175e63c 100644
--- a/chrome/browser/chromeos/printing/cups_printers_manager_unittest.cc
+++ b/chrome/browser/chromeos/printing/cups_printers_manager_unittest.cc
@@ -306,6 +306,9 @@
void ShowEphemeralNotification(const Printer& printer) override {
NOTIMPLEMENTED();
}
+ void ShowConfigurationNotification(const Printer& printer) override {
+ NOTIMPLEMENTED();
+ }
void ShowSavedNotification(const Printer& printer) override {
open_notifications_.insert(printer.id());
}
diff --git a/chrome/browser/chromeos/printing/usb_printer_notification.cc b/chrome/browser/chromeos/printing/usb_printer_notification.cc
index 4f77464..e0d4ea1 100644
--- a/chrome/browser/chromeos/printing/usb_printer_notification.cc
+++ b/chrome/browser/chromeos/printing/usb_printer_notification.cc
@@ -11,6 +11,9 @@
#include "chrome/browser/notifications/notification_display_service.h"
#include "chrome/browser/notifications/notification_handler.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/chrome_pages.h"
+#include "chrome/browser/ui/settings_window_manager_chromeos.h"
+#include "chrome/common/webui_url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/image/image.h"
@@ -77,6 +80,13 @@
if (!button_index) {
// Body of notification clicked.
visible_ = false;
+ if (type_ == Type::kConfigurationRequired) {
+ auto* const settings_manager =
+ chrome::SettingsWindowManager::GetInstance();
+ settings_manager->ShowChromePageForProfile(
+ profile_,
+ chrome::GetSettingsUrl(chrome::kNativePrintingSettingsSubPage));
+ }
return;
}
@@ -101,6 +111,13 @@
IDS_USB_PRINTER_NOTIFICATION_CONNECTED_MESSAGE,
base::UTF8ToUTF16(printer_.display_name())));
return;
+ case Type::kConfigurationRequired:
+ notification_->set_title(l10n_util::GetStringUTF16(
+ IDS_USB_PRINTER_NOTIFICATION_CONFIGURATION_REQUIRED_TITLE));
+ notification_->set_message(l10n_util::GetStringFUTF16(
+ IDS_USB_PRINTER_NOTIFICATION_CONFIGURATION_REQUIRED_MESSAGE,
+ base::UTF8ToUTF16(printer_.display_name())));
+ return;
}
NOTREACHED();
}
diff --git a/chrome/browser/chromeos/printing/usb_printer_notification.h b/chrome/browser/chromeos/printing/usb_printer_notification.h
index f0a2161f..fc11849b 100644
--- a/chrome/browser/chromeos/printing/usb_printer_notification.h
+++ b/chrome/browser/chromeos/printing/usb_printer_notification.h
@@ -26,7 +26,7 @@
// according to its state and respond to the user's action.
class UsbPrinterNotification : public message_center::NotificationObserver {
public:
- enum class Type { kEphemeral, kSaved };
+ enum class Type { kEphemeral, kSaved, kConfigurationRequired };
UsbPrinterNotification(const Printer& printer,
const std::string& notification_id,
diff --git a/chrome/browser/chromeos/printing/usb_printer_notification_controller.cc b/chrome/browser/chromeos/printing/usb_printer_notification_controller.cc
index 154b95f..5b55bb2 100644
--- a/chrome/browser/chromeos/printing/usb_printer_notification_controller.cc
+++ b/chrome/browser/chromeos/printing/usb_printer_notification_controller.cc
@@ -19,17 +19,7 @@
~UsbPrinterNotificationControllerImpl() override = default;
void ShowEphemeralNotification(const Printer& printer) override {
- if (!base::FeatureList::IsEnabled(features::kStreamlinedUsbPrinterSetup)) {
- return;
- }
-
- if (base::ContainsKey(notifications_, printer.id())) {
- return;
- }
-
- notifications_[printer.id()] = std::make_unique<UsbPrinterNotification>(
- printer, GetUniqueNotificationId(),
- UsbPrinterNotification::Type::kEphemeral, profile_);
+ ShowNotification(printer, UsbPrinterNotification::Type::kEphemeral);
}
void RemoveNotification(const std::string& printer_id) override {
@@ -45,6 +35,17 @@
}
void ShowSavedNotification(const Printer& printer) override {
+ ShowNotification(printer, UsbPrinterNotification::Type::kSaved);
+ }
+
+ void ShowConfigurationNotification(const Printer& printer) override {
+ ShowNotification(printer,
+ UsbPrinterNotification::Type::kConfigurationRequired);
+ }
+
+ private:
+ void ShowNotification(const Printer& printer,
+ UsbPrinterNotification::Type type) {
if (!base::FeatureList::IsEnabled(features::kStreamlinedUsbPrinterSetup)) {
return;
}
@@ -54,11 +55,9 @@
}
notifications_[printer.id()] = std::make_unique<UsbPrinterNotification>(
- printer, GetUniqueNotificationId(),
- UsbPrinterNotification::Type::kSaved, profile_);
+ printer, GetUniqueNotificationId(), type, profile_);
}
- private:
std::string GetUniqueNotificationId() {
return base::StringPrintf("usb_printer_notification_%d",
next_notification_id_++);
diff --git a/chrome/browser/chromeos/printing/usb_printer_notification_controller.h b/chrome/browser/chromeos/printing/usb_printer_notification_controller.h
index 7b33be85..776c0f9 100644
--- a/chrome/browser/chromeos/printing/usb_printer_notification_controller.h
+++ b/chrome/browser/chromeos/printing/usb_printer_notification_controller.h
@@ -33,6 +33,10 @@
// is already an existing notification for |printer|.
virtual void ShowSavedNotification(const Printer& printer) = 0;
+ // Creates a notification for a printer that needs configuration. This is a
+ // no-op if there is already an existing notification for |printer|.
+ virtual void ShowConfigurationNotification(const Printer& printer) = 0;
+
// Closes the notification for |printer_id|. This is a no-op if the
// notification has already been closed by the user.
virtual void RemoveNotification(const std::string& printer_id) = 0;