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 }