| 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 |