haikuwebkit/LayoutTests/accessibility/mac/media-query-values-change.html

107 lines
2.9 KiB
HTML
Raw Permalink Normal View History

AX: Settings: Increase contrast isn't detected in browser until an additional setting is applied https://bugs.webkit.org/show_bug.cgi?id=225909 Reviewed by Per Arne Vollan. Source/WebCore/PAL: * pal/spi/mac/HIServicesSPI.h: Source/WebKit: Tests: accessibility/mac/media-query-values-change.html 1) WebContent blocks access to distributed notification center, so we can't rely on that to re-post notifications 2) AppKit caches the values of these AX settings, so we need to invalidate that cache directly * Platform/spi/mac/AppKitSPI.h: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKAccessibilityTestingInjectPreference): * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: * WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::invertColorsPreferenceKey): (WebKit::dispatchSimulatedNotificationsForPreferenceChange): (WebKit::setPreferenceValue): (WebKit::reduceMotionPreferenceKey): Deleted. Tools: * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp: (WTR::AccessibilityController::injectAccessibilityPreference): * WebKitTestRunner/InjectedBundle/AccessibilityController.h: * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl: * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm: (WTR::AccessibilityController::injectAccessibilityPreference): LayoutTests: * accessibility/mac/media-query-values-change-expected.txt: Added. * accessibility/mac/media-query-values-change.html: Added. Canonical link: https://commits.webkit.org/238093@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@277971 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-05-24 22:27:01 +00:00
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="../../resources/accessibility-helper.js"></script>
<style>
@media (prefers-contrast: no-preference) {
.contrastNo {
visibility: visible;
}
.contrastMore {
visibility: hidden;
}
}
@media (prefers-contrast: more) {
.contrastNo {
visibility: hidden;
}
.contrastMore {
visibility: visible;
}
}
@media (prefers-reduced-motion: no-preference) {
.motionNo {
visibility: visible;
}
.motionReduce {
visibility: hidden;
}
}
@media (prefers-reduced-motion: reduce) {
.motionNo {
visibility: hidden;
}
.motionReduce {
visibility: visible;
}
}
</style>
</head>
<body>
<div id="no-contrast" class="contrastNo">no contrast</div>
<div id="more-contrast" class="contrastMore">more</div>
<div id="no-motion" class="motionNo">no motion</div>
<div id="reduce-motion" class="motionReduce">reduce</div>
<p id="description"></p>
<div id="console"></div>
<script>
description("This tests that CSS Accessibility media queries get updates when settings change");
window.jsTestIsAsync = true;
function visibility(domId) {
return getComputedStyle(document.getElementById(domId)).visibility;
}
var defaultVisibility;
var updatedVisibility;
function testVisibility(defaultId, updatedId, key, endTest) {
defaultVisibility = visibility(defaultId);
updatedVisibility = visibility(updatedId);
shouldBe("defaultVisibility", "'visible'");
shouldBe("updatedVisibility", "'hidden'");
accessibilityController.injectAccessibilityPreference("com.apple.universalaccess", key, "1");
setTimeout(async () => {
await waitFor(() => {
return visibility(updatedId) == 'visible';
});
defaultVisibility = visibility(defaultId);
updatedVisibility = visibility(updatedId);
shouldBe("defaultVisibility", "'hidden'");
shouldBe("updatedVisibility", "'visible'");
accessibilityController.injectAccessibilityPreference("com.apple.universalaccess", key, "0");
if (endTest) {
finishJSTest();
}
}, 0);
}
function handleContrast(endTest) {
testVisibility("no-contrast", "more-contrast", "increaseContrast", endTest);
}
function handleMotion(endTest) {
testVisibility("no-motion", "reduce-motion", "reduceMotion", endTest);
}
if (window.accessibilityController) {
handleContrast(false);
handleMotion(true);
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>