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 1ff626ff83ec5e678d115d95802b26b973f10b2c..ce4828ef36c4bef36bdd015d51e9c66669128d60 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,10 @@ 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.GURLUtils; |
+import org.chromium.net.test.EmbeddedTestServer; |
+import java.net.URL; |
import java.util.Arrays; |
import java.util.HashSet; |
import java.util.List; |
@@ -37,7 +44,7 @@ import java.util.Set; |
*/ |
public class ClearBrowsingDataPreferencesTest |
extends ChromeActivityTestCaseBase<ChromeActivity> { |
- |
+ private EmbeddedTestServer mTestServer; |
private boolean mCallbackCalled; |
private class CallbackCriteria extends Criteria { |
@@ -55,6 +62,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 +85,18 @@ public class ClearBrowsingDataPreferencesTest |
startMainActivityOnBlankPage(); |
} |
+ /** Waits for the progress dialog to disappear from the given CBD preference. */ |
+ private Criteria getWaitForProgressCompleteCriteria(final Preferences preferences) { |
+ return new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ ClearBrowsingDataPreferences fragment = |
+ (ClearBrowsingDataPreferences) preferences.getFragmentForTest(); |
+ return fragment.getProgressDialog() == null; |
+ } |
+ }; |
+ } |
+ |
/** |
* Tests that web apps are cleared when the "cookies and site data" option is selected. |
*/ |
@@ -95,14 +127,7 @@ public class ClearBrowsingDataPreferencesTest |
clearButton.getOnPreferenceClickListener().onPreferenceClick(clearButton); |
} |
}); |
- CriteriaHelper.pollUiThread(new Criteria() { |
- @Override |
- public boolean isSatisfied() { |
- ClearBrowsingDataPreferences fragment = |
- (ClearBrowsingDataPreferences) preferences.getFragmentForTest(); |
- return fragment.getProgressDialog() == null; |
- } |
- }); |
+ CriteriaHelper.pollUiThread(getWaitForProgressCompleteCriteria(preferences)); |
WebappRegistry.getRegisteredWebappIds(getActivity(), new WebappRegistry.FetchCallback() { |
@Override |
@@ -157,14 +182,7 @@ public class ClearBrowsingDataPreferencesTest |
clearButton.getOnPreferenceClickListener().onPreferenceClick(clearButton); |
} |
}); |
- CriteriaHelper.pollUiThread(new Criteria() { |
- @Override |
- public boolean isSatisfied() { |
- ClearBrowsingDataPreferences fragment = |
- (ClearBrowsingDataPreferences) preferences.getFragmentForTest(); |
- return fragment.getProgressDialog() == null; |
- } |
- }); |
+ CriteriaHelper.pollUiThread(getWaitForProgressCompleteCriteria(preferences)); |
// The web app should still exist in the registry. |
WebappRegistry.getRegisteredWebappIds(getActivity(), new WebappRegistry.FetchCallback() { |
@@ -247,14 +265,7 @@ public class ClearBrowsingDataPreferencesTest |
} |
}); |
- CriteriaHelper.pollUiThread(new Criteria() { |
- @Override |
- public boolean isSatisfied() { |
- ClearBrowsingDataPreferences fragment = |
- (ClearBrowsingDataPreferences) preferences.getFragmentForTest(); |
- return fragment.getProgressDialog() == null; |
- } |
- }); |
+ CriteriaHelper.pollUiThread(getWaitForProgressCompleteCriteria(preferences)); |
} |
/** |
@@ -447,6 +458,164 @@ public class ClearBrowsingDataPreferencesTest |
CriteriaHelper.pollUiThread(new PreferenceScreenClosedCriterion(preferences3)); |
} |
+ /** This presses the 'clear' button on the root preference page. */ |
+ private Runnable getPressClearRunnable(final Preferences preferences) { |
+ return new Runnable() { |
+ @Override |
+ public void run() { |
+ ClearBrowsingDataPreferences fragment = |
+ (ClearBrowsingDataPreferences) preferences.getFragmentForTest(); |
+ PreferenceScreen screen = fragment.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 Preferences preferences, final int whichButton) { |
+ return new Runnable() { |
+ @Override |
+ public void run() { |
+ ClearBrowsingDataPreferences fragment = |
+ (ClearBrowsingDataPreferences) preferences.getFragmentForTest(); |
+ assertNotNull(fragment); |
+ ConfirmImportantSitesDialogFragment dialog = |
+ fragment.getImportantSitesDialogFragment(); |
+ ((AlertDialog) dialog.getDialog()).getButton(whichButton).performClick(); |
+ } |
+ }; |
+ } |
+ |
+ /** |
+ * This criteria makes sure the important dialog fragment is shown, and the given number of |
+ * important sites are shown. |
+ */ |
+ private Criteria getImportantDialogShownCriteria( |
+ final Preferences preferences, final int numImportantSites) { |
+ return new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ ClearBrowsingDataPreferences fragment = |
+ (ClearBrowsingDataPreferences) preferences.getFragmentForTest(); |
+ assertNotNull(fragment); |
+ if (fragment.getImportantSitesDialogFragment() == null |
+ || !fragment.getImportantSitesDialogFragment().getDialog().isShowing()) { |
+ return false; |
+ } |
+ ListView sitesList = fragment.getImportantSitesDialogFragment().getSitesList(); |
+ return sitesList.getAdapter().getCount() == numImportantSites; |
+ } |
+ }; |
+ } |
+ |
+ /** |
+ * Tests that the important sites dialog is shown, and we can successfully uncheck options and |
+ * click clear. |
+ */ |
+ @CommandLineFlags.Add({"enable-features=ImportantSitesInCBD", "enable-site-engagement"}) |
+ @MediumTest |
+ public void testImportantSitesDialog() throws Exception { |
+ // Sign in. |
+ SigninTestUtil.get().addAndSignInTestAccount(); |
+ assertTrue(ChromeFeatureList.isEnabled(ChromeFeatureList.IMPORTANT_SITES_IN_CBD)); |
+ |
+ final String cookies_url = mTestServer.getURL("/chrome/test/data/android/cookie.html"); |
+ final String server_origin = GURLUtils.getOrigin(cookies_url); |
+ final String server_host = new URL(cookies_url).getHost(); |
+ |
+ // First mark our origins as important. |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ PrefServiceBridge.markOriginAsImportant("http://www.facebook.com"); |
+ PrefServiceBridge.markOriginAsImportant(GURLUtils.getOrigin(server_origin)); |
+ } |
+ }); |
+ |
+ // Load the page and clear any set cookies. |
+ loadUrl(cookies_url + "#clear"); |
+ assertEquals("\"\"", runJavaScriptCodeInCurrentTab("getCookie()")); |
+ runJavaScriptCodeInCurrentTab("setCookie()"); |
+ assertEquals("\"Foo=Bar\"", runJavaScriptCodeInCurrentTab("getCookie()")); |
+ |
+ // Load the page again and ensure the cookie still is set. |
+ loadUrl(cookies_url); |
+ assertEquals("\"Foo=Bar\"", runJavaScriptCodeInCurrentTab("getCookie()")); |
+ |
+ Preferences preferences = startPreferences(ClearBrowsingDataPreferences.class.getName()); |
+ |
+ // First test that we clear the cookies by default. |
+ |
+ // Clear in root preference. |
+ ThreadUtils.runOnUiThreadBlocking(getPressClearRunnable(preferences)); |
+ // Check that the important sites dialog is shown, and the list is visible. |
+ CriteriaHelper.pollUiThread(getImportantDialogShownCriteria(preferences, 2)); |
+ // Clear in important dialog. |
+ ThreadUtils.runOnUiThreadBlocking( |
+ getPressButtonInImportantDialogRunnable(preferences, AlertDialog.BUTTON_POSITIVE)); |
+ CriteriaHelper.pollUiThread(getWaitForProgressCompleteCriteria(preferences)); |
+ loadUrl(cookies_url); |
+ assertEquals("\"\"", runJavaScriptCodeInCurrentTab("getCookie()")); |
+ |
+ // Next, test that we can cancel, then deselect the origin, and the cookie will be there. |
+ |
+ // Re-add the important sites, as our engagement settings have been cleared. |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
Theresa
2016/05/12 20:22:41
nit: extract this into a helper method.
dmurph
2016/05/13 23:46:23
Done.
|
+ @Override |
+ public void run() { |
+ PrefServiceBridge.markOriginAsImportant("http://www.facebook.com"); |
+ PrefServiceBridge.markOriginAsImportant(server_origin); |
+ } |
+ }); |
+ |
+ runJavaScriptCodeInCurrentTab("setCookie()"); |
+ preferences = startPreferences(ClearBrowsingDataPreferences.class.getName()); |
+ final Preferences finalPreferences = preferences; |
+ ThreadUtils.runOnUiThreadBlocking(getPressClearRunnable(preferences)); |
+ // Check that the important sites dialog is shown, and the list is visible. |
+ CriteriaHelper.pollUiThread(getImportantDialogShownCriteria(preferences, 2)); |
+ // Press the cancel button first. |
+ ThreadUtils.runOnUiThreadBlocking( |
+ getPressButtonInImportantDialogRunnable(preferences, AlertDialog.BUTTON_NEGATIVE)); |
+ // Uncheck the first item (our internal web server). |
+ ThreadUtils.runOnUiThreadBlocking(getPressClearRunnable(preferences)); |
+ CriteriaHelper.pollUiThread(getImportantDialogShownCriteria(preferences, 2)); |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ ClearBrowsingDataPreferences fragment = |
+ (ClearBrowsingDataPreferences) finalPreferences.getFragmentForTest(); |
+ assertNotNull(fragment); |
+ 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() { |
+ ClearBrowsingDataPreferences fragment = |
+ (ClearBrowsingDataPreferences) finalPreferences.getFragmentForTest(); |
+ assertNotNull(fragment); |
+ ConfirmImportantSitesDialogFragment dialog = |
+ fragment.getImportantSitesDialogFragment(); |
+ return dialog.getDeselectedDomains().contains(server_host); |
+ } |
+ }); |
+ // Click the clear button. |
+ ThreadUtils.runOnUiThreadBlocking( |
+ getPressButtonInImportantDialogRunnable(preferences, AlertDialog.BUTTON_POSITIVE)); |
+ |
+ CriteriaHelper.pollUiThread(getWaitForProgressCompleteCriteria(preferences)); |
+ // And check we didn't clear our cookies. |
+ assertEquals("\"Foo=Bar\"", runJavaScriptCodeInCurrentTab("getCookie()")); |
+ } |
+ |
private void setDataTypesToClear(final List<DialogOption> typesToClear) { |
ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
@Override |