Commit 0b49f5dc authored by Maxim Kolosovskiy's avatar Maxim Kolosovskiy Committed by Commit Bot

Revert "Cleanup XR usage of EmbeddedTestServer"

This reverts commit a8f4b170.

Reason for revert: Suspect this CL caused a failure of org.chromium.chrome.browser.customtabs.CustomTabActivityTest#testCloseButtonBehaviourWithDynamicModule 

https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Android%20CFI/3725

org.junit.ComparisonFailure: expected:<http[s://www.google.com/search?q=cat]> but was:<http[://127.0.0.1:37221/chrome/test/data/android/test.html]>
  	at org.junit.Assert.assertEquals(Assert.java:115)
  	at org.junit.Assert.assertEquals(Assert.java:144)
  	at org.chromium.chrome.browser.customtabs.CustomTabActivityTest.testCloseButtonBehaviourWithDynamicModule(CustomTabActivityTest.java:1195)


Original change's description:
> Cleanup XR usage of EmbeddedTestServer
> 
> Cleans up manual usage of EmbeddedTestServer in XR tests, which was both
> adding a lot of duplicate code and had the potential to fail to clean up
> the server if the test failed, which could then affect other tests.
> 
> This is achieved by making EmbeddedTestServerRule lazy and applying it
> to all ChromeActivityTestRules, not just WebappActivityTestRule.
> 
> Bug: 901923
> Change-Id: I431dac3ce2488a1a5762a1ab1f5ec68aea16c9f5
> Reviewed-on: https://chromium-review.googlesource.com/c/1320024
> Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
> Reviewed-by: Tommy Nyquist <nyquist@chromium.org>
> Reviewed-by: Paul Jensen <pauljensen@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#609556}

TBR=nyquist@chromium.org,pauljensen@chromium.org,bsheedy@chromium.org

Change-Id: I676439292a0f90ee353dadef415437415d82bba4
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 901923
Reviewed-on: https://chromium-review.googlesource.com/c/1343265Reviewed-by: default avatarMaxim Kolosovskiy <kolos@chromium.org>
Commit-Queue: Maxim Kolosovskiy <kolos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609665}
parent d92a618e
...@@ -13,8 +13,10 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V ...@@ -13,8 +13,10 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.PointF; import android.graphics.PointF;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.LargeTest; import android.support.test.filters.LargeTest;
import org.junit.After;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
...@@ -33,6 +35,7 @@ import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils; ...@@ -33,6 +35,7 @@ import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.RenderTestRule; import org.chromium.chrome.test.util.RenderTestRule;
import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.JavaScriptUtils;
import org.chromium.net.test.EmbeddedTestServer;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
...@@ -68,6 +71,7 @@ public class VrBrowserDialogTest { ...@@ -68,6 +71,7 @@ public class VrBrowserDialogTest {
new RenderTestRule("components/test/data/permission_dialogs/render_tests"); new RenderTestRule("components/test/data/permission_dialogs/render_tests");
private VrBrowserTestFramework mVrBrowserTestFramework; private VrBrowserTestFramework mVrBrowserTestFramework;
private EmbeddedTestServer mServer;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
...@@ -77,7 +81,13 @@ public class VrBrowserDialogTest { ...@@ -77,7 +81,13 @@ public class VrBrowserDialogTest {
if (!sBaseDirectory.exists() && !sBaseDirectory.isDirectory()) { if (!sBaseDirectory.exists() && !sBaseDirectory.isDirectory()) {
Assert.assertTrue("Failed to make image capture directory", sBaseDirectory.mkdirs()); Assert.assertTrue("Failed to make image capture directory", sBaseDirectory.mkdirs());
} }
mVrTestRule.getEmbeddedTestServerRule().setServerPort(SERVER_PORT); }
@After
public void tearDown() throws Exception {
if (mServer != null) {
mServer.stopAndDestroyServer();
}
} }
private void captureScreen(String filenameBase) throws InterruptedException { private void captureScreen(String filenameBase) throws InterruptedException {
...@@ -105,9 +115,12 @@ public class VrBrowserDialogTest { ...@@ -105,9 +115,12 @@ public class VrBrowserDialogTest {
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
// Trying to grant permissions on file:// URLs ends up hitting DCHECKS, so load from a local // Trying to grant permissions on file:// URLs ends up hitting DCHECKS, so load from a local
// server instead. // server instead.
if (mServer == null) {
mServer = EmbeddedTestServer.createAndStartServerWithPort(
InstrumentationRegistry.getContext(), SERVER_PORT);
}
mVrBrowserTestFramework.loadUrlAndAwaitInitialization( mVrBrowserTestFramework.loadUrlAndAwaitInitialization(
mVrTestRule.getTestServer().getURL( mServer.getURL(VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(page)),
VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(page)),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
// Display the given permission prompt. // Display the given permission prompt.
......
...@@ -11,6 +11,7 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V ...@@ -11,6 +11,7 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V
import android.graphics.PointF; import android.graphics.PointF;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import org.junit.Assert; import org.junit.Assert;
...@@ -30,6 +31,7 @@ import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils; ...@@ -30,6 +31,7 @@ import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils;
import org.chromium.chrome.browser.vr.util.VrShellDelegateUtils; import org.chromium.chrome.browser.vr.util.VrShellDelegateUtils;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
...@@ -91,10 +93,11 @@ public class VrBrowserNativeUiTest { ...@@ -91,10 +93,11 @@ public class VrBrowserNativeUiTest {
@MediumTest @MediumTest
public void testPaymentRequest() throws InterruptedException { public void testPaymentRequest() throws InterruptedException {
// We can't request payment on file:// URLs, so use a local server. // We can't request payment on file:// URLs, so use a local server.
EmbeddedTestServer server =
EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
mVrBrowserTestFramework.loadUrlAndAwaitInitialization( mVrBrowserTestFramework.loadUrlAndAwaitInitialization(
mVrTestRule.getTestServer().getURL( server.getURL(VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(
VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile( "test_payment_request")),
"test_payment_request")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
// Set up an observer so we'll know if the payment request is shown. // Set up an observer so we'll know if the payment request is shown.
AtomicBoolean requestShown = new AtomicBoolean(false); AtomicBoolean requestShown = new AtomicBoolean(false);
...@@ -121,6 +124,7 @@ public class VrBrowserNativeUiTest { ...@@ -121,6 +124,7 @@ public class VrBrowserNativeUiTest {
Assert.assertTrue("Payment request caused VR exit", Assert.assertTrue("Payment request caused VR exit",
VrShellDelegateUtils.getDelegateInstance().isVrEntryComplete()); VrShellDelegateUtils.getDelegateInstance().isVrEntryComplete());
mVrBrowserTestFramework.endTest(); mVrBrowserTestFramework.endTest();
server.stopAndDestroyServer();
} }
/** /**
......
...@@ -51,6 +51,7 @@ import org.chromium.chrome.test.util.ActivityUtils; ...@@ -51,6 +51,7 @@ import org.chromium.chrome.test.util.ActivityUtils;
import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.DOMUtils; import org.chromium.content_public.browser.test.util.DOMUtils;
import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.JavaScriptUtils;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
...@@ -541,10 +542,11 @@ public class VrBrowserTransitionTest { ...@@ -541,10 +542,11 @@ public class VrBrowserTransitionTest {
@MediumTest @MediumTest
public void testPermissionsPersistWhenEnteringVrBrowser() throws InterruptedException { public void testPermissionsPersistWhenEnteringVrBrowser() throws InterruptedException {
// Permissions don't work on file:// URLs, so use a local server. // Permissions don't work on file:// URLs, so use a local server.
EmbeddedTestServer server =
EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
mVrBrowserTestFramework.loadUrlAndAwaitInitialization( mVrBrowserTestFramework.loadUrlAndAwaitInitialization(
mTestRule.getTestServer().getURL( server.getURL(VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(
VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile( "test_permissions_persist_when_entering_vr_browser")),
"test_permissions_persist_when_entering_vr_browser")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
// Ensure that permission requests initially trigger a prompt. // Ensure that permission requests initially trigger a prompt.
Assert.assertTrue("Camera permission would not trigger prompt", Assert.assertTrue("Camera permission would not trigger prompt",
...@@ -560,9 +562,8 @@ public class VrBrowserTransitionTest { ...@@ -560,9 +562,8 @@ public class VrBrowserTransitionTest {
mVrBrowserTestFramework.waitOnJavaScriptStep(); mVrBrowserTestFramework.waitOnJavaScriptStep();
// Reload the page and ensure that the permissions are still granted. // Reload the page and ensure that the permissions are still granted.
mVrBrowserTestFramework.loadUrlAndAwaitInitialization( mVrBrowserTestFramework.loadUrlAndAwaitInitialization(
mTestRule.getTestServer().getURL( server.getURL(VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(
VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile( "test_permissions_persist_when_entering_vr_browser")),
"test_permissions_persist_when_entering_vr_browser")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
Assert.assertFalse("Camera permission would trigger prompt after reload", Assert.assertFalse("Camera permission would trigger prompt after reload",
mVrBrowserTestFramework.permissionRequestWouldTriggerPrompt("camera")); mVrBrowserTestFramework.permissionRequestWouldTriggerPrompt("camera"));
...@@ -572,6 +573,7 @@ public class VrBrowserTransitionTest { ...@@ -572,6 +573,7 @@ public class VrBrowserTransitionTest {
VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS); VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS);
mVrBrowserTestFramework.executeStepAndWait("stepRequestPermission()"); mVrBrowserTestFramework.executeStepAndWait("stepRequestPermission()");
mVrBrowserTestFramework.endTest(); mVrBrowserTestFramework.endTest();
server.stopAndDestroyServer();
} }
/** /**
......
...@@ -8,8 +8,10 @@ import static org.chromium.chrome.browser.vr.WebXrArTestFramework.PAGE_LOAD_TIME ...@@ -8,8 +8,10 @@ import static org.chromium.chrome.browser.vr.WebXrArTestFramework.PAGE_LOAD_TIME
import static org.chromium.chrome.browser.vr.WebXrArTestFramework.POLL_TIMEOUT_LONG_MS; import static org.chromium.chrome.browser.vr.WebXrArTestFramework.POLL_TIMEOUT_LONG_MS;
import android.os.Build; import android.os.Build;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import org.junit.After;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
...@@ -28,6 +30,7 @@ import org.chromium.chrome.browser.vr.rules.XrActivityRestriction; ...@@ -28,6 +30,7 @@ import org.chromium.chrome.browser.vr.rules.XrActivityRestriction;
import org.chromium.chrome.browser.vr.util.XrTestRuleUtils; import org.chromium.chrome.browser.vr.util.XrTestRuleUtils;
import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
...@@ -49,6 +52,9 @@ public class WebXrArSessionTest { ...@@ -49,6 +52,9 @@ public class WebXrArSessionTest {
private ChromeActivityTestRule mTestRule; private ChromeActivityTestRule mTestRule;
private WebXrArTestFramework mWebXrArTestFramework; private WebXrArTestFramework mWebXrArTestFramework;
private EmbeddedTestServer mServer;
private boolean mShouldCreateServer;
public WebXrArSessionTest(Callable<ChromeActivityTestRule> callable) throws Exception { public WebXrArSessionTest(Callable<ChromeActivityTestRule> callable) throws Exception {
mTestRule = callable.call(); mTestRule = callable.call();
...@@ -58,6 +64,21 @@ public class WebXrArSessionTest { ...@@ -58,6 +64,21 @@ public class WebXrArSessionTest {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
mWebXrArTestFramework = new WebXrArTestFramework(mTestRule); mWebXrArTestFramework = new WebXrArTestFramework(mTestRule);
// WebappActivityTestRule automatically creates a test server, and creating multiple causes
// it to crash hitting a DCHECK. So, only handle the server ourselves if whatever test rule
// we're using doesn't create one itself.
mServer = mTestRule.getTestServer();
if (mServer == null) {
mShouldCreateServer = true;
mServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
}
}
@After
public void tearDown() throws Exception {
if (mServer != null && mShouldCreateServer) {
mServer.stopAndDestroyServer();
}
} }
/** /**
...@@ -68,9 +89,8 @@ public class WebXrArSessionTest { ...@@ -68,9 +89,8 @@ public class WebXrArSessionTest {
@XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL}) @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
public void testArRequestSessionSucceeds() throws InterruptedException { public void testArRequestSessionSucceeds() throws InterruptedException {
mWebXrArTestFramework.loadUrlAndAwaitInitialization( mWebXrArTestFramework.loadUrlAndAwaitInitialization(
mTestRule.getTestServer().getURL( mServer.getURL(WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile(
WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile( "test_ar_request_session_succeeds")),
"test_ar_request_session_succeeds")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
mWebXrArTestFramework.enterSessionWithUserGestureOrFail(); mWebXrArTestFramework.enterSessionWithUserGestureOrFail();
mWebXrArTestFramework.assertNoJavaScriptErrors(); mWebXrArTestFramework.assertNoJavaScriptErrors();
...@@ -85,9 +105,8 @@ public class WebXrArSessionTest { ...@@ -85,9 +105,8 @@ public class WebXrArSessionTest {
@XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL}) @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
public void testRepeatedArSessionsSucceed() throws InterruptedException { public void testRepeatedArSessionsSucceed() throws InterruptedException {
mWebXrArTestFramework.loadUrlAndAwaitInitialization( mWebXrArTestFramework.loadUrlAndAwaitInitialization(
mTestRule.getTestServer().getURL( mServer.getURL(WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile(
WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile( "test_ar_request_session_succeeds")),
"test_ar_request_session_succeeds")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
mWebXrArTestFramework.enterSessionWithUserGestureOrFail(); mWebXrArTestFramework.enterSessionWithUserGestureOrFail();
...@@ -105,9 +124,8 @@ public class WebXrArSessionTest { ...@@ -105,9 +124,8 @@ public class WebXrArSessionTest {
@XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL}) @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
public void testRepeatedArSessionsOnlyPromptPermissionsOnce() throws InterruptedException { public void testRepeatedArSessionsOnlyPromptPermissionsOnce() throws InterruptedException {
mWebXrArTestFramework.loadUrlAndAwaitInitialization( mWebXrArTestFramework.loadUrlAndAwaitInitialization(
mTestRule.getTestServer().getURL( mServer.getURL(WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile(
WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile( "test_ar_request_session_succeeds")),
"test_ar_request_session_succeeds")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
Assert.assertTrue("First AR session request did not trigger permission prompt", Assert.assertTrue("First AR session request did not trigger permission prompt",
mWebXrArTestFramework.permissionRequestWouldTriggerPrompt("camera")); mWebXrArTestFramework.permissionRequestWouldTriggerPrompt("camera"));
......
...@@ -15,6 +15,7 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V ...@@ -15,6 +15,7 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V
import android.graphics.PointF; import android.graphics.PointF;
import android.os.Build; import android.os.Build;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.LargeTest; import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import android.view.MotionEvent; import android.view.MotionEvent;
...@@ -51,6 +52,7 @@ import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; ...@@ -51,6 +52,7 @@ import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.content_public.browser.ViewEventSink; import org.chromium.content_public.browser.ViewEventSink;
import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.TouchCommon; import org.chromium.content_public.browser.test.util.TouchCommon;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
...@@ -736,10 +738,15 @@ public class WebXrVrInputTest { ...@@ -736,10 +738,15 @@ public class WebXrVrInputTest {
private void testAppButtonLongPressDisplaysPermissionsImpl() throws InterruptedException { private void testAppButtonLongPressDisplaysPermissionsImpl() throws InterruptedException {
// Note that we need to pass in the WebContents to use throughout this because automatically // Note that we need to pass in the WebContents to use throughout this because automatically
// using the first tab's WebContents doesn't work in Incognito. // using the first tab's WebContents doesn't work in Incognito.
EmbeddedTestServer server = mTestRule.getTestServer();
boolean teardownServer = false;
if (server == null) {
server = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
teardownServer = true;
}
mWebXrVrTestFramework.loadUrlAndAwaitInitialization( mWebXrVrTestFramework.loadUrlAndAwaitInitialization(
mTestRule.getTestServer().getURL( server.getURL(WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile(
WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile( "generic_webxr_permission_page")),
"generic_webxr_permission_page")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
WebXrVrTestFramework.runJavaScriptOrFail("requestPermission({audio:true})", WebXrVrTestFramework.runJavaScriptOrFail("requestPermission({audio:true})",
POLL_TIMEOUT_SHORT_MS, mTestRule.getWebContents()); POLL_TIMEOUT_SHORT_MS, mTestRule.getWebContents());
...@@ -778,6 +785,9 @@ public class WebXrVrInputTest { ...@@ -778,6 +785,9 @@ public class WebXrVrInputTest {
UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, true /* visible */, () -> {}); UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, true /* visible */, () -> {});
NativeUiUtils.performActionAndWaitForVisibilityStatus( NativeUiUtils.performActionAndWaitForVisibilityStatus(
UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, false /* visible */, () -> {}); UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, false /* visible */, () -> {});
if (teardownServer) {
server.stopAndDestroyServer();
}
} }
/** /**
...@@ -815,10 +825,16 @@ public class WebXrVrInputTest { ...@@ -815,10 +825,16 @@ public class WebXrVrInputTest {
private void testInSessionPermissionRequestsImpl() throws InterruptedException { private void testInSessionPermissionRequestsImpl() throws InterruptedException {
// Note that we need to pass in the WebContents to use throughout this because automatically // Note that we need to pass in the WebContents to use throughout this because automatically
// using the first tab's WebContents doesn't work in Incognito. // using the first tab's WebContents doesn't work in Incognito.
EmbeddedTestServer server = mTestRule.getTestServer();
boolean teardownServer = false;
if (server == null) {
server = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
teardownServer = true;
}
mWebXrVrTestFramework.loadUrlAndAwaitInitialization( mWebXrVrTestFramework.loadUrlAndAwaitInitialization(
mTestRule.getTestServer().getURL( server.getURL(WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile(
WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile( "generic_webxr_permission_page")),
"generic_webxr_permission_page")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
mWebXrVrTestFramework.enterSessionWithUserGestureOrFail(mTestRule.getWebContents()); mWebXrVrTestFramework.enterSessionWithUserGestureOrFail(mTestRule.getWebContents());
NativeUiUtils.performActionAndWaitForVisibilityStatus( NativeUiUtils.performActionAndWaitForVisibilityStatus(
...@@ -845,5 +861,9 @@ public class WebXrVrInputTest { ...@@ -845,5 +861,9 @@ public class WebXrVrInputTest {
.runJavaScriptOrFail("lastPermissionRequestSucceeded", .runJavaScriptOrFail("lastPermissionRequestSucceeded",
POLL_TIMEOUT_SHORT_MS, mTestRule.getWebContents()) POLL_TIMEOUT_SHORT_MS, mTestRule.getWebContents())
.equals("true")); .equals("true"));
if (teardownServer) {
server.stopAndDestroyServer();
}
} }
} }
...@@ -9,6 +9,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_ ...@@ -9,6 +9,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_
import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM_OR_STANDALONE; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM_OR_STANDALONE;
import android.os.Build; import android.os.Build;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import org.junit.Before; import org.junit.Before;
...@@ -32,6 +33,7 @@ import org.chromium.chrome.browser.vr.util.PermissionUtils; ...@@ -32,6 +33,7 @@ import org.chromium.chrome.browser.vr.util.PermissionUtils;
import org.chromium.chrome.browser.vr.util.VrTestRuleUtils; import org.chromium.chrome.browser.vr.util.VrTestRuleUtils;
import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
...@@ -126,10 +128,16 @@ public class WebXrVrTabTest { ...@@ -126,10 +128,16 @@ public class WebXrVrTabTest {
} }
private void testPermissionsInOtherTabImpl(boolean incognito) throws InterruptedException { private void testPermissionsInOtherTabImpl(boolean incognito) throws InterruptedException {
EmbeddedTestServer server = mTestRule.getTestServer();
boolean teardownServer = false;
if (server == null) {
server = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
teardownServer = true;
}
mWebXrVrTestFramework.loadUrlAndAwaitInitialization( mWebXrVrTestFramework.loadUrlAndAwaitInitialization(
mTestRule.getTestServer().getURL( server.getURL(WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile(
WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile( "generic_webxr_permission_page")),
"generic_webxr_permission_page")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
// Be sure to store the stream we're given so that the permission is actually in use, as // Be sure to store the stream we're given so that the permission is actually in use, as
// otherwise the toast doesn't show up since another tab isn't actually using the // otherwise the toast doesn't show up since another tab isn't actually using the
...@@ -157,5 +165,9 @@ public class WebXrVrTabTest { ...@@ -157,5 +165,9 @@ public class WebXrVrTabTest {
mWebXrVrTestFramework.enterSessionWithUserGestureOrFail(mTestRule.getWebContents()); mWebXrVrTestFramework.enterSessionWithUserGestureOrFail(mTestRule.getWebContents());
NativeUiUtils.performActionAndWaitForVisibilityStatus( NativeUiUtils.performActionAndWaitForVisibilityStatus(
UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, true /* visible */, () -> {}); UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, true /* visible */, () -> {});
if (teardownServer) {
server.stopAndDestroyServer();
}
} }
} }
...@@ -13,6 +13,7 @@ import android.support.test.InstrumentationRegistry; ...@@ -13,6 +13,7 @@ import android.support.test.InstrumentationRegistry;
import android.view.ViewGroup; import android.view.ViewGroup;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Rule;
import org.junit.runner.Description; import org.junit.runner.Description;
import org.junit.runners.model.Statement; import org.junit.runners.model.Statement;
...@@ -26,6 +27,8 @@ import org.chromium.content_public.browser.test.util.Criteria; ...@@ -26,6 +27,8 @@ import org.chromium.content_public.browser.test.util.Criteria;
import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.DOMUtils; import org.chromium.content_public.browser.test.util.DOMUtils;
import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.JavaScriptUtils;
import org.chromium.net.test.EmbeddedTestServer;
import org.chromium.net.test.EmbeddedTestServerRule;
/** /**
* Custom {@link ChromeActivityTestRule} for tests using {@link WebappActivity}. * Custom {@link ChromeActivityTestRule} for tests using {@link WebappActivity}.
...@@ -70,10 +73,18 @@ public class WebappActivityTestRule extends ChromeActivityTestRule<WebappActivit ...@@ -70,10 +73,18 @@ public class WebappActivityTestRule extends ChromeActivityTestRule<WebappActivit
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAOA3AvAAAdln8YgAAAAASUVORK5CYII="; + "AAAAAAAAAOA3AvAAAdln8YgAAAAASUVORK5CYII=";
@Rule
private EmbeddedTestServerRule mTestServerRule = new EmbeddedTestServerRule();
public WebappActivityTestRule() { public WebappActivityTestRule() {
super(WebappActivity0.class); super(WebappActivity0.class);
} }
@Override
public EmbeddedTestServer getTestServer() {
return mTestServerRule.getServer();
}
/** /**
* Creates the Intent that starts the WebAppActivity. This is meant to be overriden by other * Creates the Intent that starts the WebAppActivity. This is meant to be overriden by other
* tests in order for them to pass some specific values, but it defaults to a web app that just * tests in order for them to pass some specific values, but it defaults to a web app that just
...@@ -140,7 +151,8 @@ public class WebappActivityTestRule extends ChromeActivityTestRule<WebappActivit ...@@ -140,7 +151,8 @@ public class WebappActivityTestRule extends ChromeActivityTestRule<WebappActivit
} }
}; };
return super.apply(webappTestRuleStatement, description); Statement testServerStatement = mTestServerRule.apply(webappTestRuleStatement, description);
return super.apply(testServerStatement, description);
} }
/** /**
......
...@@ -19,7 +19,6 @@ import android.text.TextUtils; ...@@ -19,7 +19,6 @@ import android.text.TextUtils;
import android.view.Menu; import android.view.Menu;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Rule;
import org.junit.runner.Description; import org.junit.runner.Description;
import org.junit.runners.model.Statement; import org.junit.runners.model.Statement;
...@@ -61,7 +60,6 @@ import org.chromium.content_public.browser.test.util.CriteriaHelper; ...@@ -61,7 +60,6 @@ import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.JavaScriptUtils;
import org.chromium.content_public.browser.test.util.RenderProcessLimit; import org.chromium.content_public.browser.test.util.RenderProcessLimit;
import org.chromium.net.test.EmbeddedTestServer; import org.chromium.net.test.EmbeddedTestServer;
import org.chromium.net.test.EmbeddedTestServerRule;
import org.chromium.ui.KeyboardVisibilityDelegate; import org.chromium.ui.KeyboardVisibilityDelegate;
import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.PageTransition;
...@@ -94,9 +92,6 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe ...@@ -94,9 +92,6 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe
private T mSetActivity; private T mSetActivity;
private String mCurrentTestName; private String mCurrentTestName;
@Rule
private EmbeddedTestServerRule mTestServerRule = new EmbeddedTestServerRule();
public ChromeActivityTestRule(Class<T> activityClass) { public ChromeActivityTestRule(Class<T> activityClass) {
this(activityClass, false); this(activityClass, false);
} }
...@@ -109,7 +104,7 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe ...@@ -109,7 +104,7 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe
@Override @Override
public Statement apply(final Statement base, Description description) { public Statement apply(final Statement base, Description description) {
mCurrentTestName = description.getMethodName(); mCurrentTestName = description.getMethodName();
Statement chromeActivityStatement = new Statement() { final Statement superBase = super.apply(new Statement() {
@Override @Override
public void evaluate() throws Throwable { public void evaluate() throws Throwable {
mDefaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); mDefaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
...@@ -128,9 +123,8 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe ...@@ -128,9 +123,8 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe
base.evaluate(); base.evaluate();
} }
}; }, description);
Statement testServerStatement = mTestServerRule.apply(chromeActivityStatement, description); return superBase;
return super.apply(testServerStatement, description);
} }
/** /**
...@@ -657,14 +651,7 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe ...@@ -657,14 +651,7 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe
* Gets the ChromeActivityTestRule's EmbeddedTestServer instance if it has one. * Gets the ChromeActivityTestRule's EmbeddedTestServer instance if it has one.
*/ */
public EmbeddedTestServer getTestServer() { public EmbeddedTestServer getTestServer() {
return mTestServerRule.getServer(); return null;
}
/**
* Gets the underlying EmbeddedTestServerRule for getTestServer().
*/
public EmbeddedTestServerRule getEmbeddedTestServerRule() {
return mTestServerRule;
} }
/** /**
......
...@@ -9,66 +9,39 @@ import android.support.test.InstrumentationRegistry; ...@@ -9,66 +9,39 @@ import android.support.test.InstrumentationRegistry;
import org.junit.rules.TestWatcher; import org.junit.rules.TestWatcher;
import org.junit.runner.Description; import org.junit.runner.Description;
import javax.annotation.concurrent.GuardedBy;
/** /**
* Junit4 rule for starting embedded test server when necessary (i.e. when accessed via * Junit4 rule for starting embedded test server before a test starts, and shutting it down when it
* {@link #getServer()}), and shutting it down when the test finishes. * finishes.
*/ */
public class EmbeddedTestServerRule extends TestWatcher { public class EmbeddedTestServerRule extends TestWatcher {
private final Object mLock = new Object(); EmbeddedTestServer mServer;
@GuardedBy("mLock")
private EmbeddedTestServer mServer;
// The default value of 0 will result in the same behavior as createAndStartServer @Override
// (auto-selected port). protected void starting(Description description) {
@GuardedBy("mLock") try {
private int mServerPort; mServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
} catch (InterruptedException e) {
throw new EmbeddedTestServer.EmbeddedTestServerFailure("Test server didn't start");
}
super.starting(description);
}
@Override @Override
protected void finished(Description description) { protected void finished(Description description) {
super.finished(description); super.finished(description);
synchronized (mLock) { mServer.stopAndDestroyServer();
if (mServer != null) {
mServer.stopAndDestroyServer();
}
}
} }
/** /**
* Get the test server, creating and starting it if it doesn't exist yet. * Get the test server.
* *
* @return the test server. * @return the test server.
*/ */
public EmbeddedTestServer getServer() { public EmbeddedTestServer getServer() {
synchronized (mLock) { return mServer;
if (mServer == null) {
try {
mServer = EmbeddedTestServer.createAndStartServerWithPort(
InstrumentationRegistry.getContext(), mServerPort);
} catch (InterruptedException e) {
throw new EmbeddedTestServer.EmbeddedTestServerFailure(
"Test server didn't start");
}
}
return mServer;
}
} }
public String getOrigin() { public String getOrigin() {
return getServer().getURL("/"); return mServer.getURL("/");
}
/**
* Sets the port that the server will be started with. Must be called before the first
* {@link #getServer()} call.
*
* @param port the port to start the server with, or 0 for an automatically selected one.
*/
public void setServerPort(int port) {
synchronized (mLock) {
assert mServer == null;
mServerPort = port;
}
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment