From a18178002060143ee71e6473b2d25520c18129b7 Mon Sep 17 00:00:00 2001 From: kkapsner Date: Mon, 2 Dec 2019 19:17:54 +0100 Subject: [PATCH] Last adjustments to screen protection Fixes #220 --- lib/modifiedScreenAPI.js | 78 +++++++++++---------------------------- lib/settingDefinitions.js | 1 + test/screenSizeTest.js | 53 +++++++++++++------------- 3 files changed, 50 insertions(+), 82 deletions(-) diff --git a/lib/modifiedScreenAPI.js b/lib/modifiedScreenAPI.js index 02c2127..112c279 100644 --- a/lib/modifiedScreenAPI.js +++ b/lib/modifiedScreenAPI.js @@ -89,24 +89,20 @@ return window.screen; } - function fakeWidth(args, check){ - const {prefs, notify, window, original} = check; - const originalValue = original.apply(this, window.Array.from(args)); - const returnValue = Math.round(getScreenDimensions(prefs, window).width); - if (originalValue !== returnValue){ - notify("fakedScreenReadout"); - } - return returnValue; - } - - function fakeHeight(args, check){ - const {prefs, notify, window, original} = check; - const originalValue = original.apply(this, window.Array.from(args)); - const returnValue = Math.round(getScreenDimensions(prefs, window).height); - if (originalValue !== returnValue){ - notify("fakedScreenReadout"); - } - return returnValue; + function getFaker(dimension){ + return function fake(args, check){ + const {prefs, notify, window, original} = check; + const originalValue = original.apply(this, window.Array.from(args)); + const returnValue = (typeof dimension) === "function"? + dimension(window): + dimension? + Math.round(getScreenDimensions(prefs, window)[dimension]): + 0; + if (originalValue !== returnValue){ + notify("fakedScreenReadout"); + } + return returnValue; + }; } scope.changedGetters = [ @@ -116,7 +112,7 @@ getterGenerator: function(checker){ const temp = { get width(){ - return checkerWrapper(checker, this, arguments, fakeWidth); + return checkerWrapper(checker, this, arguments, getFaker("width")); } }; return Object.getOwnPropertyDescriptor(temp, "width").get; @@ -128,7 +124,7 @@ getterGenerator: function(checker){ const temp = { get height(){ - return checkerWrapper(checker, this, arguments, fakeHeight); + return checkerWrapper(checker, this, arguments, getFaker("height")); } }; return Object.getOwnPropertyDescriptor(temp, "height").get; @@ -140,7 +136,7 @@ getterGenerator: function(checker){ const temp = { get availWidth(){ - return checkerWrapper(checker, this, arguments, fakeWidth); + return checkerWrapper(checker, this, arguments, getFaker("width")); } }; return Object.getOwnPropertyDescriptor(temp, "availWidth").get; @@ -152,7 +148,7 @@ getterGenerator: function(checker){ const temp = { get availHeight(){ - return checkerWrapper(checker, this, arguments, fakeHeight); + return checkerWrapper(checker, this, arguments, getFaker("height")); } }; return Object.getOwnPropertyDescriptor(temp, "availHeight").get; @@ -164,14 +160,7 @@ getterGenerator: function(checker){ const temp = { get availLeft(){ - return checkerWrapper(checker, this, arguments, function(args, check){ - const {notify, window, original} = check; - const originalValue = original.apply(this, window.Array.from(args)); - if (originalValue !== 0){ - notify("fakedScreenReadout"); - } - return 0; - }); + return checkerWrapper(checker, this, arguments, getFaker(0)); } }; return Object.getOwnPropertyDescriptor(temp, "availLeft").get; @@ -183,14 +172,7 @@ getterGenerator: function(checker){ const temp = { get availTop(){ - return checkerWrapper(checker, this, arguments, function(args, check){ - const {notify, window, original} = check; - const originalValue = original.apply(this, window.Array.from(args)); - if (originalValue !== 0){ - notify("fakedScreenReadout"); - } - return 0; - }); + return checkerWrapper(checker, this, arguments, getFaker(0)); } }; return Object.getOwnPropertyDescriptor(temp, "availTop").get; @@ -202,15 +184,7 @@ getterGenerator: function(checker){ const temp = { get outerWidth(){ - return checkerWrapper(checker, this, arguments, function(args, check){ - const {notify, window, original} = check; - const originalValue = original.apply(this, window.Array.from(args)); - const returnValue = window.innerWidth; - if (originalValue !== returnValue){ - notify("fakedScreenReadout"); - } - return returnValue; - }); + return checkerWrapper(checker, this, arguments, getFaker(window => window.innerWidth)); } }; return Object.getOwnPropertyDescriptor(temp, "outerWidth").get; @@ -222,15 +196,7 @@ getterGenerator: function(checker){ const temp = { get outerHeight(){ - return checkerWrapper(checker, this, arguments, function(args, check){ - const {notify, window, original} = check; - const originalValue = original.apply(this, window.Array.from(args)); - const returnValue = window.innerHeight; - if (originalValue !== returnValue){ - notify("fakedScreenReadout"); - } - return returnValue; - }); + return checkerWrapper(checker, this, arguments, getFaker(window => window.innerHeight)); } }; return Object.getOwnPropertyDescriptor(temp, "outerHeight").get; diff --git a/lib/settingDefinitions.js b/lib/settingDefinitions.js index 77e1f0d..666b3af 100644 --- a/lib/settingDefinitions.js +++ b/lib/settingDefinitions.js @@ -357,6 +357,7 @@ { name: "fakeMinimalScreenSize", defaultValue: true, + mobileDefaultValue: false, urlSpecific: true }, { diff --git a/test/screenSizeTest.js b/test/screenSizeTest.js index b8cb15f..38f963e 100644 --- a/test/screenSizeTest.js +++ b/test/screenSizeTest.js @@ -126,33 +126,34 @@ addConsistencyTest("media queries: window.matchMedia - big value", function(){ ); }); -function addResolutionTest(title, callback){ +var addResolutionTest = function(){ "use strict"; - - addTest(document.getElementById("resolution"), title, function(resultsNode){ - ["width", "height"].forEach(function(type){ - var line = document.createElement("div"); - line.textContent = type + ": "; - resultsNode.appendChild(line); - - var number = document.createElement("span"); - number.className = "result " + type; - line.appendChild(number); - function compute(){ - number.textContent = "computing"; - callback(type).then(function(value){ - number.textContent = value; - return; - }).catch(function(error){ - number.classList.add("failed"); - number.textContent = error; - }); - } - compute(); - window.addEventListener("resize", compute); + return function addResolutionTest(title, callback, properties = ["width", "height"]){ + addTest(document.getElementById("resolution"), title, function(resultsNode){ + properties.forEach(function(type){ + var line = document.createElement("div"); + line.textContent = type + ": "; + resultsNode.appendChild(line); + + var number = document.createElement("span"); + number.className = "result " + type; + line.appendChild(number); + function compute(){ + number.textContent = "computing"; + callback(type).then(function(value){ + number.textContent = value; + return; + }).catch(function(error){ + number.classList.add("failed"); + number.textContent = error; + }); + } + compute(); + window.addEventListener("resize", compute); + }); }); - }); -} + }; +}(); addResolutionTest("screen properties", function(type){ "use strict"; @@ -166,7 +167,7 @@ addResolutionTest("screen properties: avail...", function(type){ return Promise.resolve(screen[ "avail" + type.substring(0, 1).toUpperCase() + type.substring(1) ]); -}); +}, ["width", "height", "left", "top"]); addResolutionTest("window properties: inner...", function(type){ "use strict";