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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java

Issue 1465363002: [Storage] Android - ManageSpace UI, Important Origins, and CBD Dialog (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 6 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/privacy/ClearBrowsingDataPreferences.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java
index 7538d1c9c8598194bd2397be002fe1e347616238..ae0ad9c391d31a3321fad1a0a5dab00048ca8ebd 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java
@@ -6,15 +6,18 @@ package org.chromium.chrome.browser.preferences.privacy;
import android.app.Activity;
import android.app.ProgressDialog;
+import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
+import android.support.annotation.Nullable;
import android.widget.ListView;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.BrowsingDataType;
+import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.TimePeriod;
import org.chromium.chrome.browser.help.HelpAndFeedback;
import org.chromium.chrome.browser.preferences.ButtonPreference;
@@ -37,10 +40,10 @@ import java.util.EnumSet;
* from which to clear data.
*/
public class ClearBrowsingDataPreferences extends PreferenceFragment
- implements PrefServiceBridge.OnClearBrowsingDataListener,
+ implements PrefServiceBridge.ImportantSitesCallback,
+ PrefServiceBridge.OnClearBrowsingDataListener,
PrefServiceBridge.OtherFormsOfBrowsingHistoryListener,
- Preference.OnPreferenceClickListener,
- Preference.OnPreferenceChangeListener {
+ Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener {
/**
* Represents a single item in the dialog.
*/
@@ -138,6 +141,12 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
"https://history.google.com/history/?utm_source=chrome_cbd";
/**
+ * Used for the onActivityResult pattern. The value is arbitrary, just to distinguish from other
+ * activities that we might be using onActivityResult with as well.
+ */
+ private static final int IMPORTANT_SITES_DIALOG_CODE = 1;
+
+ /**
* The various data types that can be cleared via this screen.
*/
public enum DialogOption {
@@ -204,6 +213,15 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
private ProgressDialog mProgressDialog;
private Item[] mItems;
+ // This is the sorted list of important registerable domains. If null, then we haven't finished
+ // fetching them yet.
+ private String[] mSortedImportantDomains;
+ // These are full url examples of the domains above. We use them for favicons.
+ private String[] mSortedExampleOrigins;
+ // This is the dialog we show to the user that lets them 'uncheck' (or exclude) the above
+ // important domains from being cleared.
+ private ConfirmImportantSitesDialogFragment mConfirmImportantSitesDialog;
+
private final EnumSet<DialogOption> getSelectedOptions() {
EnumSet<DialogOption> selected = EnumSet.noneOf(DialogOption.class);
for (Item item : mItems) {
@@ -216,7 +234,8 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
* Requests the browsing data corresponding to the given dialog options to be deleted.
* @param options The dialog options whose corresponding data should be deleted.
*/
- private final void clearBrowsingData(EnumSet<DialogOption> options) {
+ private final void clearBrowsingData(
+ EnumSet<DialogOption> options, @Nullable String[] blacklistedDomains) {
showProgressDialog();
int[] dataTypes = new int[options.size()];
@@ -229,7 +248,12 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
Object spinnerSelection =
((SpinnerPreference) findPreference(PREF_TIME_RANGE)).getSelectedOption();
int timePeriod = ((TimePeriodSpinnerOption) spinnerSelection).getTimePeriod();
- PrefServiceBridge.getInstance().clearBrowsingData(this, dataTypes, timePeriod);
+ if (blacklistedDomains != null && blacklistedDomains.length != 0) {
+ PrefServiceBridge.getInstance().clearBrowsingDataExcludingDomains(
+ this, dataTypes, timePeriod, blacklistedDomains);
+ } else {
+ PrefServiceBridge.getInstance().clearBrowsingData(this, dataTypes, timePeriod);
+ }
}
private void dismissProgressDialog() {
@@ -245,11 +269,12 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
*/
private DialogOption[] getDialogOptions() {
return new DialogOption[] {
- DialogOption.CLEAR_HISTORY,
- DialogOption.CLEAR_COOKIES_AND_SITE_DATA,
- DialogOption.CLEAR_CACHE,
- DialogOption.CLEAR_PASSWORDS,
- DialogOption.CLEAR_FORM_DATA};
+ DialogOption.CLEAR_HISTORY,
+ DialogOption.CLEAR_COOKIES_AND_SITE_DATA,
+ DialogOption.CLEAR_CACHE,
+ DialogOption.CLEAR_PASSWORDS,
+ DialogOption.CLEAR_FORM_DATA
+ };
}
/**
@@ -281,7 +306,7 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
*/
private boolean isOptionSelectedByDefault(DialogOption option) {
return PrefServiceBridge.getInstance().getBrowsingDataDeletionPreference(
- option.getDataType());
+ option.getDataType());
}
/**
@@ -309,10 +334,33 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
}
}
+ /**
+ * Returns if we should show the important sites dialog. We check to see if
+ * <ol>
+ * <li>We've fetched the important sites,
+ * <li>there are important sites,
+ * <li>the feature is enabled, and
+ * <li>we have cache or cookies selected.
+ * </ol>
+ */
+ private boolean shouldShowImportantSitesDialog() {
+ if (mSortedImportantDomains == null || mSortedImportantDomains.length == 0) return false;
+ EnumSet<DialogOption> selectedOptions = getSelectedOptions();
+ return ChromeFeatureList.isEnabled(ChromeFeatureList.IMPORTANT_SITES_IN_CBD)
+ && (selectedOptions.contains(DialogOption.CLEAR_CACHE)
+ || selectedOptions.contains(DialogOption.CLEAR_COOKIES_AND_SITE_DATA));
+ }
+
@Override
public boolean onPreferenceClick(Preference preference) {
if (preference.getKey().equals(PREF_CLEAR_BUTTON)) {
- clearBrowsingData(getSelectedOptions());
+ if (shouldShowImportantSitesDialog()) {
+ showImportantDialogThenClear();
+ return true;
+ }
+ // If sites haven't been fetched, just clear the browsing data regularly rather than
+ // waiting to show the important sites dialog.
+ clearBrowsingData(getSelectedOptions(), null);
return true;
}
return false;
@@ -434,6 +482,9 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
getPreferenceScreen().removePreference(google_summary);
general_summary.setSummary(R.string.clear_browsing_data_footnote_site_settings);
}
+ if (ChromeFeatureList.isEnabled(ChromeFeatureList.IMPORTANT_SITES_IN_CBD)) {
+ PrefServiceBridge.fetchImportantSites(this);
+ }
}
@Override
@@ -455,9 +506,10 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
}
}
+ // We either show the dialog, or modify the current one to display our messages. This avoids
+ // a dialog flash.
private final void showProgressDialog() {
if (getActivity() == null) return;
-
mProgressDialog = ProgressDialog.show(getActivity(),
getActivity().getString(R.string.clear_browsing_data_progress_title),
getActivity().getString(R.string.clear_browsing_data_progress_message), true,
@@ -469,6 +521,22 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
return mProgressDialog;
}
+ @VisibleForTesting
+ ConfirmImportantSitesDialogFragment getImportantSitesDialogFragment() {
+ return mConfirmImportantSitesDialog;
+ }
+
+ /**
+ * This method shows the important sites dialog. After the dialog is shown, we correctly clear.
+ */
+ private void showImportantDialogThenClear() {
+ mConfirmImportantSitesDialog = ConfirmImportantSitesDialogFragment.newInstance(
+ mSortedImportantDomains, mSortedExampleOrigins);
+ mConfirmImportantSitesDialog.setTargetFragment(this, IMPORTANT_SITES_DIALOG_CODE);
+ mConfirmImportantSitesDialog.show(
+ getFragmentManager(), ConfirmImportantSitesDialogFragment.FRAGMENT_TAG);
+ }
+
@Override
public void showNoticeAboutOtherFormsOfBrowsingHistory() {
if (getActivity() == null) return;
@@ -494,4 +562,24 @@ public class ClearBrowsingDataPreferences extends PreferenceFragment
OtherFormsOfHistoryDialogFragment getDialogAboutOtherFormsOfBrowsingHistory() {
return mDialogAboutOtherFormsOfBrowsingHistory;
}
+
+ @Override
+ public void onImportantRegisterableDomainsReady(String[] domains, String[] exampleOrigins) {
+ mSortedImportantDomains = Arrays.copyOf(domains, domains.length);
+ mSortedExampleOrigins = Arrays.copyOf(exampleOrigins, exampleOrigins.length);
+ }
+
+ /**
+ * This is the callback for the important domain dialog. We should only clear if we get the
+ * positive button response.
+ */
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == IMPORTANT_SITES_DIALOG_CODE && resultCode == Activity.RESULT_OK) {
+ // Deselected means that the user is excluding the domain from being cleared.
+ String[] deselectedDomains = data.getStringArrayExtra(
+ ConfirmImportantSitesDialogFragment.DESELECTED_DOMAINS_TAG);
+ clearBrowsingData(getSelectedOptions(), deselectedDomains);
+ }
+ }
}

Powered by Google App Engine
This is Rietveld 408576698