OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/editing/CaretDisplayItemClient.h" | 5 #include "core/editing/CaretDisplayItemClient.h" |
6 | 6 |
7 #include "core/HTMLNames.h" | 7 #include "core/HTMLNames.h" |
8 #include "core/editing/FrameSelection.h" | 8 #include "core/editing/FrameSelection.h" |
9 #include "core/frame/FrameView.h" | 9 #include "core/frame/FrameView.h" |
10 #include "core/layout/LayoutTestHelper.h" | 10 #include "core/layout/LayoutTestHelper.h" |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 LayoutRect caret_visual_rect = GetCaretDisplayItemClient().VisualRect(); | 93 LayoutRect caret_visual_rect = GetCaretDisplayItemClient().VisualRect(); |
94 EXPECT_EQ(1, caret_visual_rect.Width()); | 94 EXPECT_EQ(1, caret_visual_rect.Width()); |
95 EXPECT_EQ(block->Location(), caret_visual_rect.Location()); | 95 EXPECT_EQ(block->Location(), caret_visual_rect.Location()); |
96 | 96 |
97 const auto* raster_invalidations = | 97 const auto* raster_invalidations = |
98 &GetRasterInvalidationTracking()->invalidations; | 98 &GetRasterInvalidationTracking()->invalidations; |
99 ASSERT_EQ(1u, raster_invalidations->size()); | 99 ASSERT_EQ(1u, raster_invalidations->size()); |
100 EXPECT_EQ(EnclosingIntRect(caret_visual_rect), | 100 EXPECT_EQ(EnclosingIntRect(caret_visual_rect), |
101 (*raster_invalidations)[0].rect); | 101 (*raster_invalidations)[0].rect); |
102 EXPECT_EQ(block, (*raster_invalidations)[0].client); | 102 EXPECT_EQ(block, (*raster_invalidations)[0].client); |
103 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[0].reason); | 103 EXPECT_EQ(PaintInvalidationReason::kCaret, (*raster_invalidations)[0].reason); |
104 | 104 |
105 std::unique_ptr<JSONArray> object_invalidations = | 105 std::unique_ptr<JSONArray> object_invalidations = |
106 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 106 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
107 ASSERT_EQ(1u, object_invalidations->size()); | 107 ASSERT_EQ(1u, object_invalidations->size()); |
108 String s; | 108 String s; |
109 JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); | 109 JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); |
110 EXPECT_EQ("Caret", s); | 110 EXPECT_EQ("Caret", s); |
111 GetDocument().View()->SetTracksPaintInvalidations(false); | 111 GetDocument().View()->SetTracksPaintInvalidations(false); |
112 | 112 |
113 // Move the caret to the end of the text. Should invalidate both the old and | 113 // Move the caret to the end of the text. Should invalidate both the old and |
114 // new carets. | 114 // new carets. |
115 GetDocument().View()->SetTracksPaintInvalidations(true); | 115 GetDocument().View()->SetTracksPaintInvalidations(true); |
116 Selection().SetSelection( | 116 Selection().SetSelection( |
117 SelectionInDOMTree::Builder().Collapse(Position(text, 5)).Build()); | 117 SelectionInDOMTree::Builder().Collapse(Position(text, 5)).Build()); |
118 UpdateAllLifecyclePhases(); | 118 UpdateAllLifecyclePhases(); |
119 EXPECT_TRUE(block->ShouldPaintCursorCaret()); | 119 EXPECT_TRUE(block->ShouldPaintCursorCaret()); |
120 | 120 |
121 LayoutRect new_caret_visual_rect = GetCaretDisplayItemClient().VisualRect(); | 121 LayoutRect new_caret_visual_rect = GetCaretDisplayItemClient().VisualRect(); |
122 EXPECT_EQ(caret_visual_rect.Size(), new_caret_visual_rect.Size()); | 122 EXPECT_EQ(caret_visual_rect.Size(), new_caret_visual_rect.Size()); |
123 EXPECT_EQ(caret_visual_rect.Y(), new_caret_visual_rect.Y()); | 123 EXPECT_EQ(caret_visual_rect.Y(), new_caret_visual_rect.Y()); |
124 EXPECT_LT(caret_visual_rect.X(), new_caret_visual_rect.X()); | 124 EXPECT_LT(caret_visual_rect.X(), new_caret_visual_rect.X()); |
125 | 125 |
126 raster_invalidations = &GetRasterInvalidationTracking()->invalidations; | 126 raster_invalidations = &GetRasterInvalidationTracking()->invalidations; |
127 ASSERT_EQ(2u, raster_invalidations->size()); | 127 ASSERT_EQ(2u, raster_invalidations->size()); |
128 EXPECT_EQ(EnclosingIntRect(caret_visual_rect), | 128 EXPECT_EQ(EnclosingIntRect(caret_visual_rect), |
129 (*raster_invalidations)[0].rect); | 129 (*raster_invalidations)[0].rect); |
130 EXPECT_EQ(block, (*raster_invalidations)[0].client); | 130 EXPECT_EQ(block, (*raster_invalidations)[0].client); |
131 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[0].reason); | 131 EXPECT_EQ(PaintInvalidationReason::kCaret, (*raster_invalidations)[0].reason); |
132 EXPECT_EQ(EnclosingIntRect(new_caret_visual_rect), | 132 EXPECT_EQ(EnclosingIntRect(new_caret_visual_rect), |
133 (*raster_invalidations)[1].rect); | 133 (*raster_invalidations)[1].rect); |
134 EXPECT_EQ(block, (*raster_invalidations)[1].client); | 134 EXPECT_EQ(block, (*raster_invalidations)[1].client); |
135 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[1].reason); | 135 EXPECT_EQ(PaintInvalidationReason::kCaret, (*raster_invalidations)[1].reason); |
136 | 136 |
137 object_invalidations = | 137 object_invalidations = |
138 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 138 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
139 ASSERT_EQ(1u, object_invalidations->size()); | 139 ASSERT_EQ(1u, object_invalidations->size()); |
140 JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); | 140 JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); |
141 EXPECT_EQ("Caret", s); | 141 EXPECT_EQ("Caret", s); |
142 GetDocument().View()->SetTracksPaintInvalidations(false); | 142 GetDocument().View()->SetTracksPaintInvalidations(false); |
143 | 143 |
144 // Remove selection. Should invalidate the old caret. | 144 // Remove selection. Should invalidate the old caret. |
145 LayoutRect old_caret_visual_rect = new_caret_visual_rect; | 145 LayoutRect old_caret_visual_rect = new_caret_visual_rect; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 EXPECT_EQ(block2->VisualRect().Location(), caret_visual_rect2.Location()); | 194 EXPECT_EQ(block2->VisualRect().Location(), caret_visual_rect2.Location()); |
195 EXPECT_FALSE(block1->ShouldPaintCursorCaret()); | 195 EXPECT_FALSE(block1->ShouldPaintCursorCaret()); |
196 EXPECT_TRUE(block2->ShouldPaintCursorCaret()); | 196 EXPECT_TRUE(block2->ShouldPaintCursorCaret()); |
197 | 197 |
198 const auto* raster_invalidations = | 198 const auto* raster_invalidations = |
199 &GetRasterInvalidationTracking()->invalidations; | 199 &GetRasterInvalidationTracking()->invalidations; |
200 ASSERT_EQ(2u, raster_invalidations->size()); | 200 ASSERT_EQ(2u, raster_invalidations->size()); |
201 EXPECT_EQ(EnclosingIntRect(caret_visual_rect1), | 201 EXPECT_EQ(EnclosingIntRect(caret_visual_rect1), |
202 (*raster_invalidations)[0].rect); | 202 (*raster_invalidations)[0].rect); |
203 EXPECT_EQ(block1, (*raster_invalidations)[0].client); | 203 EXPECT_EQ(block1, (*raster_invalidations)[0].client); |
204 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[0].reason); | 204 EXPECT_EQ(PaintInvalidationReason::kCaret, (*raster_invalidations)[0].reason); |
205 EXPECT_EQ(EnclosingIntRect(caret_visual_rect2), | 205 EXPECT_EQ(EnclosingIntRect(caret_visual_rect2), |
206 (*raster_invalidations)[1].rect); | 206 (*raster_invalidations)[1].rect); |
207 EXPECT_EQ(block2, (*raster_invalidations)[1].client); | 207 EXPECT_EQ(block2, (*raster_invalidations)[1].client); |
208 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[1].reason); | 208 EXPECT_EQ(PaintInvalidationReason::kCaret, (*raster_invalidations)[1].reason); |
209 | 209 |
210 std::unique_ptr<JSONArray> object_invalidations = | 210 std::unique_ptr<JSONArray> object_invalidations = |
211 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 211 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
212 ASSERT_EQ(2u, object_invalidations->size()); | 212 ASSERT_EQ(2u, object_invalidations->size()); |
213 GetDocument().View()->SetTracksPaintInvalidations(false); | 213 GetDocument().View()->SetTracksPaintInvalidations(false); |
214 | 214 |
215 // Move the caret back into block1. | 215 // Move the caret back into block1. |
216 GetDocument().View()->SetTracksPaintInvalidations(true); | 216 GetDocument().View()->SetTracksPaintInvalidations(true); |
217 Selection().SetSelection(SelectionInDOMTree::Builder() | 217 Selection().SetSelection(SelectionInDOMTree::Builder() |
218 .Collapse(Position(block_element1, 0)) | 218 .Collapse(Position(block_element1, 0)) |
219 .Build()); | 219 .Build()); |
220 UpdateAllLifecyclePhases(); | 220 UpdateAllLifecyclePhases(); |
221 | 221 |
222 EXPECT_EQ(caret_visual_rect1, GetCaretDisplayItemClient().VisualRect()); | 222 EXPECT_EQ(caret_visual_rect1, GetCaretDisplayItemClient().VisualRect()); |
223 EXPECT_TRUE(block1->ShouldPaintCursorCaret()); | 223 EXPECT_TRUE(block1->ShouldPaintCursorCaret()); |
224 EXPECT_FALSE(block2->ShouldPaintCursorCaret()); | 224 EXPECT_FALSE(block2->ShouldPaintCursorCaret()); |
225 | 225 |
226 raster_invalidations = &GetRasterInvalidationTracking()->invalidations; | 226 raster_invalidations = &GetRasterInvalidationTracking()->invalidations; |
227 ASSERT_EQ(2u, raster_invalidations->size()); | 227 ASSERT_EQ(2u, raster_invalidations->size()); |
228 EXPECT_EQ(EnclosingIntRect(caret_visual_rect1), | 228 EXPECT_EQ(EnclosingIntRect(caret_visual_rect1), |
229 (*raster_invalidations)[0].rect); | 229 (*raster_invalidations)[0].rect); |
230 EXPECT_EQ(block1, (*raster_invalidations)[0].client); | 230 EXPECT_EQ(block1, (*raster_invalidations)[0].client); |
231 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[0].reason); | 231 EXPECT_EQ(PaintInvalidationReason::kCaret, (*raster_invalidations)[0].reason); |
232 EXPECT_EQ(EnclosingIntRect(caret_visual_rect2), | 232 EXPECT_EQ(EnclosingIntRect(caret_visual_rect2), |
233 (*raster_invalidations)[1].rect); | 233 (*raster_invalidations)[1].rect); |
234 EXPECT_EQ(block2, (*raster_invalidations)[1].client); | 234 EXPECT_EQ(block2, (*raster_invalidations)[1].client); |
235 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[1].reason); | 235 EXPECT_EQ(PaintInvalidationReason::kCaret, (*raster_invalidations)[1].reason); |
236 | 236 |
237 object_invalidations = | 237 object_invalidations = |
238 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 238 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
239 ASSERT_EQ(2u, object_invalidations->size()); | 239 ASSERT_EQ(2u, object_invalidations->size()); |
240 GetDocument().View()->SetTracksPaintInvalidations(false); | 240 GetDocument().View()->SetTracksPaintInvalidations(false); |
241 } | 241 } |
242 | 242 |
243 TEST_F(CaretDisplayItemClientTest, UpdatePreviousLayoutBlock) { | 243 TEST_F(CaretDisplayItemClientTest, UpdatePreviousLayoutBlock) { |
244 GetDocument().body()->setContentEditable("true", ASSERT_NO_EXCEPTION); | 244 GetDocument().body()->setContentEditable("true", ASSERT_NO_EXCEPTION); |
245 GetDocument().GetPage()->GetFocusController().SetActive(true); | 245 GetDocument().GetPage()->GetFocusController().SetActive(true); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 LayoutRect new_caret_visual_rect = GetCaretDisplayItemClient().VisualRect(); | 325 LayoutRect new_caret_visual_rect = GetCaretDisplayItemClient().VisualRect(); |
326 EXPECT_EQ(caret_visual_rect.Size(), new_caret_visual_rect.Size()); | 326 EXPECT_EQ(caret_visual_rect.Size(), new_caret_visual_rect.Size()); |
327 EXPECT_EQ(caret_visual_rect.Y(), new_caret_visual_rect.Y()); | 327 EXPECT_EQ(caret_visual_rect.Y(), new_caret_visual_rect.Y()); |
328 EXPECT_LT(caret_visual_rect.X(), new_caret_visual_rect.X()); | 328 EXPECT_LT(caret_visual_rect.X(), new_caret_visual_rect.X()); |
329 | 329 |
330 const auto& raster_invalidations = | 330 const auto& raster_invalidations = |
331 GetRasterInvalidationTracking()->invalidations; | 331 GetRasterInvalidationTracking()->invalidations; |
332 ASSERT_EQ(2u, raster_invalidations.size()); | 332 ASSERT_EQ(2u, raster_invalidations.size()); |
333 EXPECT_EQ(EnclosingIntRect(caret_visual_rect), raster_invalidations[0].rect); | 333 EXPECT_EQ(EnclosingIntRect(caret_visual_rect), raster_invalidations[0].rect); |
334 EXPECT_EQ(block, raster_invalidations[0].client); | 334 EXPECT_EQ(block, raster_invalidations[0].client); |
335 EXPECT_EQ(kPaintInvalidationCaret, raster_invalidations[0].reason); | 335 EXPECT_EQ(PaintInvalidationReason::kCaret, raster_invalidations[0].reason); |
336 EXPECT_EQ(EnclosingIntRect(new_caret_visual_rect), | 336 EXPECT_EQ(EnclosingIntRect(new_caret_visual_rect), |
337 raster_invalidations[1].rect); | 337 raster_invalidations[1].rect); |
338 EXPECT_EQ(block, raster_invalidations[1].client); | 338 EXPECT_EQ(block, raster_invalidations[1].client); |
339 EXPECT_EQ(kPaintInvalidationCaret, raster_invalidations[1].reason); | 339 EXPECT_EQ(PaintInvalidationReason::kCaret, raster_invalidations[1].reason); |
340 | 340 |
341 auto object_invalidations = | 341 auto object_invalidations = |
342 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 342 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
343 ASSERT_EQ(1u, object_invalidations->size()); | 343 ASSERT_EQ(1u, object_invalidations->size()); |
344 String s; | 344 String s; |
345 JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); | 345 JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); |
346 EXPECT_EQ("Caret", s); | 346 EXPECT_EQ("Caret", s); |
347 GetDocument().View()->SetTracksPaintInvalidations(false); | 347 GetDocument().View()->SetTracksPaintInvalidations(false); |
348 } | 348 } |
349 | 349 |
(...skipping 28 matching lines...) Expand all Loading... |
378 EXPECT_EQ(LayoutRect(50, 50, 1, 1), GetCaretDisplayItemClient().VisualRect()); | 378 EXPECT_EQ(LayoutRect(50, 50, 1, 1), GetCaretDisplayItemClient().VisualRect()); |
379 | 379 |
380 // Uncomposite container. | 380 // Uncomposite container. |
381 container->setAttribute(HTMLNames::styleAttr, ""); | 381 container->setAttribute(HTMLNames::styleAttr, ""); |
382 UpdateAllLifecyclePhases(); | 382 UpdateAllLifecyclePhases(); |
383 EXPECT_EQ(LayoutRect(116, 105, 1, 1), | 383 EXPECT_EQ(LayoutRect(116, 105, 1, 1), |
384 GetCaretDisplayItemClient().VisualRect()); | 384 GetCaretDisplayItemClient().VisualRect()); |
385 } | 385 } |
386 | 386 |
387 } // namespace blink | 387 } // namespace blink |
OLD | NEW |