diff -r 000000000000 -r 6474c204b198 webapprt/test/chrome/browser_mozpay.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webapprt/test/chrome/browser_mozpay.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,103 @@ +Cu.import("resource://gre/modules/Services.jsm"); +let { PaymentManager } = Cu.import("resource://gre/modules/Payment.jsm", {}); +Cu.import("resource://webapprt/modules/WebappRT.jsm"); + +function test() { + waitForExplicitFinish(); + + let curTest = 0; + + let tests = []; + tests.push({ + providerUri: "https://example.com:443/webapprtChrome/webapprt/test/chrome/mozpay-success.html?req=", + message: "Success." + }); + tests.push({ + providerUri: "https://example.com:443/webapprtChrome/webapprt/test/chrome/mozpay-failure.html?req=", + message: "Chocolate rejected." + }); + + let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" + + "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" + + "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" + + "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" + + "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" + + "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" + + "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" + + "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" + + "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" + + "IyKIC1TKelVhNklvk-Ou1l_daKntaFI"; + + PaymentManager.registeredProviders = {}; + PaymentManager.registeredProviders["mock/payments/inapp/v1"] = { + name: "mockprovider", + description: "Mock Payment Provider", + uri: tests[curTest].providerUri, + requestMethod: "GET" + }; + + let providerWindow; + + let winObserver = function(win, topic) { + if (topic == "domwindowopened") { + win.addEventListener("load", function onLoadWindow() { + win.removeEventListener("load", onLoadWindow, false); + + if (win.document.getElementById("content").getAttribute("src") == + (tests[curTest].providerUri + jwt)) { + ok(true, "Payment provider window shown."); + providerWindow = win; + } + }, false); + } + } + + Services.ww.registerNotification(winObserver); + + let mutObserver = null; + + function onLoad() { + let msg = gAppBrowser.contentDocument.getElementById("msg"); + mutObserver = new MutationObserver(function(mutations) { + is(msg.textContent, tests[curTest].message, "Got: " + tests[curTest].message); + + if (!providerWindow) { + ok(false, "Payment provider window shown."); + } else { + providerWindow.close(); + providerWindow = null; + } + + runNextTest(); + }); + mutObserver.observe(msg, { childList: true }); + } + + loadWebapp("mozpay.webapp", undefined, onLoad); + + function runNextTest() { + providerWindow = null; + if (mutObserver) { + mutObserver.disconnect(); + } + + curTest++; + + if (curTest < tests.length) { + PaymentManager.registeredProviders["mock/payments/inapp/v1"].uri = tests[curTest].providerUri; + + gAppBrowser.addEventListener("load", function onLoadH() { + gAppBrowser.removeEventListener("load", onLoadH, true); + onLoad(); + }, true); + gAppBrowser.reload(); + } else { + finish(); + } + } + + registerCleanupFunction(function() { + Services.ww.unregisterNotification(winObserver); + mutObserver.disconnect(); + }); +}