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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.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/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 c1ccfa873a856d92784cf20b397628316c9c87ca..8689b50062cfee8ef38868831f93586a002e3e79 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
@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.preferences.privacy;
+import android.os.Environment;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceScreen;
@@ -12,9 +13,12 @@ import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.SmallTest;
import android.text.SpannableString;
+import android.widget.ListView;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.preferences.ButtonPreference;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
@@ -26,7 +30,9 @@ import org.chromium.chrome.test.ChromeActivityTestCaseBase;
import org.chromium.chrome.test.util.browser.signin.SigninTestUtil;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
+import org.chromium.net.test.EmbeddedTestServer;
+import java.net.URL;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@@ -37,7 +43,7 @@ import java.util.Set;
*/
public class ClearBrowsingDataPreferencesTest
extends ChromeActivityTestCaseBase<ChromeActivity> {
-
+ private EmbeddedTestServer mTestServer;
private boolean mCallbackCalled;
private class CallbackCriteria extends Criteria {
@@ -55,6 +61,19 @@ public class ClearBrowsingDataPreferencesTest
}
}
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mTestServer = EmbeddedTestServer.createAndStartFileServer(
+ getInstrumentation().getContext(), Environment.getExternalStorageDirectory());
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mTestServer.stopAndDestroyServer();
+ super.tearDown();
+ }
+
public ClearBrowsingDataPreferencesTest() {
super(ChromeActivity.class);
}
@@ -65,6 +84,17 @@ public class ClearBrowsingDataPreferencesTest
startMainActivityOnBlankPage();
}
+ /** Waits for the progress dialog to disappear from the given CBD preference. */
+ private void waitForProgressToComplete(final ClearBrowsingDataPreferences preferences)
+ throws Exception {
+ CriteriaHelper.pollUiThread(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return preferences.getProgressDialog() == null;
+ }
+ });
+ }
+
/**
* Tests that web apps are cleared when the "cookies and site data" option is selected.
*/
@@ -81,28 +111,21 @@ public class ClearBrowsingDataPreferencesTest
CriteriaHelper.pollUiThread(new CallbackCriteria());
setDataTypesToClear(Arrays.asList(DialogOption.CLEAR_COOKIES_AND_SITE_DATA));
- final Preferences preferences =
- startPreferences(ClearBrowsingDataPreferences.class.getName());
+ final ClearBrowsingDataPreferences preferences =
+ (ClearBrowsingDataPreferences) startPreferences(
+ ClearBrowsingDataPreferences.class.getName())
+ .getFragmentForTest();
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
- ClearBrowsingDataPreferences fragment =
- (ClearBrowsingDataPreferences) preferences.getFragmentForTest();
- PreferenceScreen screen = fragment.getPreferenceScreen();
+ PreferenceScreen screen = preferences.getPreferenceScreen();
ButtonPreference clearButton = (ButtonPreference) screen.findPreference(
ClearBrowsingDataPreferences.PREF_CLEAR_BUTTON);
clearButton.getOnPreferenceClickListener().onPreferenceClick(clearButton);
}
});
- CriteriaHelper.pollUiThread(new Criteria() {
- @Override
- public boolean isSatisfied() {
- ClearBrowsingDataPreferences fragment =
- (ClearBrowsingDataPreferences) preferences.getFragmentForTest();
- return fragment.getProgressDialog() == null;
- }
- });
+ waitForProgressToComplete(preferences);
WebappRegistry.getRegisteredWebappIds(getActivity(), new WebappRegistry.FetchCallback() {
@Override
@@ -143,28 +166,21 @@ public class ClearBrowsingDataPreferencesTest
CriteriaHelper.pollUiThread(new CallbackCriteria());
setDataTypesToClear(Arrays.asList(DialogOption.CLEAR_HISTORY));
- final Preferences preferences =
- startPreferences(ClearBrowsingDataPreferences.class.getName());
+ final ClearBrowsingDataPreferences preferences =
+ (ClearBrowsingDataPreferences) startPreferences(
+ ClearBrowsingDataPreferences.class.getName())
+ .getFragmentForTest();
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
- ClearBrowsingDataPreferences fragment =
- (ClearBrowsingDataPreferences) preferences.getFragmentForTest();
- PreferenceScreen screen = fragment.getPreferenceScreen();
+ PreferenceScreen screen = preferences.getPreferenceScreen();
ButtonPreference clearButton = (ButtonPreference) screen.findPreference(
ClearBrowsingDataPreferences.PREF_CLEAR_BUTTON);
clearButton.getOnPreferenceClickListener().onPreferenceClick(clearButton);
}
});
- CriteriaHelper.pollUiThread(new Criteria() {
- @Override
- public boolean isSatisfied() {
- ClearBrowsingDataPreferences fragment =
- (ClearBrowsingDataPreferences) preferences.getFragmentForTest();
- return fragment.getProgressDialog() == null;
- }
- });
+ waitForProgressToComplete(preferences);
// The web app should still exist in the registry.
WebappRegistry.getRegisteredWebappIds(getActivity(), new WebappRegistry.FetchCallback() {
@@ -221,15 +237,15 @@ public class ClearBrowsingDataPreferencesTest
public void testClearingEverything() throws Exception {
setDataTypesToClear(Arrays.asList(DialogOption.values()));
- final Preferences preferences =
- startPreferences(ClearBrowsingDataPreferences.class.getName());
+ final ClearBrowsingDataPreferences preferences =
+ (ClearBrowsingDataPreferences) startPreferences(
+ ClearBrowsingDataPreferences.class.getName())
+ .getFragmentForTest();
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
- ClearBrowsingDataPreferences fragment =
- (ClearBrowsingDataPreferences) preferences.getFragmentForTest();
- PreferenceScreen screen = fragment.getPreferenceScreen();
+ PreferenceScreen screen = preferences.getPreferenceScreen();
for (int i = 0; i < screen.getPreferenceCount(); ++i) {
Preference pref = screen.getPreference(i);
@@ -247,14 +263,7 @@ public class ClearBrowsingDataPreferencesTest
}
});
- CriteriaHelper.pollUiThread(new Criteria() {
- @Override
- public boolean isSatisfied() {
- ClearBrowsingDataPreferences fragment =
- (ClearBrowsingDataPreferences) preferences.getFragmentForTest();
- return fragment.getProgressDialog() == null;
- }
- });
+ waitForProgressToComplete(preferences);
}
/**
@@ -447,6 +456,212 @@ public class ClearBrowsingDataPreferencesTest
CriteriaHelper.pollUiThread(new PreferenceScreenClosedCriterion(preferences3));
}
+ /** This presses the 'clear' button on the root preference page. */
+ private Runnable getPressClearRunnable(final ClearBrowsingDataPreferences preferences) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ PreferenceScreen screen = preferences.getPreferenceScreen();
+ ButtonPreference clearButton = (ButtonPreference) screen.findPreference(
+ ClearBrowsingDataPreferences.PREF_CLEAR_BUTTON);
+ assertTrue(clearButton.isEnabled());
+ clearButton.getOnPreferenceClickListener().onPreferenceClick(clearButton);
+ }
+ };
+ }
+
+ /** This presses the clear button in the important sites dialog */
+ private Runnable getPressButtonInImportantDialogRunnable(
+ final ClearBrowsingDataPreferences preferences, final int whichButton) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ assertNotNull(preferences);
+ ConfirmImportantSitesDialogFragment dialog =
+ preferences.getImportantSitesDialogFragment();
+ ((AlertDialog) dialog.getDialog()).getButton(whichButton).performClick();
+ }
+ };
+ }
+
+ /**
+ * This waits until the important dialog fragment & the given number of important sites are
+ * shown.
+ */
+ private void waitForImportantDialogToShow(final ClearBrowsingDataPreferences preferences,
+ final int numImportantSites) throws Exception {
+ CriteriaHelper.pollUiThread(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ assertNotNull(preferences);
+ if (preferences.getImportantSitesDialogFragment() == null
+ || !preferences.getImportantSitesDialogFragment().getDialog().isShowing()) {
+ return false;
+ }
+ ListView sitesList = preferences.getImportantSitesDialogFragment().getSitesList();
+ return sitesList.getAdapter().getCount() == numImportantSites;
+ }
+ });
+ }
+
+ /** This runnable marks the given origins as important. */
+ private Runnable getMarkOriginsAsImportantRunnable(final String[] importantOrigins) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ for (String origin : importantOrigins) {
+ PrefServiceBridge.markOriginAsImportantForTesting(origin);
+ }
+ }
+ };
+ }
+
+ /**
+ * Tests that the important sites dialog is shown, and if we don't deselect anything we
+ * correctly clear everything.
+ */
+ @CommandLineFlags.Add({"enable-features=ImportantSitesInCBD", "enable-site-engagement"})
+ @MediumTest
+ public void testImportantSitesDialogNoFiltering() throws Exception {
+ // Sign in.
+ SigninTestUtil.addAndSignInTestAccount();
+ assertTrue(ChromeFeatureList.isEnabled(ChromeFeatureList.IMPORTANT_SITES_IN_CBD));
+
+ final String testUrl =
+ mTestServer.getURL("/chrome/test/data/android/storage_persistance.html");
+ final String serverOrigin = mTestServer.getURL("/");
+ final String[] importantOrigins = {"http://www.facebook.com", serverOrigin};
+ // First mark our origins as important.
+ ThreadUtils.runOnUiThreadBlocking(getMarkOriginsAsImportantRunnable(importantOrigins));
+
+ // Load the page and clear any set storage.
+ loadUrl(testUrl + "#clear");
+ assertEquals("false", runJavaScriptCodeInCurrentTab("hasAllStorage()"));
+ runJavaScriptCodeInCurrentTab("setStorage()");
+ assertEquals("true", runJavaScriptCodeInCurrentTab("hasAllStorage()"));
+
+ // Load the page again and ensure the cookie still is set.
+ loadUrl(testUrl);
+ assertEquals("true", runJavaScriptCodeInCurrentTab("hasAllStorage()"));
+
+ ClearBrowsingDataPreferences preferences =
+ (ClearBrowsingDataPreferences) startPreferences(
+ ClearBrowsingDataPreferences.class.getName())
+ .getFragmentForTest();
+
+ // Clear in root preference.
+ ThreadUtils.runOnUiThreadBlocking(getPressClearRunnable(preferences));
+ // Check that the important sites dialog is shown, and the list is visible.
+ waitForImportantDialogToShow(preferences, 2);
+ // Clear in important dialog.
+ ThreadUtils.runOnUiThreadBlocking(
+ getPressButtonInImportantDialogRunnable(preferences, AlertDialog.BUTTON_POSITIVE));
+ waitForProgressToComplete(preferences);
+
+ // Verify we don't have storage.
+ loadUrl(testUrl);
+ assertEquals("false", runJavaScriptCodeInCurrentTab("hasAllStorage()"));
+ }
+
+ /**
+ * Tests that the important sites dialog is shown and if we cancel nothing happens.
+ */
+ @CommandLineFlags.Add({"enable-features=ImportantSitesInCBD", "enable-site-engagement"})
+ @MediumTest
+ public void testImportantSitesDialogNoopOnCancel() throws Exception {
+ // Sign in.
+ SigninTestUtil.addAndSignInTestAccount();
+ assertTrue(ChromeFeatureList.isEnabled(ChromeFeatureList.IMPORTANT_SITES_IN_CBD));
+
+ final String testUrl =
+ mTestServer.getURL("/chrome/test/data/android/storage_persistance.html");
+ final String serverOrigin = mTestServer.getURL("/");
+ final String[] importantOrigins = {"http://www.facebook.com", serverOrigin};
+ // First mark our origins as important.
+ ThreadUtils.runOnUiThreadBlocking(getMarkOriginsAsImportantRunnable(importantOrigins));
+
+ // Load the page and clear any set storage.
+ loadUrl(testUrl + "#clear");
+ assertEquals("false", runJavaScriptCodeInCurrentTab("hasAllStorage()"));
+ runJavaScriptCodeInCurrentTab("setStorage()");
+ assertEquals("true", runJavaScriptCodeInCurrentTab("hasAllStorage()"));
+
+ Preferences preferences = startPreferences(ClearBrowsingDataPreferences.class.getName());
+ ClearBrowsingDataPreferences fragment =
+ (ClearBrowsingDataPreferences) preferences.getFragmentForTest();
+ ThreadUtils.runOnUiThreadBlocking(getPressClearRunnable(fragment));
+ // Check that the important sites dialog is shown, and the list is visible.
+ waitForImportantDialogToShow(fragment, 2);
+ // Press the cancel button.
+ ThreadUtils.runOnUiThreadBlocking(
+ getPressButtonInImportantDialogRunnable(fragment, AlertDialog.BUTTON_NEGATIVE));
+ preferences.finish();
+ loadUrl(testUrl);
+ assertEquals("true", runJavaScriptCodeInCurrentTab("hasAllStorage()"));
+ }
+
+ /**
+ * Tests that the important sites dialog is shown, we can successfully uncheck options, and
+ * clicking clear doesn't clear the protected domain.
+ */
+ @CommandLineFlags.Add({"enable-features=ImportantSitesInCBD", "enable-site-engagement"})
+ @MediumTest
+ public void testImportantSitesDialog() throws Exception {
+ // Sign in.
+ SigninTestUtil.addAndSignInTestAccount();
+ assertTrue(ChromeFeatureList.isEnabled(ChromeFeatureList.IMPORTANT_SITES_IN_CBD));
+
+ final String testUrl =
+ mTestServer.getURL("/chrome/test/data/android/storage_persistance.html");
+ final String serverOrigin = mTestServer.getURL("/");
+ final String serverHost = new URL(testUrl).getHost();
+ final String[] importantOrigins = {"http://www.facebook.com", serverOrigin};
+
+ // First mark our origins as important.
+ ThreadUtils.runOnUiThreadBlocking(getMarkOriginsAsImportantRunnable(importantOrigins));
+
+ // Load the page and clear any set storage.
+ loadUrl(testUrl + "#clear");
+ assertEquals("false", runJavaScriptCodeInCurrentTab("hasAllStorage()"));
+ runJavaScriptCodeInCurrentTab("setStorage()");
+ assertEquals("true", runJavaScriptCodeInCurrentTab("hasAllStorage()"));
+
+ final Preferences preferences =
+ startPreferences(ClearBrowsingDataPreferences.class.getName());
+ final ClearBrowsingDataPreferences fragment =
+ (ClearBrowsingDataPreferences) preferences.getFragmentForTest();
+
+ // Uncheck the first item (our internal web server).
+ ThreadUtils.runOnUiThreadBlocking(getPressClearRunnable(fragment));
+ waitForImportantDialogToShow(fragment, 2);
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ ListView sitesList = fragment.getImportantSitesDialogFragment().getSitesList();
+ sitesList.performItemClick(
+ sitesList.getChildAt(0), 0, sitesList.getAdapter().getItemId(0));
+ }
+ });
+
+ // Check that our server origin is in the set of deselected domains.
+ CriteriaHelper.pollUiThread(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ ConfirmImportantSitesDialogFragment dialog =
+ fragment.getImportantSitesDialogFragment();
+ return dialog.getDeselectedDomains().contains(serverHost);
+ }
+ });
+
+ // Click the clear button.
+ ThreadUtils.runOnUiThreadBlocking(
+ getPressButtonInImportantDialogRunnable(fragment, AlertDialog.BUTTON_POSITIVE));
+
+ waitForProgressToComplete(fragment);
+ // And check we didn't clear our cookies.
+ assertEquals("true", runJavaScriptCodeInCurrentTab("hasAllStorage()"));
+ }
+
private void setDataTypesToClear(final List<DialogOption> typesToClear) {
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override

Powered by Google App Engine
This is Rietveld 408576698