author | Alexander Surkov <surkov.alexander@gmail.com> |
Wed, 22 Jan 2014 18:14:06 -0500 | |
changeset 164766 | 700b3557403d23239721bae92f767eb82c0af60e |
parent 164765 | ee997698be4a0f2715c493e8126a2b28080cbe57 |
child 164767 | 8a9e712e2f63538a4abc0f2bb156923823ba92f9 |
push id | 26060 |
push user | cbook@mozilla.com |
push date | Thu, 23 Jan 2014 09:18:25 +0000 |
treeherder | mozilla-central@d418cc97bacb [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | tbsaunde |
bugs | 961737 |
milestone | 29.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
accessible/src/generic/HyperTextAccessible.cpp | file | annotate | diff | comparison | revisions | |
accessible/tests/mochitest/text/test_lineboundary.html | file | annotate | diff | comparison | revisions |
--- a/accessible/src/generic/HyperTextAccessible.cpp +++ b/accessible/src/generic/HyperTextAccessible.cpp @@ -326,28 +326,26 @@ HyperTextAccessible::DOMPointToHypertext Accessible* childAccAtOffset = nullptr; while (descendantAcc) { Accessible* parentAcc = descendantAcc->Parent(); if (parentAcc == this) { childAccAtOffset = descendantAcc; break; } - // This offset no longer applies because the passed-in text object is not a child - // of the hypertext. This happens when there are nested hypertexts, e.g. - // <div>abc<h1>def</h1>ghi</div> - // If the passed-in DOM point was not on a direct child of the hypertext, we will - // return the offset for that entire hypertext - if (aIsEndOffset) { - // Not inclusive, the indicated char comes at index before this offset - // If the end offset is after the first character of the passed in object, use 1 for - // addTextOffset, to put us after the embedded object char. We'll only treat the offset as - // before the embedded object char if we end at the very beginning of the child. - addTextOffset = addTextOffset > 0; - } else + // This offset no longer applies because the passed-in text object is not + // a child of the hypertext. This happens when there are nested hypertexts, + // e.g. <div>abc<h1>def</h1>ghi</div>. Thus we need to adjust the offset + // to make it relative the hypertext. + // If the end offset is not supposed to be inclusive and the original point + // is not at 0 offset then the returned offset should be after an embedded + // character the original point belongs to. + if (aIsEndOffset) + addTextOffset = (addTextOffset > 0 || descendantAcc->IndexInParent() > 0) ? 1 : 0; + else addTextOffset = 0; descendantAcc = parentAcc; } // Loop through, adding offsets until we reach childAccessible // If childAccessible is null we will end up adding up the entire length of // the hypertext, which is good -- it just means our offset node
--- a/accessible/tests/mochitest/text/test_lineboundary.html +++ b/accessible/tests/mochitest/text/test_lineboundary.html @@ -115,16 +115,22 @@ [ [ 0, 12, "Hello world ", 0, 12 ] ]); ////////////////////////////////////////////////////////////////////////// // list items testTextAtOffset([ "li1" ], BOUNDARY_LINE_START, [ [ 0, 5, kDiscBulletChar + "Item", 0, 5 ] ]); + ////////////////////////////////////////////////////////////////////////// + // Nested hypertexts + + testTextAtOffset(["ht_5" ], BOUNDARY_LINE_START, + [ [ 0, 0, kEmbedChar, 0, 1 ] ]); + SimpleTest.finish(); } SimpleTest.waitForExplicitFinish(); addA11yLoadEvent(doTest); </script> </head> <body> @@ -185,10 +191,17 @@ two words <iframe id="ht_3" src="data:text/html,<div contentEditable='true'>foo<br/><br/></div>"></iframe> <p id="ht_4">Hello world </p> <ul> <li id="li1">Item</li> </ul> + + <div id="ht_5"> + <div> + <p>sectiounus</p> + <p>seciofarus</p> + </div> + </div> </body> </html>