Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1229)

Unified Diff: third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp

Issue 1740173003: TextIteratorAlgorithm should not force layout update in constructor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed my WIP comment. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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())

Powered by Google App Engine
This is Rietveld 408576698