| 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));
|
| + }
|
| + });
|
| + }
|
| +}
|
| +
|
|
|