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

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

Issue 980353003: Extensions: Switch to new permission message system, part I (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup;rebase Created 5 years, 9 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_provider.cc
diff --git a/chrome/common/extensions/permissions/chrome_permission_message_provider.cc b/chrome/common/extensions/permissions/chrome_permission_message_provider.cc
index 8605b578ca2425e2b74a1f7c79923232192aa059..a8afd6786d84055064b03824ece90fc91c99e8bb 100644
--- a/chrome/common/extensions/permissions/chrome_permission_message_provider.cc
+++ b/chrome/common/extensions/permissions/chrome_permission_message_provider.cc
@@ -136,7 +136,8 @@ PermissionMessages ChromePermissionMessageProvider::GetPermissionMessages(
PermissionMsgSet host_msgs =
GetHostPermissionMessages(permissions, NULL, extension_type);
- PermissionMsgSet api_msgs = GetAPIPermissionMessages(permissions, NULL);
+ PermissionMsgSet api_msgs =
+ GetAPIPermissionMessages(permissions, NULL, extension_type);
PermissionMsgSet manifest_permission_msgs =
GetManifestPermissionMessages(permissions, NULL);
messages.insert(messages.end(), host_msgs.begin(), host_msgs.end());
@@ -189,105 +190,11 @@ std::vector<base::string16> ChromePermissionMessageProvider::GetWarningMessages(
const PermissionSet* permissions,
Manifest::Type extension_type) const {
std::vector<base::string16> message_strings;
- PermissionMessages messages =
- GetPermissionMessages(permissions, extension_type);
-
- // WARNING: When modifying a coalescing rule in this list, be sure to also
- // modify the corresponding rule in
- // ChromePermissionMessageProvider::GetCoalescedPermissionMessages().
- // TODO(sashab): Deprecate this function, and remove this list.
- for (PermissionMessages::const_iterator i = messages.begin();
- i != messages.end(); ++i) {
- int id = i->id();
- // Access to users' devices should provide a single warning message
- // specifying the transport method used; serial and/or Bluetooth.
- if (id == PermissionMessage::kBluetooth ||
- id == PermissionMessage::kSerial) {
- if (ContainsMessages(messages,
- PermissionMessage::kBluetooth,
- PermissionMessage::kSerial)) {
- if (id == PermissionMessage::kBluetooth) {
- message_strings.push_back(l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL));
- }
- continue;
- }
- }
- if (id == PermissionMessage::kAccessibilityFeaturesModify ||
- id == PermissionMessage::kAccessibilityFeaturesRead) {
- if (ContainsMessages(messages,
- PermissionMessage::kAccessibilityFeaturesModify,
- PermissionMessage::kAccessibilityFeaturesRead)) {
- if (id == PermissionMessage::kAccessibilityFeaturesModify) {
- message_strings.push_back(l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ_MODIFY));
- }
- continue;
- }
- }
- if (id == PermissionMessage::kAudioCapture ||
- id == PermissionMessage::kVideoCapture) {
- if (ContainsMessages(messages,
- PermissionMessage::kAudioCapture,
- PermissionMessage::kVideoCapture)) {
- if (id == PermissionMessage::kAudioCapture) {
- message_strings.push_back(l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_AUDIO_AND_VIDEO_CAPTURE));
- }
- continue;
- }
- }
- if (id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo ||
- id == PermissionMessage::kMediaGalleriesAllGalleriesDelete ||
- id == PermissionMessage::kMediaGalleriesAllGalleriesRead) {
- if (ContainsMessages(
- messages,
- PermissionMessage::kMediaGalleriesAllGalleriesCopyTo,
- PermissionMessage::kMediaGalleriesAllGalleriesDelete,
- PermissionMessage::kMediaGalleriesAllGalleriesRead)) {
- if (id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo) {
- message_strings.push_back(l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE_DELETE));
- }
- continue;
- }
- if (ContainsMessages(
- messages,
- PermissionMessage::kMediaGalleriesAllGalleriesCopyTo,
- PermissionMessage::kMediaGalleriesAllGalleriesRead)) {
- if (id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo) {
- message_strings.push_back(l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE));
- }
- continue;
- }
- if (ContainsMessages(
- messages,
- PermissionMessage::kMediaGalleriesAllGalleriesDelete,
- PermissionMessage::kMediaGalleriesAllGalleriesRead)) {
- if (id == PermissionMessage::kMediaGalleriesAllGalleriesDelete) {
- message_strings.push_back(l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE));
- }
- continue;
- }
- }
- if (permissions->HasAPIPermission(APIPermission::kSessions) &&
- id == PermissionMessage::kTabs) {
- message_strings.push_back(l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS));
- continue;
- }
- if (permissions->HasAPIPermission(APIPermission::kSessions) &&
- id == PermissionMessage::kBrowsingHistory) {
- message_strings.push_back(l10n_util::GetStringUTF16(
- IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS));
- continue;
- }
-
- message_strings.push_back(i->message());
- }
-
+ std::vector<base::string16> message_details_strings;
+ CoalesceWarningMessages(permissions,
+ extension_type,
+ &message_strings,
+ &message_details_strings);
return message_strings;
}
@@ -296,14 +203,12 @@ ChromePermissionMessageProvider::GetWarningMessagesDetails(
const PermissionSet* permissions,
Manifest::Type extension_type) const {
std::vector<base::string16> message_strings;
- PermissionMessages messages =
- GetPermissionMessages(permissions, extension_type);
-
- for (PermissionMessages::const_iterator i = messages.begin();
- i != messages.end(); ++i)
- message_strings.push_back(i->details());
-
- return message_strings;
+ std::vector<base::string16> message_details_strings;
+ CoalesceWarningMessages(permissions,
Marc Treib 2015/03/09 14:08:02 Before, we'd coalesce the warnings, but not their
Yoyo Zhou 2015/03/11 01:33:23 Is there a test for this case?
Marc Treib 2015/03/11 13:08:52 Not yet. I'll pull this part out into a separate C
+ extension_type,
+ &message_strings,
+ &message_details_strings);
+ return message_details_strings;
}
bool ChromePermissionMessageProvider::IsPrivilegeIncrease(
@@ -321,7 +226,7 @@ bool ChromePermissionMessageProvider::IsPrivilegeIncrease(
if (IsHostPrivilegeIncrease(old_permissions, new_permissions, extension_type))
return true;
- if (IsAPIPrivilegeIncrease(old_permissions, new_permissions))
+ if (IsAPIPrivilegeIncrease(old_permissions, new_permissions, extension_type))
return true;
if (IsManifestPermissionPrivilegeIncrease(old_permissions, new_permissions))
@@ -334,7 +239,7 @@ PermissionIDSet ChromePermissionMessageProvider::GetAllPermissionIDs(
const PermissionSet* permissions,
Manifest::Type extension_type) const {
PermissionIDSet permission_ids;
- GetAPIPermissionMessages(permissions, &permission_ids);
+ GetAPIPermissionMessages(permissions, &permission_ids, extension_type);
GetManifestPermissionMessages(permissions, &permission_ids);
GetHostPermissionMessages(permissions, &permission_ids, extension_type);
return permission_ids;
@@ -343,7 +248,8 @@ PermissionIDSet ChromePermissionMessageProvider::GetAllPermissionIDs(
std::set<PermissionMessage>
ChromePermissionMessageProvider::GetAPIPermissionMessages(
const PermissionSet* permissions,
- PermissionIDSet* permission_ids) const {
+ PermissionIDSet* permission_ids,
+ Manifest::Type extension_type) const {
PermissionMsgSet messages;
for (APIPermissionSet::const_iterator permission_it =
permissions->apis().begin();
@@ -362,7 +268,8 @@ ChromePermissionMessageProvider::GetAPIPermissionMessages(
// display only the "<all_urls>" warning message if both permissions
// are required.
if (permissions->ShouldWarnAllHosts()) {
- if (permission_ids != NULL)
+ // Platform apps don't show hosts warnings. See crbug.com/255229.
+ if (permission_ids != NULL && extension_type != Manifest::TYPE_PLATFORM_APP)
Marc Treib 2015/03/09 14:08:02 Platform apps never show the "all urls" warning in
permission_ids->insert(APIPermission::kHostsAll);
messages.erase(
PermissionMessage(
@@ -432,16 +339,131 @@ ChromePermissionMessageProvider::GetHostPermissionMessages(
return messages;
}
+void ChromePermissionMessageProvider::CoalesceWarningMessages(
+ const PermissionSet* permissions,
+ Manifest::Type extension_type,
+ std::vector<base::string16>* message_strings,
+ std::vector<base::string16>* message_details_strings) const {
+ PermissionMessages messages =
+ GetPermissionMessages(permissions, extension_type);
+
+ // WARNING: When modifying a coalescing rule in this list, be sure to also
+ // modify the corresponding rule in
+ // ChromePermissionMessageProvider::GetCoalescedPermissionMessages().
+ // TODO(sashab): Deprecate this function, and remove this list.
+ for (PermissionMessages::const_iterator i = messages.begin();
+ i != messages.end(); ++i) {
+ int id = i->id();
+ // Access to users' devices should provide a single warning message
+ // specifying the transport method used; serial and/or Bluetooth.
+ if (id == PermissionMessage::kBluetooth ||
+ id == PermissionMessage::kSerial) {
+ if (ContainsMessages(messages,
+ PermissionMessage::kBluetooth,
+ PermissionMessage::kSerial)) {
+ if (id == PermissionMessage::kBluetooth) {
+ message_strings->push_back(l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL));
+ message_details_strings->push_back(base::string16());
+ }
+ continue;
+ }
+ }
+ if (id == PermissionMessage::kAccessibilityFeaturesModify ||
+ id == PermissionMessage::kAccessibilityFeaturesRead) {
+ if (ContainsMessages(messages,
+ PermissionMessage::kAccessibilityFeaturesModify,
+ PermissionMessage::kAccessibilityFeaturesRead)) {
+ if (id == PermissionMessage::kAccessibilityFeaturesModify) {
+ message_strings->push_back(l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ_MODIFY));
+ message_details_strings->push_back(base::string16());
+ }
+ continue;
+ }
+ }
+ if (id == PermissionMessage::kAudioCapture ||
+ id == PermissionMessage::kVideoCapture) {
+ if (ContainsMessages(messages,
+ PermissionMessage::kAudioCapture,
+ PermissionMessage::kVideoCapture)) {
+ if (id == PermissionMessage::kAudioCapture) {
+ message_strings->push_back(l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_AUDIO_AND_VIDEO_CAPTURE));
+ message_details_strings->push_back(base::string16());
+ }
+ continue;
+ }
+ }
+ if (id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo ||
+ id == PermissionMessage::kMediaGalleriesAllGalleriesDelete ||
+ id == PermissionMessage::kMediaGalleriesAllGalleriesRead) {
+ if (ContainsMessages(
+ messages,
+ PermissionMessage::kMediaGalleriesAllGalleriesCopyTo,
+ PermissionMessage::kMediaGalleriesAllGalleriesDelete,
+ PermissionMessage::kMediaGalleriesAllGalleriesRead)) {
+ if (id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo) {
+ message_strings->push_back(l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE_DELETE));
+ message_details_strings->push_back(base::string16());
+ }
+ continue;
+ }
+ if (ContainsMessages(
+ messages,
+ PermissionMessage::kMediaGalleriesAllGalleriesCopyTo,
+ PermissionMessage::kMediaGalleriesAllGalleriesRead)) {
+ if (id == PermissionMessage::kMediaGalleriesAllGalleriesCopyTo) {
+ message_strings->push_back(l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE));
+ message_details_strings->push_back(base::string16());
+ }
+ continue;
+ }
+ if (ContainsMessages(
+ messages,
+ PermissionMessage::kMediaGalleriesAllGalleriesDelete,
+ PermissionMessage::kMediaGalleriesAllGalleriesRead)) {
+ if (id == PermissionMessage::kMediaGalleriesAllGalleriesDelete) {
+ message_strings->push_back(l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE));
+ message_details_strings->push_back(base::string16());
+ }
+ continue;
+ }
+ }
+ if (permissions->HasAPIPermission(APIPermission::kSessions) &&
+ id == PermissionMessage::kTabs) {
+ message_strings->push_back(l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS));
+ message_details_strings->push_back(base::string16());
+ continue;
+ }
+ if (permissions->HasAPIPermission(APIPermission::kSessions) &&
+ id == PermissionMessage::kBrowsingHistory) {
+ message_strings->push_back(l10n_util::GetStringUTF16(
+ IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS));
+ message_details_strings->push_back(base::string16());
+ continue;
+ }
+
+ message_strings->push_back(i->message());
+ message_details_strings->push_back(i->details());
+ }
+}
+
bool ChromePermissionMessageProvider::IsAPIPrivilegeIncrease(
const PermissionSet* old_permissions,
- const PermissionSet* new_permissions) const {
+ const PermissionSet* new_permissions,
+ Manifest::Type extension_type) const {
if (new_permissions == NULL)
return false;
PermissionMsgSet old_warnings =
- GetAPIPermissionMessages(old_permissions, NULL);
+ GetAPIPermissionMessages(old_permissions, NULL, extension_type);
PermissionMsgSet new_warnings =
- GetAPIPermissionMessages(new_permissions, NULL);
+ GetAPIPermissionMessages(new_permissions, NULL, extension_type);
PermissionMsgSet delta_warnings =
base::STLSetDifference<PermissionMsgSet>(new_warnings, old_warnings);

Powered by Google App Engine
This is Rietveld 408576698