Index: third_party/WebKit/Source/core/editing/SelectionEditor.cpp |
diff --git a/third_party/WebKit/Source/core/editing/SelectionEditor.cpp b/third_party/WebKit/Source/core/editing/SelectionEditor.cpp |
index 8206ecf15d3debae364272601af153a1bff8911d..fe22733f5adf2ad77ccc2a5f9118d7cda460a038 100644 |
--- a/third_party/WebKit/Source/core/editing/SelectionEditor.cpp |
+++ b/third_party/WebKit/Source/core/editing/SelectionEditor.cpp |
@@ -25,6 +25,7 @@ |
#include "core/editing/SelectionEditor.h" |
+#include "core/editing/DOMSelection.h" |
yosin_UTC9
2017/02/09 06:52:06
nit: SelectionEditor should not depend to DOMSelec
yoichio
2017/02/09 09:31:19
Done.
|
#include "core/editing/EditingUtilities.h" |
#include "core/editing/Editor.h" |
#include "core/editing/SelectionAdjuster.h" |
@@ -50,6 +51,7 @@ void SelectionEditor::clearVisibleSelection() { |
void SelectionEditor::dispose() { |
resetLogicalRange(); |
+ clearDocumentCachedRange(); |
clearVisibleSelection(); |
} |
@@ -85,6 +87,8 @@ void SelectionEditor::setVisibleSelection( |
FrameSelection::SetSelectionOptions options) { |
DCHECK(newSelection.isValidFor(document())) << newSelection; |
resetLogicalRange(); |
+ clearDocumentCachedRange(); |
+ |
m_selection = newSelection; |
if (options & FrameSelection::DoNotAdjustInFlatTree) { |
m_selectionInFlatTree.setWithoutValidation( |
@@ -103,6 +107,8 @@ void SelectionEditor::setVisibleSelection( |
DCHECK(newSelection.isValidFor(document())) << newSelection; |
DCHECK(!(options & FrameSelection::DoNotAdjustInFlatTree)); |
resetLogicalRange(); |
+ clearDocumentCachedRange(); |
+ |
m_selectionInFlatTree = newSelection; |
SelectionAdjuster::adjustSelectionInDOMTree(&m_selection, |
m_selectionInFlatTree); |
@@ -115,6 +121,8 @@ void SelectionEditor::setWithoutValidation(const Position& base, |
DCHECK_EQ(base.document(), document()); |
if (extent.isNotNull()) |
DCHECK_EQ(extent.document(), document()); |
+ clearDocumentCachedRange(); |
+ |
m_selection.setWithoutValidation(base, extent); |
m_selectionInFlatTree.setWithoutValidation(toPositionInFlatTree(base), |
toPositionInFlatTree(extent)); |
@@ -164,12 +172,21 @@ void SelectionEditor::updateIfNeeded() { |
m_selectionInFlatTree.updateIfNeeded(); |
} |
+void SelectionEditor::clearDocumentCachedRange() { |
+ if (!m_cachedRange) |
+ return; |
+ |
+ m_cachedRange->dispose(); |
+ m_cachedRange = nullptr; |
+} |
+ |
DEFINE_TRACE(SelectionEditor) { |
visitor->trace(m_document); |
visitor->trace(m_frame); |
visitor->trace(m_selection); |
visitor->trace(m_selectionInFlatTree); |
visitor->trace(m_logicalRange); |
+ visitor->trace(m_cachedRange); |
} |
} // namespace blink |