80 lines
1.8 KiB
JavaScript
80 lines
1.8 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 Cm = Components.manager;
|
|
|
|
const CONTRACT_ID = "@mozilla.org/sound;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 MockSoundInstance(window).QueryInterface(aIID);
|
|
},
|
|
QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
|
|
};
|
|
};
|
|
|
|
export var MockSound = {
|
|
_played: [],
|
|
|
|
get played() {
|
|
return this._played;
|
|
},
|
|
|
|
init() {
|
|
this.reset();
|
|
this.factory = newFactory();
|
|
if (!registrar.isCIDRegistered(newClassID)) {
|
|
try {
|
|
oldClassID = registrar.contractIDToCID(CONTRACT_ID);
|
|
} catch (ex) {
|
|
oldClassID = "";
|
|
dump(
|
|
"TEST-INFO | can't get sound registered component, " +
|
|
"assuming there is none"
|
|
);
|
|
}
|
|
registrar.registerFactory(newClassID, "", CONTRACT_ID, this.factory);
|
|
}
|
|
},
|
|
|
|
reset() {
|
|
this._played = [];
|
|
},
|
|
|
|
cleanup() {
|
|
var previousFactory = this.factory;
|
|
this.reset();
|
|
this.factory = null;
|
|
|
|
registrar.unregisterFactory(newClassID, previousFactory);
|
|
if (oldClassID != "") {
|
|
registrar.registerFactory(oldClassID, "", CONTRACT_ID, null);
|
|
}
|
|
},
|
|
};
|
|
|
|
function MockSoundInstance() {}
|
|
MockSoundInstance.prototype = {
|
|
QueryInterface: ChromeUtils.generateQI(["nsISound"]),
|
|
|
|
play(aURL) {
|
|
MockSound._played.push(`(uri)${aURL.spec}`);
|
|
},
|
|
|
|
beep() {
|
|
MockSound._played.push("beep");
|
|
},
|
|
|
|
init() {},
|
|
|
|
playEventSound(aEventId) {
|
|
MockSound._played.push(`(event)${aEventId}`);
|
|
},
|
|
};
|