Commit b640cba4 authored by yosin@chromium.org's avatar yosin@chromium.org

Introduce composed tree version of isEndOfEditableOrNonEditableContent()

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

git-svn-id: svn://svn.chromium.org/blink/trunk@201955 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent abc9f7e1
......@@ -1613,11 +1613,22 @@ VisiblePosition endOfEditableContent(const VisiblePosition& visiblePosition)
return createVisiblePosition(lastPositionInNode(highestRoot));
}
bool isEndOfEditableOrNonEditableContent(const VisiblePosition& p)
template <typename Strategy>
static bool isEndOfEditableOrNonEditableContentAlgorithm(const VisiblePositionTemplate<Strategy>& p)
{
return p.isNotNull() && nextPositionOf(p).isNull();
}
bool isEndOfEditableOrNonEditableContent(const VisiblePosition& position)
{
return isEndOfEditableOrNonEditableContentAlgorithm<EditingStrategy>(position);
}
bool isEndOfEditableOrNonEditableContent(const VisiblePositionInComposedTree& position)
{
return isEndOfEditableOrNonEditableContentAlgorithm<EditingInComposedTreeStrategy>(position);
}
VisiblePosition leftBoundaryOfLine(const VisiblePosition& c, TextDirection direction)
{
return direction == LTR ? logicalStartOfLine(c) : logicalEndOfLine(c);
......
......@@ -167,7 +167,8 @@ bool isEndOfDocument(const VisiblePosition&);
// editable content
VisiblePosition startOfEditableContent(const VisiblePosition&);
VisiblePosition endOfEditableContent(const VisiblePosition&);
bool isEndOfEditableOrNonEditableContent(const VisiblePosition&);
CORE_EXPORT bool isEndOfEditableOrNonEditableContent(const VisiblePosition&);
CORE_EXPORT bool isEndOfEditableOrNonEditableContent(const VisiblePositionInComposedTree&);
CORE_EXPORT InlineBoxPosition computeInlineBoxPosition(const Position&, TextAffinity);
CORE_EXPORT InlineBoxPosition computeInlineBoxPosition(const Position&, TextAffinity, TextDirection primaryDirection);
......
......@@ -93,6 +93,24 @@ TEST_F(VisibleUnitsTest, endOfParagraph)
EXPECT_EQ(PositionInComposedTree(two->firstChild(), 2), endOfParagraph(createVisiblePositionInComposedTree(*two->firstChild(), 2)).deepEquivalent());
}
TEST_F(VisibleUnitsTest, isEndOfEditableOrNonEditableContent)
{
const char* bodyContent = "<a id=host><b id=one contenteditable>1</b><b id=two>22</b></a>";
const char* shadowContent = "<content select=#two></content></p><p><content select=#one></content>";
setBodyContent(bodyContent);
setShadowContent(shadowContent, "host");
updateLayoutAndStyleForPainting();
Element* one = document().getElementById("one");
Element* two = document().getElementById("two");
EXPECT_FALSE(isEndOfEditableOrNonEditableContent(createVisiblePositionInDOMTree(*one->firstChild(), 1)));
EXPECT_TRUE(isEndOfEditableOrNonEditableContent(createVisiblePositionInComposedTree(*one->firstChild(), 1)));
EXPECT_TRUE(isEndOfEditableOrNonEditableContent(createVisiblePositionInDOMTree(*two->firstChild(), 2)));
EXPECT_FALSE(isEndOfEditableOrNonEditableContent(createVisiblePositionInComposedTree(*two->firstChild(), 2)));
}
TEST_F(VisibleUnitsTest, inSameLine)
{
const char* bodyContent = "<p id='host'>00<b id='one'>11</b><b id='two'>22</b>33</p>";
......
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