Chromium Code Reviews| 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..1c130a81af60c7f967e8953e02d1e601d9a45d91 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 (auto android_permission : android_permissions) { |
|
tommi (sloooow) - chröme
2017/02/16 21:42:04
|const auto&| to avoid making copies
(please check
Ted C
2017/02/17 21:36:52
Done. I did a scan of the change and these two ar
|
| + if (!window_android->HasPermission(android_permission)) |
| + return true; |
| } |
| } |