| 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,
|
| + 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)
|
| 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);
|
|
|
|
|