Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(568)

Unified Diff: chrome/browser/chromeos/printer_detector/legacy_printer_detector.cc

Issue 2945653002: Remove the legacy (extension-notifier) usb printer detector. Rename the remaining printerdetector … (Closed)
Patch Set: Remove the legacy (extension-notifier) usb printer detector. Rename the remaining printerdetector … Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/printer_detector/legacy_printer_detector.cc
diff --git a/chrome/browser/chromeos/printer_detector/legacy_printer_detector.cc b/chrome/browser/chromeos/printer_detector/legacy_printer_detector.cc
deleted file mode 100644
index e40dc517ae8bd104a9e3c76c99d5662a63937344..0000000000000000000000000000000000000000
--- a/chrome/browser/chromeos/printer_detector/legacy_printer_detector.cc
+++ /dev/null
@@ -1,333 +0,0 @@
-// Copyright 2015 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 <stdint.h>
-
-#include <memory>
-#include <utility>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/macros.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/scoped_observer.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/chromeos/printer_detector/printer_detector.h"
-#include "chrome/browser/chromeos/printing/usb_printer_util.h"
-#include "chrome/browser/chromeos/profiles/profile_helper.h"
-#include "chrome/browser/notifications/notification.h"
-#include "chrome/browser/notifications/notification_delegate.h"
-#include "chrome/browser/notifications/notification_ui_manager.h"
-#include "chrome/browser/ui/browser_navigator.h"
-#include "chrome/common/extensions/api/webstore_widget_private.h"
-#include "chrome/common/extensions/extension_constants.h"
-#include "chrome/grit/generated_resources.h"
-#include "chrome/grit/theme_resources.h"
-#include "components/user_manager/user.h"
-#include "components/user_manager/user_manager.h"
-#include "device/base/device_client.h"
-#include "device/usb/usb_device.h"
-#include "device/usb/usb_device_filter.h"
-#include "device/usb/usb_ids.h"
-#include "device/usb/usb_service.h"
-#include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_registry.h"
-#include "extensions/browser/extension_system.h"
-#include "extensions/common/api/printer_provider/usb_printer_manifest_data.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/extension_set.h"
-#include "extensions/common/one_shot_event.h"
-#include "extensions/common/permissions/api_permission.h"
-#include "extensions/common/permissions/permissions_data.h"
-#include "extensions/common/permissions/usb_device_permission.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
-
-namespace webstore_widget_private_api =
- extensions::api::webstore_widget_private;
-
-namespace chromeos {
-namespace {
-
-const char kPrinterProviderFoundNotificationID[] =
- "chrome://settings/printer/printer_app_found";
-
-const char kNoPrinterProviderNotificationID[] =
- "chrome://settings/printer/no_printer_app";
-
-enum PrinterServiceEvent {
- PRINTER_ADDED,
- DEPRECATED_PAGE_DISPLAYED,
- NOTIFICATION_SHOWN_PRINTER_SUPPORTED,
- NOTIFICATION_SHOWN_PRINTER_NOT_SUPPORTED,
- WEBSTORE_WIDGET_APP_LAUNCHED,
- PRINTER_SERVICE_EVENT_MAX,
-};
-
-base::string16 GetNotificationTitle(uint16_t vendor_id, uint16_t product_id) {
- const char* vendor_name = device::UsbIds::GetVendorName(vendor_id);
- if (vendor_name) {
- return l10n_util::GetStringFUTF16(IDS_PRINTER_DETECTED_NOTIFICATION_TITLE,
- base::UTF8ToUTF16(vendor_name));
- } else {
- return l10n_util::GetStringUTF16(
- IDS_PRINTER_DETECTED_NOTIFICATION_TITLE_UNKNOWN_VENDOR);
- }
-}
-
-std::string GetNotificationTag(const std::string& vendor_id,
- const std::string& product_id) {
- return vendor_id + ":" + product_id;
-}
-
-// Checks if there is an enabled extension with printerProvider permission and
-// usbDevices persmission for the USB (vendor_id, product_id) pair.
-bool HasAppThatSupportsPrinter(Profile* profile,
- const scoped_refptr<device::UsbDevice>& device) {
- const extensions::ExtensionSet& enabled_extensions =
- extensions::ExtensionRegistry::Get(profile)->enabled_extensions();
- for (const auto& extension : enabled_extensions) {
- if (!extension->permissions_data() ||
- !extension->permissions_data()->HasAPIPermission(
- extensions::APIPermission::kPrinterProvider) ||
- !extension->permissions_data()->HasAPIPermission(
- extensions::APIPermission::kUsb)) {
- continue;
- }
-
- const extensions::UsbPrinterManifestData* manifest_data =
- extensions::UsbPrinterManifestData::Get(extension.get());
- if (manifest_data && manifest_data->SupportsDevice(device)) {
- return true;
- }
-
- std::unique_ptr<extensions::UsbDevicePermission::CheckParam> param =
- extensions::UsbDevicePermission::CheckParam::ForUsbDevice(
- extension.get(), device.get());
- if (extension->permissions_data()->CheckAPIPermissionWithParam(
- extensions::APIPermission::kUsbDevice, param.get())) {
- return true;
- }
- }
- return false;
-}
-
-// Delegate for notification shown when a printer provider app for the plugged
-// in printer is found.
-class PrinterProviderExistsNotificationDelegate : public NotificationDelegate {
- public:
- PrinterProviderExistsNotificationDelegate(const std::string& vendor_id,
- const std::string& product_id)
- : vendor_id_(vendor_id), product_id_(product_id) {}
-
- std::string id() const override {
- return "system.printer.printer_provider_exists/" +
- GetNotificationTag(vendor_id_, product_id_);
- }
-
- private:
- ~PrinterProviderExistsNotificationDelegate() override = default;
-
- const std::string vendor_id_;
- const std::string product_id_;
-
- DISALLOW_COPY_AND_ASSIGN(PrinterProviderExistsNotificationDelegate);
-};
-
-// Delegate for notification shown when there are no printer provider apps that
-// support the plugged in printer found.
-// The notification is clickable, and clicking it is supposed to launch
-// Chrome Web Store widget listing apps that can support the plugged in printer.
-// (not implemented yet).
-class SearchPrinterAppNotificationDelegate : public NotificationDelegate {
- public:
- SearchPrinterAppNotificationDelegate(content::BrowserContext* browser_context,
- uint16_t vendor_id,
- const std::string& vendor_id_str,
- uint16_t product_id,
- const std::string& product_id_str)
- : browser_context_(browser_context),
- vendor_id_(vendor_id),
- vendor_id_str_(vendor_id_str),
- product_id_(product_id),
- product_id_str_(product_id_str) {}
-
- std::string id() const override {
- return "system.printer.no_printer_provider_found/" +
- GetNotificationTag(vendor_id_str_, product_id_str_);
- }
-
- bool HasClickedListener() override { return true; }
-
- void Click() override {
- UMA_HISTOGRAM_ENUMERATION("PrinterService.PrinterServiceEvent",
- WEBSTORE_WIDGET_APP_LAUNCHED,
- PRINTER_SERVICE_EVENT_MAX);
- webstore_widget_private_api::Options options;
- options.type = webstore_widget_private_api::TYPE_PRINTER_PROVIDER;
- options.usb_id.reset(new webstore_widget_private_api::UsbId());
- options.usb_id->vendor_id = vendor_id_;
- options.usb_id->product_id = product_id_;
-
- extensions::EventRouter* event_router =
- extensions::EventRouter::Get(browser_context_);
- std::unique_ptr<extensions::Event> event(new extensions::Event(
- extensions::events::WEBSTORE_WIDGET_PRIVATE_ON_SHOW_WIDGET,
- webstore_widget_private_api::OnShowWidget::kEventName,
- webstore_widget_private_api::OnShowWidget::Create(options)));
- event_router->DispatchEventToExtension(extension_misc::kWebstoreWidgetAppId,
- std::move(event));
- }
-
- private:
- ~SearchPrinterAppNotificationDelegate() override = default;
-
- content::BrowserContext* browser_context_;
- uint16_t vendor_id_;
- std::string vendor_id_str_;
- uint16_t product_id_;
- std::string product_id_str_;
-
- DISALLOW_COPY_AND_ASSIGN(SearchPrinterAppNotificationDelegate);
-};
-
-// The PrinterDetector that initiates extension-based USB printer setup:
-//
-// * if there is a printer provider extension for a detected USB printer
-// installed, it shows a notification informing the user the printer is ready to
-// be used.
-//
-// * otherwise, it shows a notification offering the user an option to install a
-// printer provider extension for the printer from the Chrome Web Store.
-//
-// TODO(justincarlson) - Remove this implementation when CUPS support is enabled
-// by default.
-class LegacyPrinterDetectorImpl : public PrinterDetector,
- public device::UsbService::Observer {
- public:
- explicit LegacyPrinterDetectorImpl(Profile* profile)
- : profile_(profile),
- notification_ui_manager_(nullptr),
- observer_(this),
- weak_ptr_factory_(this) {
- extensions::ExtensionSystem::Get(profile)->ready().Post(
- FROM_HERE, base::Bind(&LegacyPrinterDetectorImpl::Initialize,
- weak_ptr_factory_.GetWeakPtr()));
- }
- ~LegacyPrinterDetectorImpl() override = default;
-
- private:
- // UsbService::observer override:
- void OnDeviceAdded(scoped_refptr<device::UsbDevice> device) override {
- const user_manager::User* user =
- ProfileHelper::Get()->GetUserByProfile(profile_);
- if (!user || !user->HasGaiaAccount() || !user_manager::UserManager::Get() ||
- user != user_manager::UserManager::Get()->GetActiveUser()) {
- return;
- }
-
- if (!UsbDeviceIsPrinter(*device)) {
- return;
- }
-
- if (notification_ui_manager_ == nullptr) {
- notification_ui_manager_ = g_browser_process->notification_ui_manager();
- }
-
- UMA_HISTOGRAM_ENUMERATION("PrinterService.PrinterServiceEvent",
- PRINTER_ADDED, PRINTER_SERVICE_EVENT_MAX);
- ShowPrinterPluggedNotification(device);
- }
-
- // Initializes the printer detector.
- void Initialize() {
- device::UsbService* usb_service =
- device::DeviceClient::Get()->GetUsbService();
- if (!usb_service)
- return;
- observer_.Add(usb_service);
- }
-
- void SetNotificationUIManagerForTesting(
- NotificationUIManager* manager) override {
- notification_ui_manager_ = manager;
- }
-
- // Shows a notification for a plugged in printer.
- // If there is a printerProvider app that handles the printer's USB
- // (vendor_id, product_id) pair, the notification informs the user that the
- // printer is ready to be used, otherwise it offers the user to search the
- // Chrome Web Store for an app that can handle the printer.
- void ShowPrinterPluggedNotification(
- const scoped_refptr<device::UsbDevice>& device) {
- ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
- std::unique_ptr<Notification> notification;
-
- const std::string kVendorIdStr = base::IntToString(device->vendor_id());
- const std::string kProductIdStr = base::IntToString(device->product_id());
-
- if (HasAppThatSupportsPrinter(profile_, device)) {
- UMA_HISTOGRAM_ENUMERATION("PrinterService.PrinterServiceEvent",
- NOTIFICATION_SHOWN_PRINTER_SUPPORTED,
- PRINTER_SERVICE_EVENT_MAX);
- notification.reset(new Notification(
- message_center::NOTIFICATION_TYPE_SIMPLE,
- GetNotificationTitle(device->vendor_id(), device->product_id()),
- l10n_util::GetStringUTF16(
- IDS_PRINTER_DETECTED_NOTIFICATION_PRINT_APP_FOUND_BODY),
- bundle.GetImageNamed(IDR_PRINTER_NOTIFICATION),
- message_center::NotifierId(
- message_center::NotifierId::SYSTEM_COMPONENT,
- kPrinterProviderFoundNotificationID),
- base::string16(), GURL(kPrinterProviderFoundNotificationID),
- GetNotificationTag(kVendorIdStr, kProductIdStr),
- message_center::RichNotificationData(),
- new PrinterProviderExistsNotificationDelegate(kVendorIdStr,
- kProductIdStr)));
- } else {
- UMA_HISTOGRAM_ENUMERATION("PrinterService.PrinterServiceEvent",
- NOTIFICATION_SHOWN_PRINTER_NOT_SUPPORTED,
- PRINTER_SERVICE_EVENT_MAX);
- message_center::RichNotificationData options;
- options.clickable = true;
- notification.reset(new Notification(
- message_center::NOTIFICATION_TYPE_SIMPLE,
- GetNotificationTitle(device->vendor_id(), device->product_id()),
- l10n_util::GetStringUTF16(
- IDS_PRINTER_DETECTED_NOTIFICATION_NO_PRINT_APP_BODY),
- bundle.GetImageNamed(IDR_PRINTER_NOTIFICATION),
- message_center::NotifierId(
- message_center::NotifierId::SYSTEM_COMPONENT,
- kNoPrinterProviderNotificationID),
- base::string16(), GURL(kNoPrinterProviderNotificationID),
- GetNotificationTag(kVendorIdStr, kProductIdStr), options,
- new SearchPrinterAppNotificationDelegate(
- profile_, device->vendor_id(), kVendorIdStr, device->product_id(),
- kProductIdStr)));
- }
-
- notification->SetSystemPriority();
- notification_ui_manager_->Add(*notification, profile_);
- }
-
- std::unique_ptr<Notification> notification_;
-
- Profile* profile_;
- NotificationUIManager* notification_ui_manager_;
- ScopedObserver<device::UsbService, device::UsbService::Observer> observer_;
- base::WeakPtrFactory<LegacyPrinterDetectorImpl> weak_ptr_factory_;
-};
-
-} // namespace
-
-// static
-std::unique_ptr<PrinterDetector> PrinterDetector::CreateLegacy(
- Profile* profile) {
- return base::MakeUnique<LegacyPrinterDetectorImpl>(profile);
-}
-
-} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698