Index: chrome/browser/ui/android/page_info/page_info_popup_android.cc |
diff --git a/chrome/browser/ui/android/page_info/page_info_popup_android.cc b/chrome/browser/ui/android/page_info/page_info_popup_android.cc |
index b46387fbf701f6a98a58ba79cd871015741c5b36..5a586ab9a45aadc3553daad417a1efa3b326e94f 100644 |
--- a/chrome/browser/ui/android/page_info/page_info_popup_android.cc |
+++ b/chrome/browser/ui/android/page_info/page_info_popup_android.cc |
@@ -108,6 +108,7 @@ void PageInfoPopupAndroid::SetPermissionInfo( |
// On Android, we only want to display a subset of the available options in a |
// particular order, but only if their value is different from the default. |
+ // This order comes from https://crbug.com/610358. |
std::vector<ContentSettingsType> permissions_to_display; |
permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_GEOLOCATION); |
permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA); |
@@ -116,26 +117,19 @@ void PageInfoPopupAndroid::SetPermissionInfo( |
permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_IMAGES); |
permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_JAVASCRIPT); |
permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_POPUPS); |
- permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_AUTOPLAY); |
permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER); |
+ permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_AUTOPLAY); |
std::map<ContentSettingsType, ContentSetting> |
user_specified_settings_to_display; |
for (const auto& permission : permission_info_list) { |
if (base::ContainsValue(permissions_to_display, permission.type)) { |
- if (permission.setting != CONTENT_SETTING_DEFAULT) { |
+ base::Optional<ContentSetting> setting_to_display = |
+ GetSettingToDisplay(permission); |
+ if (setting_to_display) { |
user_specified_settings_to_display[permission.type] = |
- permission.setting; |
- } else if (permission.type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { |
- if (search_geolocation_service_ && |
- search_geolocation_service_->UseDSEGeolocationSetting( |
- url::Origin(url_))) { |
- user_specified_settings_to_display[permission.type] = |
- search_geolocation_service_->GetDSEGeolocationSetting() |
- ? CONTENT_SETTING_ALLOW |
- : CONTENT_SETTING_BLOCK; |
- } |
+ *setting_to_display; |
} |
} |
} |
@@ -165,6 +159,32 @@ void PageInfoPopupAndroid::SetPermissionInfo( |
Java_PageInfoPopup_updatePermissionDisplay(env, popup_jobject_); |
} |
+base::Optional<ContentSetting> PageInfoPopupAndroid::GetSettingToDisplay( |
+ const PermissionInfo& permission) { |
+ // All permissions should be displayed if they are non-default. |
+ if (permission.setting != CONTENT_SETTING_DEFAULT) |
+ return permission.setting; |
+ |
+ // Handle exceptions for permissions which need to be displayed even if they |
+ // are set to the default. |
+ if (permission.type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { |
+ if (search_geolocation_service_ && |
+ search_geolocation_service_->UseDSEGeolocationSetting( |
+ url::Origin(url_))) { |
+ return search_geolocation_service_->GetDSEGeolocationSetting() |
+ ? CONTENT_SETTING_ALLOW |
+ : CONTENT_SETTING_BLOCK; |
+ } |
+ } else if (permission.type == CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER) { |
+ // The subresource filter permission should always display the default |
+ // setting if it is showing up in Page Info. Logic for whether the |
+ // setting should show up in Page Info is in ShouldShowPermission in |
+ // page_info.cc. |
+ return permission.default_setting; |
+ } |
+ return base::Optional<ContentSetting>(); |
+} |
+ |
// static |
bool PageInfoPopupAndroid::RegisterPageInfoPopupAndroid(JNIEnv* env) { |
return RegisterNativesImpl(env); |