Source code

Revision control

Copy as Markdown

Other Tools

/* 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/. */
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
});
const Cm = Components.manager;
const CONTRACT_ID = "@mozilla.org/embedcomp/prompt-collection;1";
Cu.crashIfNotInAutomation();
var registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
var oldClassID = "";
var newClassID = Services.uuid.generateUUID();
var newFactory = function (window) {
return {
createInstance(aIID) {
return new MockPromptCollectionInstance(window).QueryInterface(aIID);
},
QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
};
};
export var MockPromptCollection = {
init(browsingContext) {
this.window = browsingContext.window;
this.reset();
this.factory = newFactory(this.window);
if (!registrar.isCIDRegistered(newClassID)) {
oldClassID = registrar.contractIDToCID(CONTRACT_ID);
registrar.registerFactory(newClassID, "", CONTRACT_ID, this.factory);
}
},
reset() {
this.returnBeforeUnloadCheck = false;
this.returnConfirmRepost = false;
this.returnConfirmFolderUpload = false;
this.showConfirmFolderUploadCallback = null;
},
cleanup() {
var previousFactory = this.factory;
this.reset();
this.factory = null;
registrar.unregisterFactory(newClassID, previousFactory);
if (oldClassID != "") {
registrar.registerFactory(oldClassID, "", CONTRACT_ID, null);
}
},
};
function MockPromptCollectionInstance(window) {
this.window = window;
this.showConfirmFolderUploadCallback = null;
this.showConfirmFolderUploadCallbackWrapped = null;
this.directoryName = "";
}
MockPromptCollectionInstance.prototype = {
QueryInterface: ChromeUtils.generateQI(["nsIPromptCollection"]),
asyncBeforeUnloadCheck() {
return Promise.resolve(MockPromptCollection.returnBeforeUnloadCheck);
},
confirmRepost() {
return MockPromptCollection.returnConfirmRepost;
},
confirmFolderUpload(aBrowsingContext, aDirectoryName) {
this.directoryName = aDirectoryName;
if (
typeof MockPromptCollection.showConfirmFolderUploadCallback == "function"
) {
if (
MockPromptCollection.showConfirmFolderUploadCallback !=
this.showConfirmFolderUploadCallback
) {
this.showConfirmFolderUploadCallback =
MockPromptCollection.showConfirmFolderUploadCallback;
if (Cu.isXrayWrapper(this.window)) {
this.showConfirmFolderUploadCallbackWrapped =
lazy.WrapPrivileged.wrapCallback(
MockPromptCollection.showConfirmFolderUploadCallback,
this.window
);
} else {
this.showConfirmFolderUploadCallbackWrapped =
this.showConfirmFolderUploadCallback;
}
}
try {
let returnValue = this.showConfirmFolderUploadCallbackWrapped(this);
if (typeof returnValue == "boolean") {
return returnValue;
}
} catch (e) {
return false;
}
}
return MockPromptCollection.returnConfirmFolderUpload;
},
};