| Index: chrome/browser/permissions/permission_update_infobar_delegate_android.cc
|
| diff --git a/chrome/browser/permissions/permission_update_infobar_delegate_android.cc b/chrome/browser/permissions/permission_update_infobar_delegate_android.cc
|
| index 47fb590c393f5de48f6fa46799597e5cdd370020..9161e3aa100ff4a3abd1bf1e0fff23a7659324b7 100644
|
| --- a/chrome/browser/permissions/permission_update_infobar_delegate_android.cc
|
| +++ b/chrome/browser/permissions/permission_update_infobar_delegate_android.cc
|
| @@ -36,33 +36,39 @@ infobars::InfoBar* PermissionUpdateInfoBarDelegate::Create(
|
| ui::WindowAndroid* window_android = cvc->GetWindowAndroid();
|
|
|
| std::vector<std::string> permissions;
|
| + int missing_permission_count = 0;
|
| int message_id = IDS_INFOBAR_MISSING_MULTIPLE_PERMISSIONS_TEXT;
|
|
|
| for (ContentSettingsType content_settings_type : content_settings_types) {
|
| - std::string android_permission =
|
| - PrefServiceBridge::GetAndroidPermissionForContentSetting(
|
| - content_settings_type);
|
| -
|
| - if (!android_permission.empty() &&
|
| - !window_android->HasPermission(android_permission)) {
|
| - permissions.push_back(android_permission);
|
| -
|
| - if (content_settings_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) {
|
| - message_id = IDS_INFOBAR_MISSING_LOCATION_PERMISSION_TEXT;
|
| + int previous_size = permissions.size();
|
| + PrefServiceBridge::GetAndroidPermissionsForContentSetting(
|
| + content_settings_type, &permissions);
|
| +
|
| + if (missing_permission_count > 1)
|
| + continue;
|
| +
|
| + for (auto it = permissions.begin() + previous_size; it != permissions.end();
|
| + ++it) {
|
| + if (window_android->HasPermission(*it))
|
| + continue;
|
| +
|
| + missing_permission_count++;
|
| + if (missing_permission_count > 1) {
|
| + message_id = IDS_INFOBAR_MISSING_MULTIPLE_PERMISSIONS_TEXT;
|
| + } else if (content_settings_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) {
|
| + message_id = IDS_INFOBAR_MISSING_LOCATION_PERMISSION_TEXT;
|
| } else if (content_settings_type ==
|
| CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC) {
|
| - message_id = IDS_INFOBAR_MISSING_MICROPHONE_PERMISSION_TEXT;
|
| + message_id = IDS_INFOBAR_MISSING_MICROPHONE_PERMISSION_TEXT;
|
| } else if (content_settings_type ==
|
| CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA) {
|
| - message_id = IDS_INFOBAR_MISSING_CAMERA_PERMISSION_TEXT;
|
| + message_id = IDS_INFOBAR_MISSING_CAMERA_PERMISSION_TEXT;
|
| } else {
|
| - NOTREACHED();
|
| - message_id = IDS_INFOBAR_MISSING_MULTIPLE_PERMISSIONS_TEXT;
|
| + NOTREACHED();
|
| + message_id = IDS_INFOBAR_MISSING_MULTIPLE_PERMISSIONS_TEXT;
|
| }
|
| }
|
| }
|
| - if (permissions.size() > 1)
|
| - message_id = IDS_INFOBAR_MISSING_MULTIPLE_PERMISSIONS_TEXT;
|
|
|
| return PermissionUpdateInfoBarDelegate::Create(
|
| web_contents, permissions, message_id, callback);
|
| @@ -101,13 +107,13 @@ bool PermissionUpdateInfoBarDelegate::ShouldShowPermissionInfobar(
|
| ui::WindowAndroid* window_android = cvc->GetWindowAndroid();
|
|
|
| for (ContentSettingsType content_settings_type : content_settings_types) {
|
| - std::string android_permission =
|
| - PrefServiceBridge::GetAndroidPermissionForContentSetting(
|
| - content_settings_type);
|
| + std::vector<std::string> android_permissions;
|
| + PrefServiceBridge::GetAndroidPermissionsForContentSetting(
|
| + content_settings_type, &android_permissions);
|
|
|
| - if (!android_permission.empty() &&
|
| - !window_android->HasPermission(android_permission)) {
|
| - return true;
|
| + for (const auto& android_permission : android_permissions) {
|
| + if (!window_android->HasPermission(android_permission))
|
| + return true;
|
| }
|
| }
|
|
|
|
|