| // Copyright 2017 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.support.test.filters.MediumTest; |
| |
| import org.junit.Assert; |
| import org.junit.Before; |
| import org.junit.Rule; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| import org.chromium.base.test.util.CommandLineFlags; |
| import org.chromium.base.test.util.Feature; |
| import org.chromium.content_public.browser.WebContents; |
| import org.chromium.content_public.browser.test.util.JavaScriptUtils; |
| |
| import java.util.concurrent.TimeUnit; |
| import java.util.concurrent.TimeoutException; |
| |
| /** |
| * Test that enabling and attempting to use WebVR neither causes any crashes |
| * nor returns any VRDisplays. |
| */ |
| @RunWith(AwJUnit4ClassRunner.class) |
| public class WebViewWebVrTest { |
| @Rule |
| public AwActivityTestRule mActivityTestRule = new AwActivityTestRule(); |
| |
| private TestAwContentsClient mContentsClient; |
| private AwTestContainerView mTestContainerView; |
| private WebContents mWebContents; |
| |
| @Before |
| public void setUp() throws Exception { |
| mContentsClient = new TestAwContentsClient(); |
| mTestContainerView = mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient); |
| mWebContents = mTestContainerView.getWebContents(); |
| AwActivityTestRule.enableJavaScriptOnUiThread(mTestContainerView.getAwContents()); |
| } |
| |
| @Test |
| @MediumTest |
| @Feature({"AndroidWebView"}) |
| @CommandLineFlags.Add("enable-webvr") |
| public void testWebVrNotFunctional() throws Throwable { |
| mActivityTestRule.loadUrlSync(mTestContainerView.getAwContents(), |
| mContentsClient.getOnPageFinishedHelper(), |
| "file:///android_asset/webvr_not_functional_test.html"); |
| // Poll the boolean to know when the promise resolves |
| AwActivityTestRule.pollInstrumentationThread(() -> { |
| String result = "false"; |
| try { |
| result = JavaScriptUtils.executeJavaScriptAndWaitForResult( |
| mWebContents, "promiseResolved", 100, TimeUnit.MILLISECONDS); |
| } catch (InterruptedException | TimeoutException e) { |
| // Expected to happen regularly, do nothing |
| } |
| return Boolean.parseBoolean(result); |
| }); |
| |
| // Assert that the promise resolved instead of rejecting, but returned |
| // 0 VRDisplays |
| Assert.assertTrue(JavaScriptUtils |
| .executeJavaScriptAndWaitForResult( |
| mWebContents, "numDisplays", 100, TimeUnit.MILLISECONDS) |
| .equals("0")); |
| } |
| } |