Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3408)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java

Issue 1084423002: Split Camera and Mic into two permissions on the Site Details page (under Site Settings). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 807fb6e23162617af36407926fc5a448efdfd17d..31bd7c056e943f05e2eed2ea75b0ad16b174b1fa 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
@@ -52,33 +52,34 @@ public class SingleWebsitePreferences extends PreferenceFragment
// Buttons:
public static final String PREF_RESET_SITE = "reset_site_button";
// Website permissions (if adding new, see hasPermissionsPreferences and resetSite below):
+ public static final String PREF_CAMERA_CAPTURE_PERMISSION = "camera_permission_list";
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_IMAGES_PERMISSION = "images_permission_list";
public static final String PREF_JAVASCRIPT_PERMISSION = "javascript_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";
public static final String PREF_POPUP_PERMISSION = "popup_permission_list";
public static final String PREF_PROTECTED_MEDIA_IDENTIFIER_PERMISSION =
"protected_media_identifier_permission_list";
public static final String PREF_PUSH_NOTIFICATIONS_PERMISSION =
"push_notifications_list";
- public static final String PREF_VOICE_AND_VIDEO_CAPTURE_PERMISSION =
- "voice_and_video_capture_permission_list";
// All permissions from the permissions preference category must be listed here.
// TODO(mvanouwerkerk): Use this array in more places to reduce verbosity.
private static final String[] PERMISSION_PREFERENCE_KEYS = {
+ PREF_CAMERA_CAPTURE_PERMISSION,
PREF_COOKIES_PERMISSION,
PREF_FULLSCREEN_PERMISSION,
PREF_IMAGES_PERMISSION,
PREF_JAVASCRIPT_PERMISSION,
PREF_LOCATION_ACCESS,
+ PREF_MIC_CAPTURE_PERMISSION,
PREF_MIDI_SYSEX_PERMISSION,
PREF_POPUP_PERMISSION,
PREF_PROTECTED_MEDIA_IDENTIFIER_PERMISSION,
PREF_PUSH_NOTIFICATIONS_PERMISSION,
- PREF_VOICE_AND_VIDEO_CAPTURE_PERMISSION
};
// The website this page is displaying details about.
@@ -195,13 +196,18 @@ public class SingleWebsitePreferences extends PreferenceFragment
other.getPushNotificationInfo(), origin)) {
merged.setPushNotificationInfo(other.getPushNotificationInfo());
}
- if (merged.getVoiceAndVideoCaptureInfo() == null
- && other.getVoiceAndVideoCaptureInfo() != null) {
- if (origin.equals(other.getVoiceAndVideoCaptureInfo().getOrigin())
- && (origin.equals(other.getVoiceAndVideoCaptureInfo().getEmbedderSafe())
- || "*".equals(other.getVoiceAndVideoCaptureInfo()
- .getEmbedderSafe()))) {
- merged.setVoiceAndVideoCaptureInfo(other.getVoiceAndVideoCaptureInfo());
+ if (merged.getCameraInfo() == null && other.getCameraInfo() != null) {
+ if (origin.equals(other.getCameraInfo().getOrigin())
+ && (origin.equals(other.getCameraInfo().getEmbedderSafe())
+ || "*".equals(other.getCameraInfo().getEmbedderSafe()))) {
+ merged.setCameraInfo(other.getCameraInfo());
+ }
+ }
+ if (merged.getMicrophoneInfo() == null && other.getMicrophoneInfo() != null) {
+ if (origin.equals(other.getMicrophoneInfo().getOrigin())
+ && (origin.equals(other.getMicrophoneInfo().getEmbedderSafe())
+ || "*".equals(other.getMicrophoneInfo().getEmbedderSafe()))) {
+ merged.setMicrophoneInfo(other.getMicrophoneInfo());
}
}
if (merged.getLocalStorageInfo() == null
@@ -259,6 +265,8 @@ public class SingleWebsitePreferences extends PreferenceFragment
}
} else if (PREF_RESET_SITE.equals(preference.getKey())) {
preference.setOnPreferenceClickListener(this);
+ } else if (PREF_CAMERA_CAPTURE_PERMISSION.equals(preference.getKey())) {
+ setUpListPreference(preference, mSite.getCameraPermission());
} else if (PREF_COOKIES_PERMISSION.equals(preference.getKey())) {
setUpListPreference(preference, mSite.getCookiePermission());
} else if (PREF_FULLSCREEN_PERMISSION.equals(preference.getKey())) {
@@ -269,6 +277,8 @@ public class SingleWebsitePreferences extends PreferenceFragment
setUpListPreference(preference, mSite.getJavaScriptPermission());
} else if (PREF_LOCATION_ACCESS.equals(preference.getKey())) {
setUpListPreference(preference, mSite.getGeolocationPermission());
+ } else if (PREF_MIC_CAPTURE_PERMISSION.equals(preference.getKey())) {
+ setUpListPreference(preference, mSite.getMicrophonePermission());
} else if (PREF_MIDI_SYSEX_PERMISSION.equals(preference.getKey())) {
setUpListPreference(preference, mSite.getMidiPermission());
} else if (PREF_POPUP_PERMISSION.equals(preference.getKey())) {
@@ -277,8 +287,6 @@ public class SingleWebsitePreferences extends PreferenceFragment
setUpListPreference(preference, mSite.getProtectedMediaIdentifierPermission());
} else if (PREF_PUSH_NOTIFICATIONS_PERMISSION.equals(preference.getKey())) {
setUpListPreference(preference, mSite.getPushNotificationPermission());
- } else if (PREF_VOICE_AND_VIDEO_CAPTURE_PERMISSION.equals(preference.getKey())) {
- configureVoiceAndVideoPreference(preference);
}
}
@@ -346,6 +354,8 @@ public class SingleWebsitePreferences extends PreferenceFragment
private int getContentSettingsTypeFromPreferenceKey(String preferenceKey) {
switch (preferenceKey) {
+ case PREF_CAMERA_CAPTURE_PERMISSION:
+ return ContentSettingsType.CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA;
case PREF_COOKIES_PERMISSION:
return ContentSettingsType.CONTENT_SETTINGS_TYPE_COOKIES;
case PREF_FULLSCREEN_PERMISSION:
@@ -356,6 +366,8 @@ public class SingleWebsitePreferences extends PreferenceFragment
return ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT;
case PREF_LOCATION_ACCESS:
return ContentSettingsType.CONTENT_SETTINGS_TYPE_GEOLOCATION;
+ case PREF_MIC_CAPTURE_PERMISSION:
+ return ContentSettingsType.CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC;
case PREF_MIDI_SYSEX_PERMISSION:
return ContentSettingsType.CONTENT_SETTINGS_TYPE_MIDI_SYSEX;
case PREF_POPUP_PERMISSION:
@@ -364,53 +376,11 @@ public class SingleWebsitePreferences extends PreferenceFragment
return ContentSettingsType.CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER;
case PREF_PUSH_NOTIFICATIONS_PERMISSION:
return ContentSettingsType.CONTENT_SETTINGS_TYPE_NOTIFICATIONS;
- case PREF_VOICE_AND_VIDEO_CAPTURE_PERMISSION:
- return ContentSettingsType.CONTENT_SETTINGS_TYPE_MEDIASTREAM;
default:
return 0;
}
}
- /**
- * Based on the type of media allowed or denied for this website, the title and summary
- * of the CheckBoxPreference will change. If this website has no media related permission, then
- * the preference will be removed.
- * @param preference CheckboxPreference whose title and summary will be set.
- */
- private void configureVoiceAndVideoPreference(Preference preference) {
- ContentSetting voice = mSite.getVoiceCapturePermission();
- ContentSetting video = mSite.getVideoCapturePermission();
- if (voice == null && video == null) {
- getPreferenceScreen().removePreference(preference);
- return;
- }
-
- int mediaAccessType = mSite.getMediaAccessType();
- switch (mediaAccessType) {
- case Website.CAMERA_ACCESS_ALLOWED:
- case Website.CAMERA_ACCESS_DENIED:
- preference.setTitle(R.string.video_permission_title);
- break;
- case Website.MICROPHONE_ACCESS_ALLOWED:
- case Website.MICROPHONE_ACCESS_DENIED:
- preference.setTitle(R.string.voice_permission_title);
- break;
- case Website.MICROPHONE_AND_CAMERA_ACCESS_ALLOWED:
- case Website.MICROPHONE_AND_CAMERA_ACCESS_DENIED:
- preference.setTitle(R.string.voice_and_video_permission_title);
- break;
- case Website.INVALID_CAMERA_OR_MICROPHONE_ACCESS:
- default:
- getPreferenceScreen().removePreference(preference);
- }
- setUpListPreference(
- preference, mediaAccessType == Website.CAMERA_ACCESS_ALLOWED
- || mediaAccessType == Website.MICROPHONE_ACCESS_ALLOWED
- || mediaAccessType == Website.MICROPHONE_AND_CAMERA_ACCESS_ALLOWED
- ? ContentSetting.ALLOW :
- ContentSetting.BLOCK);
- }
-
@Override
public void onClick(DialogInterface dialog, int which) {
clearStoredData();
@@ -439,46 +409,13 @@ public class SingleWebsitePreferences extends PreferenceFragment
}
}
- private void setVoiceAndVideoCaptureSetting(ContentSetting value) {
- int mediaAccessType = mSite.getMediaAccessType();
- if (value == ContentSetting.ALLOW) {
- switch (mediaAccessType) {
- case Website.CAMERA_ACCESS_DENIED:
- mSite.setVideoCapturePermission(ContentSetting.ALLOW);
- break;
- case Website.MICROPHONE_ACCESS_DENIED:
- mSite.setVoiceCapturePermission(ContentSetting.ALLOW);
- break;
- case Website.MICROPHONE_AND_CAMERA_ACCESS_DENIED:
- mSite.setVideoCapturePermission(ContentSetting.ALLOW);
- mSite.setVoiceCapturePermission(ContentSetting.ALLOW);
- break;
- default:
- assert false;
- }
- } else {
- switch (mediaAccessType) {
- case Website.CAMERA_ACCESS_ALLOWED:
- mSite.setVideoCapturePermission(ContentSetting.BLOCK);
- break;
- case Website.MICROPHONE_ACCESS_ALLOWED:
- mSite.setVoiceCapturePermission(ContentSetting.BLOCK);
- break;
- case Website.MICROPHONE_AND_CAMERA_ACCESS_ALLOWED:
- mSite.setVideoCapturePermission(ContentSetting.BLOCK);
- mSite.setVoiceCapturePermission(ContentSetting.BLOCK);
- break;
- default:
- assert false;
- }
- }
- }
-
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
ContentSetting permission =
ContentSetting.fromString((String) newValue);
- if (PREF_COOKIES_PERMISSION.equals(preference.getKey())) {
+ if (PREF_CAMERA_CAPTURE_PERMISSION.equals(preference.getKey())) {
+ mSite.setCameraPermission(permission);
+ } else if (PREF_COOKIES_PERMISSION.equals(preference.getKey())) {
mSite.setCookiePermission(permission);
} else if (PREF_FULLSCREEN_PERMISSION.equals(preference.getKey())) {
mSite.setFullscreenPermission(permission);
@@ -488,6 +425,8 @@ public class SingleWebsitePreferences extends PreferenceFragment
mSite.setJavaScriptPermission(permission);
} else if (PREF_LOCATION_ACCESS.equals(preference.getKey())) {
mSite.setGeolocationPermission(permission);
+ } else if (PREF_MIC_CAPTURE_PERMISSION.equals(preference.getKey())) {
+ mSite.setMicrophonePermission(permission);
} else if (PREF_MIDI_SYSEX_PERMISSION.equals(preference.getKey())) {
mSite.setMidiPermission(permission);
} else if (PREF_POPUP_PERMISSION.equals(preference.getKey())) {
@@ -496,8 +435,6 @@ public class SingleWebsitePreferences extends PreferenceFragment
mSite.setProtectedMediaIdentifierPermission(permission);
} else if (PREF_PUSH_NOTIFICATIONS_PERMISSION.equals(preference.getKey())) {
mSite.setPushNotificationPermission(permission);
- } else if (PREF_VOICE_AND_VIDEO_CAPTURE_PERMISSION.equals(preference.getKey())) {
- setVoiceAndVideoCaptureSetting(permission);
} else {
return true;
}
@@ -536,18 +473,18 @@ public class SingleWebsitePreferences extends PreferenceFragment
}
// Clear the permissions.
+ mSite.setCameraPermission(null);
mSite.setCookiePermission(null);
WebsitePreferenceBridge.nativeClearCookieData(mSite.getAddress().getOrigin());
mSite.setFullscreenPermission(null);
mSite.setGeolocationPermission(null);
mSite.setImagesPermission(null);
mSite.setJavaScriptPermission(null);
+ mSite.setMicrophonePermission(null);
mSite.setMidiPermission(null);
mSite.setPopupPermission(null);
mSite.setProtectedMediaIdentifierPermission(null);
mSite.setPushNotificationPermission(null);
- mSite.setVideoCapturePermission(null);
- mSite.setVoiceCapturePermission(null);
// Clear the storage and finish the activity if necessary.
if (mSite.getTotalUsage() > 0) {

Powered by Google App Engine
This is Rietveld 408576698