| Index: Source/core/rendering/RenderView.cpp
|
| diff --git a/Source/core/rendering/RenderView.cpp b/Source/core/rendering/RenderView.cpp
|
| index c700c0cf5125ec4f4a6aac882a47a40b2172a969..509617c1e0ba47538d56e891c054cb17f98f0991 100644
|
| --- a/Source/core/rendering/RenderView.cpp
|
| +++ b/Source/core/rendering/RenderView.cpp
|
| @@ -475,10 +475,6 @@ void RenderView::invalidatePaintForSelection() const
|
| {
|
| HashSet<RenderBlock*> processedBlocks;
|
|
|
| - // For querying RenderLayer::compositingState()
|
| - // FIXME: this may be wrong. crbug.com/407416
|
| - DisableCompositingQueryAsserts disabler;
|
| -
|
| RenderObject* end = rendererAfterPosition(m_selectionEnd, m_selectionEndPos);
|
| for (RenderObject* o = m_selectionStart; o && o != end; o = o->nextInPreOrder()) {
|
| if (!o->canBeSelectionLeaf() && o != m_selectionStart && o != m_selectionEnd)
|
| @@ -486,13 +482,13 @@ void RenderView::invalidatePaintForSelection() const
|
| if (o->selectionState() == SelectionNone)
|
| continue;
|
|
|
| - RenderSelectionInfo(o).invalidatePaint();
|
| + o->setShouldInvalidateSelection();
|
|
|
| // Blocks are responsible for painting line gaps and margin gaps. They must be examined as well.
|
| for (RenderBlock* block = o->containingBlock(); block && !block->isRenderView(); block = block->containingBlock()) {
|
| if (!processedBlocks.add(block).isNewEntry)
|
| break;
|
| - RenderSelectionInfo(block).invalidatePaint();
|
| + block->setShouldInvalidateSelection();
|
| }
|
| }
|
| }
|
| @@ -632,10 +628,6 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
|
| if (!m_frameView || blockPaintInvalidationMode == PaintInvalidationNothing)
|
| return;
|
|
|
| - // For querying RenderLayer::compositingState()
|
| - // FIXME: this is wrong, selection should not cause eager invalidation. crbug.com/407416
|
| - DisableCompositingQueryAsserts disabler;
|
| -
|
| // Have any of the old selected objects changed compared to the new selection?
|
| for (SelectedObjectMap::iterator i = oldSelectedObjects.begin(); i != oldObjectsEnd; ++i) {
|
| RenderObject* obj = i->key;
|
| @@ -646,7 +638,7 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
|
| || (m_selectionEnd == obj && oldEndPos != m_selectionEndPos)) {
|
| oldInfo->invalidatePaint();
|
| if (newInfo) {
|
| - newInfo->invalidatePaint();
|
| + newInfo->object()->setShouldInvalidateSelection();
|
| newSelectedObjects.remove(obj);
|
| }
|
| }
|
| @@ -655,7 +647,7 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
|
| // Any new objects that remain were not found in the old objects dict, and so they need to be updated.
|
| SelectedObjectMap::iterator newObjectsEnd = newSelectedObjects.end();
|
| for (SelectedObjectMap::iterator i = newSelectedObjects.begin(); i != newObjectsEnd; ++i)
|
| - i->value->invalidatePaint();
|
| + i->value->object()->setShouldInvalidateSelection();
|
|
|
| // Have any of the old blocks changed?
|
| SelectedBlockMap::iterator oldBlocksEnd = oldSelectedBlocks.end();
|
| @@ -664,9 +656,9 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
|
| RenderBlockSelectionInfo* newInfo = newSelectedBlocks.get(block);
|
| RenderBlockSelectionInfo* oldInfo = i->value.get();
|
| if (!newInfo || newInfo->hasChangedFrom(*oldInfo)) {
|
| - oldInfo->invalidatePaint();
|
| + oldInfo->object()->setShouldInvalidateSelection();
|
| if (newInfo) {
|
| - newInfo->invalidatePaint();
|
| + newInfo->object()->setShouldInvalidateSelection();
|
| newSelectedBlocks.remove(block);
|
| }
|
| }
|
| @@ -675,7 +667,7 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
|
| // Any new blocks that remain were not found in the old blocks dict, and so they need to be updated.
|
| SelectedBlockMap::iterator newBlocksEnd = newSelectedBlocks.end();
|
| for (SelectedBlockMap::iterator i = newSelectedBlocks.begin(); i != newBlocksEnd; ++i)
|
| - i->value->invalidatePaint();
|
| + i->value->object()->setShouldInvalidateSelection();
|
| }
|
|
|
| void RenderView::getSelection(RenderObject*& startRenderer, int& startOffset, RenderObject*& endRenderer, int& endOffset) const
|
|
|