// Given a resource name, returns a promise that will resolve to the // corresponding PerformanceResourceTiming entry. The promise will reject, // however, if the PerformanceResourceTiming entry isn't observed within ~2 // seconds (scaled according to WPT timeout scaling). const observe_entry = entry_name => { const entry = new Promise(resolve => { new PerformanceObserver((entry_list, observer) => { for (const entry of entry_list.getEntries()) { if (entry.name.endsWith(entry_name)) { resolve(entry); observer.disconnect(); return; } } }).observe({"type": "resource", "buffered": true}); }); const timeout = new Promise((resolve, reject) => { step_timeout(() => { reject(new Error("observe_entry: timeout")); }, 2000); }); // If the entry isn't observed within 2 seconds, assume it will never show // up. return Promise.race([entry, timeout]); };