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

Introduce PositionInComposedTree version of enclosingBlock()

This patch introduces |PositionInComposedTree| version of |enclosingBlock()|
by introducing template function |enclosingBlockAlgorithm()|.

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

BUG=513568
TEST=webkit_unit_tests --gtest_filter=EditingUtilitiesTest.enclosingBlock

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

git-svn-id: svn://svn.chromium.org/blink/trunk@201303 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent a7f37819
......@@ -648,12 +648,23 @@ Element* enclosingBlock(Node* node, EditingBoundaryCrossingRule rule)
return enclosingBlock(firstPositionInOrBeforeNode(node), rule);
}
Element* enclosingBlock(const Position& position, EditingBoundaryCrossingRule rule)
template <typename Strategy>
Element* enclosingBlockAlgorithm(const PositionAlgorithm<Strategy>& position, EditingBoundaryCrossingRule rule)
{
Node* enclosingNode = enclosingNodeOfType(position, isEnclosingBlock, rule);
return enclosingNode && enclosingNode->isElementNode() ? toElement(enclosingNode) : nullptr;
}
Element* enclosingBlock(const Position& position, EditingBoundaryCrossingRule rule)
{
return enclosingBlockAlgorithm<EditingStrategy>(position, rule);
}
Element* enclosingBlock(const PositionInComposedTree& position, EditingBoundaryCrossingRule rule)
{
return enclosingBlockAlgorithm<EditingInComposedTreeStrategy>(position, rule);
}
Element* enclosingBlockFlowElement(Node& node)
{
if (isBlockFlowElement(node))
......
......@@ -70,7 +70,8 @@ Node* highestEnclosingNodeOfType(const Position&, bool (*nodeIsOfType)(const Nod
Node* highestNodeToRemoveInPruning(Node*, Node* excludeNode = nullptr);
Element* enclosingBlock(Node*, EditingBoundaryCrossingRule = CannotCrossEditingBoundary);
Element* enclosingBlock(const Position&, EditingBoundaryCrossingRule);
CORE_EXPORT Element* enclosingBlock(const Position&, EditingBoundaryCrossingRule);
CORE_EXPORT Element* enclosingBlock(const PositionInComposedTree&, EditingBoundaryCrossingRule);
Element* enclosingBlockFlowElement(Node&); // Deprecated, use enclosingBlock instead.
bool inSameContainingBlockFlowElement(Node*, Node*);
Element* enclosingTableCell(const Position&);
......
......@@ -31,6 +31,21 @@ TEST_F(EditingUtilitiesTest, firstEditablePositionAfterPositionInRoot)
EXPECT_EQ(PositionInComposedTree::afterNode(host), firstEditablePositionAfterPositionInRoot(PositionInComposedTree(three, 0), host));
}
TEST_F(EditingUtilitiesTest, enclosingBlock)
{
const char* bodyContent = "<p id='host'><b id='one'>11</b></p>";
const char* shadowContent = "<content select=#two></content><div id='three'><content select=#one></content></div>";
setBodyContent(bodyContent);
RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent);
updateLayoutAndStyleForPainting();
Node* host = document().getElementById("host");
Node* one = document().getElementById("one");
Node* three = shadowRoot->getElementById("three");
EXPECT_EQ(host, enclosingBlock(Position(one, 0), CannotCrossEditingBoundary));
EXPECT_EQ(three, enclosingBlock(PositionInComposedTree(one, 0), CannotCrossEditingBoundary));
}
TEST_F(EditingUtilitiesTest, enclosingNodeOfType)
{
const char* bodyContent = "<p id='host'><b id='one'>11</b></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