| 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) {
|
|
|