// META: script=performanceobservers.js test(function () { const obs = new PerformanceObserver(() => {}); assert_throws_js(TypeError, function () { obs.observe({entryTypes: "mark"}); }); }, "entryTypes must be a sequence or throw a TypeError"); test(function () { const obs = new PerformanceObserver(() => {}); obs.observe({entryTypes: []}); }, "Empty sequence entryTypes does not throw an exception."); test(function () { const obs = new PerformanceObserver(() => {}); obs.observe({entryTypes: ["this-cannot-match-an-entryType"]}); obs.observe({entryTypes: ["marks","navigate", "resources"]}); }, "Unknown entryTypes do not throw an exception."); test(function () { const obs = new PerformanceObserver(() => {}); obs.observe({entryTypes: ["mark","this-cannot-match-an-entryType"]}); obs.observe({entryTypes: ["this-cannot-match-an-entryType","mark"]}); obs.observe({entryTypes: ["mark"], others: true}); }, "Filter unsupported entryType entryType names within the entryTypes sequence"); async_test(function (t) { var finish = t.step_func(function () { t.done(); }); var observer = new PerformanceObserver( function (entryList, obs) { var self = this; t.step(function () { assert_true(entryList instanceof PerformanceObserverEntryList, "first callback parameter must be a PerformanceObserverEntryList instance"); assert_true(obs instanceof PerformanceObserver, "second callback parameter must be a PerformanceObserver instance"); assert_equals(observer, self, "observer is the this value"); assert_equals(observer, obs, "observer is second parameter"); assert_equals(self, obs, "this and second parameter are the same"); observer.disconnect(); finish(); }); } ); self.performance.clearMarks(); observer.observe({entryTypes: ["mark"]}); self.performance.mark("mark1"); }, "Check observer callback parameter and this values"); async_test(function (t) { var observer = new PerformanceObserver( t.step_func(function (entryList, obs) { checkEntries(entryList.getEntries(), [{ entryType: "measure", name: "measure1"}]); observer.disconnect(); t.done(); }) ); self.performance.clearMarks(); observer.observe({entryTypes: ["mark"]}); observer.observe({entryTypes: ["measure"]}); self.performance.mark("mark1"); self.performance.measure("measure1"); }, "replace observer if already present");