tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

containerNames.html (2488B)


      1 <!DOCTYPE HTML>
      2 <meta charset=utf-8>
      3 <title>LongTask Timing: long tasks in long-name iframe containers</title>
      4 <body>
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 <script src="resources/utils.js"></script>
      8 <h1>Longtasks in iframe</h1>
      9 <div id="log"></div>
     10 <script>
     11 const longContainerName = 'iframeWithLongNameMoreThan100CharactersSpaceHolderSpaceHolderSpaceHolderSpaceHolderSpaceHolderSpaceHolder';
     12 
     13 promise_test(async t => {
     14  assert_implements(window.PerformanceLongTaskTiming, 'Longtasks are not supported.');
     15  const initialTime = performance.now();
     16  const performanceObserverTimeout = 5 * 1000;
     17  const longTasksPromise = new Promise(resolve => {
     18    const observer = new PerformanceObserver(t.step_func(entryList => {
     19      const entries = entryList.getEntries();
     20      entries.forEach(longtask => {
     21        assert_equals(longtask.entryType, 'longtask');
     22        if (hasUnrelatedTaskName(longtask.name, 'same-origin-descendant')) {
     23            return;
     24        }
     25        checkLongTaskEntry(longtask, 'same-origin-descendant');
     26        // Assert the TaskAttributionTiming entry in attribution.
     27        assert_equals(longtask.attribution.length, 1,
     28            'Exactly one attribution entry is expected');
     29        const attribution = longtask.attribution[0];
     30        assert_equals(attribution.entryType, 'taskattribution');
     31        assert_equals(attribution.name, 'unknown');
     32        assert_equals(attribution.duration, 0);
     33        assert_equals(attribution.startTime, 0);
     34        assert_equals(attribution.containerId, longContainerName + '-id');
     35        assert_equals(attribution.containerName, longContainerName + '-name');
     36        assert_equals(attribution.containerSrc, 'resources/subframe-with-longtask.html');
     37        observer.disconnect();
     38        resolve();
     39      })
     40    }));
     41    observer.observe({entryTypes: ['longtask']});
     42    const iframe = document.createElement('iframe');
     43    iframe.id = longContainerName + '-id';
     44    iframe.name = longContainerName + '-name';
     45    iframe.src = 'resources/subframe-with-longtask.html';
     46    document.body.appendChild(iframe);
     47  });
     48  const timeout = new Promise(
     49    (resolve, reject) => t.step_timeout(
     50      () => { reject(new Error('observer failed to find any entries')) },
     51      performanceObserverTimeout)
     52  )
     53  return Promise.race([longTasksPromise, timeout]);
     54 }, `Performance longtask entries in ${longContainerName} are observable in parent.`);
     55 </script>
     56 </body>