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

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

Issue 2170123002: Reland: Add USB device permissions to individual site settings on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Resolved merge conflict. Created 4 years, 5 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 bca422efd87c0f80d3702fa7b0c8fc3c3a3c887a..88a2a1ae6bfb233125e6db3d2e2f87bad5018ed5 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
@@ -29,7 +29,10 @@ import org.chromium.chrome.browser.util.UrlUtilities;
import org.chromium.content_public.browser.WebContents;
import java.net.URI;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
/**
* Shows the permissions and other settings for a particular website.
@@ -49,6 +52,7 @@ public class SingleWebsitePreferences extends PreferenceFragment
public static final String EXTRA_LOCATION = "org.chromium.chrome.preferences.location";
public static final String EXTRA_WEB_CONTENTS = "org.chromium.chrome.preferences.web_contents";
+ public static final String EXTRA_USB_INFO = "org.chromium.chrome.preferences.usb_info";
// Preference keys, see single_website_preferences.xml
// Headings:
@@ -103,6 +107,9 @@ public class SingleWebsitePreferences extends PreferenceFragment
// The address of the site we want to display. Used only if EXTRA_ADDRESS is provided.
private WebsiteAddress mSiteAddress;
+ // The number of USB device permissions displayed.
+ private int mUsbPermissionCount;
+
private class SingleWebsitePermissionsPopulator
implements WebsitePermissionsFetcher.WebsitePermissionsCallback {
private final WebContents mWebContents;
@@ -242,6 +249,9 @@ public class SingleWebsitePreferences extends PreferenceFragment
merged.addStorageInfo(storageInfo);
}
}
+ for (UsbInfo usbInfo : other.getUsbInfo()) {
+ if (origin.equals(usbInfo.getOrigin())) merged.addUsbInfo(usbInfo);
+ }
// TODO(mvanouwerkerk): Make the various info types share a common interface that
// supports reading the origin or host.
@@ -266,6 +276,9 @@ public class SingleWebsitePreferences extends PreferenceFragment
private void displaySitePermissions() {
addPreferencesFromResource(R.xml.single_website_preferences);
+ Set<String> permissionPreferenceKeys =
+ new HashSet<>(Arrays.asList(PERMISSION_PREFERENCE_KEYS));
+ int maxPermissionOrder = 0;
ListAdapter preferences = getPreferenceScreen().getRootAdapter();
for (int i = 0; i < preferences.getCount(); ++i) {
Preference preference = (Preference) preferences.getItem(i);
@@ -312,6 +325,22 @@ public class SingleWebsitePreferences extends PreferenceFragment
} else if (PREF_PROTECTED_MEDIA_IDENTIFIER_PERMISSION.equals(preference.getKey())) {
setUpListPreference(preference, mSite.getProtectedMediaIdentifierPermission());
}
+
+ if (permissionPreferenceKeys.contains(preference.getKey())) {
+ maxPermissionOrder = Math.max(maxPermissionOrder, preference.getOrder());
+ }
+ }
+
+ for (UsbInfo info : mSite.getUsbInfo()) {
+ Preference preference = new Preference(getActivity());
+ preference.getExtras().putSerializable(EXTRA_USB_INFO, info);
+ preference.setIcon(R.drawable.settings_usb);
+ preference.setOnPreferenceClickListener(this);
+ preference.setOrder(maxPermissionOrder++);
+ preference.setTitle(info.getName());
+ preference.setWidgetLayoutResource(R.layout.usb_permission);
+ getPreferenceScreen().addPreference(preference);
+ mUsbPermissionCount++;
}
// Remove the 'permission is off in Android' message if not needed.
@@ -396,6 +425,7 @@ public class SingleWebsitePreferences extends PreferenceFragment
}
private boolean hasPermissionsPreferences() {
+ if (mUsbPermissionCount > 0) return true;
PreferenceScreen screen = getPreferenceScreen();
for (String key : PERMISSION_PREFERENCE_KEYS) {
if (screen.findPreference(key) != null) return true;
@@ -600,6 +630,23 @@ public class SingleWebsitePreferences extends PreferenceFragment
@Override
public boolean onPreferenceClick(Preference preference) {
+ Bundle extras = preference.peekExtras();
+ if (extras != null) {
+ UsbInfo usbInfo = (UsbInfo) extras.getSerializable(EXTRA_USB_INFO);
+ if (usbInfo != null) {
+ usbInfo.revoke();
+
+ PreferenceScreen preferenceScreen = getPreferenceScreen();
+ preferenceScreen.removePreference(preference);
+ mUsbPermissionCount--;
+ if (!hasPermissionsPreferences()) {
+ Preference heading = preferenceScreen.findPreference(PREF_PERMISSIONS);
+ preferenceScreen.removePreference(heading);
+ }
+ return true;
+ }
+ }
+
// Handle the Clear & Reset preference click by showing a confirmation.
new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme)
.setTitle(R.string.website_reset)
@@ -646,6 +693,7 @@ public class SingleWebsitePreferences extends PreferenceFragment
mSite.setNotificationPermission(ContentSetting.DEFAULT);
mSite.setPopupPermission(ContentSetting.DEFAULT);
mSite.setProtectedMediaIdentifierPermission(ContentSetting.DEFAULT);
+ for (UsbInfo info : mSite.getUsbInfo()) info.revoke();
// Clear the storage and finish the activity if necessary.
if (mSite.getTotalUsage() > 0) {

Powered by Google App Engine
This is Rietveld 408576698