Chromium Code Reviews| 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..975c928438b78eb3549158a8e86d2c97be8836d4 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) { |
|
Theresa
2016/05/16 23:45:09
nit: Pass in ClearBrowsingDataPreferences & cast b
dmurph
2016/05/18 23:28:00
Done.
|
| + 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,217 @@ 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) { |
|
Theresa
2016/05/16 23:45:09
nit: same comment here w/ casting.
dmurph
2016/05/18 23:28:00
Done.
|
| + 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; |
| + } |
| + }; |
| + } |
| + |
| + /** 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.get().addAndSignInTestAccount(); |
| + assertTrue(ChromeFeatureList.isEnabled(ChromeFeatureList.IMPORTANT_SITES_IN_CBD)); |
| + |
| + final String test_url = |
| + mTestServer.getURL("/chrome/test/data/android/storage_persistance.html"); |
| + final String server_origin = GURLUtils.getOrigin(test_url); |
| + final String[] important_origins = {"http://www.facebook.com", server_origin}; |
| + // First mark our origins as important. |
| + ThreadUtils.runOnUiThreadBlocking(getMarkOriginsAsImportantRunnable(important_origins)); |
| + |
| + // Load the page and clear any set storage. |
| + loadUrl(test_url + "#clear"); |
| + assertEquals("false", runJavaScriptCodeInCurrentTab("hasAllStorage()")); |
| + runJavaScriptCodeInCurrentTab("setStorage()"); |
| + assertEquals("true", runJavaScriptCodeInCurrentTab("hasAllStorage()")); |
| + |
| + // Load the page again and ensure the cookie still is set. |
| + loadUrl(test_url); |
| + assertEquals("true", runJavaScriptCodeInCurrentTab("hasAllStorage()")); |
| + |
| + Preferences preferences = startPreferences(ClearBrowsingDataPreferences.class.getName()); |
|
Theresa
2016/05/16 23:45:09
You could do the cast here.
dmurph
2016/05/18 23:28:00
Done.
|
| + |
| + // 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)); |
| + |
| + // Verify we don't have storage. |
| + loadUrl(test_url); |
| + 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.get().addAndSignInTestAccount(); |
| + assertTrue(ChromeFeatureList.isEnabled(ChromeFeatureList.IMPORTANT_SITES_IN_CBD)); |
| + |
| + final String test_url = |
| + mTestServer.getURL("/chrome/test/data/android/storage_persistance.html"); |
| + final String server_origin = GURLUtils.getOrigin(test_url); |
| + final String[] important_origins = {"http://www.facebook.com", server_origin}; |
| + // First mark our origins as important. |
| + ThreadUtils.runOnUiThreadBlocking(getMarkOriginsAsImportantRunnable(important_origins)); |
| + |
| + // Load the page and clear any set storage. |
| + loadUrl(test_url + "#clear"); |
| + assertEquals("false", runJavaScriptCodeInCurrentTab("hasAllStorage()")); |
| + runJavaScriptCodeInCurrentTab("setStorage()"); |
| + assertEquals("true", runJavaScriptCodeInCurrentTab("hasAllStorage()")); |
| + |
| + Preferences preferences = startPreferences(ClearBrowsingDataPreferences.class.getName()); |
| + 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. |
| + ThreadUtils.runOnUiThreadBlocking( |
| + getPressButtonInImportantDialogRunnable(preferences, AlertDialog.BUTTON_NEGATIVE)); |
| + preferences.finish(); |
| + loadUrl(test_url); |
| + 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.get().addAndSignInTestAccount(); |
| + assertTrue(ChromeFeatureList.isEnabled(ChromeFeatureList.IMPORTANT_SITES_IN_CBD)); |
| + |
| + final String test_url = |
| + mTestServer.getURL("/chrome/test/data/android/storage_persistance.html"); |
| + final String server_origin = GURLUtils.getOrigin(test_url); |
| + final String server_host = new URL(test_url).getHost(); |
| + final String[] important_origins = {"http://www.facebook.com", server_origin}; |
| + |
| + // First mark our origins as important. |
| + ThreadUtils.runOnUiThreadBlocking(getMarkOriginsAsImportantRunnable(important_origins)); |
| + |
| + // Load the page and clear any set storage. |
| + loadUrl(test_url + "#clear"); |
| + assertEquals("false", runJavaScriptCodeInCurrentTab("hasAllStorage()")); |
| + runJavaScriptCodeInCurrentTab("setStorage()"); |
| + assertEquals("true", runJavaScriptCodeInCurrentTab("hasAllStorage()")); |
| + |
| + final Preferences preferences = |
| + startPreferences(ClearBrowsingDataPreferences.class.getName()); |
| + |
| + // 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) preferences.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) preferences.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("true", runJavaScriptCodeInCurrentTab("hasAllStorage()")); |
| + } |
| + |
| private void setDataTypesToClear(final List<DialogOption> typesToClear) { |
| ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| @Override |