tor-browser

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

browser_screen_area_override.js (5222B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const PAGE_URL =
      7  "https://example.com/document-builder.sjs?html=<h1>Test screen dimensions</h1>";
      8 
      9 add_task(async function test_set_screen_area_override() {
     10  const tab = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
     11  const browser = gBrowser.getBrowserForTab(tab);
     12 
     13  await BrowserTestUtils.browserLoaded(browser);
     14 
     15  info("Get default screen dimensions");
     16  const defaultScreenWidth = await getScreenWidth(browser);
     17  const defaultScreenAvailWidth = await getScreenAvailWidth(browser);
     18  const defaultScreenHeight = await getScreenHeight(browser);
     19  const defaultScreenAvailHeight = await getScreenAvailHeight(browser);
     20 
     21  info("Set screen dimensions");
     22  const screenWidthOverride1 = 200;
     23  const screenHeightOverride1 = 100;
     24  browser.browsingContext.setScreenAreaOverride(
     25    screenWidthOverride1,
     26    screenHeightOverride1
     27  );
     28 
     29  await assertOrientationOverride(
     30    browser,
     31    screenWidthOverride1,
     32    screenHeightOverride1,
     33    screenWidthOverride1,
     34    screenHeightOverride1
     35  );
     36 
     37  info("Set screen dimensions override");
     38  const screenWidthOverride2 = 250;
     39  const screenHeightOverride2 = 200;
     40  browser.browsingContext.setScreenAreaOverride(
     41    screenWidthOverride2,
     42    screenHeightOverride2
     43  );
     44 
     45  await assertOrientationOverride(
     46    browser,
     47    screenWidthOverride2,
     48    screenHeightOverride2,
     49    screenWidthOverride2,
     50    screenHeightOverride2
     51  );
     52 
     53  info("Reset screen dimensions override");
     54  browser.browsingContext.resetScreenAreaOverride();
     55 
     56  await assertOrientationOverride(
     57    browser,
     58    defaultScreenWidth,
     59    defaultScreenHeight,
     60    defaultScreenAvailWidth,
     61    defaultScreenAvailHeight
     62  );
     63 
     64  BrowserTestUtils.removeTab(tab);
     65 });
     66 
     67 add_task(async function test_set_screen_area_override_in_different_contexts() {
     68  const tab1 = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
     69  const browser1 = gBrowser.getBrowserForTab(tab1);
     70 
     71  await BrowserTestUtils.browserLoaded(browser1);
     72 
     73  const tab2 = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
     74  const browser2 = gBrowser.getBrowserForTab(tab2);
     75 
     76  await BrowserTestUtils.browserLoaded(browser2);
     77 
     78  info("Get default screen dimensions");
     79  const defaultScreenWidth = await getScreenWidth(browser1);
     80  const defaultScreenAvailWidth = await getScreenAvailWidth(browser1);
     81  const defaultScreenHeight = await getScreenHeight(browser1);
     82  const defaultScreenAvailHeight = await getScreenAvailHeight(browser1);
     83 
     84  info("Set screen dimensions to the first tab");
     85  const screenWidthOverride1 = 200;
     86  const screenHeightOverride1 = 100;
     87  browser1.browsingContext.setScreenAreaOverride(
     88    screenWidthOverride1,
     89    screenHeightOverride1
     90  );
     91 
     92  await assertOrientationOverride(
     93    browser1,
     94    screenWidthOverride1,
     95    screenHeightOverride1,
     96    screenWidthOverride1,
     97    screenHeightOverride1
     98  );
     99 
    100  info("Make sure that in the second tab screen dimensions are not overridden");
    101  await assertOrientationOverride(
    102    browser2,
    103    defaultScreenWidth,
    104    defaultScreenHeight,
    105    defaultScreenAvailWidth,
    106    defaultScreenAvailHeight
    107  );
    108 
    109  info("Reset screen dimensions override");
    110  browser1.browsingContext.resetScreenAreaOverride();
    111 
    112  await assertOrientationOverride(
    113    browser1,
    114    defaultScreenWidth,
    115    defaultScreenHeight,
    116    defaultScreenAvailWidth,
    117    defaultScreenAvailHeight
    118  );
    119 
    120  BrowserTestUtils.removeTab(tab1);
    121  BrowserTestUtils.removeTab(tab2);
    122 });
    123 
    124 async function assertOrientationOverride(
    125  browser,
    126  expectedWidthValue,
    127  expectedHeightValue,
    128  expectedAvailWidthValue,
    129  expectedAvailHeightValue
    130 ) {
    131  is(
    132    await getScreenWidth(browser),
    133    expectedWidthValue,
    134    "screen.width has expected value"
    135  );
    136  is(
    137    await getScreenAvailWidth(browser),
    138    expectedAvailWidthValue,
    139    "screen.availWidth has expected value"
    140  );
    141  is(
    142    await getScreenHeight(browser),
    143    expectedHeightValue,
    144    "screen.height has expected value"
    145  );
    146  is(
    147    await getScreenAvailHeight(browser),
    148    expectedAvailHeightValue,
    149    "screen.availHeight has expected value"
    150  );
    151 
    152  const valueBiggerThanWidth = expectedWidthValue + 1;
    153  is(
    154    await matchMediaQuery(browser, valueBiggerThanWidth),
    155    false,
    156    `matches "(min-device-width: ${valueBiggerThanWidth}px)" queries correctly`
    157  );
    158 
    159  const valueSmallerThanWidth = expectedWidthValue - 1;
    160  is(
    161    await matchMediaQuery(browser, valueSmallerThanWidth),
    162    true,
    163    `matches "(min-device-width: ${valueSmallerThanWidth}px)" queries correctly`
    164  );
    165 }
    166 
    167 async function getScreenHeight(browser) {
    168  return SpecialPowers.spawn(browser, [], () => content.screen.height);
    169 }
    170 
    171 async function getScreenAvailHeight(browser) {
    172  return SpecialPowers.spawn(browser, [], () => content.screen.availHeight);
    173 }
    174 
    175 async function getScreenWidth(browser) {
    176  return SpecialPowers.spawn(browser, [], () => content.screen.width);
    177 }
    178 
    179 async function getScreenAvailWidth(browser) {
    180  return SpecialPowers.spawn(browser, [], () => content.screen.availWidth);
    181 }
    182 
    183 async function matchMediaQuery(browser, value) {
    184  return SpecialPowers.spawn(
    185    browser,
    186    [value],
    187    value => content.matchMedia(`(min-device-width: ${value}px)`).matches
    188  );
    189 }