Index: chrome/android/javatests/src/org/chromium/chrome/browser/GeolocationTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/GeolocationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/GeolocationTest.java |
deleted file mode 100644 |
index 215f537014cf94f2276fb7a4d1255ca31fbccbd0..0000000000000000000000000000000000000000 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/GeolocationTest.java |
+++ /dev/null |
@@ -1,466 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-package org.chromium.chrome.browser; |
- |
-import android.content.DialogInterface; |
-import android.support.v7.app.AlertDialog; |
-import android.support.v7.widget.SwitchCompat; |
-import android.test.suitebuilder.annotation.LargeTest; |
-import android.test.suitebuilder.annotation.MediumTest; |
-import android.test.suitebuilder.annotation.Smoke; |
- |
-import org.chromium.base.ThreadUtils; |
-import org.chromium.base.test.util.CallbackHelper; |
-import org.chromium.base.test.util.CommandLineFlags; |
-import org.chromium.base.test.util.Feature; |
-import org.chromium.base.test.util.RetryOnFailure; |
-import org.chromium.chrome.R; |
-import org.chromium.chrome.browser.infobar.InfoBar; |
-import org.chromium.chrome.browser.infobar.InfoBarContainer; |
-import org.chromium.chrome.browser.permissions.PermissionDialogController; |
-import org.chromium.chrome.browser.tab.EmptyTabObserver; |
-import org.chromium.chrome.browser.tab.Tab; |
-import org.chromium.chrome.test.ChromeActivityTestCaseBase; |
-import org.chromium.chrome.test.util.InfoBarTestAnimationListener; |
-import org.chromium.chrome.test.util.InfoBarUtil; |
-import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil; |
-import org.chromium.content.browser.test.util.Criteria; |
-import org.chromium.content.browser.test.util.CriteriaHelper; |
-import org.chromium.device.geolocation.LocationProviderFactory; |
-import org.chromium.device.geolocation.MockLocationProvider; |
-import org.chromium.net.test.EmbeddedTestServer; |
- |
-import java.util.concurrent.Callable; |
-import java.util.concurrent.ExecutionException; |
- |
-/** |
- * Test suite for Geo-Location functionality. |
- * |
- * These tests rely on the device being specially setup (which the bots do automatically): |
- * - Global location is enabled. |
- * - Google location is enabled. |
- */ |
-@RetryOnFailure |
-public class GeolocationTest extends ChromeActivityTestCaseBase<ChromeActivity> { |
- private static final String LOCATION_PROVIDER_MOCK = "locationProviderMock"; |
- private static final double LATITUDE = 51.01; |
- private static final double LONGITUDE = 0.23; |
- private static final float ACCURACY = 10; |
- private static final String TEST_FILE = "/content/test/data/android/geolocation.html"; |
- |
- private static final String MODAL_FLAG = "ModalPermissionPrompts"; |
- private static final String TOGGLE_FLAG = "DisplayPersistenceToggleInPermissionPrompts"; |
- private static final String MODAL_TOGGLE_FLAG = MODAL_FLAG + "," + TOGGLE_FLAG; |
- private static final String NO_GESTURE_FEATURE = |
- "enable-features=ModalPermissionPrompts<ModalPrompts"; |
- private static final String FORCE_FIELDTRIAL = "force-fieldtrials=ModalPrompts/Group1"; |
- private static final String FORCE_FIELDTRIAL_PARAMS = |
- "force-fieldtrial-params=ModalPrompts.Group1:require_gesture/false"; |
- |
- private InfoBarTestAnimationListener mListener; |
- private EmbeddedTestServer mTestServer; |
- |
- /** |
- * Waits till the geolocation JavaScript callback is called the specified number of times. |
- */ |
- private class GeolocationUpdateWaiter extends EmptyTabObserver { |
- private CallbackHelper mCallbackHelper; |
- private int mExpectedCount; |
- |
- public GeolocationUpdateWaiter() { |
- mCallbackHelper = new CallbackHelper(); |
- } |
- |
- @Override |
- public void onTitleUpdated(Tab tab) { |
- String expectedTitle = "Count:" + mExpectedCount; |
- if (getActivity().getActivityTab().getTitle().equals(expectedTitle)) { |
- mCallbackHelper.notifyCalled(); |
- } |
- } |
- |
- public void waitForNumUpdates(int numUpdates) throws Exception { |
- mExpectedCount = numUpdates; |
- mCallbackHelper.waitForCallback(0); |
- } |
- } |
- |
- /** |
- * Criteria class to detect whether the permission dialog is shown. |
- */ |
- private static class DialogShownCriteria extends Criteria { |
- private AlertDialog mDialog; |
- |
- public DialogShownCriteria(String error) { |
- super(error); |
- } |
- |
- public AlertDialog getDialog() { |
- return mDialog; |
- } |
- |
- @Override |
- public boolean isSatisfied() { |
- try { |
- return ThreadUtils.runOnUiThreadBlocking(new Callable<Boolean>() { |
- @Override |
- public Boolean call() { |
- mDialog = PermissionDialogController.getInstance() |
- .getCurrentDialogForTesting(); |
- return mDialog != null; |
- } |
- }); |
- } catch (ExecutionException e) { |
- return false; |
- } |
- } |
- } |
- |
- public GeolocationTest() { |
- super(ChromeActivity.class); |
- } |
- |
- @Override |
- protected void setUp() throws Exception { |
- super.setUp(); |
- |
- LocationSettingsTestUtil.setSystemLocationSettingEnabled(true); |
- |
- InfoBarContainer container = |
- getActivity().getTabModelSelector().getCurrentTab().getInfoBarContainer(); |
- mListener = new InfoBarTestAnimationListener(); |
- container.setAnimationListener(mListener); |
- |
- LocationProviderFactory.setLocationProviderImpl(new MockLocationProvider()); |
- |
- mTestServer = EmbeddedTestServer.createAndStartServer(getInstrumentation().getContext()); |
- } |
- |
- @Override |
- protected void tearDown() throws Exception { |
- mTestServer.stopAndDestroyServer(); |
- super.tearDown(); |
- } |
- |
- /** |
- * Simulates clicking a button on an AlertDialog. |
- */ |
- private void clickButton(final AlertDialog dialog, final int button) { |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- dialog.getButton(button).performClick(); |
- } |
- }); |
- } |
- |
- /** |
- * Runs a geolocation test that permits location access. |
- * @param updateWaiter The update waiter to wait for callbacks. |
- * @param javascript The JS function to run in the current tab to execute the test. |
- * @param nUpdates How many updates to wait for. |
- * @param withGeature True if we require a user gesture to trigger the prompt. |
- * @param isDialog True if we are expecting a permission dialog, false for an infobar. |
- * @param hasSwitch True if we are expecting a persistence switch, false otherwise. |
- * @param toggleSwitch True if we should toggle the switch off, false otherwise. |
- * @throws Exception |
- */ |
- private void runAllowTest(GeolocationUpdateWaiter updateWaiter, String javascript, int nUpdates, |
- boolean withGesture, boolean isDialog, boolean hasSwitch, boolean toggleSwitch) |
- throws Exception { |
- final String url = mTestServer.getURL(TEST_FILE); |
- loadUrl(url); |
- |
- if (withGesture) { |
- runJavaScriptCodeInCurrentTab("functionToRun = '" + javascript + "'"); |
- singleClickView(getActivity().getActivityTab().getView()); |
- } else { |
- runJavaScriptCodeInCurrentTab(javascript); |
- } |
- |
- if (isDialog) { |
- // We need to have a user gesture for the modal to appear. Use a click listener to |
- // trigger the JavaScript. |
- DialogShownCriteria criteria = new DialogShownCriteria("Dialog not shown"); |
- CriteriaHelper.pollInstrumentationThread(criteria); |
- replyToDialogAndWaitForUpdates( |
- updateWaiter, criteria.getDialog(), nUpdates, true, hasSwitch, toggleSwitch); |
- } else { |
- replyToInfoBarAndWaitForUpdates(updateWaiter, nUpdates, true, hasSwitch, toggleSwitch); |
- } |
- } |
- |
- private void replyToInfoBarAndWaitForUpdates(GeolocationUpdateWaiter updateWaiter, int nUpdates, |
- boolean allow, boolean hasSwitch, boolean toggleSwitch) throws Exception { |
- assertTrue("InfoBar not added.", mListener.addInfoBarAnimationFinished()); |
- InfoBar infobar = getInfoBars().get(0); |
- assertNotNull(infobar); |
- |
- if (hasSwitch) { |
- SwitchCompat persistSwitch = (SwitchCompat) infobar.getView().findViewById( |
- R.id.permission_infobar_persist_toggle); |
- assertNotNull(persistSwitch); |
- assertTrue(persistSwitch.isChecked()); |
- if (toggleSwitch) { |
- singleClickView(persistSwitch); |
- waitForCheckedState(persistSwitch, false); |
- } |
- } |
- |
- if (allow) { |
- assertTrue("Allow button wasn't found", InfoBarUtil.clickPrimaryButton(infobar)); |
- } else { |
- assertTrue("Block button wasn't found", InfoBarUtil.clickSecondaryButton(infobar)); |
- } |
- updateWaiter.waitForNumUpdates(nUpdates); |
- } |
- |
- private void replyToDialogAndWaitForUpdates(GeolocationUpdateWaiter updateWaiter, |
- AlertDialog dialog, int nUpdates, boolean allow, boolean hasSwitch, |
- boolean toggleSwitch) throws Exception { |
- if (hasSwitch) { |
- SwitchCompat persistSwitch = |
- (SwitchCompat) dialog.findViewById(R.id.permission_dialog_persist_toggle); |
- assertNotNull(persistSwitch); |
- assertTrue(persistSwitch.isChecked()); |
- if (toggleSwitch) { |
- singleClickView(persistSwitch); |
- waitForCheckedState(persistSwitch, false); |
- } |
- } |
- |
- if (allow) { |
- clickButton(dialog, DialogInterface.BUTTON_POSITIVE); |
- } else { |
- clickButton(dialog, DialogInterface.BUTTON_NEGATIVE); |
- } |
- updateWaiter.waitForNumUpdates(nUpdates); |
- } |
- |
- private void waitForCheckedState(final SwitchCompat persistSwitch, boolean isChecked) |
- throws InterruptedException { |
- CriteriaHelper.pollUiThread(Criteria.equals(isChecked, new Callable<Boolean>() { |
- @Override |
- public Boolean call() { |
- return persistSwitch.isChecked(); |
- } |
- })); |
- } |
- |
- /** |
- * Verify Geolocation creates an InfoBar and receives a mock location. |
- * @throws Exception |
- */ |
- @Smoke |
- @MediumTest |
- @Feature({"Location", "Main"}) |
- public void testGeolocationPlumbingAllowedInfoBar() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_getCurrentPosition()", 1, false, false, false, false); |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation creates a dialog and receives a mock location. |
- * @throws Exception |
- */ |
- @Smoke |
- @MediumTest |
- @CommandLineFlags.Add("enable-features=" + MODAL_FLAG) |
- @Feature({"Location", "Main"}) |
- public void testGeolocationPlumbingAllowedDialog() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_getCurrentPosition()", 1, true, true, false, false); |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation creates a dialog and receives a mock location when dialogs are explicitly |
- * enabled and permitted to trigger without a gesture. |
- * @throws Exception |
- */ |
- @Smoke |
- @MediumTest |
- @CommandLineFlags.Add({NO_GESTURE_FEATURE, FORCE_FIELDTRIAL, FORCE_FIELDTRIAL_PARAMS}) |
- @Feature({"Location", "Main"}) |
- public void testGeolocationPlumbingAllowedDialogNoGesture() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_getCurrentPosition()", 1, false, true, false, false); |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation shows an infobar and receives a mock location if the modal flag is on but |
- * no user gesture is specified. |
- * @throws Exception |
- */ |
- @Smoke |
- @MediumTest |
- @CommandLineFlags.Add("enable-features=" + MODAL_FLAG) |
- @Feature({"Location", "Main"}) |
- public void testGeolocationPlumbingAllowedNoGestureShowsInfoBar() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_getCurrentPosition()", 1, false, false, false, false); |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation creates an InfoBar and receives multiple locations. |
- * @throws Exception |
- */ |
- @MediumTest |
- @Feature({"Location"}) |
- public void testGeolocationWatchInfoBar() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_watchPosition()", 2, false, false, false, false); |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation creates a dialog and receives multiple locations. |
- * @throws Exception |
- */ |
- @MediumTest |
- @CommandLineFlags.Add("enable-features=" + MODAL_FLAG) |
- @Feature({"Location"}) |
- public void testGeolocationWatchDialog() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_watchPosition()", 2, true, true, false, false); |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation creates an infobar with a persistence toggle if that feature is enabled. |
- * Check the switch appears and that permission is granted with it toggled on. |
- * @throws Exception |
- */ |
- @MediumTest |
- @CommandLineFlags.Add("enable-features=" + TOGGLE_FLAG) |
- @Feature({"Location"}) |
- public void testGeolocationPersistenceAllowedInfoBar() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_getCurrentPosition()", 1, false, false, true, false); |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation creates a dialog with a persistence toggle if both features are enabled. |
- * Check the switch appears and that permission is granted with it toggled on. |
- * @throws Exception |
- */ |
- @MediumTest |
- @CommandLineFlags.Add("enable-features=" + MODAL_TOGGLE_FLAG) |
- @Feature({"Location"}) |
- public void testGeolocationPersistenceAllowedDialog() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_getCurrentPosition()", 1, true, true, true, false); |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation creates an infobar with a persistence toggle if that feature is enabled. |
- * Check the switch toggled off. |
- * @throws Exception |
- */ |
- @MediumTest |
- @CommandLineFlags.Add("enable-features=" + TOGGLE_FLAG) |
- @Feature({"Location"}) |
- public void testGeolocationPersistenceOffAllowedInfoBar() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_getCurrentPosition()", 1, false, false, true, true); |
- |
- // Ask for permission again and make sure it doesn't prompt again (grant is cached in the |
- // Blink layer). |
- runJavaScriptCodeInCurrentTab("initiate_getCurrentPosition()"); |
- updateWaiter.waitForNumUpdates(2); |
- |
- // Ask for permission a third time and make sure it doesn't prompt again. |
- runJavaScriptCodeInCurrentTab("initiate_getCurrentPosition()"); |
- updateWaiter.waitForNumUpdates(3); |
- |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation creates a dialog with a persistence toggle if that feature is enabled. |
- * Check the switch toggled off. |
- * @throws Exception |
- */ |
- @MediumTest |
- @CommandLineFlags.Add("enable-features=" + MODAL_TOGGLE_FLAG) |
- @Feature({"Location"}) |
- public void testGeolocationPersistenceOffAllowedDialog() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_getCurrentPosition()", 1, true, true, true, true); |
- |
- // Ask for permission again and make sure it doesn't prompt again (grant is cached in the |
- // Blink layer). |
- singleClickView(getActivity().getActivityTab().getView()); |
- updateWaiter.waitForNumUpdates(2); |
- |
- // Ask for permission a third time and make sure it doesn't prompt again. |
- singleClickView(getActivity().getActivityTab().getView()); |
- updateWaiter.waitForNumUpdates(3); |
- |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation prompts once and sends multiple locations with a persistence toggle if |
- * that feature is enabled. Use an infobar. |
- * @throws Exception |
- */ |
- @LargeTest |
- @CommandLineFlags.Add("enable-features=" + TOGGLE_FLAG) |
- @Feature({"Location"}) |
- public void testGeolocationWatchPersistenceOffAllowedInfoBar() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_watchPosition()", 2, false, false, true, true); |
- tab.removeObserver(updateWaiter); |
- } |
- |
- /** |
- * Verify Geolocation prompts once and sends multiple locations with a persistence toggle if |
- * that feature is enabled. Use a dialog. |
- * @throws Exception |
- */ |
- @LargeTest |
- @CommandLineFlags.Add("enable-features=" + MODAL_TOGGLE_FLAG) |
- @Feature({"Location"}) |
- public void testGeolocationWatchPersistenceOffAllowedDialog() throws Exception { |
- Tab tab = getActivity().getActivityTab(); |
- GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter(); |
- tab.addObserver(updateWaiter); |
- runAllowTest(updateWaiter, "initiate_watchPosition()", 2, true, true, true, true); |
- tab.removeObserver(updateWaiter); |
- } |
- |
- @Override |
- public void startMainActivity() throws InterruptedException { |
- startMainActivityOnBlankPage(); |
- } |
-} |