| 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 663fb569c7f2824615ce95f97387aaf4d5193304..a0f3d7c65296a808a633bd93d15f1db08ca0cad5 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
|
| @@ -162,53 +162,58 @@ public class WebsitePermissionsFetcher {
|
| }
|
|
|
| /**
|
| - * A single task in the WebsitePermissionsFetcher task queue. We need
|
| - * fetching of features to be serialized, as we need to have all the origins
|
| - * in place prior to populating the hosts.
|
| + * A single task in the WebsitePermissionsFetcher task queue. We need fetching of features to be
|
| + * serialized, as we need to have all the origins in place prior to populating the hosts.
|
| */
|
| - private interface Task {
|
| - void run(TaskQueue queue);
|
| + private abstract class Task {
|
| + /** Override this method to implement a synchronous task. */
|
| + void run() {}
|
| +
|
| + /**
|
| + * Override this method to implement an asynchronous task. Call queue.next() once execution
|
| + * is complete.
|
| + */
|
| + void runAsync(TaskQueue queue) {
|
| + run();
|
| + queue.next();
|
| + }
|
| }
|
|
|
| /**
|
| - * A queue used to store the sequence of tasks to run to fetch the website
|
| - * preferences. Each task is run sequentially (although the queue as a whole
|
| - * is run asynchronously). Each task should call queue.next() at the end to
|
| - * run the next task in the queue.
|
| + * A queue used to store the sequence of tasks to run to fetch the website preferences. Each
|
| + * task is run sequentially, and some of the tasks may run asynchronously.
|
| */
|
| private static class TaskQueue extends LinkedList<Task> {
|
| void next() {
|
| - if (!isEmpty()) removeFirst().run(this);
|
| + if (!isEmpty()) removeFirst().runAsync(this);
|
| }
|
| }
|
|
|
| - private class GeolocationInfoFetcher implements Task {
|
| + private class GeolocationInfoFetcher extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| for (GeolocationInfo info : WebsitePreferenceBridge.getGeolocationInfo()) {
|
| WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
|
| if (address == null) continue;
|
| createSiteByOriginAndHost(address).setGeolocationInfo(info);
|
| }
|
| - queue.next();
|
| }
|
| }
|
|
|
| - private class MidiInfoFetcher implements Task {
|
| + private class MidiInfoFetcher extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| for (MidiInfo info : WebsitePreferenceBridge.getMidiInfo()) {
|
| WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
|
| if (address == null) continue;
|
| createSiteByOriginAndHost(address).setMidiInfo(info);
|
| }
|
| - queue.next();
|
| }
|
| }
|
|
|
| - private class PopupExceptionInfoFetcher implements Task {
|
| + private class PopupExceptionInfoFetcher extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| for (ContentSettingException exception :
|
| WebsitePreferenceBridge.getContentSettingsExceptions(
|
| ContentSettingsType.CONTENT_SETTINGS_TYPE_POPUPS)) {
|
| @@ -222,13 +227,12 @@ public class WebsitePermissionsFetcher {
|
| site.setPopupException(exception);
|
| }
|
| }
|
| - queue.next();
|
| }
|
| }
|
|
|
| - private class JavaScriptExceptionInfoFetcher implements Task {
|
| + private class JavaScriptExceptionInfoFetcher extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| for (ContentSettingException exception
|
| : WebsitePreferenceBridge.getContentSettingsExceptions(
|
| ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT)) {
|
| @@ -241,40 +245,37 @@ public class WebsitePermissionsFetcher {
|
| site.setJavaScriptException(exception);
|
| }
|
| }
|
| - queue.next();
|
| }
|
| }
|
|
|
| - private class CookieInfoFetcher implements Task {
|
| + private class CookieInfoFetcher extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| for (CookieInfo info : WebsitePreferenceBridge.getCookieInfo()) {
|
| WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
|
| if (address == null) continue;
|
| createSiteByOriginAndHost(address).setCookieInfo(info);
|
| }
|
| - queue.next();
|
| }
|
| }
|
|
|
| /**
|
| * Class for fetching the fullscreen information.
|
| */
|
| - private class FullscreenInfoFetcher implements Task {
|
| + private class FullscreenInfoFetcher extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| for (FullscreenInfo info : WebsitePreferenceBridge.getFullscreenInfo()) {
|
| WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
|
| if (address == null) continue;
|
| createSiteByOriginAndHost(address).setFullscreenInfo(info);
|
| }
|
| - queue.next();
|
| }
|
| }
|
|
|
| - private class LocalStorageInfoFetcher implements Task {
|
| + private class LocalStorageInfoFetcher extends Task {
|
| @Override
|
| - public void run(final TaskQueue queue) {
|
| + public void runAsync(final TaskQueue queue) {
|
| WebsitePreferenceBridge.fetchLocalStorageInfo(
|
| new WebsitePreferenceBridge.LocalStorageInfoReadyCallback() {
|
| @SuppressWarnings("unchecked")
|
| @@ -296,9 +297,9 @@ public class WebsitePermissionsFetcher {
|
| }
|
| }
|
|
|
| - private class WebStorageInfoFetcher implements Task {
|
| + private class WebStorageInfoFetcher extends Task {
|
| @Override
|
| - public void run(final TaskQueue queue) {
|
| + public void runAsync(final TaskQueue queue) {
|
| WebsitePreferenceBridge.fetchStorageInfo(
|
| new WebsitePreferenceBridge.StorageInfoReadyCallback() {
|
| @SuppressWarnings("unchecked")
|
| @@ -319,60 +320,55 @@ public class WebsitePermissionsFetcher {
|
| }
|
| }
|
|
|
| - private class ProtectedMediaIdentifierInfoFetcher implements Task {
|
| + private class ProtectedMediaIdentifierInfoFetcher extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| for (ProtectedMediaIdentifierInfo info :
|
| WebsitePreferenceBridge.getProtectedMediaIdentifierInfo()) {
|
| WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
|
| if (address == null) continue;
|
| createSiteByOriginAndHost(address).setProtectedMediaIdentifierInfo(info);
|
| }
|
| - queue.next();
|
| }
|
| }
|
|
|
| - private class PushNotificationInfoFetcher implements Task {
|
| + private class PushNotificationInfoFetcher extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| for (PushNotificationInfo info : WebsitePreferenceBridge.getPushNotificationInfo()) {
|
| WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
|
| if (address == null) continue;
|
| createSiteByOriginAndHost(address).setPushNotificationInfo(info);
|
| }
|
| - queue.next();
|
| }
|
| }
|
|
|
| - private class CameraCaptureInfoFetcher implements Task {
|
| + private class CameraCaptureInfoFetcher extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| for (CameraInfo info : WebsitePreferenceBridge.getCameraInfo()) {
|
| WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
|
| if (address == null) continue;
|
| createSiteByOriginAndHost(address).setCameraInfo(info);
|
| }
|
| - queue.next();
|
| }
|
| }
|
|
|
| - private class MicrophoneCaptureInfoFetcher implements Task {
|
| + private class MicrophoneCaptureInfoFetcher extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| for (MicrophoneInfo info : WebsitePreferenceBridge.getMicrophoneInfo()) {
|
| WebsiteAddress address = WebsiteAddress.create(info.getOrigin());
|
| if (address == null) continue;
|
| createSiteByOriginAndHost(address).setMicrophoneInfo(info);
|
| }
|
| - queue.next();
|
| }
|
| }
|
|
|
| - private class PermissionsAvailableCallbackRunner implements Task {
|
| + private class PermissionsAvailableCallbackRunner extends Task {
|
| @Override
|
| - public void run(TaskQueue queue) {
|
| + public void run() {
|
| mCallback.onWebsitePermissionsAvailable(mSitesByOrigin, mSitesByHost);
|
| - queue.next();
|
| }
|
| }
|
| }
|
|
|