| Index: chrome/common/extensions/permissions/chrome_permission_message_rules.cc
|
| diff --git a/chrome/common/extensions/permissions/chrome_permission_message_rules.cc b/chrome/common/extensions/permissions/chrome_permission_message_rules.cc
|
| index 7576d83d0cdbff83155ab5bea268f1d57de49ce3..977a21a47c92d819e69c645e2af3575a09a430dc 100644
|
| --- a/chrome/common/extensions/permissions/chrome_permission_message_rules.cc
|
| +++ b/chrome/common/extensions/permissions/chrome_permission_message_rules.cc
|
| @@ -178,6 +178,78 @@ class CommaSeparatedListFormatter : public ChromePermissionMessageFormatter {
|
| DISALLOW_COPY_AND_ASSIGN(CommaSeparatedListFormatter);
|
| };
|
|
|
| +class USBDevicesFormatter : public ChromePermissionMessageFormatter {
|
| + public:
|
| + USBDevicesFormatter() {}
|
| + ~USBDevicesFormatter() override {}
|
| +
|
| + CoalescedPermissionMessage GetPermissionMessage(
|
| + const PermissionIDSet& permissions) const override {
|
| + DCHECK(permissions.size() > 0);
|
| + return permissions.size() == 1 ? GetItemMessage(permissions)
|
| + : GetMultiItemMessage(permissions);
|
| + }
|
| +
|
| + private:
|
| + CoalescedPermissionMessage GetItemMessage(
|
| + const PermissionIDSet& permissions) const {
|
| + DCHECK(permissions.size() == 1);
|
| + const PermissionID& permission = *permissions.begin();
|
| + base::string16 msg;
|
| + switch (permission.id()) {
|
| + case APIPermission::kUsbDevice:
|
| + msg = l10n_util::GetStringFUTF16(
|
| + IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE, permission.parameter());
|
| + break;
|
| + case APIPermission::kUsbDeviceUnknownProduct:
|
| + msg = l10n_util::GetStringFUTF16(
|
| + IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_UNKNOWN_PRODUCT,
|
| + permission.parameter());
|
| + break;
|
| + case APIPermission::kUsbDeviceUnknownVendor:
|
| + msg = l10n_util::GetStringUTF16(
|
| + IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_UNKNOWN_VENDOR);
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + return CoalescedPermissionMessage(msg, permissions);
|
| + }
|
| +
|
| + CoalescedPermissionMessage GetMultiItemMessage(
|
| + const PermissionIDSet& permissions) const {
|
| + DCHECK(permissions.size() > 1);
|
| + // Put all the individual items into submessages.
|
| + std::vector<base::string16> submessages;
|
| + std::vector<base::string16> devices =
|
| + permissions.GetAllPermissionsWithID(APIPermission::kUsbDevice)
|
| + .GetAllPermissionParameters();
|
| + for (const base::string16& device : devices) {
|
| + submessages.push_back(l10n_util::GetStringFUTF16(
|
| + IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST_ITEM, device));
|
| + }
|
| + std::vector<base::string16> vendors =
|
| + permissions.GetAllPermissionsWithID(
|
| + APIPermission::kUsbDeviceUnknownProduct)
|
| + .GetAllPermissionParameters();
|
| + for (const base::string16& vendor : vendors) {
|
| + submessages.push_back(l10n_util::GetStringFUTF16(
|
| + IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST_ITEM_UNKNOWN_PRODUCT,
|
| + vendor));
|
| + }
|
| + if (permissions.ContainsID(APIPermission::kUsbDeviceUnknownVendor)) {
|
| + submessages.push_back(l10n_util::GetStringUTF16(
|
| + IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST_ITEM_UNKNOWN_VENDOR));
|
| + }
|
| +
|
| + return CoalescedPermissionMessage(
|
| + l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST),
|
| + permissions, submessages);
|
| + }
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(USBDevicesFormatter);
|
| +};
|
| +
|
| } // namespace
|
|
|
| ChromePermissionMessageRule::ChromePermissionMessageRule(
|
| @@ -258,18 +330,13 @@ ChromePermissionMessageRule::GetAllRules() {
|
| {IDS_EXTENSION_PROMPT_WARNING_DEBUGGER, {APIPermission::kDebugger}, {}},
|
| {IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS,
|
| {APIPermission::kPlugin},
|
| - {APIPermission::kFullAccess,
|
| - APIPermission::kHostsAll,
|
| - APIPermission::kHostsAllReadOnly,
|
| - APIPermission::kDeclarativeWebRequest,
|
| - APIPermission::kTopSites,
|
| - APIPermission::kTab}},
|
| + {APIPermission::kFullAccess, APIPermission::kHostsAll,
|
| + APIPermission::kHostsAllReadOnly, APIPermission::kDeclarativeWebRequest,
|
| + APIPermission::kTopSites, APIPermission::kTab}},
|
| {IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS,
|
| {APIPermission::kFullAccess},
|
| - {APIPermission::kHostsAll,
|
| - APIPermission::kHostsAllReadOnly,
|
| - APIPermission::kDeclarativeWebRequest,
|
| - APIPermission::kTopSites,
|
| + {APIPermission::kHostsAll, APIPermission::kHostsAllReadOnly,
|
| + APIPermission::kDeclarativeWebRequest, APIPermission::kTopSites,
|
| APIPermission::kTab}},
|
|
|
| // Parameterized permission messages:
|
| @@ -301,23 +368,10 @@ ChromePermissionMessageRule::GetAllRules() {
|
| {}},
|
|
|
| // USB Device Permission rules:
|
| - // TODO(sashab, reillyg): Rework the permission message logic for USB
|
| - // devices to generate more meaningful messages and better fit the current
|
| - // rules system. Maybe model it similarly to host or socket permissions
|
| - // above. crbug.com/522842
|
| - {new SingleParameterFormatter(IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE),
|
| - {APIPermission::kUsbDevice},
|
| - {}},
|
| - {new SingleParameterFormatter(
|
| - IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_UNKNOWN_PRODUCT),
|
| - {APIPermission::kUsbDeviceUnknownProduct},
|
| - {}},
|
| - {IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_UNKNOWN_VENDOR,
|
| - {APIPermission::kUsbDeviceUnknownVendor},
|
| - {}},
|
| - {new SimpleListFormatter(IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST),
|
| - {APIPermission::kUsbDeviceList},
|
| - {}},
|
| + {new USBDevicesFormatter,
|
| + {},
|
| + {APIPermission::kUsbDevice, APIPermission::kUsbDeviceUnknownProduct,
|
| + APIPermission::kUsbDeviceUnknownVendor}},
|
|
|
| // Coalesced message rules taken from
|
| // ChromePermissionMessageProvider::GetWarningMessages():
|
| @@ -354,17 +408,12 @@ ChromePermissionMessageRule::GetAllRules() {
|
|
|
| {IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS,
|
| {APIPermission::kSessions, APIPermission::kHistory},
|
| - {APIPermission::kFavicon,
|
| - APIPermission::kProcesses,
|
| - APIPermission::kTab,
|
| - APIPermission::kTopSites,
|
| - APIPermission::kWebNavigation}},
|
| + {APIPermission::kFavicon, APIPermission::kProcesses, APIPermission::kTab,
|
| + APIPermission::kTopSites, APIPermission::kWebNavigation}},
|
| {IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS,
|
| {APIPermission::kSessions, APIPermission::kTab},
|
| - {APIPermission::kFavicon,
|
| - APIPermission::kProcesses,
|
| - APIPermission::kTopSites,
|
| - APIPermission::kWebNavigation}},
|
| + {APIPermission::kFavicon, APIPermission::kProcesses,
|
| + APIPermission::kTopSites, APIPermission::kWebNavigation}},
|
|
|
| // Suppression list taken from
|
| // ChromePermissionMessageProvider::GetPermissionMessages():
|
| @@ -380,11 +429,8 @@ ChromePermissionMessageRule::GetAllRules() {
|
| // list of most frequently visited sites.
|
| {IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE,
|
| {APIPermission::kHistory},
|
| - {APIPermission::kFavicon,
|
| - APIPermission::kProcesses,
|
| - APIPermission::kTab,
|
| - APIPermission::kTopSites,
|
| - APIPermission::kWebNavigation}},
|
| + {APIPermission::kFavicon, APIPermission::kProcesses, APIPermission::kTab,
|
| + APIPermission::kTopSites, APIPermission::kWebNavigation}},
|
| // A special hack: If kFileSystemWriteDirectory would be displayed, hide
|
| // kFileSystemDirectory as the write directory message implies it.
|
| // TODO(sashab): Remove kFileSystemWriteDirectory; it's no longer needed
|
| @@ -401,11 +447,8 @@ ChromePermissionMessageRule::GetAllRules() {
|
| // are required.
|
| {IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS,
|
| {APIPermission::kHostsAll},
|
| - {APIPermission::kDeclarativeWebRequest,
|
| - APIPermission::kTopSites,
|
| - APIPermission::kTab,
|
| - APIPermission::kFavicon,
|
| - APIPermission::kTopSites,
|
| + {APIPermission::kDeclarativeWebRequest, APIPermission::kTopSites,
|
| + APIPermission::kTab, APIPermission::kFavicon, APIPermission::kTopSites,
|
| APIPermission::kHostsAllReadOnly}},
|
| // AutomationManifestPermission:
|
| {IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS_READ_ONLY,
|
| @@ -415,10 +458,8 @@ ChromePermissionMessageRule::GetAllRules() {
|
| // frequently visited sites.
|
| {IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ,
|
| {APIPermission::kTab},
|
| - {APIPermission::kFavicon,
|
| - APIPermission::kProcesses,
|
| - APIPermission::kTopSites,
|
| - APIPermission::kWebNavigation}},
|
| + {APIPermission::kFavicon, APIPermission::kProcesses,
|
| + APIPermission::kTopSites, APIPermission::kWebNavigation}},
|
|
|
| // Individual message rules taken from
|
| // ChromeAPIPermissions::GetAllPermissions():
|
|
|