Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataBridge.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataBridge.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..124291340a0c530af46d531afc1cfe10a2125f3c |
| --- /dev/null |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataBridge.java |
| @@ -0,0 +1,180 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.chrome.browser.preferences.privacy; |
| + |
| +import org.chromium.base.ThreadUtils; |
| +import org.chromium.base.VisibleForTesting; |
| +import org.chromium.base.annotations.CalledByNative; |
| + |
| +/** |
| + * Communicates between ClearBrowsingData, ImportantSitesUtils (C++) and |
| + * ClearBrowsingDataPreferences (Java UI). |
| + */ |
| +public final class BrowsingDataBridge { |
| + private static BrowsingDataBridge sInstance; |
| + |
| + // Object to notify when "clear browsing data" completes. |
| + private OnClearBrowsingDataListener mClearBrowsingDataListener; |
| + |
| + /** |
| + * Interface for a class that is listening to clear browser data events. |
| + */ |
| + public interface OnClearBrowsingDataListener { public abstract void onBrowsingDataCleared(); } |
|
gone
2017/03/24 21:07:04
git cl format makes some weird choices, I take it?
dullweber
2017/03/27 09:43:30
I just tried git cl format again and it doesn't ch
|
| + |
| + /** |
| + * Interface for a class that is fetching important site information. |
| + */ |
| + public interface ImportantSitesCallback { |
| + /** |
| + * Called when the list of important registerable domains has been fetched from cpp. |
| + * See net/base/registry_controlled_domains/registry_controlled_domain.h for more details on |
| + * registrable domains and the current list of effective eTLDs. |
| + * @param domains Important registerable domains. |
| + * @param exampleOrigins Example origins for each domain. These can be used to retrieve |
| + * favicons. |
| + * @param importantReasons Bitfield of reasons why this domain was selected. Pass this back |
| + * to clearBrowinsgData so we can record metrics. |
| + * @param dialogDisabled If the important dialog has been ignored too many times and should |
| + * not be shown. |
| + */ |
| + @CalledByNative("ImportantSitesCallback") |
| + void onImportantRegisterableDomainsReady(String[] domains, String[] exampleOrigins, |
| + int[] importantReasons, boolean dialogDisabled); |
| + } |
| + |
| + /** |
| + * Interface to a class that receives callbacks instructing it to inform the user about other |
| + * forms of browsing history. |
| + */ |
| + public interface OtherFormsOfBrowsingHistoryListener { |
| + /** |
| + * Called by the web history service when it discovers that other forms of browsing history |
| + * exist. |
| + */ |
| + @CalledByNative("OtherFormsOfBrowsingHistoryListener") |
| + public abstract void enableDialogAboutOtherFormsOfBrowsingHistory(); |
| + |
| + /** |
| + * Called by the web history service when the conditions for showing the dialog about |
| + * other forms of browsing history are met. |
| + */ |
| + @CalledByNative("OtherFormsOfBrowsingHistoryListener") |
| + public abstract void showNoticeAboutOtherFormsOfBrowsingHistory(); |
| + } |
| + |
| + private BrowsingDataBridge() {} |
| + |
| + /** |
| + * @return The singleton bridge object. |
| + */ |
| + public static BrowsingDataBridge getInstance() { |
| + ThreadUtils.assertOnUiThread(); |
| + if (sInstance == null) sInstance = new BrowsingDataBridge(); |
| + return sInstance; |
| + } |
| + |
| + /** |
| + * @return Whether the bridge have been initialized. |
| + */ |
| + public static boolean isInitialized() { |
| + return sInstance != null; |
|
gone
2017/03/24 21:07:04
Should this be on the UI thread, too?
dullweber
2017/03/27 09:43:30
I noticed that this method isn't called at all, so
|
| + } |
| + |
| + @CalledByNative |
| + private void browsingDataCleared() { |
| + if (mClearBrowsingDataListener != null) { |
| + mClearBrowsingDataListener.onBrowsingDataCleared(); |
| + mClearBrowsingDataListener = null; |
| + } |
| + } |
| + |
| + /** |
| + * Clear the specified types of browsing data asynchronously. |
| + * |listener| is an object to be notified when clearing completes. |
| + * It can be null, but many operations (e.g. navigation) are |
| + * ill-advised while browsing data is being cleared. |
| + * @param listener A listener to call back when the clearing is finished. |
| + * @param dataTypes An array of browsing data types to delete, represented as values from |
| + * the shared enum {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}. |
|
gone
2017/03/24 21:07:04
Fix indentation here and onwards? e.g. line up "th
dullweber
2017/03/27 09:43:30
Done.
|
| + * @param timePeriod The time period for which to delete the data, represented as a value from |
| + * the shared enum {@link org.chromium.chrome.browser.browsing_data.TimePeriod}. |
| + */ |
| + public void clearBrowsingData( |
| + OnClearBrowsingDataListener listener, int[] dataTypes, int timePeriod) { |
| + clearBrowsingDataExcludingDomains(listener, dataTypes, timePeriod, new String[0], |
| + new int[0], new String[0], new int[0]); |
| + } |
| + |
| + /** |
| + * Same as above, but now we can specify a list of domains to exclude from clearing browsing |
| + * data. |
| + * Do not use this method unless caller knows what they're doing. Not all backends are supported |
| + * yet, and more data than expected could be deleted. See crbug.com/113621. |
| + * @param listener A listener to call back when the clearing is finished. |
| + * @param dataTypes An array of browsing data types to delete, represented as values from |
| + * the shared enum {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}. |
| + * @param timePeriod The time period for which to delete the data, represented as a value from |
| + * the shared enum {@link org.chromium.chrome.browser.browsing_data.TimePeriod}. |
| + * @param blacklistDomains A list of registerable domains that we don't clear data for. |
| + * @param blacklistedDomainReasons A list of the reason metadata for the blacklisted domains. |
| + * @param ignoredDomains A list of ignored domains that the user chose to not blacklist. We use |
| + * these to remove important site entries if the user ignores them enough. |
| + * @param ignoredDomainReasons A list of reason metadata for the ignored domains. |
| + */ |
| + public void clearBrowsingDataExcludingDomains(OnClearBrowsingDataListener listener, |
| + int[] dataTypes, int timePeriod, String[] blacklistDomains, |
| + int[] blacklistedDomainReasons, String[] ignoredDomains, int[] ignoredDomainReasons) { |
| + assert mClearBrowsingDataListener == null; |
| + mClearBrowsingDataListener = listener; |
| + nativeClearBrowsingData(dataTypes, timePeriod, blacklistDomains, blacklistedDomainReasons, |
| + ignoredDomains, ignoredDomainReasons); |
| + } |
| + |
| + /** |
| + * This fetches sites (registerable domains) that we consider important. This combines many |
| + * pieces of information, including site engagement and permissions. The callback is called |
| + * with the list of important registerable domains. |
| + * |
| + * See net/base/registry_controlled_domains/registry_controlled_domain.h for more details on |
| + * registrable domains and the current list of effective eTLDs. |
| + * @param callback The callback that will be used to set the list of important sites. |
| + */ |
| + public static void fetchImportantSites(ImportantSitesCallback callback) { |
| + nativeFetchImportantSites(callback); |
| + } |
| + |
| + /** |
| + * @return The maximum number of important sites that will be returned from the call above. |
| + * This is a constant that won't change. |
| + */ |
| + public static int getMaxImportantSites() { |
| + return nativeGetMaxImportantSites(); |
| + } |
| + |
| + /** This lets us mark an origin as important for testing. */ |
| + @VisibleForTesting |
| + public static void markOriginAsImportantForTesting(String origin) { |
| + nativeMarkOriginAsImportantForTesting(origin); |
| + } |
| + |
| + /** |
| + * Requests that the web history service finds out if we should inform the user about the |
| + * existence of other forms of browsing history. The response will be asynchronous, through |
| + * {@link OtherFormsOfBrowsingHistoryListener}. |
| + */ |
| + public void requestInfoAboutOtherFormsOfBrowsingHistory( |
| + OtherFormsOfBrowsingHistoryListener listener) { |
| + nativeRequestInfoAboutOtherFormsOfBrowsingHistory(listener); |
| + } |
| + |
| + private native void nativeClearBrowsingData(int[] dataTypes, int timePeriod, |
| + String[] blacklistDomains, int[] blacklistedDomainReasons, String[] ignoredDomains, |
| + int[] ignoredDomainReasons); |
| + private native void nativeRequestInfoAboutOtherFormsOfBrowsingHistory( |
| + OtherFormsOfBrowsingHistoryListener listener); |
| + private static native void nativeFetchImportantSites(ImportantSitesCallback callback); |
| + private static native int nativeGetMaxImportantSites(); |
| + private static native void nativeMarkOriginAsImportantForTesting(String origin); |
| +} |