| 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 "bindings/core/v8/ExceptionStatePlaceholder.h" | 7 #include "bindings/core/v8/ExceptionStatePlaceholder.h" |
| 8 #include "core/dom/Document.h" | 8 #include "core/dom/Document.h" |
| 9 #include "core/dom/Element.h" | 9 #include "core/dom/Element.h" |
| 10 #include "core/dom/Text.h" | 10 #include "core/dom/Text.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "wtf/RefPtr.h" | 23 #include "wtf/RefPtr.h" |
| 24 #include "wtf/StdLibExtras.h" | 24 #include "wtf/StdLibExtras.h" |
| 25 | 25 |
| 26 namespace blink { | 26 namespace blink { |
| 27 | 27 |
| 28 class FrameSelectionTest : public EditingTestBase { | 28 class FrameSelectionTest : public EditingTestBase { |
| 29 protected: | 29 protected: |
| 30 void setSelection(const VisibleSelection&); | 30 void setSelection(const VisibleSelection&); |
| 31 FrameSelection& selection() const; | 31 FrameSelection& selection() const; |
| 32 const VisibleSelection& visibleSelectionInDOMTree() const { return selection
().selection(); } | 32 const VisibleSelection& visibleSelectionInDOMTree() const { return selection
().selection(); } |
| 33 const VisibleSelectionInComposedTree& visibleSelectionInComposedTree() const
{ return selection().selectionInComposedTree(); } | 33 const VisibleSelectionInFlatTree& visibleSelectionInFlatTree() const { retur
n selection().selectionInFlatTree(); } |
| 34 | 34 |
| 35 PassRefPtrWillBeRawPtr<Text> appendTextNode(const String& data); | 35 PassRefPtrWillBeRawPtr<Text> appendTextNode(const String& data); |
| 36 int layoutCount() const { return dummyPageHolder().frameView().layoutCount()
; } | 36 int layoutCount() const { return dummyPageHolder().frameView().layoutCount()
; } |
| 37 | 37 |
| 38 private: | 38 private: |
| 39 RefPtrWillBePersistent<Text> m_textNode; | 39 RefPtrWillBePersistent<Text> m_textNode; |
| 40 }; | 40 }; |
| 41 | 41 |
| 42 void FrameSelectionTest::setSelection(const VisibleSelection& newSelection) | 42 void FrameSelectionTest::setSelection(const VisibleSelection& newSelection) |
| 43 { | 43 { |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 const char* shadowContent = "<span id=bottom>bottom</span>"; | 183 const char* shadowContent = "<span id=bottom>bottom</span>"; |
| 184 setBodyContent(bodyContent); | 184 setBodyContent(bodyContent); |
| 185 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); | 185 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); |
| 186 updateLayoutAndStyleForPainting(); | 186 updateLayoutAndStyleForPainting(); |
| 187 | 187 |
| 188 Node* top = document().getElementById("top")->firstChild(); | 188 Node* top = document().getElementById("top")->firstChild(); |
| 189 Node* bottom = shadowRoot->getElementById("bottom")->firstChild(); | 189 Node* bottom = shadowRoot->getElementById("bottom")->firstChild(); |
| 190 Node* host = document().getElementById("host"); | 190 Node* host = document().getElementById("host"); |
| 191 | 191 |
| 192 // top to bottom | 192 // top to bottom |
| 193 selection().setNonDirectionalSelectionIfNeeded(VisibleSelectionInComposedTre
e(PositionInComposedTree(top, 1), PositionInComposedTree(bottom, 3)), CharacterG
ranularity); | 193 selection().setNonDirectionalSelectionIfNeeded(VisibleSelectionInFlatTree(Po
sitionInFlatTree(top, 1), PositionInFlatTree(bottom, 3)), CharacterGranularity); |
| 194 EXPECT_EQ(Position(top, 1), visibleSelectionInDOMTree().base()); | 194 EXPECT_EQ(Position(top, 1), visibleSelectionInDOMTree().base()); |
| 195 EXPECT_EQ(Position::beforeNode(host), visibleSelectionInDOMTree().extent()); | 195 EXPECT_EQ(Position::beforeNode(host), visibleSelectionInDOMTree().extent()); |
| 196 EXPECT_EQ(Position(top, 1), visibleSelectionInDOMTree().start()); | 196 EXPECT_EQ(Position(top, 1), visibleSelectionInDOMTree().start()); |
| 197 EXPECT_EQ(Position(top, 3), visibleSelectionInDOMTree().end()); | 197 EXPECT_EQ(Position(top, 3), visibleSelectionInDOMTree().end()); |
| 198 | 198 |
| 199 EXPECT_EQ(PositionInComposedTree(top, 1), visibleSelectionInComposedTree().b
ase()); | 199 EXPECT_EQ(PositionInFlatTree(top, 1), visibleSelectionInFlatTree().base()); |
| 200 EXPECT_EQ(PositionInComposedTree(bottom, 3), visibleSelectionInComposedTree(
).extent()); | 200 EXPECT_EQ(PositionInFlatTree(bottom, 3), visibleSelectionInFlatTree().extent
()); |
| 201 EXPECT_EQ(PositionInComposedTree(top, 1), visibleSelectionInComposedTree().s
tart()); | 201 EXPECT_EQ(PositionInFlatTree(top, 1), visibleSelectionInFlatTree().start()); |
| 202 EXPECT_EQ(PositionInComposedTree(bottom, 3), visibleSelectionInComposedTree(
).end()); | 202 EXPECT_EQ(PositionInFlatTree(bottom, 3), visibleSelectionInFlatTree().end())
; |
| 203 | 203 |
| 204 // bottom to top | 204 // bottom to top |
| 205 selection().setNonDirectionalSelectionIfNeeded(VisibleSelectionInComposedTre
e(PositionInComposedTree(bottom, 3), PositionInComposedTree(top, 1)), CharacterG
ranularity); | 205 selection().setNonDirectionalSelectionIfNeeded(VisibleSelectionInFlatTree(Po
sitionInFlatTree(bottom, 3), PositionInFlatTree(top, 1)), CharacterGranularity); |
| 206 EXPECT_EQ(Position(bottom, 3), visibleSelectionInDOMTree().base()); | 206 EXPECT_EQ(Position(bottom, 3), visibleSelectionInDOMTree().base()); |
| 207 EXPECT_EQ(Position::beforeNode(bottom->parentNode()), visibleSelectionInDOMT
ree().extent()); | 207 EXPECT_EQ(Position::beforeNode(bottom->parentNode()), visibleSelectionInDOMT
ree().extent()); |
| 208 EXPECT_EQ(Position(bottom, 0), visibleSelectionInDOMTree().start()); | 208 EXPECT_EQ(Position(bottom, 0), visibleSelectionInDOMTree().start()); |
| 209 EXPECT_EQ(Position(bottom, 3), visibleSelectionInDOMTree().end()); | 209 EXPECT_EQ(Position(bottom, 3), visibleSelectionInDOMTree().end()); |
| 210 | 210 |
| 211 EXPECT_EQ(PositionInComposedTree(bottom, 3), visibleSelectionInComposedTree(
).base()); | 211 EXPECT_EQ(PositionInFlatTree(bottom, 3), visibleSelectionInFlatTree().base()
); |
| 212 EXPECT_EQ(PositionInComposedTree(top, 1), visibleSelectionInComposedTree().e
xtent()); | 212 EXPECT_EQ(PositionInFlatTree(top, 1), visibleSelectionInFlatTree().extent())
; |
| 213 EXPECT_EQ(PositionInComposedTree(top, 1), visibleSelectionInComposedTree().s
tart()); | 213 EXPECT_EQ(PositionInFlatTree(top, 1), visibleSelectionInFlatTree().start()); |
| 214 EXPECT_EQ(PositionInComposedTree(bottom, 3), visibleSelectionInComposedTree(
).end()); | 214 EXPECT_EQ(PositionInFlatTree(bottom, 3), visibleSelectionInFlatTree().end())
; |
| 215 } | 215 } |
| 216 | 216 |
| 217 TEST_F(FrameSelectionTest, SelectAllWithUnselectableRoot) | 217 TEST_F(FrameSelectionTest, SelectAllWithUnselectableRoot) |
| 218 { | 218 { |
| 219 RefPtrWillBeRawPtr<Element> select = document().createElement("select", ASSE
RT_NO_EXCEPTION); | 219 RefPtrWillBeRawPtr<Element> select = document().createElement("select", ASSE
RT_NO_EXCEPTION); |
| 220 document().replaceChild(select.get(), document().documentElement()); | 220 document().replaceChild(select.get(), document().documentElement()); |
| 221 selection().selectAll(); | 221 selection().selectAll(); |
| 222 EXPECT_TRUE(selection().isNone()) << "Nothing should be selected if the cont
ent of the documentElement is not selctable."; | 222 EXPECT_TRUE(selection().isNone()) << "Nothing should be selected if the cont
ent of the documentElement is not selctable."; |
| 223 } | 223 } |
| 224 | 224 |
| 225 } // namespace blink | 225 } // namespace blink |
| OLD | NEW |