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

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

Issue 927763003: Move website settings fetching from WebsitePreferences to new WebsitePermissionFetcher. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase on tot. Created 5 years, 10 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/WebsitePreferences.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/WebsitePreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/WebsitePreferences.java
index 070cd69eb1390b2e67446afd77419ffe3ccac0ee..41a9edaee4e3b54d9a363e71b4e1e132593dc5ef 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/WebsitePreferences.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/WebsitePreferences.java
@@ -37,9 +37,7 @@
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -56,13 +54,6 @@
public static final String EXTRA_CATEGORY = "category";
public static final String EXTRA_TITLE = "title";
- // This is a 0..1 <--> 1..N mapping between origin and Website.
- private final Map<String, Set<Website>> mSitesByOrigin =
- new HashMap<String, Set<Website>>();
- // This is a 1 <--> 1..N mapping between host and Website.
- private final Map<String, Set<Website>> mSitesByHost =
- new HashMap<String, Set<Website>>();
-
// The view to show when the list is empty.
private TextView mEmptyView;
// The view for searching the list of items.
@@ -92,198 +83,9 @@
private static final String ALLOWED_GROUP = "allowed_group";
private static final String BLOCKED_GROUP = "blocked_group";
- // It is required that features fetching is serialized, as we need to have
- // all origins in place prior to populating hosts.
- private interface Task {
- void run(TaskQueue queue);
- }
-
- private static class TaskQueue extends LinkedList<Task> {
- void next() {
- if (!isEmpty()) removeFirst().run(this);
- }
- }
-
private void getInfoForOrigins() {
- mSitesByOrigin.clear();
- mSitesByHost.clear();
- // Populate features from more specific to less specific.
- // Geolocation lookup permission is per-origin and per-embedder.
- TaskQueue queue = new TaskQueue();
- if (mFilter.showAllSites(mCategoryFilter)) {
- queue.add(new GeolocationInfoFetcher());
- // Midi sysex access permission is per-origin and per-embedder.
- queue.add(new MidiInfoFetcher());
- // Cookies are stored per-origin.
- queue.add(new CookieInfoFetcher());
- // Local storage info is per-origin.
- queue.add(new LocalStorageInfoFetcher());
- // Website storage is per-host.
- queue.add(new WebStorageInfoFetcher());
- // Popup exceptions are host-based patterns (unless we start
- // synchronizing popup exceptions with desktop Chrome.)
- queue.add(new PopupExceptionInfoFetcher());
- // Protected media identifier permission is per-origin and per-embedder.
- queue.add(new ProtectedMediaIdentifierInfoFetcher());
- if (ContentPreferences.pushNotificationsSupported()) {
- // Push notification permission is per-origin and per-embedder.
- queue.add(new PushNotificationInfoFetcher());
- }
- // Voice and Video capture permission is per-origin and per-embedder.
- queue.add(new VoiceAndVideoCaptureInfoFetcher());
- } else if (mFilter.showGeolocationSites(mCategoryFilter)) {
- queue.add(new GeolocationInfoFetcher());
- } else if (mFilter.showCookiesSites(mCategoryFilter)) {
- queue.add(new CookieInfoFetcher());
- } else if (mFilter.showStorageSites(mCategoryFilter)) {
- queue.add(new LocalStorageInfoFetcher());
- } else if (mFilter.showCameraMicSites(mCategoryFilter)) {
- queue.add(new VoiceAndVideoCaptureInfoFetcher());
- } else if (mFilter.showPopupSites(mCategoryFilter)) {
- queue.add(new PopupExceptionInfoFetcher());
- } else if (mFilter.showPushNotificationsSites(mCategoryFilter)) {
- queue.add(new PushNotificationInfoFetcher());
- }
- queue.add(new ResultsPopulator());
- queue.next();
- }
-
- private class GeolocationInfoFetcher implements Task {
- @Override
- public void run(TaskQueue queue) {
- for (GeolocationInfo info : WebsitePreferenceBridge.getGeolocationInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOrigin(address).setGeolocationInfo(info);
- }
- queue.next();
- }
- }
-
- private class MidiInfoFetcher implements Task {
- @Override
- public void run(TaskQueue queue) {
- for (MidiInfo info : WebsitePreferenceBridge.getMidiInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOrigin(address).setMidiInfo(info);
- }
- queue.next();
- }
- }
-
- private class PopupExceptionInfoFetcher implements Task {
- @Override
- public void run(TaskQueue queue) {
- for (PopupExceptionInfo info : WebsitePreferenceBridge.getPopupExceptionInfo()) {
- // The pattern "*" represents the default setting, not a specific website.
- if (info.getPattern().equals("*")) continue;
- WebsiteAddress address = WebsiteAddress.create(info.getPattern());
- if (address == null) continue;
- Set<Website> sites = findOrCreateSitesByHost(address);
- for (Website site : sites) {
- site.setPopupExceptionInfo(info);
- }
- }
- queue.next();
- }
- }
-
- private class CookieInfoFetcher implements Task {
- @Override
- public void run(TaskQueue queue) {
- for (CookieInfo info : WebsitePreferenceBridge.getCookieInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOrigin(address).setCookieInfo(info);
- }
- queue.next();
- }
- }
-
- private class LocalStorageInfoFetcher implements Task {
- @Override
- public void run(final TaskQueue queue) {
- WebsitePreferenceBridge.fetchLocalStorageInfo(
- new WebsitePreferenceBridge.LocalStorageInfoReadyCallback() {
- @SuppressWarnings("unchecked")
- @Override
- public void onLocalStorageInfoReady(HashMap map) {
- for (Object o : map.entrySet()) {
- Map.Entry<String, LocalStorageInfo> entry =
- (Map.Entry<String, LocalStorageInfo>) o;
- WebsiteAddress address = WebsiteAddress.create(entry.getKey());
- if (address == null) continue;
- Set<Website> sites = findOrCreateSitesByOrigin(address);
- for (Website site : sites) {
- site.setLocalStorageInfo(entry.getValue());
- }
- }
- queue.next();
- }
- });
- }
- }
-
- private class WebStorageInfoFetcher implements Task {
- @Override
- public void run(final TaskQueue queue) {
- WebsitePreferenceBridge.fetchStorageInfo(
- new WebsitePreferenceBridge.StorageInfoReadyCallback() {
- @SuppressWarnings("unchecked")
- @Override
- public void onStorageInfoReady(ArrayList array) {
- ArrayList<StorageInfo> infoArray = array;
- for (StorageInfo info : infoArray) {
- WebsiteAddress address = WebsiteAddress.create(info.getHost());
- if (address == null) continue;
- Set<Website> sites = findOrCreateSitesByHost(address);
- for (Website site : sites) {
- site.addStorageInfo(info);
- }
- }
- queue.next();
- }
- });
- }
- }
-
- private class ProtectedMediaIdentifierInfoFetcher implements Task {
- @Override
- public void run(TaskQueue queue) {
- for (ProtectedMediaIdentifierInfo info :
- WebsitePreferenceBridge.getProtectedMediaIdentifierInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOrigin(address).setProtectedMediaIdentifierInfo(info);
- }
- queue.next();
- }
- }
-
- private class PushNotificationInfoFetcher implements Task {
- @Override
- public void run(TaskQueue queue) {
- for (PushNotificationInfo info : WebsitePreferenceBridge.getPushNotificationInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOrigin(address).setPushNotificationInfo(info);
- }
- queue.next();
- }
- }
-
- private class VoiceAndVideoCaptureInfoFetcher implements Task {
- @Override
- public void run(TaskQueue queue) {
- for (VoiceAndVideoCaptureInfo info :
- WebsitePreferenceBridge.getVoiceAndVideoCaptureInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOrigin(address).setVoiceAndVideoCaptureInfo(info);
- }
- queue.next();
- }
+ WebsitePermissionsFetcher fetcher = new WebsitePermissionsFetcher(new ResultsPopulator());
+ fetcher.fetchPreferencesWithFilter(mCategoryFilter);
}
private void displayEmptyScreenMessage() {
@@ -292,21 +94,18 @@ private void displayEmptyScreenMessage() {
}
}
- private class ResultsPopulator implements Task {
+ private class ResultsPopulator implements WebsitePermissionsFetcher.WebsitePermissionsCallback {
@Override
- public void run(TaskQueue queue) {
- // Although a preferences fragment should normally be bound to an
- // activity, crash reports suggest that this isn't always true.
- // Preferences can't be instantiated without a context, so we are
- // bailing out.
- if (getActivity() == null) {
- queue.next();
- return;
- }
+ public void onWebsitePermissionsAvailable(
+ Map<String, Set<Website>> sitesByOrigin, Map<String, Set<Website>> sitesByHost) {
+ // This method may be called after the activity has been destroyed.
+ // In that case, bail out.
+ if (getActivity() == null) return;
+
// First we scan origins to get settings from there.
- List<WebsitePreference> websites = new ArrayList<WebsitePreference>();
- Set<Website> displayedSites = new HashSet<Website>();
- for (Map.Entry<String, Set<Website>> element : mSitesByOrigin.entrySet()) {
+ List<WebsitePreference> websites = new ArrayList<>();
+ Set<Website> displayedSites = new HashSet<>();
+ for (Map.Entry<String, Set<Website>> element : sitesByOrigin.entrySet()) {
for (Website site : element.getValue()) {
if (mSearch.isEmpty() || site.getTitle().contains(mSearch)) {
websites.add(new WebsitePreference(getActivity(), site, mCategoryFilter));
@@ -315,7 +114,7 @@ public void run(TaskQueue queue) {
}
}
// Next we add sites that are only accessible by host name.
- for (Map.Entry<String, Set<Website>> element : mSitesByHost.entrySet()) {
+ for (Map.Entry<String, Set<Website>> element : sitesByHost.entrySet()) {
for (Website site : element.getValue()) {
if (!displayedSites.contains(site)) {
if (mSearch.isEmpty() || site.getTitle().contains(mSearch)) {
@@ -390,8 +189,6 @@ public void run(TaskQueue queue) {
updateBlockedHeader(0);
updateAllowedHeader(0, true);
}
-
- queue.next();
}
}
@@ -459,37 +256,6 @@ private void updateBlockedHeader(int numBlocked) {
blockedGroup.setIcon(icon);
}
- private Website createSiteByOrigin(WebsiteAddress address) {
- String origin = address.getOrigin();
- String host = address.getHost();
- Website site = new Website(address);
- if (!mSitesByOrigin.containsKey(origin)) {
- mSitesByOrigin.put(origin, new HashSet<Website>());
- }
- mSitesByOrigin.get(origin).add(site);
- if (!mSitesByHost.containsKey(host)) {
- mSitesByHost.put(host, new HashSet<Website>());
- }
- mSitesByHost.get(host).add(site);
- return site;
- }
-
- private Set<Website> findOrCreateSitesByOrigin(WebsiteAddress address) {
- String origin = address.getOrigin();
- if (!mSitesByOrigin.containsKey(origin))
- createSiteByOrigin(address);
- return mSitesByOrigin.get(origin);
- }
-
- private Set<Website> findOrCreateSitesByHost(WebsiteAddress address) {
- String host = address.getHost();
- if (!mSitesByHost.containsKey(host)) {
- mSitesByHost.put(host, new HashSet<Website>());
- mSitesByHost.get(host).add(new Website(address));
- }
- return mSitesByHost.get(host);
- }
-
@Override
public void onActivityCreated(Bundle savedInstanceState) {
addPreferencesFromResource(R.xml.website_preferences);

Powered by Google App Engine
This is Rietveld 408576698