Index: third_party/WebKit/Source/core/editing/Position.cpp |
diff --git a/third_party/WebKit/Source/core/editing/Position.cpp b/third_party/WebKit/Source/core/editing/Position.cpp |
index 7034bbb344628038a70b7ffbc838bf6d11f1902f..f1c6789e9c788c98574baf02254e2fe8ba42227f 100644 |
--- a/third_party/WebKit/Source/core/editing/Position.cpp |
+++ b/third_party/WebKit/Source/core/editing/Position.cpp |
@@ -385,7 +385,6 @@ PositionInComposedTree toPositionInComposedTree(const Position& pos) |
if (pos.isNull()) |
return PositionInComposedTree(); |
- PositionInComposedTree position; |
if (pos.isOffsetInAnchor()) { |
Node* anchor = pos.anchorNode(); |
if (anchor->offsetInCharacters()) |
@@ -404,7 +403,14 @@ PositionInComposedTree toPositionInComposedTree(const Position& pos) |
return PositionInComposedTree(anchor->shadowHost(), offset); |
return PositionInComposedTree(anchor, offset); |
} |
- return PositionInComposedTree(ComposedTreeTraversal::parent(*child), ComposedTreeTraversal::index(*child)); |
+ if (Node* parent = ComposedTreeTraversal::parent(*child)) |
+ return PositionInComposedTree(parent, ComposedTreeTraversal::index(*child)); |
+ // When |pos| isn't appeared in composed tree, we map |pos| to after |
+ // children of shadow host. |
+ // e.g. "foo",0 in <progress>foo</progress> |
+ if (anchor->isShadowRoot()) |
+ return PositionInComposedTree(anchor->shadowHost(), PositionAnchorType::AfterChildren); |
+ return PositionInComposedTree(anchor, PositionAnchorType::AfterChildren); |
} |
return PositionInComposedTree(pos.anchorNode(), pos.anchorType()); |