tor-browser

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

visibility-state-entry.tentative.html (3018B)


      1 <!DOCTYPE HTML>
      2 <title>Test VisibleStateEntry</title>
      3 <link rel="author" title="Noam Rosenthal"  href="mailto:nrosenthal@chromium.org">
      4 <link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#page-visibility">
      5 <meta name="timeout" content="long">
      6 <script src="/resources/testharness.js"></script>
      7 <script src="/resources/testharnessreport.js"></script>
      8 <script src="/resources/testdriver.js"></script>
      9 <script src="/resources/testdriver-vendor.js"></script>
     10 <script src="resources/window_state_context.js"></script>
     11 <script>
     12 
     13 setup(() => {
     14    assert_implements(window.VisibilityStateEntry, 'VisibilityStateEntry is not supported.');
     15 });
     16 
     17 promise_test(async t => {
     18    const {minimizeAndWait, restoreAndWait} = window_state_context(t);
     19    const all = performance.getEntries();
     20    let entries = performance.getEntriesByType("visibility-state");
     21    assert_equals(entries.length, 1);
     22    assert_equals(entries[0].name, "visible");
     23    assert_equals(entries[0].startTime, 0);
     24    assert_equals(entries[0].duration, 0);
     25    await minimizeAndWait();
     26    entries = performance.getEntriesByType("visibility-state");
     27    assert_equals(entries.length, 2);
     28    assert_equals(entries[1].name, "hidden");
     29    assert_equals(entries[1].duration, 0);
     30    await restoreAndWait();
     31    entries = performance.getEntriesByType("visibility-state");
     32    assert_equals(entries.length, 3);
     33    assert_equals(entries[2].name, "visible");
     34    assert_equals(entries[2].duration, 0);
     35 }, "Hiding/showing the page should create visibility-state entries");
     36 
     37 promise_test(async t => {
     38    const {minimizeAndWait} = window_state_context(t);
     39    await minimizeAndWait();
     40    const iframe = document.createElement("iframe");
     41    iframe.src = "resources/blank_page_green.html";
     42    const loaded = new Promise(resolve => iframe.addEventListener("load", resolve));
     43    t.add_cleanup(() => iframe.remove());
     44    document.body.appendChild(iframe);
     45    await loaded;
     46    const entries = iframe.contentWindow.performance.getEntriesByType("visibility-state");
     47    assert_equals(entries[0].name, "hidden");
     48    assert_equals(entries[0].startTime, 0);
     49 }, "If a page starts as hidden, the first visibility-state entry should be hidden");
     50 
     51 promise_test(async t => {
     52    const {minimize, restore} = window_state_context(t);
     53    const observed = new Promise(resolve => new PerformanceObserver(list => {
     54      if (list.getEntries()[0].name === "visible")
     55        resolve();
     56    }).observe({entryTypes: ['visibility-state']}));
     57    await minimize();
     58    await restore();
     59    await observed;
     60 }, "Visibility state entries should be queued to performance observers");
     61 
     62 promise_test(async t => {
     63    const entry = await new Promise(resolve => new PerformanceObserver(
     64      (list, observer) => {
     65        observer.disconnect();
     66        resolve(list.getEntries()[0]);
     67      }).observe({type: "visibility-state", buffered: true}));
     68    assert_equals(entry.name, "visible");
     69 }, "Visibility state observers should respect the buffered flag");
     70 </script>