Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(892)

Side by Side Diff: android_webview/javatests/src/org/chromium/android_webview/test/GeolocationTest.java

Issue 1882783002: [WebView] Disallow geolocation on insecure origins for apps targeting N and higher. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address Torne's comment Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.android_webview.test; 5 package org.chromium.android_webview.test;
6 6
7 import android.content.Context;
7 import android.test.suitebuilder.annotation.MediumTest; 8 import android.test.suitebuilder.annotation.MediumTest;
8 import android.test.suitebuilder.annotation.SmallTest; 9 import android.test.suitebuilder.annotation.SmallTest;
9 import android.webkit.GeolocationPermissions; 10 import android.webkit.GeolocationPermissions;
10 11
11 import org.chromium.android_webview.AwContents; 12 import org.chromium.android_webview.AwContents;
13 import org.chromium.android_webview.AwSettings;
12 import org.chromium.base.annotations.SuppressFBWarnings; 14 import org.chromium.base.annotations.SuppressFBWarnings;
13 import org.chromium.base.test.util.Feature; 15 import org.chromium.base.test.util.Feature;
14 import org.chromium.content.browser.LocationProviderFactory; 16 import org.chromium.content.browser.LocationProviderFactory;
15 import org.chromium.content.browser.test.util.MockLocationProvider; 17 import org.chromium.content.browser.test.util.MockLocationProvider;
16 18
17 import java.util.concurrent.Callable; 19 import java.util.concurrent.Callable;
18 20
19 /** 21 /**
20 * Test suite for Geolocation in AwContents. Smoke tests for 22 * Test suite for Geolocation in AwContents. Smoke tests for
21 * basic functionality, and tests to ensure the AwContents.onPause 23 * basic functionality, and tests to ensure the AwContents.onPause
22 * and onResume APIs affect Geolocation as expected. 24 * and onResume APIs affect Geolocation as expected.
23 */ 25 */
24 public class GeolocationTest extends AwTestBase { 26 public class GeolocationTest extends AwTestBase {
25 private TestAwContentsClient mContentsClient; 27 private TestAwContentsClient mContentsClient;
26 private AwContents mAwContents; 28 private AwContents mAwContents;
27 private MockLocationProvider mMockLocationProvider; 29 private MockLocationProvider mMockLocationProvider;
30 private TestDependencyFactory mOverridenFactory;
28 31
29 private static final String RAW_HTML = 32 private static final String RAW_HTML =
30 "<!DOCTYPE html>\n" 33 "<!DOCTYPE html>\n"
31 + "<html>\n" 34 + "<html>\n"
32 + " <head>\n" 35 + " <head>\n"
33 + " <title>Geolocation</title>\n" 36 + " <title>Geolocation</title>\n"
34 + " <script>\n" 37 + " <script>\n"
35 + " var positionCount = 0;\n" 38 + " var positionCount = 0;\n"
36 + " function gotPos(position) {\n" 39 + " function gotPos(position) {\n"
37 + " positionCount++;\n" 40 + " positionCount++;\n"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 @Override 88 @Override
86 public void setUp() throws Exception { 89 public void setUp() throws Exception {
87 super.setUp(); 90 super.setUp();
88 mMockLocationProvider = new MockLocationProvider(); 91 mMockLocationProvider = new MockLocationProvider();
89 LocationProviderFactory.setLocationProviderImpl(mMockLocationProvider); 92 LocationProviderFactory.setLocationProviderImpl(mMockLocationProvider);
90 } 93 }
91 94
92 @Override 95 @Override
93 public void tearDown() throws Exception { 96 public void tearDown() throws Exception {
94 mMockLocationProvider.stopUpdates(); 97 mMockLocationProvider.stopUpdates();
98 mOverridenFactory = null;
95 super.tearDown(); 99 super.tearDown();
96 } 100 }
97 101
102 @Override
103 protected TestDependencyFactory createTestDependencyFactory() {
104 return mOverridenFactory == null ? new TestDependencyFactory() : mOverri denFactory;
105 }
106
98 private int getPositionCountFromJS() { 107 private int getPositionCountFromJS() {
99 int result = -1; 108 int result = -1;
100 try { 109 try {
101 result = Integer.parseInt(executeJavaScriptAndWaitForResult( 110 result = Integer.parseInt(executeJavaScriptAndWaitForResult(
102 mAwContents, mContentsClient, "positionCount")); 111 mAwContents, mContentsClient, "positionCount"));
103 } catch (Exception e) { 112 } catch (Exception e) {
104 fail("Unable to get positionCount"); 113 fail("Unable to get positionCount");
105 } 114 }
106 return result; 115 return result;
107 } 116 }
108 117
109 private void ensureGeolocationRunning(final boolean running) throws Exceptio n { 118 private void ensureGeolocationRunning(final boolean running) throws Exceptio n {
110 pollInstrumentationThread(new Callable<Boolean>() { 119 pollInstrumentationThread(new Callable<Boolean>() {
111 @Override 120 @Override
112 public Boolean call() throws Exception { 121 public Boolean call() throws Exception {
113 return mMockLocationProvider.isRunning() == running; 122 return mMockLocationProvider.isRunning() == running;
114 } 123 }
115 }); 124 });
116 } 125 }
117 126
127 private static class GeolocationOnInsecureOriginsTestDependencyFactory
128 extends TestDependencyFactory {
129 private boolean mAllow;
130 public GeolocationOnInsecureOriginsTestDependencyFactory(boolean allow) {
131 mAllow = allow;
132 }
133
134 @Override
135 public AwSettings createAwSettings(Context context, boolean supportLegac yQuirks) {
136 return new AwSettings(context, false /* isAccessFromFileURLsGrantedB yDefault */,
137 supportLegacyQuirks, false /* allowEmptyDocumentPersistence */, mAllow);
138 }
139 }
118 140
119 /** 141 /**
120 * Ensure that a call to navigator.getCurrentPosition works in WebView. 142 * Ensure that a call to navigator.getCurrentPosition works in WebView.
121 */ 143 */
122 @MediumTest 144 @MediumTest
123 @Feature({"AndroidWebView"}) 145 @Feature({"AndroidWebView"})
124 public void testGetPosition() throws Throwable { 146 public void testGetPosition() throws Throwable {
125 initAwContents(new GrantPermisionAwContentClient()); 147 initAwContents(new GrantPermisionAwContentClient());
126 loadDataWithBaseUrlSync(mAwContents, mContentsClient.getOnPageFinishedHe lper(), RAW_HTML, 148 loadDataWithBaseUrlSync(mAwContents, mContentsClient.getOnPageFinishedHe lper(), RAW_HTML,
127 "text/html", false, "https://google.com/", "about:blank"); 149 "text/html", false, "https://google.com/", "about:blank");
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 pollInstrumentationThread(new Callable<Boolean>() { 312 pollInstrumentationThread(new Callable<Boolean>() {
291 @SuppressFBWarnings("DM_GC") 313 @SuppressFBWarnings("DM_GC")
292 @Override 314 @Override
293 public Boolean call() throws Exception { 315 public Boolean call() throws Exception {
294 Runtime.getRuntime().gc(); 316 Runtime.getRuntime().gc();
295 return "deny".equals(getTitleOnUiThread(mAwContents)); 317 return "deny".equals(getTitleOnUiThread(mAwContents));
296 } 318 }
297 }); 319 });
298 } 320 }
299 321
322 @Feature({"AndroidWebView"})
323 @SmallTest
324 public void testDenyOnInsecureOrigins() throws Throwable {
325 mOverridenFactory = new GeolocationOnInsecureOriginsTestDependencyFactor y(false);
326 initAwContents(new GrantPermisionAwContentClient());
327 loadDataWithBaseUrlSync(mAwContents, mContentsClient.getOnPageFinishedHe lper(), RAW_HTML,
328 "text/html", false, "http://google.com/", "about:blank");
329
330 mAwContents.evaluateJavaScriptForTests("initiate_getCurrentPosition();", null);
331
332 pollInstrumentationThread(new Callable<Boolean>() {
333 @SuppressFBWarnings("DM_GC")
334 @Override
335 public Boolean call() throws Exception {
336 Runtime.getRuntime().gc();
337 return "deny".equals(getTitleOnUiThread(mAwContents));
338 }
339 });
340 }
341
342 @Feature({"AndroidWebView"})
343 @SmallTest
344 public void testAllowOnInsecureOriginsByDefault() throws Throwable {
345 initAwContents(new GrantPermisionAwContentClient());
346 loadDataWithBaseUrlSync(mAwContents, mContentsClient.getOnPageFinishedHe lper(), RAW_HTML,
347 "text/html", false, "http://google.com/", "about:blank");
348
349 mAwContents.evaluateJavaScriptForTests("initiate_getCurrentPosition();", null);
350
351 pollInstrumentationThread(new Callable<Boolean>() {
352 @Override
353 public Boolean call() throws Exception {
354 return getPositionCountFromJS() > 0;
355 }
356 });
357 }
358
300 } 359 }
OLDNEW
« no previous file with comments | « android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java ('k') | android_webview/native/aw_settings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698