Chromium Code Reviews| Index: third_party/WebKit/Source/core/editing/FrameSelection.cpp |
| diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.cpp b/third_party/WebKit/Source/core/editing/FrameSelection.cpp |
| index b51173b7bff61bb2ec2393b037a0360637a3abdf..d88af3460da90d27f4777cf8b147f16a956a6a6e 100644 |
| --- a/third_party/WebKit/Source/core/editing/FrameSelection.cpp |
| +++ b/third_party/WebKit/Source/core/editing/FrameSelection.cpp |
| @@ -95,6 +95,7 @@ FrameSelection::FrameSelection(LocalFrame* frame) |
| , m_pendingSelection(PendingSelection::create(*this)) |
| , m_selectionEditor(SelectionEditor::create(*this)) |
| , m_granularity(CharacterGranularity) |
| + , m_parentOfPreviousCaretNode(nullptr) |
| , m_previousCaretVisibility(Hidden) |
| , m_caretBlinkTimer(this, &FrameSelection::caretBlinkTimerFired) |
| , m_caretRectDirty(true) |
| @@ -634,6 +635,7 @@ void FrameSelection::prepareForDestruction() |
| setSelection(VisibleSelection(), CloseTyping | ClearTypingStyle | DoNotUpdateAppearance); |
| m_selectionEditor->dispose(); |
| m_previousCaretNode.clear(); |
| + m_parentOfPreviousCaretNode = nullptr; |
| } |
| void FrameSelection::setStart(const VisiblePosition &pos, EUserTriggered trigger) |
| @@ -717,7 +719,12 @@ void FrameSelection::invalidateCaretRect() |
| invalidateLocalCaretRect(m_previousCaretNode.get(), m_previousCaretRect); |
| if (newNode && (shouldRepaintCaret(*newNode) || shouldRepaintCaret(view))) |
| invalidateLocalCaretRect(newNode, newRect); |
| + // Must invalidate #text even if it's detached. crbug.com/528922 |
| + if (m_previousCaretNode && newNode == m_parentOfPreviousCaretNode && !m_previousCaretNode->inDocument()) |
|
yosin_UTC9
2016/02/05 04:04:48
This condition isn't enough, e.g.
- ancestor of
|
| + invalidateLocalCaretRect(newNode, m_previousCaretRect); |
| m_previousCaretNode = newNode; |
| + if (newNode) |
| + m_parentOfPreviousCaretNode = newNode->parentNode(); |
| m_previousCaretRect = newRect; |
| m_previousCaretVisibility = caretVisibility(); |
| } |