tor-browser

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

page-visibility-manual.html (3553B)


      1 <!DOCTYPE html>
      2 <html>
      3 <body>
      4 <meta name="timeout" content="long">
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 <meta name='flags' content='interact'>
      8 <p>Switch the page to background, then switch back in a minute.</p>
      9 <iframe src='about:blank'></iframe>
     10 <script>
     11 
     12 var eventVisibleTest = async_test("Test that a change event is fired when the page is visible.");
     13 var noEventHiddenTest = async_test("Test that change event is not fired when the page is not visible.");
     14 var orientationUnchangeHiddenTest = async_test("Test that screen.orientation keeps returning the same orientation when the page is not visible.");
     15 var orientationUpdateVisibleTest = async_test("Test that screen.orientation is updated once the page is visible again.");
     16 var frameEventsTest = async_test("Test that the iframe got as many events as the main frame.");
     17 
     18 var orientationChangeContinuation = null;
     19 var orientationChangeEventListenerCalls = 0;
     20 var orientationChangeEventListenerCallsForFrame = 0;
     21 
     22 screen.orientation.addEventListener('change', function() {
     23    orientationChangeEventListenerCalls++;
     24    if (orientationChangeEventContinuation) {
     25        setTimeout(orientationChangeEventContinuation);
     26        orientationChangeEventContinuation = null;
     27    }
     28 });
     29 
     30 window.frames[0].screen.orientation.addEventListener('change', function() {
     31    orientationChangeEventListenerCallsForFrame++;
     32 });
     33 
     34 document.addEventListener("visibilitychange", function () {
     35    if(document.hidden)
     36        runNoEventHiddenTest();
     37    else
     38        runOrientationUpdateVisibleTest();
     39 });
     40 
     41 function runEventVisibleTest() {
     42    eventVisibleTest.step(function() {
     43        assert_false(document.hidden);
     44    });
     45 
     46    screen.orientation.lock("landscape-primary").then(function() {}, function() {});
     47 
     48    orientationChangeEventContinuation = function() {
     49        eventVisibleTest.step(function() {
     50            assert_equals(orientationChangeEventListenerCalls, 1);
     51            assert_equals(screen.orientation.type, "landscape-primary");
     52        });
     53        eventVisibleTest.done();
     54 
     55    };
     56 }
     57 
     58 function runNoEventHiddenTest() {
     59 
     60    noEventHiddenTest.step(function() {
     61        assert_true(document.hidden);
     62    });
     63 
     64    screen.orientation.lock("portrait-primary").then(function() {}, function() {});
     65 
     66    noEventHiddenTest.step(function() {
     67        assert_equals(orientationChangeEventListenerCalls, 1);
     68    });
     69    noEventHiddenTest.done();
     70 
     71    runOrientationUnchangeHiddenTest();
     72 }
     73 
     74 function runOrientationUnchangeHiddenTest() {
     75    orientationUnchangeHiddenTest.step(function() {
     76        assert_equals(screen.orientation.type, "landscape-primary");
     77    });
     78    orientationUnchangeHiddenTest.done();
     79 
     80 }
     81 
     82 function runOrientationUpdateVisibleTest() {
     83 
     84    orientationChangeEventContinuation = function() {
     85        orientationUpdateVisibleTest.step(function() {
     86            assert_false(document.hidden);
     87            // A change event should have been fired.
     88            assert_equals(orientationChangeEventListenerCalls, 2);
     89            // Should keep returning the start returning the orientation value.
     90            assert_equals(screen.orientation.type, "portrait-primary");
     91        });
     92 
     93        orientationUpdateVisibleTest.done();
     94 
     95        runFrameEventsTest();
     96    };
     97 }
     98 
     99 function runFrameEventsTest() {
    100    frameEventsTest.step(function() {
    101        assert_equals(orientationChangeEventListenerCallsForFrame, orientationChangeEventListenerCalls);
    102    });
    103    frameEventsTest.done();
    104 }
    105 
    106 runEventVisibleTest();
    107 
    108 </script>
    109 </body>
    110 </html>