114 lines
3.2 KiB
JavaScript
114 lines
3.2 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/. */
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineESModuleGetters(lazy, {
|
|
WrapPrivileged: "resource://testing-common/WrapPrivileged.sys.mjs",
|
|
});
|
|
|
|
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;
|
|
},
|
|
};
|