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 708b95eab321a6b052a4426af7d43d0977e2c802..7c6df3a1fdbaaae40a98850339ae6b453d95664d 100644 |
--- a/third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp |
+++ b/third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp |
@@ -145,9 +145,11 @@ TextIteratorAlgorithm<Strategy>::TextIteratorAlgorithm(const PositionTemplate<St |
{ |
ASSERT(start.isNotNull()); |
ASSERT(end.isNotNull()); |
- // Updates layout here since, |Position.compareTo()| and |initialize()| |
- // assume layout tree is up-to-date. |
- start.document()->updateLayoutIgnorePendingStylesheets(); |
+ |
+ // TODO(dglazkov): TextIterator should not be created for documents that don't have a frame, |
+ // but it currently still happens in some cases. See http://crbug.com/591877 for details. |
+ ASSERT(!start.document()->view() || !start.document()->view()->needsLayout()); |
+ ASSERT(!start.document()->needsLayoutTreeUpdate()); |
if (start.compareTo(end) > 0) { |
initialize(end.computeContainerNode(), end.computeOffsetInContainerNode(), start.computeContainerNode(), start.computeOffsetInContainerNode()); |
return; |
@@ -1089,6 +1091,10 @@ PositionTemplate<Strategy> TextIteratorAlgorithm<Strategy>::endPositionInCurrent |
template<typename Strategy> |
int TextIteratorAlgorithm<Strategy>::rangeLength(const PositionTemplate<Strategy>& start, const PositionTemplate<Strategy>& end, bool forSelectionPreservation) |
{ |
+ // TODO(dglazkov): The use of updateLayoutIgnorePendingStylesheets needs to be audited. |
+ // see http://crbug.com/590369 for more details. |
+ start.document()->updateLayoutIgnorePendingStylesheets(); |
+ |
int length = 0; |
TextIteratorBehaviorFlags behaviorFlags = TextIteratorEmitsObjectReplacementCharacter; |
if (forSelectionPreservation) |
@@ -1143,6 +1149,10 @@ static String createPlainText(const EphemeralRangeTemplate<Strategy>& range, Tex |
if (range.isNull()) |
return emptyString(); |
+ // TODO(dglazkov): The use of updateLayoutIgnorePendingStylesheets needs to be audited. |
+ // see http://crbug.com/590369 for more details. |
+ range.startPosition().document()->updateLayoutIgnorePendingStylesheets(); |
+ |
TextIteratorAlgorithm<Strategy> it(range.startPosition(), range.endPosition(), behavior); |
if (it.atEnd()) |