diff --git a/dom/base/PerformanceObserverEntryList.cpp b/dom/base/PerformanceObserverEntryList.cpp index 34dee75d2060..442f24b0647d 100644 --- a/dom/base/PerformanceObserverEntryList.cpp +++ b/dom/base/PerformanceObserverEntryList.cpp @@ -43,9 +43,12 @@ PerformanceObserverEntryList::GetEntries( { aRetval.Clear(); for (const nsRefPtr& entry : mEntries) { - const PerformanceResourceTiming* resourceEntry = - entry->ToResourceTiming(); - if (aFilter.mInitiatorType.WasPassed() && resourceEntry) { + if (aFilter.mInitiatorType.WasPassed()) { + const PerformanceResourceTiming* resourceEntry = + entry->ToResourceTiming(); + if (!resourceEntry) { + continue; + } nsAutoString initiatorType; resourceEntry->GetInitiatorType(initiatorType); if (!initiatorType.Equals(aFilter.mInitiatorType.Value())) { diff --git a/dom/base/test/performance_observer.html b/dom/base/test/performance_observer.html index b8c715cdac1b..d194c17e42df 100644 --- a/dom/base/test/performance_observer.html +++ b/dom/base/test/performance_observer.html @@ -41,9 +41,11 @@ function promiseXHR(aUrl) { async_test(t => { performance.clearResourceTimings(); + var observedEntryList; var observedEntries = []; var observer = new PerformanceObserver(list => { list.getEntries().forEach(entry => observedEntries.push(entry)); + observedEntryList = list; }); observer.observe({entryTypes: ['resource']}); @@ -54,6 +56,20 @@ async_test(t => { assert_array_equals(observedEntries, performance.getEntriesByType("resource"), "Observed 'resource' entries should equal to entries obtained by getEntriesByType."); + + // getEntries filtering tests + assert_array_equals(observedEntryList.getEntries({name: "http://mochi.test:8888/tests/dom/base/test/test-data.json"}), + performance.getEntriesByName("http://mochi.test:8888/tests/dom/base/test/test-data.json"), + "getEntries with name filter should return correct results."); + assert_array_equals(observedEntryList.getEntries({entryType: "resource"}), + performance.getEntriesByType("resource"), + "getEntries with entryType filter should return correct results."); + assert_array_equals(observedEntryList.getEntries({initiatorType: "xmlhttprequest"}), + performance.getEntriesByType("resource"), + "getEntries with initiatorType filter should return correct results."); + assert_array_equals(observedEntryList.getEntries({initiatorType: "link"}), + [], + "getEntries with non-existent initiatorType filter should return an empty array."); })); }, "resource-timing test"); diff --git a/dom/base/test/test_performance_observer.js b/dom/base/test/test_performance_observer.js index 8066ced6eb36..5eb43c10ceec 100644 --- a/dom/base/test/test_performance_observer.js +++ b/dom/base/test/test_performance_observer.js @@ -135,6 +135,10 @@ test(t => { "entryType": "mark"}), [], "getEntries with non-existent name and entryType filter should return an empty array."); + + assert_array_equals(observedEntryList.getEntries({initiatorType: "xmlhttprequest"}), + [], + "getEntries with initiatorType filter should return an empty array."); }, "Test for PerformanceObserverEntryList.getEntries"); test(t => {