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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 GetDocument().View()->SetTracksPaintInvalidations(true); | 88 GetDocument().View()->SetTracksPaintInvalidations(true); |
89 GetDocument().body()->focus(); | 89 GetDocument().body()->focus(); |
90 UpdateAllLifecyclePhases(); | 90 UpdateAllLifecyclePhases(); |
91 EXPECT_TRUE(block->ShouldPaintCursorCaret()); | 91 EXPECT_TRUE(block->ShouldPaintCursorCaret()); |
92 | 92 |
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()->tracked_raster_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(kPaintInvalidationCaret, (*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 = | 126 raster_invalidations = &GetRasterInvalidationTracking()->invalidations; |
127 &GetRasterInvalidationTracking()->tracked_raster_invalidations; | |
128 ASSERT_EQ(2u, raster_invalidations->size()); | 127 ASSERT_EQ(2u, raster_invalidations->size()); |
129 EXPECT_EQ(EnclosingIntRect(caret_visual_rect), | 128 EXPECT_EQ(EnclosingIntRect(caret_visual_rect), |
130 (*raster_invalidations)[0].rect); | 129 (*raster_invalidations)[0].rect); |
131 EXPECT_EQ(block, (*raster_invalidations)[0].client); | 130 EXPECT_EQ(block, (*raster_invalidations)[0].client); |
132 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[0].reason); | 131 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[0].reason); |
133 EXPECT_EQ(EnclosingIntRect(new_caret_visual_rect), | 132 EXPECT_EQ(EnclosingIntRect(new_caret_visual_rect), |
134 (*raster_invalidations)[1].rect); | 133 (*raster_invalidations)[1].rect); |
135 EXPECT_EQ(block, (*raster_invalidations)[1].client); | 134 EXPECT_EQ(block, (*raster_invalidations)[1].client); |
136 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[1].reason); | 135 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[1].reason); |
137 | 136 |
138 object_invalidations = | 137 object_invalidations = |
139 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 138 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
140 ASSERT_EQ(1u, object_invalidations->size()); | 139 ASSERT_EQ(1u, object_invalidations->size()); |
141 JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); | 140 JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); |
142 EXPECT_EQ("Caret", s); | 141 EXPECT_EQ("Caret", s); |
143 GetDocument().View()->SetTracksPaintInvalidations(false); | 142 GetDocument().View()->SetTracksPaintInvalidations(false); |
144 | 143 |
145 // Remove selection. Should invalidate the old caret. | 144 // Remove selection. Should invalidate the old caret. |
146 LayoutRect old_caret_visual_rect = new_caret_visual_rect; | 145 LayoutRect old_caret_visual_rect = new_caret_visual_rect; |
147 GetDocument().View()->SetTracksPaintInvalidations(true); | 146 GetDocument().View()->SetTracksPaintInvalidations(true); |
148 Selection().SetSelection(SelectionInDOMTree()); | 147 Selection().SetSelection(SelectionInDOMTree()); |
149 UpdateAllLifecyclePhases(); | 148 UpdateAllLifecyclePhases(); |
150 EXPECT_FALSE(block->ShouldPaintCursorCaret()); | 149 EXPECT_FALSE(block->ShouldPaintCursorCaret()); |
151 EXPECT_EQ(LayoutRect(), GetCaretDisplayItemClient().VisualRect()); | 150 EXPECT_EQ(LayoutRect(), GetCaretDisplayItemClient().VisualRect()); |
152 | 151 |
153 raster_invalidations = | 152 raster_invalidations = &GetRasterInvalidationTracking()->invalidations; |
154 &GetRasterInvalidationTracking()->tracked_raster_invalidations; | |
155 ASSERT_EQ(1u, raster_invalidations->size()); | 153 ASSERT_EQ(1u, raster_invalidations->size()); |
156 EXPECT_EQ(EnclosingIntRect(old_caret_visual_rect), | 154 EXPECT_EQ(EnclosingIntRect(old_caret_visual_rect), |
157 (*raster_invalidations)[0].rect); | 155 (*raster_invalidations)[0].rect); |
158 EXPECT_EQ(block, (*raster_invalidations)[0].client); | 156 EXPECT_EQ(block, (*raster_invalidations)[0].client); |
159 | 157 |
160 object_invalidations = | 158 object_invalidations = |
161 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 159 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
162 ASSERT_EQ(1u, object_invalidations->size()); | 160 ASSERT_EQ(1u, object_invalidations->size()); |
163 JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); | 161 JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); |
164 EXPECT_EQ("Caret", s); | 162 EXPECT_EQ("Caret", s); |
(...skipping 26 matching lines...) Expand all Loading... |
191 .Build()); | 189 .Build()); |
192 UpdateAllLifecyclePhases(); | 190 UpdateAllLifecyclePhases(); |
193 | 191 |
194 LayoutRect caret_visual_rect2 = GetCaretDisplayItemClient().VisualRect(); | 192 LayoutRect caret_visual_rect2 = GetCaretDisplayItemClient().VisualRect(); |
195 EXPECT_EQ(1, caret_visual_rect2.Width()); | 193 EXPECT_EQ(1, caret_visual_rect2.Width()); |
196 EXPECT_EQ(block2->VisualRect().Location(), caret_visual_rect2.Location()); | 194 EXPECT_EQ(block2->VisualRect().Location(), caret_visual_rect2.Location()); |
197 EXPECT_FALSE(block1->ShouldPaintCursorCaret()); | 195 EXPECT_FALSE(block1->ShouldPaintCursorCaret()); |
198 EXPECT_TRUE(block2->ShouldPaintCursorCaret()); | 196 EXPECT_TRUE(block2->ShouldPaintCursorCaret()); |
199 | 197 |
200 const auto* raster_invalidations = | 198 const auto* raster_invalidations = |
201 &GetRasterInvalidationTracking()->tracked_raster_invalidations; | 199 &GetRasterInvalidationTracking()->invalidations; |
202 ASSERT_EQ(2u, raster_invalidations->size()); | 200 ASSERT_EQ(2u, raster_invalidations->size()); |
203 EXPECT_EQ(EnclosingIntRect(caret_visual_rect1), | 201 EXPECT_EQ(EnclosingIntRect(caret_visual_rect1), |
204 (*raster_invalidations)[0].rect); | 202 (*raster_invalidations)[0].rect); |
205 EXPECT_EQ(block1, (*raster_invalidations)[0].client); | 203 EXPECT_EQ(block1, (*raster_invalidations)[0].client); |
206 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[0].reason); | 204 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[0].reason); |
207 EXPECT_EQ(EnclosingIntRect(caret_visual_rect2), | 205 EXPECT_EQ(EnclosingIntRect(caret_visual_rect2), |
208 (*raster_invalidations)[1].rect); | 206 (*raster_invalidations)[1].rect); |
209 EXPECT_EQ(block2, (*raster_invalidations)[1].client); | 207 EXPECT_EQ(block2, (*raster_invalidations)[1].client); |
210 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[1].reason); | 208 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[1].reason); |
211 | 209 |
212 std::unique_ptr<JSONArray> object_invalidations = | 210 std::unique_ptr<JSONArray> object_invalidations = |
213 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); | 211 GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); |
214 ASSERT_EQ(2u, object_invalidations->size()); | 212 ASSERT_EQ(2u, object_invalidations->size()); |
215 GetDocument().View()->SetTracksPaintInvalidations(false); | 213 GetDocument().View()->SetTracksPaintInvalidations(false); |
216 | 214 |
217 // Move the caret back into block1. | 215 // Move the caret back into block1. |
218 GetDocument().View()->SetTracksPaintInvalidations(true); | 216 GetDocument().View()->SetTracksPaintInvalidations(true); |
219 Selection().SetSelection(SelectionInDOMTree::Builder() | 217 Selection().SetSelection(SelectionInDOMTree::Builder() |
220 .Collapse(Position(block_element1, 0)) | 218 .Collapse(Position(block_element1, 0)) |
221 .Build()); | 219 .Build()); |
222 UpdateAllLifecyclePhases(); | 220 UpdateAllLifecyclePhases(); |
223 | 221 |
224 EXPECT_EQ(caret_visual_rect1, GetCaretDisplayItemClient().VisualRect()); | 222 EXPECT_EQ(caret_visual_rect1, GetCaretDisplayItemClient().VisualRect()); |
225 EXPECT_TRUE(block1->ShouldPaintCursorCaret()); | 223 EXPECT_TRUE(block1->ShouldPaintCursorCaret()); |
226 EXPECT_FALSE(block2->ShouldPaintCursorCaret()); | 224 EXPECT_FALSE(block2->ShouldPaintCursorCaret()); |
227 | 225 |
228 raster_invalidations = | 226 raster_invalidations = &GetRasterInvalidationTracking()->invalidations; |
229 &GetRasterInvalidationTracking()->tracked_raster_invalidations; | |
230 ASSERT_EQ(2u, raster_invalidations->size()); | 227 ASSERT_EQ(2u, raster_invalidations->size()); |
231 EXPECT_EQ(EnclosingIntRect(caret_visual_rect1), | 228 EXPECT_EQ(EnclosingIntRect(caret_visual_rect1), |
232 (*raster_invalidations)[0].rect); | 229 (*raster_invalidations)[0].rect); |
233 EXPECT_EQ(block1, (*raster_invalidations)[0].client); | 230 EXPECT_EQ(block1, (*raster_invalidations)[0].client); |
234 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[0].reason); | 231 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[0].reason); |
235 EXPECT_EQ(EnclosingIntRect(caret_visual_rect2), | 232 EXPECT_EQ(EnclosingIntRect(caret_visual_rect2), |
236 (*raster_invalidations)[1].rect); | 233 (*raster_invalidations)[1].rect); |
237 EXPECT_EQ(block2, (*raster_invalidations)[1].client); | 234 EXPECT_EQ(block2, (*raster_invalidations)[1].client); |
238 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[1].reason); | 235 EXPECT_EQ(kPaintInvalidationCaret, (*raster_invalidations)[1].reason); |
239 | 236 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 // Simulate that the cursor blinking is restarted. | 321 // Simulate that the cursor blinking is restarted. |
325 Selection().SetCaretVisible(true); | 322 Selection().SetCaretVisible(true); |
326 UpdateAllLifecyclePhases(); | 323 UpdateAllLifecyclePhases(); |
327 | 324 |
328 LayoutRect new_caret_visual_rect = GetCaretDisplayItemClient().VisualRect(); | 325 LayoutRect new_caret_visual_rect = GetCaretDisplayItemClient().VisualRect(); |
329 EXPECT_EQ(caret_visual_rect.Size(), new_caret_visual_rect.Size()); | 326 EXPECT_EQ(caret_visual_rect.Size(), new_caret_visual_rect.Size()); |
330 EXPECT_EQ(caret_visual_rect.Y(), new_caret_visual_rect.Y()); | 327 EXPECT_EQ(caret_visual_rect.Y(), new_caret_visual_rect.Y()); |
331 EXPECT_LT(caret_visual_rect.X(), new_caret_visual_rect.X()); | 328 EXPECT_LT(caret_visual_rect.X(), new_caret_visual_rect.X()); |
332 | 329 |
333 const auto& raster_invalidations = | 330 const auto& raster_invalidations = |
334 GetRasterInvalidationTracking()->tracked_raster_invalidations; | 331 GetRasterInvalidationTracking()->invalidations; |
335 ASSERT_EQ(2u, raster_invalidations.size()); | 332 ASSERT_EQ(2u, raster_invalidations.size()); |
336 EXPECT_EQ(EnclosingIntRect(caret_visual_rect), raster_invalidations[0].rect); | 333 EXPECT_EQ(EnclosingIntRect(caret_visual_rect), raster_invalidations[0].rect); |
337 EXPECT_EQ(block, raster_invalidations[0].client); | 334 EXPECT_EQ(block, raster_invalidations[0].client); |
338 EXPECT_EQ(kPaintInvalidationCaret, raster_invalidations[0].reason); | 335 EXPECT_EQ(kPaintInvalidationCaret, raster_invalidations[0].reason); |
339 EXPECT_EQ(EnclosingIntRect(new_caret_visual_rect), | 336 EXPECT_EQ(EnclosingIntRect(new_caret_visual_rect), |
340 raster_invalidations[1].rect); | 337 raster_invalidations[1].rect); |
341 EXPECT_EQ(block, raster_invalidations[1].client); | 338 EXPECT_EQ(block, raster_invalidations[1].client); |
342 EXPECT_EQ(kPaintInvalidationCaret, raster_invalidations[1].reason); | 339 EXPECT_EQ(kPaintInvalidationCaret, raster_invalidations[1].reason); |
343 | 340 |
344 auto object_invalidations = | 341 auto object_invalidations = |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 EXPECT_EQ(LayoutRect(50, 50, 1, 1), GetCaretDisplayItemClient().VisualRect()); | 378 EXPECT_EQ(LayoutRect(50, 50, 1, 1), GetCaretDisplayItemClient().VisualRect()); |
382 | 379 |
383 // Uncomposite container. | 380 // Uncomposite container. |
384 container->setAttribute(HTMLNames::styleAttr, ""); | 381 container->setAttribute(HTMLNames::styleAttr, ""); |
385 UpdateAllLifecyclePhases(); | 382 UpdateAllLifecyclePhases(); |
386 EXPECT_EQ(LayoutRect(116, 105, 1, 1), | 383 EXPECT_EQ(LayoutRect(116, 105, 1, 1), |
387 GetCaretDisplayItemClient().VisualRect()); | 384 GetCaretDisplayItemClient().VisualRect()); |
388 } | 385 } |
389 | 386 |
390 } // namespace blink | 387 } // namespace blink |
OLD | NEW |