Commit 0596a31f authored by yosin@chromium.org's avatar yosin@chromium.org

Introduce composed tree version of startOfDocument()

This patch introduces composed tree version of |startOfDocument()| by
templatizing original |startOfDocument()| to work both DOM tree position and
composed tree position version for introducing composed tree version of
|VisibleSelection| class.

This patch is a preparation of making selection to handle granularity for web
component, http://crrev.com/1277863002

BUG=513568
TEST=n/a; no behavior changes

Review URL: https://codereview.chromium.org/1324123003

git-svn-id: svn://svn.chromium.org/blink/trunk@201979 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 40252a77
...@@ -1557,17 +1557,24 @@ bool isEndOfBlock(const VisiblePosition& pos) ...@@ -1557,17 +1557,24 @@ bool isEndOfBlock(const VisiblePosition& pos)
// --------- // ---------
VisiblePosition startOfDocument(const Node* node) template <typename Strategy>
static VisiblePositionTemplate<Strategy> startOfDocumentAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition)
{ {
Node* node = visiblePosition.deepEquivalent().anchorNode();
if (!node || !node->document().documentElement()) if (!node || !node->document().documentElement())
return VisiblePosition(); return VisiblePositionTemplate<Strategy>();
return createVisiblePosition(firstPositionInNode(node->document().documentElement())); return createVisiblePosition(PositionAlgorithm<Strategy>::firstPositionInNode(node->document().documentElement()));
} }
VisiblePosition startOfDocument(const VisiblePosition& c) VisiblePosition startOfDocument(const VisiblePosition& c)
{ {
return startOfDocument(c.deepEquivalent().anchorNode()); return startOfDocumentAlgorithm<EditingStrategy>(c);
}
VisiblePositionInComposedTree startOfDocument(const VisiblePositionInComposedTree& c)
{
return startOfDocumentAlgorithm<EditingInComposedTreeStrategy>(c);
} }
template <typename Strategy> template <typename Strategy>
......
...@@ -162,8 +162,8 @@ bool isStartOfBlock(const VisiblePosition&); ...@@ -162,8 +162,8 @@ bool isStartOfBlock(const VisiblePosition&);
bool isEndOfBlock(const VisiblePosition&); bool isEndOfBlock(const VisiblePosition&);
// document // document
VisiblePosition startOfDocument(const Node*); CORE_EXPORT VisiblePosition startOfDocument(const VisiblePosition&);
VisiblePosition startOfDocument(const VisiblePosition&); CORE_EXPORT VisiblePositionInComposedTree startOfDocument(const VisiblePositionInComposedTree&);
CORE_EXPORT VisiblePosition endOfDocument(const VisiblePosition&); CORE_EXPORT VisiblePosition endOfDocument(const VisiblePosition&);
CORE_EXPORT VisiblePositionInComposedTree endOfDocument(const VisiblePositionInComposedTree&); CORE_EXPORT VisiblePositionInComposedTree endOfDocument(const VisiblePositionInComposedTree&);
bool isStartOfDocument(const VisiblePosition&); bool isStartOfDocument(const VisiblePosition&);
......
...@@ -359,4 +359,22 @@ TEST_F(VisibleUnitsTest, rightPositionOf) ...@@ -359,4 +359,22 @@ TEST_F(VisibleUnitsTest, rightPositionOf)
EXPECT_EQ(PositionInComposedTree(three, 0), rightPositionOf(createVisiblePosition(PositionInComposedTree(five, 5))).deepEquivalent()); EXPECT_EQ(PositionInComposedTree(three, 0), rightPositionOf(createVisiblePosition(PositionInComposedTree(five, 5))).deepEquivalent());
} }
TEST_F(VisibleUnitsTest, startOfDocument)
{
const char* bodyContent = "<a id=host><b id=one>1</b><b id=two>22</b></a>";
const char* shadowContent = "<p><content select=#two></content></p><p><content select=#one></content></p>";
setBodyContent(bodyContent);
setShadowContent(shadowContent, "host");
updateLayoutAndStyleForPainting();
Node* one = document().getElementById("one")->firstChild();
Node* two = document().getElementById("two")->firstChild();
EXPECT_EQ(Position(one, 0), startOfDocument(createVisiblePositionInDOMTree(*one, 0)).deepEquivalent());
EXPECT_EQ(PositionInComposedTree(two, 0), startOfDocument(createVisiblePositionInComposedTree(*one, 0)).deepEquivalent());
EXPECT_EQ(Position(one, 0), startOfDocument(createVisiblePositionInDOMTree(*two, 1)).deepEquivalent());
EXPECT_EQ(PositionInComposedTree(two, 0), startOfDocument(createVisiblePositionInComposedTree(*two, 1)).deepEquivalent());
}
} // namespace blink } // namespace blink
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment