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