Commit d047fb7c authored by bsheedy's avatar bsheedy Committed by Commit Bot

Add VR Browser payment request test

Adds a test to ensure that making a payment request from JavaScript in
the VR Browser gets auto-rejected and the native UI does not appear.

Bug: 862162
Change-Id: I1e29c2e4ed0feef5b0a46d329787159e366be84c
Reviewed-on: https://chromium-review.googlesource.com/1176118Reviewed-by: default avatarMichael Thiessen <mthiesse@chromium.org>
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#583354}
parent f4a63b5b
...@@ -9,6 +9,8 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.PAGE_LOAD_TIMEOUT_S ...@@ -9,6 +9,8 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.PAGE_LOAD_TIMEOUT_S
import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_LONG_MS; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_LONG_MS;
import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM;
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;
...@@ -20,11 +22,16 @@ import org.junit.runner.RunWith; ...@@ -20,11 +22,16 @@ import org.junit.runner.RunWith;
import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Restriction; import org.chromium.base.test.util.Restriction;
import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.payments.ui.PaymentRequestUI;
import org.chromium.chrome.browser.payments.ui.PaymentRequestUI.PaymentRequestObserverForTest;
import org.chromium.chrome.browser.vr.rules.ChromeTabbedActivityVrTestRule; import org.chromium.chrome.browser.vr.rules.ChromeTabbedActivityVrTestRule;
import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils; import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils;
import org.chromium.chrome.browser.vr.util.VrShellDelegateUtils;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
/** /**
* End-to-end tests for native UI presentation in VR Browser mode. * End-to-end tests for native UI presentation in VR Browser mode.
...@@ -38,11 +45,14 @@ public class VrBrowserNativeUiTest { ...@@ -38,11 +45,14 @@ public class VrBrowserNativeUiTest {
@Rule @Rule
public ChromeTabbedActivityVrTestRule mVrTestRule = new ChromeTabbedActivityVrTestRule(); public ChromeTabbedActivityVrTestRule mVrTestRule = new ChromeTabbedActivityVrTestRule();
private VrBrowserTestFramework mVrBrowserTestFramework;
private static final String TEST_PAGE_2D_URL = private static final String TEST_PAGE_2D_URL =
VrBrowserTestFramework.getFileUrlForHtmlTestFile("test_navigation_2d_page"); VrBrowserTestFramework.getFileUrlForHtmlTestFile("test_navigation_2d_page");
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
mVrBrowserTestFramework = new VrBrowserTestFramework(mVrTestRule);
VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS); VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS);
} }
...@@ -71,4 +81,46 @@ public class VrBrowserNativeUiTest { ...@@ -71,4 +81,46 @@ public class VrBrowserNativeUiTest {
Assert.assertTrue("URL is not being show for non-native page", Assert.assertTrue("URL is not being show for non-native page",
TestVrShellDelegate.isDisplayingUrlForTesting()); TestVrShellDelegate.isDisplayingUrlForTesting());
} }
/**
* Tests that the Payment Request API is supressed in the VR Browser and its native UI does not
* show. Automation of a manual test from https://crbug.com/862162.
*/
@Test
@MediumTest
public void testPaymentRequest() throws InterruptedException {
// We can't request payment on file:// URLs, so use a local server.
EmbeddedTestServer server =
EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
mVrBrowserTestFramework.loadUrlAndAwaitInitialization(
server.getURL(VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(
"test_payment_request")),
PAGE_LOAD_TIMEOUT_S);
// Set up an observer so we'll know if the payment request is shown.
AtomicBoolean requestShown = new AtomicBoolean(false);
PaymentRequestObserverForTest observer = new PaymentRequestObserverForTest() {
@Override
public void onPaymentRequestReadyForInput(PaymentRequestUI ui) {
requestShown.set(true);
}
@Override
public void onPaymentRequestReadyToPay(PaymentRequestUI ui) {}
@Override
public void onPaymentRequestSelectionChecked(PaymentRequestUI ui) {}
@Override
public void onPaymentRequestResultReady(PaymentRequestUI ui) {}
};
PaymentRequestUI.setPaymentRequestObserverForTest(observer);
// Request payment and wait for the promise to auto-reject.
mVrBrowserTestFramework.executeStepAndWait("stepRequestPayment()");
// Ensure that the native UI wasn't shown even though the request was rejected.
// Need to sleep for a bit in order to allow the UI to show if it's going to.
SystemClock.sleep(1000);
Assert.assertFalse("Native Payment Request UI was shown", requestShown.get());
// Ensure we weren't somehow kicked out of VR from this.
Assert.assertTrue("Payment request caused VR exit",
VrShellDelegateUtils.getDelegateInstance().isVrEntryComplete());
mVrBrowserTestFramework.endTest();
server.stopAndDestroyServer();
}
} }
<!doctype html>
<!--
Tests that attempts to use the Payment Request API are denied while in the VR
Browser.
-->
<html>
<head>
<link rel="stylesheet" type="text/css" href="../resources/webxr_e2e.css">
</head>
<body>
<script src="../../../../../../third_party/WebKit/LayoutTests/resources/testharness.js"></script>
<script src="../resources/webxr_e2e.js"></script>
<script>
var t = async_test("Payment Request API disabled while in VR Browser");
// Arbitrary but valid data to pass to PaymentRequest to trigger the
// native Payment Request UI.
var methods = [
{
supportedMethods: "basic-card",
data: {
supportedNetworks: [
"visa",
"mastercard",
],
supportedTypes: [
"debit",
"credit",
],
},
},
];
var details = {
id: "Super VR Store",
displayItems: [
{
label: "Sub-total",
amount: {
currency: "USD",
value: "10.00",
},
},
{
label: "Sales Tax",
amount: {
currency: "USD",
value: "1.00",
},
},
],
total: {
label: "Total",
amount: {
currency: "USD",
value: "11.00",
},
},
};
var request = new PaymentRequest(methods, details);
function stepRequestPayment() {
request.show().then(() => {
t.step(() => {
assert_unreached("Payment request was shown and accepted");
});
}, (err) => {
t.step(() => {
assert_true(err instanceof DOMException,
"Payment request denied, but not for expected reason");
});
t.done();
});
}
</script>
</body>
</html>
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