Index: android_webview/javatests/src/org/chromium/android_webview/test/AwPermissionManagerTest.java |
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwPermissionManagerTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwPermissionManagerTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4684d89e911bdb831d7772d65c51a7b859ad3c81 |
--- /dev/null |
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwPermissionManagerTest.java |
@@ -0,0 +1,98 @@ |
+// 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.android_webview.test; |
+ |
+import android.os.Build; |
+import android.os.Handler; |
+import android.os.Looper; |
+import android.test.suitebuilder.annotation.SmallTest; |
+ |
+import org.chromium.android_webview.AwContents; |
+import org.chromium.android_webview.permission.AwPermissionRequest; |
+import org.chromium.android_webview.test.util.CommonResources; |
+import org.chromium.base.test.util.Feature; |
+import org.chromium.base.test.util.MinAndroidSdkLevel; |
+import org.chromium.net.test.util.TestWebServer; |
+ |
+import java.util.concurrent.Callable; |
+ |
+/** |
+ * Test AwPermissionManager. |
+ */ |
+@MinAndroidSdkLevel(Build.VERSION_CODES.KITKAT) |
+public class AwPermissionManagerTest extends AwTestBase { |
+ |
+ private static final String REQUEST_DUPLICATE = "<html> <script>" |
+ + "navigator.requestMIDIAccess({sysex: true}).then(function() {" |
+ + "});" |
+ + "navigator.requestMIDIAccess({sysex: true}).then(function() {" |
+ + " window.document.title = 'second-granted';" |
+ + "});" |
+ + "</script><body>" |
+ + "</body></html>"; |
+ |
+ private TestWebServer mTestWebServer; |
+ private String mPage; |
+ |
+ @Override |
+ protected void setUp() throws Exception { |
+ super.setUp(); |
+ mTestWebServer = TestWebServer.start(); |
+ } |
+ |
+ @Override |
+ protected void tearDown() throws Exception { |
+ mTestWebServer.shutdown(); |
+ mTestWebServer = null; |
+ super.tearDown(); |
+ } |
+ |
+ @Feature({"AndroidWebView"}) |
+ @SmallTest |
+ public void testRequestMultiple() throws Throwable { |
+ mPage = mTestWebServer.setResponse("/permissions", REQUEST_DUPLICATE, |
+ CommonResources.getTextHtmlHeaders(true)); |
+ |
+ TestAwContentsClient contentsClient = new TestAwContentsClient() { |
+ private boolean mCalled = false; |
+ |
+ @Override |
+ public void onPermissionRequest(final AwPermissionRequest awPermissionRequest) { |
+ if (mCalled) { |
+ fail("Only one request was expected"); |
+ return; |
+ } |
+ mCalled = true; |
+ |
+ // Emulate a delayed response to the request by running four seconds in the future. |
+ Handler handler = new Handler(Looper.myLooper()); |
+ handler.postDelayed(new Runnable() { |
+ @Override |
+ public void run() { |
+ awPermissionRequest.grant(); |
+ } |
+ }, 4000); |
+ } |
+ }; |
+ |
+ final AwTestContainerView testContainerView = |
+ createAwTestContainerViewOnMainSync(contentsClient); |
+ final AwContents awContents = testContainerView.getAwContents(); |
+ enableJavaScriptOnUiThread(awContents); |
+ loadUrlAsync(awContents, mPage, null); |
+ pollTitleAs("second-granted", awContents); |
+ } |
+ |
+ private void pollTitleAs(final String title, final AwContents awContents) |
+ throws Exception { |
+ poll(new Callable<Boolean>() { |
+ @Override |
+ public Boolean call() throws Exception { |
+ return title.equals(getTitleOnUiThread(awContents)); |
+ } |
+ }); |
+ } |
+} |
+ |