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

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

Issue 2156273003: Reuse Website objects in WebsitePermissionFetcher. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix findbugs warnings. 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/WebsitePermissionsFetcher.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/WebsitePermissionsFetcher.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/WebsitePermissionsFetcher.java
index 3dd72b5b70cb9fb2de27c122f504e57aff595b2b..414676ef9509d6a3dd47416a6a6ccf486c51bc31 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/WebsitePermissionsFetcher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/WebsitePermissionsFetcher.java
@@ -4,15 +4,16 @@
package org.chromium.chrome.browser.preferences.website;
+import android.util.Pair;
+
import org.chromium.base.Callback;
import org.chromium.chrome.browser.ContentSettingsType;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
-import java.util.Set;
/**
* Utility class that asynchronously fetches any Websites and the permissions
@@ -24,19 +25,11 @@ public class WebsitePermissionsFetcher {
* website permissions have been fetched.
*/
public interface WebsitePermissionsCallback {
- void onWebsitePermissionsAvailable(
- Map<String, Set<Website>> sitesByOrigin, Map<String, Set<Website>> sitesByHost);
+ void onWebsitePermissionsAvailable(Collection<Website> sites);
}
- // This is a 1 <--> 1..N mapping between origin and Website.
- // TODO(mvanouwerkerk): The Website class has no equals or hashCode methods so storing them in
- // a HashSet is really confusing to readers of this code. There is no deduplication at all.
- private final Map<String, Set<Website>> mSitesByOrigin = new HashMap<>();
-
- // This is a 1 <--> 1..N mapping between host and Website.
- // TODO(mvanouwerkerk): The Website class has no equals or hashCode methods so storing them in
- // a HashSet is really confusing to readers of this code. There is no deduplication at all.
- private final Map<String, Set<Website>> mSitesByHost = new HashMap<>();
+ // This map looks up Websites by their origin and embedder.
+ private final Map<Pair<WebsiteAddress, WebsiteAddress>, Website> mSites = new HashMap<>();
// The callback to run when the permissions have been fetched.
private final WebsitePermissionsCallback mCallback;
@@ -150,30 +143,14 @@ public class WebsitePermissionsFetcher {
queue.next();
}
- private Website createSiteByOriginAndHost(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)) createSiteByOriginAndHost(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));
+ private Website findOrCreateSite(WebsiteAddress origin, WebsiteAddress embedder) {
+ Pair<WebsiteAddress, WebsiteAddress> key = Pair.create(origin, embedder);
+ Website site = mSites.get(key);
+ if (site == null) {
+ site = new Website(origin, embedder);
+ mSites.put(key, site);
}
- return mSitesByHost.get(host);
+ return site;
}
private void setException(int contentSettingsType) {
@@ -183,29 +160,27 @@ public class WebsitePermissionsFetcher {
if (exception.getPattern().equals("*")) continue;
WebsiteAddress address = WebsiteAddress.create(exception.getPattern());
if (address == null) continue;
- Set<Website> sites = findOrCreateSitesByHost(address);
- for (Website site : sites) {
- switch (contentSettingsType) {
- case ContentSettingsType.CONTENT_SETTINGS_TYPE_AUTOPLAY:
- site.setAutoplayException(exception);
- break;
- case ContentSettingsType.CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC:
- site.setBackgroundSyncException(exception);
- break;
- case ContentSettingsType.CONTENT_SETTINGS_TYPE_COOKIES:
- site.setCookieException(exception);
- break;
- case ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT:
- site.setJavaScriptException(exception);
- break;
- case ContentSettingsType.CONTENT_SETTINGS_TYPE_POPUPS:
- site.setPopupException(exception);
- break;
- default:
- assert false : "Unexpected content setting type received: "
- + contentSettingsType;
- break;
- }
+ Website site = findOrCreateSite(address, null);
+ switch (contentSettingsType) {
+ case ContentSettingsType.CONTENT_SETTINGS_TYPE_AUTOPLAY:
+ site.setAutoplayException(exception);
+ break;
+ case ContentSettingsType.CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC:
+ site.setBackgroundSyncException(exception);
+ break;
+ case ContentSettingsType.CONTENT_SETTINGS_TYPE_COOKIES:
+ site.setCookieException(exception);
+ break;
+ case ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT:
+ site.setJavaScriptException(exception);
+ break;
+ case ContentSettingsType.CONTENT_SETTINGS_TYPE_POPUPS:
+ site.setPopupException(exception);
+ break;
+ default:
+ assert false : "Unexpected content setting type received: "
+ + contentSettingsType;
+ break;
}
}
}
@@ -249,9 +224,10 @@ public class WebsitePermissionsFetcher {
@Override
public void run() {
for (GeolocationInfo info : WebsitePreferenceBridge.getGeolocationInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOriginAndHost(address).setGeolocationInfo(info);
+ WebsiteAddress origin = WebsiteAddress.create(info.getOrigin());
+ if (origin == null) continue;
+ WebsiteAddress embedder = WebsiteAddress.create(info.getEmbedder());
+ findOrCreateSite(origin, embedder).setGeolocationInfo(info);
}
}
}
@@ -260,9 +236,10 @@ public class WebsitePermissionsFetcher {
@Override
public void run() {
for (MidiInfo info : WebsitePreferenceBridge.getMidiInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOriginAndHost(address).setMidiInfo(info);
+ WebsiteAddress origin = WebsiteAddress.create(info.getOrigin());
+ if (origin == null) continue;
+ WebsiteAddress embedder = WebsiteAddress.create(info.getEmbedder());
+ findOrCreateSite(origin, embedder).setMidiInfo(info);
}
}
}
@@ -292,9 +269,10 @@ public class WebsitePermissionsFetcher {
@Override
public void run() {
for (KeygenInfo info : WebsitePreferenceBridge.getKeygenInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOriginAndHost(address).setKeygenInfo(info);
+ WebsiteAddress origin = WebsiteAddress.create(info.getOrigin());
+ if (origin == null) continue;
+ WebsiteAddress embedder = WebsiteAddress.create(info.getEmbedder());
+ findOrCreateSite(origin, embedder).setKeygenInfo(info);
}
}
}
@@ -306,9 +284,10 @@ public class WebsitePermissionsFetcher {
@Override
public void run() {
for (FullscreenInfo info : WebsitePreferenceBridge.getFullscreenInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOriginAndHost(address).setFullscreenInfo(info);
+ WebsiteAddress origin = WebsiteAddress.create(info.getOrigin());
+ if (origin == null) continue;
+ WebsiteAddress embedder = WebsiteAddress.create(info.getEmbedder());
+ findOrCreateSite(origin, embedder).setFullscreenInfo(info);
}
}
}
@@ -325,10 +304,7 @@ public class WebsitePermissionsFetcher {
(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());
- }
+ findOrCreateSite(address, null).setLocalStorageInfo(entry.getValue());
}
queue.next();
}
@@ -348,10 +324,7 @@ public class WebsitePermissionsFetcher {
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);
- }
+ findOrCreateSite(address, null).addStorageInfo(info);
}
queue.next();
}
@@ -364,9 +337,10 @@ public class WebsitePermissionsFetcher {
public void run() {
for (ProtectedMediaIdentifierInfo info :
WebsitePreferenceBridge.getProtectedMediaIdentifierInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOriginAndHost(address).setProtectedMediaIdentifierInfo(info);
+ WebsiteAddress origin = WebsiteAddress.create(info.getOrigin());
+ if (origin == null) continue;
+ WebsiteAddress embedder = WebsiteAddress.create(info.getEmbedder());
+ findOrCreateSite(origin, embedder).setProtectedMediaIdentifierInfo(info);
}
}
}
@@ -375,9 +349,10 @@ public class WebsitePermissionsFetcher {
@Override
public void run() {
for (NotificationInfo info : WebsitePreferenceBridge.getNotificationInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOriginAndHost(address).setNotificationInfo(info);
+ WebsiteAddress origin = WebsiteAddress.create(info.getOrigin());
+ if (origin == null) continue;
+ WebsiteAddress embedder = WebsiteAddress.create(info.getEmbedder());
+ findOrCreateSite(origin, embedder).setNotificationInfo(info);
}
}
}
@@ -386,9 +361,10 @@ public class WebsitePermissionsFetcher {
@Override
public void run() {
for (CameraInfo info : WebsitePreferenceBridge.getCameraInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOriginAndHost(address).setCameraInfo(info);
+ WebsiteAddress origin = WebsiteAddress.create(info.getOrigin());
+ if (origin == null) continue;
+ WebsiteAddress embedder = WebsiteAddress.create(info.getEmbedder());
+ findOrCreateSite(origin, embedder).setCameraInfo(info);
}
}
}
@@ -397,9 +373,10 @@ public class WebsitePermissionsFetcher {
@Override
public void run() {
for (MicrophoneInfo info : WebsitePreferenceBridge.getMicrophoneInfo()) {
- WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
- if (address == null) continue;
- createSiteByOriginAndHost(address).setMicrophoneInfo(info);
+ WebsiteAddress origin = WebsiteAddress.create(info.getOrigin());
+ if (origin == null) continue;
+ WebsiteAddress embedder = WebsiteAddress.create(info.getEmbedder());
+ findOrCreateSite(origin, embedder).setMicrophoneInfo(info);
}
}
}
@@ -414,7 +391,7 @@ public class WebsitePermissionsFetcher {
private class PermissionsAvailableCallbackRunner extends Task {
@Override
public void run() {
- mCallback.onWebsitePermissionsAvailable(mSitesByOrigin, mSitesByHost);
+ mCallback.onWebsitePermissionsAvailable(mSites.values());
}
}
}

Powered by Google App Engine
This is Rietveld 408576698