Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(752)

Unified Diff: Source/core/editing/markers/DocumentMarkerControllerTest.cpp

Issue 1325563002: Avoid style clobbering in setCompositionFromExistingText. (2nd land) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Release Range on document detach and remove selectionStart/End Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/editing/markers/DocumentMarkerControllerTest.cpp
diff --git a/Source/core/editing/markers/DocumentMarkerControllerTest.cpp b/Source/core/editing/markers/DocumentMarkerControllerTest.cpp
index 3c5fdee4e95e32034675efaad0b63b4520ad8d54..1f04a20d18c38fac8163f21aabcb8a2a79f1b0c0 100644
--- a/Source/core/editing/markers/DocumentMarkerControllerTest.cpp
+++ b/Source/core/editing/markers/DocumentMarkerControllerTest.cpp
@@ -54,6 +54,7 @@ protected:
PassRefPtrWillBeRawPtr<Text> createTextNode(const char*);
void markNodeContents(PassRefPtrWillBeRawPtr<Node>);
+ void markNodeContentsWithComposition(PassRefPtrWillBeRawPtr<Node>);
void setBodyInnerHTML(const char*);
private:
@@ -82,6 +83,15 @@ void DocumentMarkerControllerTest::markNodeContents(PassRefPtrWillBeRawPtr<Node>
markerController().addMarker(range.startPosition(), range.endPosition(), DocumentMarker::Spelling);
}
+void DocumentMarkerControllerTest::markNodeContentsWithComposition(PassRefPtrWillBeRawPtr<Node> node)
+{
+ // Force layoutObjects to be created; TextIterator, which is used in
+ // DocumentMarkerControllerTest::addMarker(), needs them.
+ document().updateLayout();
+ auto range = EphemeralRange::rangeOfContents(*node);
+ markerController().addCompositionMarker(range.startPosition(), range.endPosition(), Color::black, false, Color::black);
+}
+
void DocumentMarkerControllerTest::setBodyInnerHTML(const char* bodyContent)
{
document().body()->setInnerHTML(String::fromUTF8(bodyContent), ASSERT_NO_EXCEPTION);
@@ -217,4 +227,22 @@ TEST_F(DocumentMarkerControllerTest, UpdateRenderedRects)
EXPECT_NE(renderedRects[0], newRenderedRects[0]);
}
+TEST_F(DocumentMarkerControllerTest, UpdateRenderedRectsForComposition)
+{
+ IntRect invalidRect(RenderedDocumentMarker::create(DocumentMarker(0, 0, false))->renderedRect());
+
+ setBodyInnerHTML("<div style='margin: 100px'>foo</div>");
+ RefPtrWillBeRawPtr<Element> div = toElement(document().body()->firstChild());
+ markNodeContentsWithComposition(div);
+ Vector<IntRect> renderedRects = markerController().renderedRectsForMarkers(DocumentMarker::Composition);
+ EXPECT_EQ(1u, renderedRects.size());
+ EXPECT_NE(invalidRect, renderedRects[0]);
+
+ div->setAttribute(HTMLNames::styleAttr, "margin: 200px");
+ document().updateLayout();
+ Vector<IntRect> newRenderedRects = markerController().renderedRectsForMarkers(DocumentMarker::Composition);
+ EXPECT_EQ(1u, newRenderedRects.size());
+ EXPECT_NE(renderedRects[0], newRenderedRects[0]);
+}
+
} // namespace blink
« no previous file with comments | « Source/core/editing/markers/DocumentMarkerController.cpp ('k') | Source/core/paint/InlineTextBoxPainter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698