Index: chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2ac8ac9c331a0bc64788528f6a038328addd72c5 |
--- /dev/null |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java |
@@ -0,0 +1,224 @@ |
+// 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.permissions; |
+ |
+import android.test.suitebuilder.annotation.LargeTest; |
+import android.test.suitebuilder.annotation.MediumTest; |
+import android.test.suitebuilder.annotation.Smoke; |
+ |
+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.browser.tab.Tab; |
+import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil; |
+import org.chromium.device.geolocation.LocationProviderFactory; |
+import org.chromium.device.geolocation.MockLocationProvider; |
+ |
+/** |
+ * 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 PermissionTestCaseBase { |
+ 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"; |
+ |
+ public GeolocationTest() {} |
+ |
+ @Override |
+ protected void setUp() throws Exception { |
+ super.setUp(); |
+ LocationSettingsTestUtil.setSystemLocationSettingEnabled(true); |
+ LocationProviderFactory.setLocationProviderImpl(new MockLocationProvider()); |
+ } |
+ |
+ private void runTest(String javascript, int nUpdates, boolean withGesture, boolean isDialog, |
+ boolean hasSwitch, boolean toggleSwitch) throws Exception { |
+ Tab tab = getActivity().getActivityTab(); |
+ PermissionUpdateWaiter updateWaiter = new PermissionUpdateWaiter("Count:"); |
+ tab.addObserver(updateWaiter); |
+ runAllowTest(updateWaiter, TEST_FILE, javascript, nUpdates, withGesture, isDialog, |
+ hasSwitch, toggleSwitch); |
+ tab.removeObserver(updateWaiter); |
+ } |
+ |
+ /** |
+ * Verify Geolocation creates an InfoBar and receives a mock location. |
+ * @throws Exception |
+ */ |
+ @Smoke |
+ @MediumTest |
+ @Feature({"Location", "Main"}) |
+ public void testGeolocationPlumbingAllowedInfoBar() throws Exception { |
+ runTest("initiate_getCurrentPosition()", 1, false, false, false, false); |
+ } |
+ |
+ /** |
+ * 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 { |
+ runTest("initiate_getCurrentPosition()", 1, true, true, false, false); |
+ } |
+ |
+ /** |
+ * 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 { |
+ runTest("initiate_getCurrentPosition()", 1, false, true, false, false); |
+ } |
+ |
+ /** |
+ * 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 { |
+ runTest("initiate_getCurrentPosition()", 1, false, false, false, false); |
+ } |
+ |
+ /** |
+ * Verify Geolocation creates an InfoBar and receives multiple locations. |
+ * @throws Exception |
+ */ |
+ @MediumTest |
+ @Feature({"Location"}) |
+ public void testGeolocationWatchInfoBar() throws Exception { |
+ runTest("initiate_watchPosition()", 2, false, false, false, false); |
+ } |
+ |
+ /** |
+ * 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 { |
+ runTest("initiate_watchPosition()", 2, true, true, false, false); |
+ } |
+ |
+ /** |
+ * 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 { |
+ runTest("initiate_getCurrentPosition()", 1, false, false, true, false); |
+ } |
+ |
+ /** |
+ * 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 { |
+ runTest("initiate_getCurrentPosition()", 1, true, true, true, false); |
+ } |
+ |
+ /** |
+ * 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(); |
+ PermissionUpdateWaiter updateWaiter = new PermissionUpdateWaiter("Count:"); |
+ tab.addObserver(updateWaiter); |
+ runAllowTest(updateWaiter, TEST_FILE, "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(); |
+ PermissionUpdateWaiter updateWaiter = new PermissionUpdateWaiter("Count:"); |
+ tab.addObserver(updateWaiter); |
+ runAllowTest(updateWaiter, TEST_FILE, "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 { |
+ runTest("initiate_watchPosition()", 2, false, false, true, true); |
+ } |
+ |
+ /** |
+ * 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 { |
+ runTest("initiate_watchPosition()", 2, true, true, true, true); |
+ } |
+} |