| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/FrameSelection.h" | 5 #include "core/editing/FrameSelection.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include "bindings/core/v8/ExceptionState.h" | 8 #include "bindings/core/v8/ExceptionState.h" |
| 9 #include "core/dom/Document.h" | 9 #include "core/dom/Document.h" |
| 10 #include "core/dom/Element.h" | 10 #include "core/dom/Element.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 Node* const text = sample->firstChild(); | 62 Node* const text = sample->firstChild(); |
| 63 Selection().SetSelectedRange( | 63 Selection().SetSelectedRange( |
| 64 EphemeralRange(Position(text, 3), Position(text, 6)), VP_DEFAULT_AFFINITY, | 64 EphemeralRange(Position(text, 3), Position(text, 6)), VP_DEFAULT_AFFINITY, |
| 65 SelectionDirectionalMode::kNonDirectional, 0); | 65 SelectionDirectionalMode::kNonDirectional, 0); |
| 66 sample->setAttribute(HTMLNames::styleAttr, "display:none"); | 66 sample->setAttribute(HTMLNames::styleAttr, "display:none"); |
| 67 // Move |VisibleSelection| before "abc". | 67 // Move |VisibleSelection| before "abc". |
| 68 UpdateAllLifecyclePhases(); | 68 UpdateAllLifecyclePhases(); |
| 69 const EphemeralRange& range = | 69 const EphemeralRange& range = |
| 70 FirstEphemeralRangeOf(Selection().ComputeVisibleSelectionInDOMTree()); | 70 FirstEphemeralRangeOf(Selection().ComputeVisibleSelectionInDOMTree()); |
| 71 EXPECT_EQ(Position(sample->nextSibling(), 0), range.StartPosition()) | 71 EXPECT_EQ(Position(sample->nextSibling(), 0), range.StartPosition()) |
| 72 << "firstRagne() should return current selection value"; | 72 << "firstRange() should return current selection value"; |
| 73 EXPECT_EQ(Position(sample->nextSibling(), 0), range.EndPosition()); | 73 EXPECT_EQ(Position(sample->nextSibling(), 0), range.EndPosition()); |
| 74 } | 74 } |
| 75 | 75 |
| 76 TEST_F(FrameSelectionTest, SetValidSelection) { | 76 TEST_F(FrameSelectionTest, SetValidSelection) { |
| 77 Text* text = AppendTextNode("Hello, World!"); | 77 Text* text = AppendTextNode("Hello, World!"); |
| 78 GetDocument().View()->UpdateAllLifecyclePhases(); | 78 GetDocument().View()->UpdateAllLifecyclePhases(); |
| 79 Selection().SetSelection( | 79 Selection().SetSelection( |
| 80 SelectionInDOMTree::Builder() | 80 SelectionInDOMTree::Builder() |
| 81 .SetBaseAndExtent(Position(text, 0), Position(text, 5)) | 81 .SetBaseAndExtent(Position(text, 0), Position(text, 5)) |
| 82 .Build()); | 82 .Build()); |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 SetBodyContent("<div id=sample>abc</div>"); | 273 SetBodyContent("<div id=sample>abc</div>"); |
| 274 Element* sample = GetDocument().getElementById("sample"); | 274 Element* sample = GetDocument().getElementById("sample"); |
| 275 const Position end_of_text(sample->firstChild(), 3); | 275 const Position end_of_text(sample->firstChild(), 3); |
| 276 Selection().SetSelection(SelectionInDOMTree::Builder() | 276 Selection().SetSelection(SelectionInDOMTree::Builder() |
| 277 .Collapse(end_of_text) | 277 .Collapse(end_of_text) |
| 278 .SetIsHandleVisible(false) | 278 .SetIsHandleVisible(false) |
| 279 .Build()); | 279 .Build()); |
| 280 EXPECT_FALSE(Selection().IsHandleVisible()); | 280 EXPECT_FALSE(Selection().IsHandleVisible()); |
| 281 Selection().SelectAll(); | 281 Selection().SelectAll(); |
| 282 EXPECT_FALSE(Selection().IsHandleVisible()) | 282 EXPECT_FALSE(Selection().IsHandleVisible()) |
| 283 << "If handles weren't present before" | 283 << "If handles weren't present before " |
| 284 "selectAll. Then they shouldn't be present" | 284 "selectAll. Then they shouldn't be present " |
| 285 "after it."; | 285 "after it."; |
| 286 | 286 |
| 287 Selection().SetSelection(SelectionInDOMTree::Builder() | 287 Selection().SetSelection(SelectionInDOMTree::Builder() |
| 288 .Collapse(end_of_text) | 288 .Collapse(end_of_text) |
| 289 .SetIsHandleVisible(true) | 289 .SetIsHandleVisible(true) |
| 290 .Build()); | 290 .Build()); |
| 291 EXPECT_TRUE(Selection().IsHandleVisible()); | 291 EXPECT_TRUE(Selection().IsHandleVisible()); |
| 292 Selection().SelectAll(); | 292 Selection().SelectAll(); |
| 293 EXPECT_TRUE(Selection().IsHandleVisible()) | 293 EXPECT_TRUE(Selection().IsHandleVisible()) |
| 294 << "If handles were present before" | 294 << "If handles were present before " |
| 295 "selectAll. Then they should be present" | 295 "selectAll. Then they should be present " |
| 296 "after it."; | 296 "after it."; |
| 297 } | 297 } |
| 298 | 298 |
| 299 TEST_F(FrameSelectionTest, BoldCommandPreservesHandle) { |
| 300 SetBodyContent("<div id=sample>abc</div>"); |
| 301 Element* sample = GetDocument().getElementById("sample"); |
| 302 const Position end_of_text(sample->firstChild(), 3); |
| 303 Selection().SetSelection(SelectionInDOMTree::Builder() |
| 304 .Collapse(end_of_text) |
| 305 .SetIsHandleVisible(false) |
| 306 .Build()); |
| 307 EXPECT_FALSE(Selection().IsHandleVisible()); |
| 308 Selection().SelectAll(); |
| 309 GetDocument().execCommand("bold", false, "", ASSERT_NO_EXCEPTION); |
| 310 EXPECT_FALSE(Selection().IsHandleVisible()) |
| 311 << "If handles weren't present before " |
| 312 "bold command. Then they shouldn't " |
| 313 "be present after it."; |
| 314 |
| 315 Selection().SetSelection(SelectionInDOMTree::Builder() |
| 316 .Collapse(end_of_text) |
| 317 .SetIsHandleVisible(true) |
| 318 .Build()); |
| 319 EXPECT_TRUE(Selection().IsHandleVisible()); |
| 320 Selection().SelectAll(); |
| 321 GetDocument().execCommand("bold", false, "", ASSERT_NO_EXCEPTION); |
| 322 EXPECT_TRUE(Selection().IsHandleVisible()) |
| 323 << "If handles were present before " |
| 324 "bold command. Then they should " |
| 325 "be present after it."; |
| 326 } |
| 327 |
| 299 TEST_F(FrameSelectionTest, SetSelectedRangeHidesHandle) { | 328 TEST_F(FrameSelectionTest, SetSelectedRangeHidesHandle) { |
| 300 Text* text = AppendTextNode("Hello, World!"); | 329 Text* text = AppendTextNode("Hello, World!"); |
| 301 GetDocument().View()->UpdateAllLifecyclePhases(); | 330 GetDocument().View()->UpdateAllLifecyclePhases(); |
| 302 Selection().SetSelection( | 331 Selection().SetSelection( |
| 303 SelectionInDOMTree::Builder() | 332 SelectionInDOMTree::Builder() |
| 304 .SetBaseAndExtent(Position(text, 0), Position(text, 5)) | 333 .SetBaseAndExtent(Position(text, 0), Position(text, 5)) |
| 305 .SetIsHandleVisible(false) | 334 .SetIsHandleVisible(false) |
| 306 .Build()); | 335 .Build()); |
| 307 | 336 |
| 308 Selection().SetSelectedRange( | 337 Selection().SetSelectedRange( |
| (...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 922 EXPECT_FALSE(Selection().IsHidden()); | 951 EXPECT_FALSE(Selection().IsHidden()); |
| 923 | 952 |
| 924 Element* const alink = GetDocument().getElementById("alink"); | 953 Element* const alink = GetDocument().getElementById("alink"); |
| 925 alink->focus(); | 954 alink->focus(); |
| 926 EXPECT_TRUE(Selection().GetSelectionInDOMTree().IsRange()); | 955 EXPECT_TRUE(Selection().GetSelectionInDOMTree().IsRange()); |
| 927 EXPECT_FALSE(Selection().SelectionHasFocus()); | 956 EXPECT_FALSE(Selection().SelectionHasFocus()); |
| 928 EXPECT_FALSE(Selection().IsHidden()); // Range still visible. | 957 EXPECT_FALSE(Selection().IsHidden()); // Range still visible. |
| 929 } | 958 } |
| 930 | 959 |
| 931 } // namespace blink | 960 } // namespace blink |
| OLD | NEW |