// Trigger observers for just the changed pref name, not any of its // prefixes. This matches the semantics of `Preferences.sys.mjs`. if (this.observers.has(prefName)) { this.observers.get(prefName)(value);
}
}
}
/** *Slimmeddownversionoftoolkit/modules/EventEmitter.sys.mjs
*/
export function EventEmitter() {}
EventEmitter.decorate = function (objectToDecorate) {
let emitter = new EventEmitter();
objectToDecorate.on = emitter.on.bind(emitter);
objectToDecorate.off = emitter.off.bind(emitter);
objectToDecorate.once = emitter.once.bind(emitter);
objectToDecorate.emit = emitter.emit.bind(emitter);
};
EventEmitter.prototype = {
on(event, listener) { if (!this._eventEmitterListeners) { this._eventEmitterListeners = new Map();
} if (!this._eventEmitterListeners.has(event)) { this._eventEmitterListeners.set(event, []);
} this._eventEmitterListeners.get(event).push(listener);
},
off(event, listener) { if (!this._eventEmitterListeners) { return;
}
let listeners = this._eventEmitterListeners.get(event); if (listeners) { this._eventEmitterListeners.set(
event,
listeners.filter(
l => l !== listener && l._originalListener !== listener
)
);
}
},
once(event, listener) { returnnew Promise(resolve => {
let handler = (_, first, ...rest) => { this.off(event, handler); if (listener) {
listener(event, first, ...rest);
}
resolve(first);
};
handler._originalListener = listener; this.on(event, handler);
});
}, // All arguments to this method will be sent to listeners
emit(event, ...args) { if (
!this._eventEmitterListeners ||
!this._eventEmitterListeners.has(event)
) { return;
}
let originalListeners = this._eventEmitterListeners.get(event); for (let listener of this._eventEmitterListeners.get(event)) { // If the object was destroyed during event emission, stop // emitting. if (!this._eventEmitterListeners) { break;
} // If listeners were removed during emission, make sure the // event handler we're going to fire wasn't removed. if (
originalListeners === this._eventEmitterListeners.get(event) || this._eventEmitterListeners.get(event).some(l => l === listener)
) { try {
listener(event, ...args);
} catch (ex) { // error with a listener
}
}
}
},
};
export function FakePerformance() {}
FakePerformance.prototype = {
marks: new Map(),
now() { return window.performance.now();
},
timing: { navigationStart: 222222.123 },
get timeOrigin() { return10000.234;
}, // XXX assumes type == "mark"
getEntriesByName(name, _type) { if (this.marks.has(name)) { returnthis.marks.get(name);
} return [];
},
callsToMark: 0,
export class FakeLogger extends FakeConsoleAPI {
constructor() { super({ // Don't use a prefix because the first instance gets cached and reused by // other consumers that would otherwise pass their own identifying prefix.
maxLogLevel: "off", // Change this to "debug" or "all" to get more logging in tests
});
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.