mirror of
https://github.com/classilla/tenfourfox.git
synced 2025-02-03 13:31:16 +00:00
111 lines
3.4 KiB
JavaScript
111 lines
3.4 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
this.EXPORTED_SYMBOLS = ["MockPaymentsUIGlue"];
|
|
|
|
const Cc = Components.classes;
|
|
const Ci = Components.interfaces;
|
|
const Cm = Components.manager;
|
|
const Cu = Components.utils;
|
|
|
|
const CONTRACT_ID = "@mozilla.org/payment/ui-glue;1";
|
|
|
|
Cu.import("resource://gre/modules/FileUtils.jsm");
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
|
|
var registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
|
|
var classID;
|
|
var oldFactory;
|
|
var newFactory = function(window) {
|
|
return {
|
|
createInstance: function(aOuter, aIID) {
|
|
if (aOuter) {
|
|
throw Components.results.NS_ERROR_NO_AGGREGATION;
|
|
}
|
|
return new MockPaymentsUIGlueInstance(window).QueryInterface(aIID);
|
|
},
|
|
lockFactory: function(aLock) {
|
|
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
|
|
},
|
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory])
|
|
};
|
|
};
|
|
|
|
this.MockPaymentsUIGlue = {
|
|
init: function(aWindow) {
|
|
try {
|
|
classID = registrar.contractIDToCID(CONTRACT_ID);
|
|
oldFactory = Cm.getClassObject(Cc[CONTRACT_ID], Ci.nsIFactory);
|
|
} catch (ex) {
|
|
oldClassID = "";
|
|
oldFactory = null;
|
|
dump("TEST-INFO | can't get payments ui glue registered component, " +
|
|
"assuming there is none");
|
|
}
|
|
if (oldFactory) {
|
|
registrar.unregisterFactory(classID, oldFactory);
|
|
}
|
|
registrar.registerFactory(classID, "", CONTRACT_ID,
|
|
new newFactory(aWindow));
|
|
},
|
|
|
|
reset: function() {
|
|
},
|
|
|
|
cleanup: function() {
|
|
this.reset();
|
|
if (oldFactory) {
|
|
registrar.unregisterFactory(classID, newFactory);
|
|
registrar.registerFactory(classID, "", CONTRACT_ID, oldFactory);
|
|
}
|
|
}
|
|
};
|
|
|
|
function MockPaymentsUIGlueInstance(aWindow) {
|
|
this.window = aWindow;
|
|
};
|
|
|
|
MockPaymentsUIGlueInstance.prototype = {
|
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsIPaymentUIGlue]),
|
|
|
|
confirmPaymentRequest: function(aRequestId,
|
|
aRequests,
|
|
aSuccessCb,
|
|
aErrorCb) {
|
|
aSuccessCb.onresult(aRequestId, aRequests[0].type);
|
|
},
|
|
|
|
showPaymentFlow: function(aRequestId,
|
|
aPaymentFlowInfo,
|
|
aErrorCb) {
|
|
let document = this.window.document;
|
|
let frame = document.createElement("iframe");
|
|
frame.setAttribute("mozbrowser", true);
|
|
frame.setAttribute("remote", true);
|
|
document.body.appendChild(frame);
|
|
let docshell = frame.contentWindow
|
|
.QueryInterface(Ci.nsIInterfaceRequestor)
|
|
.getInterface(Ci.nsIWebNavigation)
|
|
.QueryInterface(Ci.nsIDocShell);
|
|
docshell.paymentRequestId = aRequestId;
|
|
frame.src = aPaymentFlowInfo.uri + aPaymentFlowInfo.jwt;
|
|
},
|
|
|
|
closePaymentFlow: function(aRequestId) {
|
|
return Promise.resolve();
|
|
}
|
|
};
|
|
// Expose everything to content. We call reset() here so that all of the relevant
|
|
// lazy expandos get added.
|
|
MockPaymentsUIGlue.reset();
|
|
function exposeAll(obj) {
|
|
var props = {};
|
|
for (var prop in obj)
|
|
props[prop] = 'rw';
|
|
obj.__exposedProps__ = props;
|
|
}
|
|
exposeAll(MockPaymentsUIGlue);
|
|
exposeAll(MockPaymentsUIGlueInstance.prototype);
|