haikuwebkit/LayoutTests/accessibility/scroll-to-make-visible-ifra...

116 lines
4.8 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE html>
<head>
<script src="../resources/js-test.js"></script>
</head>
<body>
<p id="description"></p>
<div style='border: 1px solid #000; height: 5000px;'>5000-pixel box</div>
WebKit doesn't parse "#" as delimiter for fragment identifier in data URIs https://bugs.webkit.org/show_bug.cgi?id=68089 Patch by Rob Buis <rbuis@igalia.com> on 2020-10-05 Reviewed by Alex Christensen, Ryosuke Niwa, and Darin Adler. LayoutTests/imported/w3c: Update improved test results. * web-platform-tests/fetch/data-urls/processing.any-expected.txt: * web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt: * web-platform-tests/url/data-uri-fragment-expected.txt: Source/WebCore: To maintain compatibility with existing iOS and macOS apps, we only do this for apps linked with the SDK after the change. Covered by newly passing web platform tests (which Chrome and Firefox already passed). * loader/ResourceLoader.cpp: (WebCore::shouldStripFragmentIdentifier): (WebCore::ResourceLoader::loadDataURL): * platform/cocoa/VersionChecks.h: Source/WTF: * wtf/URL.h: * wtf/spi/darwin/dyldSPI.h: LayoutTests: Adjusts tests thats use data URIs to escape the # character. * accessibility/ios-simulator/iframe-access.html: * accessibility/ios-simulator/unobscured-content-rect.html: * accessibility/resources/iframe.html: * accessibility/scroll-to-global-point-iframe.html: * accessibility/scroll-to-make-visible-iframe-offscreen.html: * accessibility/scroll-to-make-visible-iframe.html: * css3/blending/background-blend-mode-crossfade-image.html: * css3/blending/background-blend-mode-data-uri-svg-image.html: * css3/blending/background-blend-mode-tiled-layers.html: * css3/flexbox/flexitem.html: * css3/shapes/shape-outside/shape-image/shape-image-002.html: * css3/shapes/shape-outside/shape-image/shape-image-005.html: * editing/pasteboard/data-transfer-set-data-sanitize-url-when-copying-in-null-origin.html: * editing/pasteboard/data-transfer-set-data-sanitize-url-when-dragging-in-null-origin.html: * fast/css-grid-layout/grid-item-display.html: * fast/css/import-style-update.html: * fast/css/link-media-attr.html: * fast/dom/HTMLLinkElement/link-stylesheet-media-type.html: * fast/events/attribute-listener-cloned-from-frameless-doc-context-2.html: * fast/events/attribute-listener-cloned-from-frameless-doc-context.html: * fast/events/attribute-listener-extracted-from-frameless-doc-context-2.html: * fast/events/attribute-listener-extracted-from-frameless-doc-context.html: * fast/hidpi/image-srcset-data-escaped-srcset.html: * fast/html/link-rel-stylesheet.html: * fast/loader/data-url-encoding-html.html: * fast/loader/data-url-encoding-svg.html: * fast/spatial-navigation/resources/iframe.html: * http/tests/security/top-level-unique-origin.https.html: * platform/ios/css3/flexbox/flexitem-expected.txt: * platform/win/css3/flexbox/flexitem-expected.txt: * security/contentSecurityPolicy/link-with-data-url-allowed-by-style-src-star-with-AllowContentSecurityPolicySourceStarToMatchAnyProtocol-enabled.html: * svg/animations/css-animation-background-svg.html: * svg/animations/css-animation-embedded-svg.html: * svg/animations/css-animation-hover-svg.html: * svg/as-image/svg-canvas-data-url-svg-with-feimage-not-tainted.html: * svg/custom/object-data-href.html: Canonical link: https://commits.webkit.org/230098@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@267995 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-10-05 19:36:22 +00:00
<iframe id="frame" src="data:text/html,<body><button id='upper_target'>Upper Target</button><div style='border: 1px solid %23000; height: 5000px;'>5000-pixel box</div><button id='lower_target'>Lower Target</button></body>"></iframe>
<br>
<iframe id="frame2" src="./resources/iframe.html"></iframe>
<div id="console"></div>
<script>
description("This tests that scrolling to make an element visible works properly when there's an iframe off screen.");
window.jsTestIsAsync = true;
function runTest() {
window.frame = document.getElementById("frame");
window.frameWindow = frame.contentWindow;
var upperTarget = frameWindow.document.getElementById("upper_target");
var lowerTarget = frameWindow.document.getElementById("lower_target");
var lowerTargetAccessibleObject;
var upperTargetAccessibleObject;
if (frameWindow.accessibilityController) {
lowerTargetAccessibleObject = frameWindow.accessibilityController.accessibleElementById("lower_target");
upperTargetAccessibleObject = frameWindow.accessibilityController.accessibleElementById("upper_target");
}
// Initial state
debug("Test scrolling an offscreen iframe.");
window.scrollTo(0, 0);
shouldBeZero("window.pageYOffset");
// Scroll to make lower target visible and check.
debug("\nScroll lower target to visible.");
if (frameWindow.accessibilityController)
lowerTargetAccessibleObject.scrollToMakeVisible();
// The iframe should be scrolled into view.
debug("The iframe should be scrolled into view");
window.scrolledYOffset = window.pageYOffset;
shouldBeTrue("scrolledYOffset > 0");
// The content inside the iframe should be scrolled into view too
testScrolledIntoView(lowerTarget, frameWindow, "Test the lower target should be scrolled into view.")
// Scroll to make upper target visible and check.
debug("\nScroll upper target to visible.");
if (frameWindow.accessibilityController)
upperTargetAccessibleObject.scrollToMakeVisible();
// The iframe should be visible already
debug("The main window shouldn't scroll.");
shouldBeTrue("window.pageYOffset == scrolledYOffset");
// The content inside the iframe should be scrolled into view too
testScrolledIntoView(upperTarget, frameWindow, "Test the upper target should be scrolled into view.")
// Reset and test iframe inside iframe
debug("\nReset scrolling. Test scrolling in nested iframes.");
window.scrollTo(0, 0);
shouldBeZero("window.pageYOffset");
window.innerFrame = document.getElementById("frame2").contentWindow.document.getElementById("iframe");
window.innerFrameWindow = innerFrame.contentWindow;
var button = innerFrameWindow.document.getElementById("button");
var buttonAccessibleObject;
debug("\nScroll inner button to visible.");
if (innerFrameWindow.accessibilityController) {
buttonAccessibleObject = innerFrameWindow.accessibilityController.accessibleElementById("button");
buttonAccessibleObject.scrollToMakeVisible();
}
// The content inside the inner iframe should be scrolled into view too
testScrolledIntoView(button, innerFrameWindow, "Test the button inside the inner frame should be scrolled into view");
// Use outter frame to determine the inner frame is scrolled into view.
window.outterFrame = document.getElementById("frame2");
window.outterFrameWindow = outterFrame.contentWindow;
debug("The inner iframe should be scrolled into view");
shouldBeTrue("outterFrameWindow.pageYOffset > 0");
// Now make sure we can scroll back to the outter text above the inner iframe
var text = outterFrameWindow.document.getElementById("box").firstChild;
var textAccessibleObject;
debug("\nScroll outter text element to visible.");
if (outterFrameWindow.accessibilityController) {
textAccessibleObject = outterFrameWindow.accessibilityController.accessibleElementById("box").childAtIndex(0);
textAccessibleObject.scrollToMakeVisible();
}
debug("The Y offset of the outter iframe should be reset.")
shouldBeZero("outterFrameWindow.pageYOffset");
finishJSTest();
}
function testScrolledIntoView(object, testWindow, description) {
debug(description);
window.frameMinYOffset = object.offsetTop + object.offsetHeight - testWindow.innerHeight;
window.frameMaxYOffset = object.offsetTop;
window.scrolledIntoView = testWindow.pageYOffset >= frameMinYOffset && testWindow.pageYOffset <= frameMaxYOffset;
shouldBeTrue("scrolledIntoView");
}
window.addEventListener("load", function() {
setTimeout(runTest, 0);
}, false);
</script>
</body>
</html>