Bug 1381186 - add show/abort chrome test. r=mattn draft
authorJonathan Guillotte-Blouin <jguillotteblouin@mozilla.com>
Tue, 18 Jul 2017 18:12:27 -0700
changeset 643606 a1a1e138eca8cb278743bd25c71874cf012f9e02
parent 643603 cfb1a451a460dda3716bf20770912eb5f3c50ebd
child 644591 11ffa21bcb1bd446c904e22509038c7147a4c161
child 644617 f4083dc7e929dd3d43bb6529f69767e11e6c6f6f
child 645129 63bdc85130f7cb49b18cbe791af29bd4d9ee27cb
push id73147
push userbmo:jguillotteblouin@mozilla.com
push dateWed, 09 Aug 2017 23:03:28 +0000
reviewersmattn
bugs1381186
milestone57.0a1
Bug 1381186 - add show/abort chrome test. r=mattn MozReview-Commit-ID: I6Umm24nNvA
browser/installer/package-manifest.in
toolkit/components/payments/test/browser/blank_page.html
toolkit/components/payments/test/browser/browser.ini
toolkit/components/payments/test/browser/browser_show_dialog.js
toolkit/components/payments/test/browser/head.js
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -395,18 +395,20 @@
 @RESPATH@/components/DownloadLegacy.js
 @RESPATH@/components/BrowserPageThumbs.manifest
 @RESPATH@/components/crashmonitor.manifest
 @RESPATH@/components/nsCrashMonitor.js
 @RESPATH@/components/toolkitsearch.manifest
 @RESPATH@/components/nsSearchService.js
 @RESPATH@/components/nsSearchSuggestions.js
 @RESPATH@/components/nsSidebar.js
+#ifdef NIGHTLY_BUILD
 @RESPATH@/components/payments.manifest
 @RESPATH@/components/paymentUIService.js
+#endif
 @RESPATH@/components/passwordmgr.manifest
 @RESPATH@/components/nsLoginInfo.js
 @RESPATH@/components/nsLoginManager.js
 @RESPATH@/components/nsLoginManagerPrompter.js
 @RESPATH@/components/storage-json.js
 @RESPATH@/components/crypto-SDR.js
 @RESPATH@/components/TooltipTextProvider.js
 @RESPATH@/components/TooltipTextProvider.manifest
new file mode 100644
--- /dev/null
+++ b/toolkit/components/payments/test/browser/blank_page.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <title>Blank page</title>
+  </head>
+  <body>
+    BLANK PAGE
+  </body>
+</html>
--- a/toolkit/components/payments/test/browser/browser.ini
+++ b/toolkit/components/payments/test/browser/browser.ini
@@ -1,4 +1,10 @@
 [DEFAULT]
+head = head.js
+
 support-files =
+  blank_page.html
 
 [browser_request_summary.js]
+[browser_show_dialog.js]
+# Bug 1365964 - Payment Request isn't implemented for non-e10s
+skip-if = !e10s
new file mode 100644
--- /dev/null
+++ b/toolkit/components/payments/test/browser/browser_show_dialog.js
@@ -0,0 +1,31 @@
+"use strict";
+
+const methodData = [{
+  supportedMethods: ["basic-card"],
+}];
+const details = {
+  total: {
+    label: "Total due",
+    amount: { currency: "USD", value: "60.00" },
+  },
+};
+
+add_task(async function test_show_abort_dialog() {
+  await BrowserTestUtils.withNewTab({
+    gBrowser,
+    url: BLANK_PAGE_URL,
+  }, async browser => {
+    // start by creating a PaymentRequest, and show it
+    await ContentTask.spawn(browser, {methodData, details}, ContentTasks.createAndShowRequest);
+
+    // get a reference to the UI dialog and the requestId
+    let win = await getDialogWindow();
+    let requestId = requestIdForWindow(win);
+    ok(requestId, "requestId should be defined");
+    ok(!win.closed, "dialog should not be closed");
+
+    // abort the payment request
+    await ContentTask.spawn(browser, null, async() => content.rq.abort());
+    ok(win.closed, "dialog should be closed");
+  });
+});
new file mode 100644
--- /dev/null
+++ b/toolkit/components/payments/test/browser/head.js
@@ -0,0 +1,49 @@
+"use strict";
+
+/* eslint
+  "no-unused-vars": ["error", {
+    vars: "local",
+    args: "none",
+    varsIgnorePattern: "^(Cc|Ci|Cr|Cu|EXPORTED_SYMBOLS)$",
+  }],
+*/
+
+const REQUEST_ID_PREFIX = "paymentRequest-";
+const BLANK_PAGE_URL = "https://example.com/browser/toolkit/components/" +
+                       "payments/test/browser/blank_page.html";
+const PREF_PAYMENT_ENABLED = "dom.payments.request.enabled";
+
+
+async function getDialogWindow() {
+  let win;
+  await BrowserTestUtils.waitForCondition(() => {
+    win = Services.wm.getMostRecentWindow(null);
+    return win.name.startsWith(REQUEST_ID_PREFIX);
+  }, "payment dialog should be the most recent");
+
+  return win;
+}
+
+function requestIdForWindow(window) {
+  let windowName = window.name;
+
+  return windowName.startsWith(REQUEST_ID_PREFIX) ?
+    windowName.replace(REQUEST_ID_PREFIX, "") : // returns suffix, which is the requestId
+    null;
+}
+
+/**
+ * Common content tasks functions to be used with ContentTask.spawn.
+ */
+let ContentTasks = {
+  createAndShowRequest: async ({methodData, details, options}) => {
+    let rq = new content.PaymentRequest(methodData, details, options);
+    content.rq = rq; // assign it so we can retrieve it later
+    rq.show();
+  },
+};
+
+
+add_task(async function setup_head() {
+  await SpecialPowers.pushPrefEnv({set: [[PREF_PAYMENT_ENABLED, true]]});
+});