tor-browser

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

viewport-segments-segments-property.https.html (4230B)


      1 <!DOCTYPE html>
      2 <script src="/resources/testharness.js"></script>
      3 <script src="/resources/testharnessreport.js"></script>
      4 <script src="/resources/testdriver.js"></script>
      5 <script src="/resources/testdriver-vendor.js"></script>
      6 </head>
      7 <body>
      8 <iframe src="about:blank"></iframe>
      9 </body>
     10 <script>
     11 'use strict';
     12 
     13 promise_test(async (t) => {
     14  t.add_cleanup(async () => {
     15    await test_driver.clear_display_features();
     16  });
     17 
     18  // When the viewport is not divided the segments property should return an
     19  // array with one segment, the size of the viewport.
     20  assert_equals(viewport.segments.length, 1);
     21  let segment = viewport.segments[0];
     22  assert_equals(segment.x, 0);
     23  assert_equals(segment.y, 0);
     24  assert_equals(segment.width, window.innerWidth);
     25  assert_equals(segment.height,  window.innerHeight);
     26  // iframes do not receive segments information.
     27  assert_equals(window.frames[0].viewport.segments, null);
     28 
     29  const displayFeatureLength = 10;
     30  const horizontalViewportSegmentsMQL = window.matchMedia('(horizontal-viewport-segments: 2)');
     31  let promise = new Promise(resolve => {
     32    horizontalViewportSegmentsMQL.addEventListener(
     33      'change',
     34      () => { resolve(horizontalViewportSegmentsMQL.matches); },
     35      { once: true }
     36    );
     37  });
     38  const leftOffset =
     39    Math.round(window.innerWidth / 2 - displayFeatureLength / 2);
     40  await test_driver.set_display_features([{
     41    orientation: 'vertical',
     42    maskLength: displayFeatureLength,
     43    offset: leftOffset
     44  }]);
     45  assert_true(await promise);
     46  assert_equals(viewport.segments.length, 2);
     47  const segmentLeft = viewport.segments[0];
     48  const epsilon = 1;
     49  assert_equals(segmentLeft.x, 0);
     50  assert_equals(segmentLeft.y, 0);
     51  assert_approx_equals(segmentLeft.width, leftOffset, epsilon);
     52  assert_equals(segmentLeft.height,  window.innerHeight);
     53  const segmentRight = viewport.segments[1];
     54  assert_approx_equals(segmentRight.x,
     55    Math.round(window.innerWidth / 2 + displayFeatureLength / 2), epsilon);
     56  assert_equals(segmentRight.y, 0);
     57  assert_approx_equals(segmentRight.width, leftOffset, epsilon);
     58  assert_equals(segmentRight.height,  window.innerHeight);
     59  // iframes do not receive segments information.
     60  assert_equals(window.frames[0].viewport.segments, null);
     61 
     62 
     63  const verticalViewportSegmentsMQL = window.matchMedia('(vertical-viewport-segments: 2)');
     64  promise = new Promise(resolve => {
     65    verticalViewportSegmentsMQL.addEventListener(
     66      'change',
     67      () => { resolve(verticalViewportSegmentsMQL.matches); },
     68      { once: true }
     69    );
     70  });
     71  const topOffset =
     72    Math.round(window.innerHeight / 2 - displayFeatureLength / 2);
     73  await test_driver.set_display_features([{
     74    orientation: 'horizontal',
     75    maskLength: displayFeatureLength,
     76    offset: topOffset
     77  }]);
     78  assert_true(await promise);
     79  assert_equals(viewport.segments.length, 2);
     80  const segmentTop = viewport.segments[0];
     81  assert_equals(segmentTop.x, 0);
     82  assert_equals(segmentTop.y, 0);
     83  assert_equals(segmentTop.width, window.innerWidth);
     84  assert_approx_equals(segmentTop.height, topOffset, epsilon);
     85  const segmentBottom = viewport.segments[1];
     86  assert_equals(segmentBottom.x, 0);
     87  assert_approx_equals(segmentBottom.y,
     88    Math.round(window.innerHeight / 2 + displayFeatureLength / 2), epsilon);
     89  assert_equals(segmentBottom.width, window.innerWidth);
     90  assert_approx_equals(segmentBottom.height,  topOffset, epsilon);
     91  // iframes do not receive segments information.
     92  assert_equals(window.frames[0].viewport.segments, null);
     93 
     94  const oneSegmentMQL = window.matchMedia('(vertical-viewport-segments: 1)');
     95  promise = new Promise(resolve => {
     96    oneSegmentMQL.addEventListener(
     97      'change',
     98      () => { resolve(oneSegmentMQL.matches); },
     99      { once: true }
    100    );
    101  });
    102  await test_driver.clear_display_features();
    103  assert_true(await promise);
    104  segment = viewport.segments[0];
    105  assert_equals(segment.x, 0);
    106  assert_equals(segment.y, 0);
    107  assert_equals(segment.width, window.innerWidth);
    108  assert_equals(segment.height,  window.innerHeight);
    109  // iframes do not receive segments information.
    110  assert_equals(window.frames[0].viewport.segments, null);
    111 
    112 }, 'Tests the Viewport Segments Media Query change event handler.');
    113 </script>
    114 </html>