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

Unified Diff: chrome/common/extensions/permissions/chrome_permission_message_rules.cc

Issue 1300353002: Make USB permissions work in the new permission message system (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@kill_permissionmessage
Patch Set: review Created 5 years, 4 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/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():

Powered by Google App Engine
This is Rietveld 408576698