// Copyright 2014 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 "extensions/common/permissions/usb_device_permission.h"
#include <set>
#include <string>
#include "base/logging.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "extensions/common/permissions/permissions_info.h"
#include "grit/extensions_strings.h"
#include "ui/base/l10n/l10n_util.h"
#if defined(ENABLE_EXTENSIONS)
#include "device/usb/usb_ids.h"
#endif
namespace extensions {
UsbDevicePermission::UsbDevicePermission(
const APIPermissionInfo* info)
: SetDisjunctionPermission<UsbDevicePermissionData,
UsbDevicePermission>(info) {
}
UsbDevicePermission::~UsbDevicePermission() {
}
PermissionMessages UsbDevicePermission::GetMessages() const {
DCHECK(HasMessages());
PermissionMessages result;
#if defined(ENABLE_EXTENSIONS)
// //device/usb/usb.gyp:device_usb is not available when extensions are
// disabled.
for (std::set<UsbDevicePermissionData>::const_iterator i =
data_set_.begin(); i != data_set_.end(); ++i) {
const char* vendor = device::UsbIds::GetVendorName(i->vendor_id());
if (vendor) {
const char* product =
device::UsbIds::GetProductName(i->vendor_id(), i->product_id());
if (product) {
result.push_back(PermissionMessage(
PermissionMessage::kUsbDevice,
l10n_util::GetStringFUTF16(
IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE,
base::ASCIIToUTF16(product),
base::ASCIIToUTF16(vendor))));
} else {
result.push_back(PermissionMessage(
PermissionMessage::kUsbDevice,
l10n_util::GetStringFUTF16(
IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_MISSING_PRODUCT,
base::ASCIIToUTF16(vendor))));
}
} else {
result.push_back(PermissionMessage(
PermissionMessage::kUsbDevice,
l10n_util::GetStringUTF16(
IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_MISSING_VENDOR)));
}
}
#else
NOTREACHED();
#endif // defined(ENABLE_EXTENSIONS)
return result;
}
} // namespace extensions