Commit 6986f59c authored by yosin@chromium.org's avatar yosin@chromium.org

Introduce composed tree version of endOfDocument()

This patch introduces composed tree version of |endOfDocument()| by
templatizing original |endOfDocument()| 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/1326683006

git-svn-id: svn://svn.chromium.org/blink/trunk@201958 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 1f1b4a65
......@@ -1569,18 +1569,25 @@ VisiblePosition startOfDocument(const VisiblePosition& c)
return startOfDocument(c.deepEquivalent().anchorNode());
}
VisiblePosition endOfDocument(const Node* node)
template <typename Strategy>
static VisiblePositionTemplate<Strategy> endOfDocumentAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition)
{
Node* node = visiblePosition.deepEquivalent().anchorNode();
if (!node || !node->document().documentElement())
return VisiblePosition();
return VisiblePositionTemplate<Strategy>();
Element* doc = node->document().documentElement();
return createVisiblePosition(lastPositionInNode(doc));
return createVisiblePosition(PositionAlgorithm<Strategy>::lastPositionInNode(doc));
}
VisiblePosition endOfDocument(const VisiblePosition& c)
{
return endOfDocument(c.deepEquivalent().anchorNode());
return endOfDocumentAlgorithm<EditingStrategy>(c);
}
VisiblePositionInComposedTree endOfDocument(const VisiblePositionInComposedTree& c)
{
return endOfDocumentAlgorithm<EditingInComposedTreeStrategy>(c);
}
bool isStartOfDocument(const VisiblePosition& p)
......
......@@ -158,9 +158,9 @@ bool isEndOfBlock(const VisiblePosition&);
// document
VisiblePosition startOfDocument(const Node*);
VisiblePosition endOfDocument(const Node*);
VisiblePosition startOfDocument(const VisiblePosition&);
VisiblePosition endOfDocument(const VisiblePosition&);
CORE_EXPORT VisiblePosition endOfDocument(const VisiblePosition&);
CORE_EXPORT VisiblePositionInComposedTree endOfDocument(const VisiblePositionInComposedTree&);
bool isStartOfDocument(const VisiblePosition&);
bool isEndOfDocument(const VisiblePosition&);
......
......@@ -74,6 +74,24 @@ TEST_F(VisibleUnitsTest, characterAfter)
EXPECT_EQ('1', characterAfter(createVisiblePositionInComposedTree(*two->firstChild(), 2)));
}
TEST_F(VisibleUnitsTest, endOfDocument)
{
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();
Element* one = document().getElementById("one");
Element* two = document().getElementById("two");
EXPECT_EQ(Position(two->firstChild(), 2), endOfDocument(createVisiblePositionInDOMTree(*one->firstChild(), 0)).deepEquivalent());
EXPECT_EQ(PositionInComposedTree(one->firstChild(), 1), endOfDocument(createVisiblePositionInComposedTree(*one->firstChild(), 0)).deepEquivalent());
EXPECT_EQ(Position(two->firstChild(), 2), endOfDocument(createVisiblePositionInDOMTree(*two->firstChild(), 1)).deepEquivalent());
EXPECT_EQ(PositionInComposedTree(one->firstChild(), 1), endOfDocument(createVisiblePositionInComposedTree(*two->firstChild(), 1)).deepEquivalent());
}
TEST_F(VisibleUnitsTest, endOfParagraph)
{
const char* bodyContent = "<a id=host><b id=one>1</b><b id=two>22</b></a><b id=three>333</b>";
......
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