Index: chrome/browser/ui/android/website_settings_popup_android.cc |
diff --git a/chrome/browser/ui/android/website_settings_popup_android.cc b/chrome/browser/ui/android/website_settings_popup_android.cc |
index aecef2eb3f6dc7286017b7c66e736eb636ac113d..327213027a08744d784fd8b25614c333e7f5ea98 100644 |
--- a/chrome/browser/ui/android/website_settings_popup_android.cc |
+++ b/chrome/browser/ui/android/website_settings_popup_android.cc |
@@ -11,12 +11,14 @@ |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/website_settings/website_settings.h" |
#include "chrome/browser/ui/website_settings/website_settings_ui.h" |
+#include "components/content_settings/core/common/content_settings.h" |
#include "components/content_settings/core/common/content_settings_types.h" |
#include "content/public/browser/browser_context.h" |
#include "content/public/browser/cert_store.h" |
#include "content/public/browser/navigation_controller.h" |
#include "content/public/browser/navigation_entry.h" |
#include "content/public/browser/web_contents.h" |
+#include "grit/generated_resources.h" |
#include "jni/WebsiteSettingsPopup_jni.h" |
#include "ui/base/l10n/l10n_util.h" |
@@ -65,6 +67,16 @@ void WebsiteSettingsPopupAndroid::Destroy(JNIEnv* env, jobject obj) { |
delete this; |
} |
+void WebsiteSettingsPopupAndroid::OnPermissionSettingChanged(JNIEnv* env, |
+ jobject obj, |
+ jint type, |
+ jint setting) { |
+ ContentSettingsType content_setting_type = |
+ static_cast<ContentSettingsType>(type); |
+ ContentSetting content_setting = static_cast<ContentSetting>(setting); |
+ presenter_->OnSitePermissionChanged(content_setting_type, content_setting); |
+} |
+ |
void WebsiteSettingsPopupAndroid::SetIdentityInfo( |
const IdentityInfo& identity_info) { |
JNIEnv* env = base::android::AttachCurrentThread(); |
@@ -94,13 +106,20 @@ void WebsiteSettingsPopupAndroid::SetIdentityInfo( |
break; |
} |
- Java_WebsiteSettingsPopup_setURLTitle( |
+ int scheme_end_index = url_.scheme().size(); |
+ // The last index of the domain doesn't include the trailing slash. If the URL |
+ // is non-standard, just say the whole URL is the domain (e.g. about:blank). |
+ int domain_end_index = url_.IsStandard() |
+ ? url_.GetWithEmptyPath().spec().size() - 1 |
+ : url_.spec().size(); |
+ |
+ Java_WebsiteSettingsPopup_setURL( |
env, |
popup_jobject_.obj(), |
- ConvertUTF8ToJavaString(env, url_.scheme()).obj(), |
- ConvertUTF8ToJavaString(env, url_.host()).obj(), |
- ConvertUTF8ToJavaString(env, url_.path()).obj(), |
- static_cast<jint>(connection_type)); |
+ ConvertUTF8ToJavaString(env, url_.spec()).obj(), |
+ static_cast<jint>(connection_type), |
+ static_cast<jint>(scheme_end_index), |
+ static_cast<jint>(domain_end_index)); |
Java_WebsiteSettingsPopup_setConnectionMessage( |
env, |
@@ -121,7 +140,43 @@ void WebsiteSettingsPopupAndroid::SetCookieInfo( |
void WebsiteSettingsPopupAndroid::SetPermissionInfo( |
const PermissionInfoList& permission_info_list) { |
- NOTIMPLEMENTED(); |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ |
+ // 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. |
+ std::vector<ContentSettingsType> permissions_to_display; |
+ permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_MEDIASTREAM); |
+ permissions_to_display.push_back(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
+ 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); |
+ |
+ std::map<ContentSettingsType, ContentSetting> |
+ user_specified_settings_to_display; |
+ |
+ for (const auto& permission : permission_info_list) { |
+ if (std::find(permissions_to_display.begin(), |
+ permissions_to_display.end(), |
+ permission.type) != permissions_to_display.end() && |
+ permission.setting != CONTENT_SETTING_DEFAULT) { |
+ user_specified_settings_to_display[permission.type] = permission.setting; |
+ } |
+ } |
+ |
+ for (const auto& permission : permissions_to_display) { |
+ if (ContainsKey(user_specified_settings_to_display, permission)) { |
+ base::string16 setting_title = |
+ WebsiteSettingsUI::PermissionTypeToUIString(permission); |
+ |
+ Java_WebsiteSettingsPopup_addPermissionSection( |
+ env, |
+ popup_jobject_.obj(), |
+ ConvertUTF16ToJavaString(env, setting_title).obj(), |
+ static_cast<jint>(permission), |
+ static_cast<jint>(user_specified_settings_to_display[permission])); |
+ } |
+ } |
} |
void WebsiteSettingsPopupAndroid::SetSelectedTab( |