11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_ciconst common = require('../common'); 41cb0ef41Sopenharmony_ciconst assert = require('assert'); 51cb0ef41Sopenharmony_ci 61cb0ef41Sopenharmony_ciconst { performance } = require('perf_hooks'); 71cb0ef41Sopenharmony_ci 81cb0ef41Sopenharmony_ciconst timingInfo = { 91cb0ef41Sopenharmony_ci startTime: 0, 101cb0ef41Sopenharmony_ci endTime: 0, 111cb0ef41Sopenharmony_ci finalServiceWorkerStartTime: 0, 121cb0ef41Sopenharmony_ci redirectStartTime: 0, 131cb0ef41Sopenharmony_ci redirectEndTime: 0, 141cb0ef41Sopenharmony_ci postRedirectStartTime: 0, 151cb0ef41Sopenharmony_ci finalConnectionTimingInfo: { 161cb0ef41Sopenharmony_ci domainLookupStartTime: 0, 171cb0ef41Sopenharmony_ci domainLookupEndTime: 0, 181cb0ef41Sopenharmony_ci connectionStartTime: 0, 191cb0ef41Sopenharmony_ci connectionEndTime: 0, 201cb0ef41Sopenharmony_ci secureConnectionStartTime: 0, 211cb0ef41Sopenharmony_ci ALPNNegotiatedProtocol: 0, 221cb0ef41Sopenharmony_ci }, 231cb0ef41Sopenharmony_ci finalNetworkRequestStartTime: 0, 241cb0ef41Sopenharmony_ci finalNetworkResponseStartTime: 0, 251cb0ef41Sopenharmony_ci encodedBodySize: 0, 261cb0ef41Sopenharmony_ci decodedBodySize: 0, 271cb0ef41Sopenharmony_ci}; 281cb0ef41Sopenharmony_ciconst requestedUrl = 'https://nodejs.org'; 291cb0ef41Sopenharmony_ciconst initiatorType = ''; 301cb0ef41Sopenharmony_ciconst cacheMode = ''; 311cb0ef41Sopenharmony_ci 321cb0ef41Sopenharmony_ciasync function main() { 331cb0ef41Sopenharmony_ci // Invalid buffer size values are converted to 0. 341cb0ef41Sopenharmony_ci const invalidValues = [ null, undefined, true, false, -1, 0.5, Infinity, NaN, '', 'foo', {}, [], () => {} ]; 351cb0ef41Sopenharmony_ci for (const value of invalidValues) { 361cb0ef41Sopenharmony_ci performance.setResourceTimingBufferSize(value); 371cb0ef41Sopenharmony_ci performance.markResourceTiming(timingInfo, requestedUrl, initiatorType, globalThis, cacheMode); 381cb0ef41Sopenharmony_ci assert.strictEqual(performance.getEntriesByType('resource').length, 0); 391cb0ef41Sopenharmony_ci performance.clearResourceTimings(); 401cb0ef41Sopenharmony_ci } 411cb0ef41Sopenharmony_ci // Wait for the buffer full event to be cleared. 421cb0ef41Sopenharmony_ci await waitBufferFullEvent(); 431cb0ef41Sopenharmony_ci 441cb0ef41Sopenharmony_ci performance.setResourceTimingBufferSize(1); 451cb0ef41Sopenharmony_ci performance.markResourceTiming(timingInfo, requestedUrl, initiatorType, globalThis, cacheMode); 461cb0ef41Sopenharmony_ci // Trigger a resourcetimingbufferfull event. 471cb0ef41Sopenharmony_ci performance.markResourceTiming(timingInfo, requestedUrl, initiatorType, globalThis, cacheMode); 481cb0ef41Sopenharmony_ci assert.strictEqual(performance.getEntriesByType('resource').length, 1); 491cb0ef41Sopenharmony_ci await waitBufferFullEvent(); 501cb0ef41Sopenharmony_ci 511cb0ef41Sopenharmony_ci // Apply a new buffer size limit 521cb0ef41Sopenharmony_ci performance.setResourceTimingBufferSize(0); 531cb0ef41Sopenharmony_ci // Buffer is not cleared on `performance.setResourceTimingBufferSize`. 541cb0ef41Sopenharmony_ci assert.strictEqual(performance.getEntriesByType('resource').length, 1); 551cb0ef41Sopenharmony_ci 561cb0ef41Sopenharmony_ci performance.clearResourceTimings(); 571cb0ef41Sopenharmony_ci assert.strictEqual(performance.getEntriesByType('resource').length, 0); 581cb0ef41Sopenharmony_ci // Trigger a resourcetimingbufferfull event. 591cb0ef41Sopenharmony_ci performance.markResourceTiming(timingInfo, requestedUrl, initiatorType, globalThis, cacheMode); 601cb0ef41Sopenharmony_ci // New entry is not added to the global buffer. 611cb0ef41Sopenharmony_ci assert.strictEqual(performance.getEntriesByType('resource').length, 0); 621cb0ef41Sopenharmony_ci await waitBufferFullEvent(); 631cb0ef41Sopenharmony_ci 641cb0ef41Sopenharmony_ci // Apply a new buffer size limit 651cb0ef41Sopenharmony_ci performance.setResourceTimingBufferSize(1); 661cb0ef41Sopenharmony_ci performance.markResourceTiming(timingInfo, requestedUrl, initiatorType, globalThis, cacheMode); 671cb0ef41Sopenharmony_ci assert.strictEqual(performance.getEntriesByType('resource').length, 1); 681cb0ef41Sopenharmony_ci} 691cb0ef41Sopenharmony_ci 701cb0ef41Sopenharmony_cifunction waitBufferFullEvent() { 711cb0ef41Sopenharmony_ci return new Promise((resolve) => { 721cb0ef41Sopenharmony_ci const listener = common.mustCall((event) => { 731cb0ef41Sopenharmony_ci assert.strictEqual(event.type, 'resourcetimingbufferfull'); 741cb0ef41Sopenharmony_ci performance.removeEventListener('resourcetimingbufferfull', listener); 751cb0ef41Sopenharmony_ci resolve(); 761cb0ef41Sopenharmony_ci }); 771cb0ef41Sopenharmony_ci performance.addEventListener('resourcetimingbufferfull', listener); 781cb0ef41Sopenharmony_ci }); 791cb0ef41Sopenharmony_ci} 801cb0ef41Sopenharmony_ci 811cb0ef41Sopenharmony_cimain(); 82