| <html> |
| <head> |
| <title>Smart Invert Images and Video Test</title> |
| <style type="text/css"> |
| /* Testing explicit author overrides. */ |
| .no-invert { filter: none; } |
| .preserve-filter { filter: grayscale(1); } |
| </style> |
| <script> |
| if (window.testRunner) |
| testRunner.waitUntilDone(); |
| |
| const NONE_VALUE = "none"; |
| const INVERTED_VALUE = "invert(1)"; |
| const PRESERVED_VALUE = "grayscale(1)"; |
| |
| function getUIScript() { |
| return ` |
| (function() { |
| uiController.simulateAccessibilitySettingsChangeNotification(function() { |
| uiController.uiScriptComplete("Done"); |
| }); |
| })();` |
| } |
| |
| function expectFilterValueForElements(value, elements, msg) { |
| if (typeof msg !== "string") |
| msg = ""; |
| let result = document.getElementById("result"); |
| for (el of elements) { |
| var filter = window.getComputedStyle(el).filter; |
| var resultString = filter === value ? "PASS" : "FAIL"; |
| resultString += ": filter for " + el.tagName; |
| resultString += el.id ? "#" + el.id : ""; |
| resultString += el.className ? "." + el.className : ""; |
| resultString += " is '" + filter + "'."; |
| resultString += filter !== value ? "Expected: '" + value + "'." : ""; |
| resultString += msg ? " " + msg : ""; |
| resultString += "<br>"; |
| result.innerHTML += resultString; |
| } |
| } |
| |
| function runTest() { |
| if (!window.internals) |
| return; |
| |
| document.getElementById("result").innerHTML += "DEFAULTS<br>"; |
| |
| // Elements img, picture, video should not be inverted by default. |
| expectFilterValueForElements(NONE_VALUE, document.querySelectorAll("#a, #b, #c, #d, .no-invert")); |
| |
| // Verify default for elements with author-provided filter values. |
| expectFilterValueForElements(PRESERVED_VALUE, document.querySelectorAll(".preserve-filter")); |
| |
| window.internals.settings.forcedColorsAreInvertedAccessibilityValue = "on"; |
| |
| if (testRunner.runUIScript) { |
| testRunner.runUIScript(getUIScript(), function(result) { |
| |
| document.getElementById("result").innerHTML += "<br>AFTER INVERT-COLORS IS APPLIED<br>"; |
| |
| // Eventually elements img amd picture will be double-inverted when invert colors is on. Not shipping yet. |
| expectFilterValueForElements(INVERTED_VALUE, document.querySelectorAll("#a, #b")); |
| |
| // Element <video> should be double-inverted when invert colors is on. |
| expectFilterValueForElements(INVERTED_VALUE, document.querySelectorAll("#c, #d")); |
| |
| // Verify it is not applied to nested picture>img (fallback images). |
| expectFilterValueForElements(NONE_VALUE, document.querySelectorAll("#b > img")); |
| |
| // Author overrides should be supported. |
| expectFilterValueForElements(NONE_VALUE, document.querySelectorAll(".no-invert")); |
| expectFilterValueForElements(PRESERVED_VALUE, document.querySelectorAll(".preserve-filter")); |
| |
| testRunner.dumpAsText(); |
| testRunner.notifyDone(); |
| }); |
| } |
| } |
| |
| window.addEventListener("load", runTest, false); |
| </script> |
| </head> |
| <body> |
| |
| <img id="a"> |
| <picture id="b"><img class="fallback"></picture> |
| <video id="c"></video> |
| <video id="d" controls></video> |
| <br> |
| <img class="no-invert"> |
| <picture class="no-invert"><img class="fallback" alt=""></picture> |
| <video class="no-invert"></video> |
| <video class="no-invert" controls></video> |
| <br> |
| <img class="preserve-filter" alt=""> |
| <picture class="preserve-filter"><img class="fallback" alt=""></picture> |
| <video class="preserve-filter"></video> |
| <video class="preserve-filter" controls></video> |
| |
| <div id="result"></div> |
| </body> |
| </html> |