Index: android_webview/javatests/src/org/chromium/android_webview/test/GeolocationTest.java |
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/GeolocationTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/GeolocationTest.java |
index 98f45f7a8b82093c6f8b131f04efd376241ae023..5da48dc01650c45944b25567045d9503bbba08f7 100644 |
--- a/android_webview/javatests/src/org/chromium/android_webview/test/GeolocationTest.java |
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/GeolocationTest.java |
@@ -6,9 +6,11 @@ package org.chromium.android_webview.test; |
import android.os.Build; |
import android.test.suitebuilder.annotation.MediumTest; |
+import android.test.suitebuilder.annotation.SmallTest; |
import android.webkit.GeolocationPermissions; |
import org.chromium.android_webview.AwContents; |
+import org.chromium.base.annotations.SuppressFBWarnings; |
import org.chromium.base.test.util.Feature; |
import org.chromium.base.test.util.MinAndroidSdkLevel; |
import org.chromium.content.browser.LocationProviderFactory; |
@@ -37,13 +39,17 @@ public class GeolocationTest extends AwTestBase { |
+ " function gotPos(position) {\n" |
+ " positionCount++;\n" |
+ " }\n" |
+ + " function errorCallback(error){" |
+ + " window.document.title = 'deny';" |
+ + " console.log('navigator.getCurrentPosition error: ', error);" |
+ + " }" |
+ " function initiate_getCurrentPosition() {\n" |
+ " navigator.geolocation.getCurrentPosition(\n" |
- + " gotPos, function() { }, { });\n" |
+ + " gotPos, errorCallback, { });\n" |
+ " }\n" |
+ " function initiate_watchPosition() {\n" |
+ " navigator.geolocation.watchPosition(\n" |
- + " gotPos, function() { }, { });\n" |
+ + " gotPos, errorCallback, { });\n" |
+ " }\n" |
+ " </script>\n" |
+ " </head>\n" |
@@ -51,38 +57,47 @@ public class GeolocationTest extends AwTestBase { |
+ " </body>\n" |
+ "</html>"; |
- @Override |
- public void setUp() throws Exception { |
- super.setUp(); |
- mContentsClient = new TestAwContentsClient() { |
- @Override |
- public void onGeolocationPermissionsShowPrompt(String origin, |
- GeolocationPermissions.Callback callback) { |
- callback.invoke(origin, true, true); |
- } |
- }; |
- mAwContents = createAwTestContainerViewOnMainSync(mContentsClient).getAwContents(); |
- enableJavaScriptOnUiThread(mAwContents); |
- setupGeolocation(); |
+ private static class GrantPermisionAwContentClient extends TestAwContentsClient { |
+ @Override |
+ public void onGeolocationPermissionsShowPrompt(String origin, |
+ GeolocationPermissions.Callback callback) { |
+ callback.invoke(origin, true, true); |
+ } |
} |
- @Override |
- public void tearDown() throws Exception { |
- mMockLocationProvider.stopUpdates(); |
- super.tearDown(); |
+ private static class DefaultPermisionAwContentClient extends TestAwContentsClient { |
+ @Override |
+ public void onGeolocationPermissionsShowPrompt(String origin, |
+ GeolocationPermissions.Callback callback) { |
+ // This method is empty intentionally to simulate callback is not referenced. |
+ } |
} |
- private void setupGeolocation() { |
+ private void initAwContents(TestAwContentsClient contentsClient) throws Exception { |
+ mContentsClient = contentsClient; |
+ mAwContents = createAwTestContainerViewOnMainSync(mContentsClient).getAwContents(); |
+ enableJavaScriptOnUiThread(mAwContents); |
getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
mAwContents.getSettings().setGeolocationEnabled(true); |
} |
}); |
+ } |
+ |
+ @Override |
+ public void setUp() throws Exception { |
+ super.setUp(); |
mMockLocationProvider = new MockLocationProvider(); |
LocationProviderFactory.setLocationProviderImpl(mMockLocationProvider); |
} |
+ @Override |
+ public void tearDown() throws Exception { |
+ mMockLocationProvider.stopUpdates(); |
+ super.tearDown(); |
+ } |
+ |
private int getPositionCountFromJS() { |
int result = -1; |
try { |
@@ -110,6 +125,7 @@ public class GeolocationTest extends AwTestBase { |
@MediumTest |
@Feature({"AndroidWebView"}) |
public void testGetPosition() throws Throwable { |
+ initAwContents(new GrantPermisionAwContentClient()); |
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
RAW_HTML, "text/html", false); |
@@ -137,6 +153,7 @@ public class GeolocationTest extends AwTestBase { |
@MediumTest |
@Feature({"AndroidWebView"}) |
public void testWatchPosition() throws Throwable { |
+ initAwContents(new GrantPermisionAwContentClient()); |
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
RAW_HTML, "text/html", false); |
@@ -153,6 +170,7 @@ public class GeolocationTest extends AwTestBase { |
@MediumTest |
@Feature({"AndroidWebView"}) |
public void testPauseGeolocationOnPause() throws Throwable { |
+ initAwContents(new GrantPermisionAwContentClient()); |
// Start a watch going. |
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
RAW_HTML, "text/html", false); |
@@ -204,6 +222,7 @@ public class GeolocationTest extends AwTestBase { |
@MediumTest |
@Feature({"AndroidWebView"}) |
public void testPauseAwContentsBeforeNavigating() throws Throwable { |
+ initAwContents(new GrantPermisionAwContentClient()); |
getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
@@ -241,6 +260,7 @@ public class GeolocationTest extends AwTestBase { |
@MediumTest |
@Feature({"AndroidWebView"}) |
public void testResumeWhenNotStarted() throws Throwable { |
+ initAwContents(new GrantPermisionAwContentClient()); |
getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
@@ -261,4 +281,23 @@ public class GeolocationTest extends AwTestBase { |
ensureGeolocationRunning(false); |
} |
+ @Feature({"AndroidWebView"}) |
+ @SmallTest |
+ public void testDenyAccessByDefault() throws Throwable { |
+ initAwContents(new DefaultPermisionAwContentClient()); |
+ loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
+ RAW_HTML, "text/html", false); |
+ |
+ mAwContents.evaluateJavaScriptForTests("initiate_getCurrentPosition();", null); |
+ |
+ poll(new Callable<Boolean>() { |
+ @SuppressFBWarnings("DM_GC") |
+ @Override |
+ public Boolean call() throws Exception { |
+ Runtime.getRuntime().gc(); |
+ return "deny".equals(getTitleOnUiThread(mAwContents)); |
+ } |
+ }); |
+ } |
+ |
} |