diff --git a/chrome/browser/resources/chromeos/chromevox/common/content_editable_extractor_test.unitjs b/chrome/browser/resources/chromeos/chromevox/common/content_editable_extractor_test.unitjs index bd66571f8a658a..c5f0fa3ba5757b 100644 --- a/chrome/browser/resources/chromeos/chromevox/common/content_editable_extractor_test.unitjs +++ b/chrome/browser/resources/chromeos/chromevox/common/content_editable_extractor_test.unitjs @@ -197,12 +197,12 @@ TEST_F('CvoxContentEditableExtractorUnitTest', 'WordWrap', function() { var extractor = new cvox.ContentEditableExtractor(); extractor.update(textbox); - assertEquals('One two three', extractor.getText()); + assertEquals('One\ntwo\nthree', extractor.getText()); assertEquals(0, extractor.getLineStart(0)); - assertEquals(3, extractor.getLineEnd(0)); - assertEquals(3, extractor.getLineStart(1)); - assertEquals(7, extractor.getLineEnd(1)); - assertEquals(7, extractor.getLineStart(2)); + assertEquals(4, extractor.getLineEnd(0)); + assertEquals(4, extractor.getLineStart(1)); + assertEquals(8, extractor.getLineEnd(1)); + assertEquals(8, extractor.getLineStart(2)); assertEquals(13, extractor.getLineEnd(2)); // Test all possible cursor positions. diff --git a/third_party/WebKit/LayoutTests/fast/dom/Range/get-bounding-client-rect-empty-and-non-empty.html b/third_party/WebKit/LayoutTests/fast/dom/Range/get-bounding-client-rect-empty-and-non-empty.html new file mode 100644 index 00000000000000..dbaac62086570e --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/dom/Range/get-bounding-client-rect-empty-and-non-empty.html @@ -0,0 +1,70 @@ + + + + +
+
+
0123 456
+
01234 567
+
0123 45678
+
01234 5678
+
0123456789
+
a +bb
+
+ diff --git a/third_party/WebKit/Source/core/dom/Range.cpp b/third_party/WebKit/Source/core/dom/Range.cpp index b662e2bbdc9d43..4ccba20c1e763c 100644 --- a/third_party/WebKit/Source/core/dom/Range.cpp +++ b/third_party/WebKit/Source/core/dom/Range.cpp @@ -1582,16 +1582,12 @@ FloatRect Range::boundingRect() const getBorderAndTextQuads(quads); FloatRect result; - // As per section 10 in https://www.w3.org/TR/cssom-view/ - // "Return a static DOMRect object describing the smallest rectangle that - // includes the first rectangle in list and all of the remaining rectangles - // of which the height or width is not zero." - for (const FloatQuad& quad : quads) { - if (result.isEmpty()) - result.uniteIfNonZero(quad.boundingBox()); - else - result.unite(quad.boundingBox()); // Skips empty rects. - } + for (const FloatQuad& quad : quads) + result.unite(quad.boundingBox()); // Skips empty rects. + + // If all rects are empty, return the first rect. + if (result.isEmpty() && !quads.isEmpty()) + return quads.first().boundingBox(); return result; }