Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java |
index 67cf2e5fa6dc5a5488397443820fca53cb51a2e1..090828545c934a7e87cf0e06a1949c0034914535 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java |
@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.ContentSettingsType; |
import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; |
import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
import org.chromium.chrome.browser.util.UrlUtilities; |
+import org.chromium.content_public.browser.WebContents; |
import java.net.URI; |
import java.util.ArrayList; |
@@ -52,6 +53,8 @@ public class SingleWebsitePreferences extends PreferenceFragment |
public static final String EXTRA_ORIGIN = "org.chromium.chrome.preferences.origin"; |
public static final String EXTRA_LOCATION = "org.chromium.chrome.preferences.location"; |
+ public static final String EXTRA_WEB_CONTENTS = "org.chromium.chrome.preferences.web_contents"; |
+ |
// Preference keys, see single_website_preferences.xml |
// Headings: |
public static final String PREF_SITE_TITLE = "site_title"; |
@@ -70,6 +73,7 @@ public class SingleWebsitePreferences extends PreferenceFragment |
public static final String PREF_COOKIES_PERMISSION = "cookies_permission_list"; |
public static final String PREF_FULLSCREEN_PERMISSION = "fullscreen_permission_list"; |
public static final String PREF_JAVASCRIPT_PERMISSION = "javascript_permission_list"; |
+ public static final String PREF_KEYGEN_PERMISSION = "keygen_permission_list"; |
public static final String PREF_LOCATION_ACCESS = "location_access_list"; |
public static final String PREF_MIC_CAPTURE_PERMISSION = "microphone_permission_list"; |
public static final String PREF_MIDI_SYSEX_PERMISSION = "midi_sysex_permission_list"; |
@@ -86,6 +90,7 @@ public class SingleWebsitePreferences extends PreferenceFragment |
PREF_COOKIES_PERMISSION, |
PREF_FULLSCREEN_PERMISSION, |
PREF_JAVASCRIPT_PERMISSION, |
+ PREF_KEYGEN_PERMISSION, |
PREF_LOCATION_ACCESS, |
PREF_MIC_CAPTURE_PERMISSION, |
PREF_MIDI_SYSEX_PERMISSION, |
@@ -102,6 +107,12 @@ public class SingleWebsitePreferences extends PreferenceFragment |
private class SingleWebsitePermissionsPopulator |
implements WebsitePermissionsFetcher.WebsitePermissionsCallback { |
+ private final WebContents mWebContents; |
+ |
+ public SingleWebsitePermissionsPopulator(WebContents webContents) { |
+ mWebContents = webContents; |
+ } |
+ |
@Override |
public void onWebsitePermissionsAvailable( |
Map<String, Set<Website>> sitesByOrigin, Map<String, Set<Website>> sitesByHost) { |
@@ -115,6 +126,14 @@ public class SingleWebsitePreferences extends PreferenceFragment |
allSites.addAll(sitesByHost.values()); |
// TODO(mvanouwerkerk): Avoid modifying the outer class from this inner class. |
mSite = mergePermissionInfoForTopLevelOrigin(mSiteAddress, allSites); |
+ |
+ // Display Keygen Content Setting if Keygen is blocked. |
+ if (mSite.getKeygenInfo() == null && mWebContents != null |
+ && WebsitePreferenceBridge.getKeygenBlocked(mWebContents)) { |
+ String origin = mSiteAddress.getOrigin(); |
+ mSite.setKeygenInfo(new KeygenInfo(origin, origin, false)); |
+ } |
+ |
displaySitePermissions(); |
} |
} |
@@ -145,14 +164,17 @@ public class SingleWebsitePreferences extends PreferenceFragment |
Object extraSite = getArguments().getSerializable(EXTRA_SITE); |
Object extraOrigin = getArguments().getSerializable(EXTRA_ORIGIN); |
+ getArguments().setClassLoader(WebContents.class.getClassLoader()); |
+ Object webContents = getArguments().get(EXTRA_WEB_CONTENTS); |
if (extraSite != null && extraOrigin == null) { |
mSite = (Website) extraSite; |
displaySitePermissions(); |
} else if (extraOrigin != null && extraSite == null) { |
mSiteAddress = WebsiteAddress.create((String) extraOrigin); |
- WebsitePermissionsFetcher fetcher = |
- new WebsitePermissionsFetcher(new SingleWebsitePermissionsPopulator()); |
+ WebsitePermissionsFetcher fetcher; |
+ fetcher = new WebsitePermissionsFetcher( |
+ new SingleWebsitePermissionsPopulator((WebContents) webContents)); |
fetcher.fetchAllPreferences(); |
} else { |
assert false : "Exactly one of EXTRA_SITE or EXTRA_SITE_ADDRESS must be provided."; |
@@ -193,6 +215,10 @@ public class SingleWebsitePreferences extends PreferenceFragment |
&& permissionInfoIsForTopLevelOrigin(other.getGeolocationInfo(), origin)) { |
merged.setGeolocationInfo(other.getGeolocationInfo()); |
} |
+ if (merged.getKeygenInfo() == null && other.getKeygenInfo() != null |
+ && permissionInfoIsForTopLevelOrigin(other.getKeygenInfo(), origin)) { |
+ merged.setKeygenInfo(other.getKeygenInfo()); |
+ } |
if (merged.getMidiInfo() == null && other.getMidiInfo() != null |
&& permissionInfoIsForTopLevelOrigin(other.getMidiInfo(), origin)) { |
merged.setMidiInfo(other.getMidiInfo()); |
@@ -284,6 +310,8 @@ public class SingleWebsitePreferences extends PreferenceFragment |
setUpListPreference(preference, mSite.getFullscreenPermission()); |
} else if (PREF_JAVASCRIPT_PERMISSION.equals(preference.getKey())) { |
setUpListPreference(preference, mSite.getJavaScriptPermission()); |
+ } else if (PREF_KEYGEN_PERMISSION.equals(preference.getKey())) { |
+ setUpListPreference(preference, mSite.getKeygenPermission()); |
} else if (PREF_LOCATION_ACCESS.equals(preference.getKey())) { |
setUpLocationPreference(preference); |
} else if (PREF_MIC_CAPTURE_PERMISSION.equals(preference.getKey())) { |
@@ -508,6 +536,8 @@ public class SingleWebsitePreferences extends PreferenceFragment |
return ContentSettingsType.CONTENT_SETTINGS_TYPE_FULLSCREEN; |
case PREF_JAVASCRIPT_PERMISSION: |
return ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT; |
+ case PREF_KEYGEN_PERMISSION: |
+ return ContentSettingsType.CONTENT_SETTINGS_TYPE_KEYGEN; |
case PREF_LOCATION_ACCESS: |
return ContentSettingsType.CONTENT_SETTINGS_TYPE_GEOLOCATION; |
case PREF_MIC_CAPTURE_PERMISSION: |
@@ -566,6 +596,8 @@ public class SingleWebsitePreferences extends PreferenceFragment |
mSite.setFullscreenPermission(permission); |
} else if (PREF_JAVASCRIPT_PERMISSION.equals(preference.getKey())) { |
mSite.setJavaScriptPermission(permission); |
+ } else if (PREF_KEYGEN_PERMISSION.equals(preference.getKey())) { |
+ mSite.setKeygenPermission(permission); |
} else if (PREF_LOCATION_ACCESS.equals(preference.getKey())) { |
mSite.setGeolocationPermission(permission); |
} else if (PREF_MIC_CAPTURE_PERMISSION.equals(preference.getKey())) { |
@@ -618,6 +650,7 @@ public class SingleWebsitePreferences extends PreferenceFragment |
mSite.setFullscreenPermission(ContentSetting.DEFAULT); |
mSite.setGeolocationPermission(ContentSetting.DEFAULT); |
mSite.setJavaScriptPermission(ContentSetting.DEFAULT); |
+ mSite.setKeygenPermission(ContentSetting.DEFAULT); |
mSite.setMicrophonePermission(ContentSetting.DEFAULT); |
mSite.setMidiPermission(ContentSetting.DEFAULT); |
mSite.setPopupPermission(ContentSetting.DEFAULT); |