text: async_test(t => {
    performance.clearResourceTimings();
    // First observer creates second in callback to ensure the entry has been dispatched by the time
    // the second observer begins observing.
    new PerformanceObserver(() => {
      // Second observer requires 'buffered: true' to see an entry.
      new PerformanceObserver(t.step_func_done(list => {
        const entries = list.getEntries();
        assert_equals(entries.length, 1, 'There should be 1 resource entry.');
        assert_equals(entries[0].entryType, 'resource');
        assert_greater_than(entries[0].startTime, 0);
        assert_greater_than(entries[0].responseEnd, entries[0].startTime);
        assert_greater_than(entries[0].duration, 0);
        assert_true(entries[0].name.endsWith('resources/empty.js'));
      })).observe({'type': 'resource', buffered: true});
    }).observe({'entryTypes': ['resource']});
    fetch('resources/empty.js');
  }, 'PerformanceObserver with buffered flag sees previous resource entries.');