| Index: third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp
|
| diff --git a/third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp b/third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp
|
| index 91854edb51ac8d4315f1d4670636dd0fb757c83b..4eb832d698d84df717682a199e7285a2ceb62201 100644
|
| --- a/third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp
|
| +++ b/third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp
|
| @@ -145,6 +145,7 @@ bool IsRenderedAsTable(const Node* node) {
|
|
|
| } // namespace
|
|
|
| +// TODO(xiaochengh): Most members should be initialized in-place, not here.
|
| template <typename Strategy>
|
| TextIteratorAlgorithm<Strategy>::TextIteratorAlgorithm(
|
| const PositionTemplate<Strategy>& start,
|
| @@ -155,6 +156,7 @@ TextIteratorAlgorithm<Strategy>::TextIteratorAlgorithm(
|
| end_container_(nullptr),
|
| end_offset_(0),
|
| needs_another_newline_(false),
|
| + needs_handle_replaced_element_(false),
|
| last_text_node_(nullptr),
|
| behavior_(AdjustBehaviorFlags<Strategy>(behavior)),
|
| should_stop_(false),
|
| @@ -284,6 +286,12 @@ bool TextIteratorAlgorithm<Strategy>::HandleRememberedProgress() {
|
| // way, we can also remove the return values of HandleReplaceElement() and
|
| // HandleNonTextNode(), and make the control flow cleaner.
|
|
|
| + if (needs_handle_replaced_element_) {
|
| + HandleReplacedElement();
|
| + if (text_state_.PositionNode())
|
| + return true;
|
| + }
|
| +
|
| // Try to emit more text runs if we are handling a text node.
|
| return text_node_handler_.HandleRemainingTextRuns();
|
| }
|
| @@ -516,6 +524,8 @@ bool TextIteratorAlgorithm<Strategy>::SupportsAltText(Node* node) {
|
|
|
| template <typename Strategy>
|
| bool TextIteratorAlgorithm<Strategy>::HandleReplacedElement() {
|
| + needs_handle_replaced_element_ = false;
|
| +
|
| if (fully_clipped_stack_.Top())
|
| return false;
|
|
|
| @@ -533,8 +543,10 @@ bool TextIteratorAlgorithm<Strategy>::HandleReplacedElement() {
|
| DCHECK_EQ(last_text_node_, text_node_handler_.GetNode());
|
| if (last_text_node_) {
|
| if (text_node_handler_.FixLeadingWhiteSpaceForReplacedElement(
|
| - Strategy::Parent(*last_text_node_)))
|
| - return false;
|
| + Strategy::Parent(*last_text_node_))) {
|
| + needs_handle_replaced_element_ = true;
|
| + return true;
|
| + }
|
| }
|
|
|
| if (EntersTextControls() && layout_object->IsTextControl()) {
|
|
|