diff options
Diffstat (limited to 'accessible/tests/browser/e10s/browser_caching_position.js')
-rw-r--r-- | accessible/tests/browser/e10s/browser_caching_position.js | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/accessible/tests/browser/e10s/browser_caching_position.js b/accessible/tests/browser/e10s/browser_caching_position.js new file mode 100644 index 0000000000..5de246bb91 --- /dev/null +++ b/accessible/tests/browser/e10s/browser_caching_position.js @@ -0,0 +1,194 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/* import-globals-from ../../mochitest/layout.js */ +loadScripts({ name: "layout.js", dir: MOCHITESTS_DIR }); + +function getCachedBounds(acc) { + let cachedBounds = ""; + try { + cachedBounds = acc.cache.getStringProperty("relative-bounds"); + } catch (e) { + ok(false, "Unable to fetch cached bounds from cache!"); + } + return cachedBounds; +} + +async function testCoordinates(accDoc, id, expectedWidthPx, expectedHeightPx) { + let acc = findAccessibleChildByID(accDoc, id, [Ci.nsIAccessibleImage]); + if (!acc) { + return; + } + + let screenX = {}; + let screenY = {}; + let windowX = {}; + let windowY = {}; + let parentX = {}; + let parentY = {}; + + // get screen coordinates. + acc.getImagePosition( + nsIAccessibleCoordinateType.COORDTYPE_SCREEN_RELATIVE, + screenX, + screenY + ); + // get window coordinates. + acc.getImagePosition( + nsIAccessibleCoordinateType.COORDTYPE_WINDOW_RELATIVE, + windowX, + windowY + ); + // get parent related coordinates. + acc.getImagePosition( + nsIAccessibleCoordinateType.COORDTYPE_PARENT_RELATIVE, + parentX, + parentY + ); + // XXX For linked images, a negative parentY value is returned, and the + // screenY coordinate is the link's screenY coordinate minus 1. + // Until this is fixed, set parentY to -1 if it's negative. + if (parentY.value < 0) { + parentY.value = -1; + } + + // See if asking image for child at image's screen coordinates gives + // correct accessible. getChildAtPoint operates on screen coordinates. + let tempAcc = null; + try { + tempAcc = acc.getChildAtPoint(screenX.value, screenY.value); + } catch (e) {} + is(tempAcc, acc, "Wrong accessible returned for position of " + id + "!"); + + // get image's parent. + let imageParentAcc = null; + try { + imageParentAcc = acc.parent; + } catch (e) {} + ok(imageParentAcc, "no parent accessible for " + id + "!"); + + if (imageParentAcc) { + // See if parent's screen coordinates plus image's parent relative + // coordinates equal to image's screen coordinates. + let parentAccX = {}; + let parentAccY = {}; + let parentAccWidth = {}; + let parentAccHeight = {}; + imageParentAcc.getBounds( + parentAccX, + parentAccY, + parentAccWidth, + parentAccHeight + ); + is( + parentAccX.value + parentX.value, + screenX.value, + "Wrong screen x coordinate for " + id + "!" + ); + // XXX see bug 456344 + // is( + // parentAccY.value + parentY.value, + // screenY.value, + // "Wrong screen y coordinate for " + id + "!" + // ); + } + + let [expectedW, expectedH] = CSSToDevicePixels( + window, + expectedWidthPx, + expectedHeightPx + ); + let width = {}; + let height = {}; + acc.getImageSize(width, height); + is(width.value, expectedW, "Wrong width for " + id + "!"); + is(height.value, expectedH, "wrong height for " + id + "!"); +} + +addAccessibleTask( + ` + <br>Simple image:<br> + <img id="nonLinkedImage" src="http://example.com/a11y/accessible/tests/mochitest/moz.png"/> + <br>Linked image:<br> + <a href="http://www.mozilla.org"><img id="linkedImage" src="http://example.com/a11y/accessible/tests/mochitest/moz.png"></a> + <br>Image with longdesc:<br> + <img id="longdesc" src="http://example.com/a11y/accessible/tests/mochitest/moz.png" longdesc="longdesc_src.html" + alt="Image of Mozilla logo"/> + <br>Image with invalid url in longdesc:<br> + <img id="invalidLongdesc" src="http://example.com/a11y/accessible/tests/mochitest/moz.png" longdesc="longdesc src.html" + alt="Image of Mozilla logo"/> + <br>Image with click and longdesc:<br> + <img id="clickAndLongdesc" src="http://example.com/a11y/accessible/tests/mochitest/moz.png" longdesc="longdesc_src.html" + alt="Another image of Mozilla logo" onclick="alert('Clicked!');"/> + + <br>image described by a link to be treated as longdesc<br> + <img id="longdesc2" src="http://example.com/a11y/accessible/tests/mochitest/moz.png" aria-describedby="describing_link" + alt="Second Image of Mozilla logo"/> + <a id="describing_link" href="longdesc_src.html">link to description of image</a> + + <br>Image described by a link to be treated as longdesc with whitespaces<br> + <img id="longdesc3" src="http://example.com/a11y/accessible/tests/mochitest/moz.png" aria-describedby="describing_link2" + alt="Second Image of Mozilla logo"/> + <a id="describing_link2" href="longdesc src.html">link to description of image</a> + + <br>Image with click:<br> + <img id="click" src="http://example.com/a11y/accessible/tests/mochitest/moz.png" + alt="A third image of Mozilla logo" onclick="alert('Clicked, too!');"/> + `, + async function (browser, docAcc) { + // Test non-linked image + await testCoordinates(docAcc, "nonLinkedImage", 89, 38); + + // Test linked image + await testCoordinates(docAcc, "linkedImage", 89, 38); + + // Image with long desc + await testCoordinates(docAcc, "longdesc", 89, 38); + + // Image with invalid url in long desc + await testCoordinates(docAcc, "invalidLongdesc", 89, 38); + + // Image with click and long desc + await testCoordinates(docAcc, "clickAndLongdesc", 89, 38); + + // Image with click + await testCoordinates(docAcc, "click", 89, 38); + + // Image with long desc + await testCoordinates(docAcc, "longdesc2", 89, 38); + + // Image described by HTML:a@href with whitespaces + await testCoordinates(docAcc, "longdesc3", 89, 38); + } +); + +addAccessibleTask( + ` + <br>Linked image:<br> + <a href="http://www.mozilla.org"><img id="linkedImage" src="http://example.com/a11y/accessible/tests/mochitest/moz.png"></a> + `, + async function (browser, docAcc) { + const imgAcc = findAccessibleChildByID(docAcc, "linkedImage", [ + Ci.nsIAccessibleImage, + ]); + const origCachedBounds = getCachedBounds(imgAcc); + + await invokeContentTask(browser, [], () => { + const imgNode = content.document.getElementById("linkedImage"); + imgNode.style = "margin-left: 1000px; margin-top: 500px;"; + }); + + await untilCacheOk(() => { + return origCachedBounds != getCachedBounds(imgAcc); + }, "Cached bounds update after mutation"); + }, + { + // We can only access the `cache` attribute of an accessible when + // the cache is enabled and we're in a remote browser. + topLevel: true, + iframe: true, + } +); |