1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-28 16:20:57 -05:00

fix: make Performance global an EventTarget

This commit updates the Performance global to extend
EventTarget.
This commit is contained in:
cjihrig 2022-05-11 21:15:54 -04:00 committed by Colin Ihrig
parent 364da468d2
commit 95312ab53a
4 changed files with 30 additions and 11 deletions

View file

@ -449,7 +449,7 @@ declare class Worker extends EventTarget {
declare type PerformanceEntryList = PerformanceEntry[];
declare class Performance {
declare class Performance extends EventTarget {
/** Returns a timestamp representing the start of the performance measurement. */
readonly timeOrigin: number;
constructor();

View file

@ -140,3 +140,16 @@ Deno.test(function performanceMeasureIllegalConstructor() {
"Illegal constructor",
);
});
Deno.test(function performanceIsEventTarget() {
assert(performance instanceof EventTarget);
return new Promise((resolve) => {
const handler = () => {
resolve();
};
performance.addEventListener("test", handler, { once: true });
performance.dispatchEvent(new Event("test"));
});
});

View file

@ -327,11 +327,16 @@
}
webidl.configurePrototype(PerformanceMeasure);
const PerformanceMeasurePrototype = PerformanceMeasure.prototype;
class Performance {
constructor() {
class Performance extends EventTarget {
constructor(key = null) {
if (key != illegalConstructorKey) {
webidl.illegalConstructor();
}
super();
this[webidl.brand] = webidl.brand;
}
get timeOrigin() {
webidl.assertBranded(this, PerformancePrototype);
return timeOrigin;
@ -572,12 +577,17 @@
webidl.configurePrototype(Performance);
const PerformancePrototype = Performance.prototype;
webidl.converters["Performance"] = webidl.createInterfaceConverter(
"Performance",
PerformancePrototype,
);
window.__bootstrap.performance = {
PerformanceEntry,
PerformanceMark,
PerformanceMeasure,
Performance,
performance: webidl.createBranded(Performance),
performance: new Performance(illegalConstructorKey),
setTimeOrigin,
};
})(this);

View file

@ -1161,12 +1161,8 @@
"hr-time": {
"monotonic-clock.any.html": true,
"monotonic-clock.any.worker.html": true,
"basic.any.html": [
"Performance interface extends EventTarget."
],
"basic.any.worker.html": [
"Performance interface extends EventTarget."
],
"basic.any.html": true,
"basic.any.worker.html": true,
"idlharness.any.html": [
"Performance interface: existence and properties of interface object",
"Performance interface: existence and properties of interface prototype object",