Index: chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.java |
index 50707042073b8bcda507bc7ebba18d00b45d566f..1ff626ff83ec5e678d115d95802b26b973f10b2c 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.java |
@@ -7,6 +7,8 @@ package org.chromium.chrome.browser.preferences.privacy; |
import android.preference.CheckBoxPreference; |
import android.preference.Preference; |
import android.preference.PreferenceScreen; |
+import android.support.v7.app.AlertDialog; |
+import android.test.suitebuilder.annotation.LargeTest; |
import android.test.suitebuilder.annotation.MediumTest; |
import android.test.suitebuilder.annotation.SmallTest; |
import android.text.SpannableString; |
@@ -321,6 +323,130 @@ public class ClearBrowsingDataPreferencesTest |
}); |
} |
+ /** |
+ * A helper Runnable that opens the Preferences activity containing |
+ * a ClearBrowsingDataPreferences fragment and clicks the "Clear" button. |
+ */ |
+ static class OpenPreferencesEnableDialogAndClickClearRunnable implements Runnable { |
+ final Preferences mPreferences; |
+ |
+ /** |
+ * Instantiates this OpenPreferencesEnableDialogAndClickClearRunnable. |
+ * @param preferences A Preferences activity containing ClearBrowsingDataPreferences |
+ * fragment. |
+ */ |
+ public OpenPreferencesEnableDialogAndClickClearRunnable(Preferences preferences) { |
+ mPreferences = preferences; |
+ } |
+ |
+ @Override |
+ public void run() { |
+ ClearBrowsingDataPreferences fragment = |
+ (ClearBrowsingDataPreferences) mPreferences.getFragmentForTest(); |
+ PreferenceScreen screen = fragment.getPreferenceScreen(); |
+ |
+ // Enable the dialog and click the "Clear" button. |
+ fragment.enableDialogAboutOtherFormsOfBrowsingHistory(); |
+ ButtonPreference clearButton = (ButtonPreference) screen.findPreference( |
+ ClearBrowsingDataPreferences.PREF_CLEAR_BUTTON); |
+ assertTrue(clearButton.isEnabled()); |
+ clearButton.getOnPreferenceClickListener().onPreferenceClick(clearButton); |
+ } |
+ } |
+ |
+ /** |
+ * A criterion that is satisfied when a ClearBrowsingDataPreferences fragment in the given |
+ * Preferences activity is closed. |
+ */ |
+ static class PreferenceScreenClosedCriterion extends Criteria { |
+ final Preferences mPreferences; |
+ |
+ /** |
+ * Instantiates this PreferenceScreenClosedCriterion. |
+ * @param preferences A Preferences activity containing ClearBrowsingDataPreferences |
+ * fragment. |
+ */ |
+ public PreferenceScreenClosedCriterion(Preferences preferences) { |
+ mPreferences = preferences; |
+ } |
+ |
+ @Override |
+ public boolean isSatisfied() { |
+ ClearBrowsingDataPreferences fragment = |
+ (ClearBrowsingDataPreferences) mPreferences.getFragmentForTest(); |
+ return fragment == null || !fragment.isVisible(); |
+ } |
+ } |
+ |
+ /** |
+ * Tests that if the dialog about other forms of browsing history is enabled, it will be shown |
+ * after the deletion completes, if and only if browsing history was checked for deletion |
+ * and it has not been shown before. |
+ */ |
+ @LargeTest |
+ public void testDialogAboutOtherFormsOfBrowsingHistory() throws Exception { |
+ // Sign in. |
+ SigninTestUtil.get().addAndSignInTestAccount(); |
+ OtherFormsOfHistoryDialogFragment.clearShownPreferenceForTesting(getActivity()); |
+ |
+ // History is not selected. We still need to select some other datatype, otherwise the |
+ // "Clear" button won't be enabled. |
+ setDataTypesToClear(Arrays.asList(DialogOption.CLEAR_CACHE)); |
+ final Preferences preferences1 = |
+ startPreferences(ClearBrowsingDataPreferences.class.getName()); |
+ ThreadUtils.runOnUiThreadBlocking( |
+ new OpenPreferencesEnableDialogAndClickClearRunnable(preferences1)); |
+ |
+ // The dialog about other forms of history is not shown. The Clear Browsing Data preferences |
+ // is closed as usual. |
+ CriteriaHelper.pollUiThread(new PreferenceScreenClosedCriterion(preferences1)); |
+ |
+ // Reopen Clear Browsing Data preferences, this time with history selected for clearing. |
+ setDataTypesToClear(Arrays.asList(DialogOption.CLEAR_HISTORY)); |
+ final Preferences preferences2 = |
+ startPreferences(ClearBrowsingDataPreferences.class.getName()); |
+ ThreadUtils.runOnUiThreadBlocking( |
+ new OpenPreferencesEnableDialogAndClickClearRunnable(preferences2)); |
+ |
+ // The dialog about other forms of history should now be shown. |
+ CriteriaHelper.pollUiThread(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ ClearBrowsingDataPreferences fragment = |
+ (ClearBrowsingDataPreferences) preferences2.getFragmentForTest(); |
+ OtherFormsOfHistoryDialogFragment dialog = |
+ fragment.getDialogAboutOtherFormsOfBrowsingHistory(); |
+ return dialog != null; |
+ } |
+ }); |
+ |
+ // Close that dialog. |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ ClearBrowsingDataPreferences fragment = |
+ (ClearBrowsingDataPreferences) preferences2.getFragmentForTest(); |
+ fragment.getDialogAboutOtherFormsOfBrowsingHistory().onClick( |
+ null, AlertDialog.BUTTON_POSITIVE); |
+ } |
+ }); |
+ |
+ // That should close the preference screen as well. |
+ CriteriaHelper.pollUiThread(new PreferenceScreenClosedCriterion(preferences2)); |
+ |
+ // Reopen Clear Browsing Data preferences and clear history once again. |
+ setDataTypesToClear(Arrays.asList(DialogOption.CLEAR_HISTORY)); |
+ final Preferences preferences3 = |
+ startPreferences(ClearBrowsingDataPreferences.class.getName()); |
+ ThreadUtils.runOnUiThreadBlocking( |
+ new OpenPreferencesEnableDialogAndClickClearRunnable(preferences3)); |
+ |
+ // The dialog about other forms of browsing history is still enabled, and history has been |
+ // selected for deletion. However, the dialog has already been shown before, and therefore |
+ // we won't show it again. Expect that the preference screen closes. |
+ CriteriaHelper.pollUiThread(new PreferenceScreenClosedCriterion(preferences3)); |
+ } |
+ |
private void setDataTypesToClear(final List<DialogOption> typesToClear) { |
ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
@Override |