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..10aec3efef1e1195acb6998e6650110ef43c98a9 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" |
#include "core/editing/EditingUtilities.h" |
#include "core/editing/Editor.h" |
#include "core/editing/SelectionAdjuster.h" |
@@ -80,11 +81,26 @@ SelectionEditor::visibleSelection<EditingInFlatTreeStrategy>() const { |
return m_selectionInFlatTree; |
} |
+static void markDOMSelectionDirty(const VisibleSelection& selection) { |
+ if (selection.isNone()) |
+ return; |
+ |
+ DCHECK(selection.start().anchorNode()); |
yosin_UTC9
2017/01/26 08:12:49
nit: We don't need to have this DCHECK() because f
yoichio
2017/01/27 08:33:04
Done.
|
+ selection.start().anchorNode()->treeScope().getSelection()->markRangeDirty(); |
+ if (selection.isCaret()) |
+ return; |
+ |
+ DCHECK(selection.end().anchorNode()); |
yosin_UTC9
2017/01/26 08:12:49
nit: We don't need to have this DCHECK() because f
yoichio
2017/01/27 08:33:04
Done.
|
+ selection.end().anchorNode()->treeScope().getSelection()->markRangeDirty(); |
+} |
+ |
void SelectionEditor::setVisibleSelection( |
const VisibleSelection& newSelection, |
FrameSelection::SetSelectionOptions options) { |
DCHECK(newSelection.isValidFor(document())) << newSelection; |
resetLogicalRange(); |
+ markDOMSelectionDirty(m_selection); |
+ |
m_selection = newSelection; |
if (options & FrameSelection::DoNotAdjustInFlatTree) { |
m_selectionInFlatTree.setWithoutValidation( |
@@ -95,6 +111,8 @@ void SelectionEditor::setVisibleSelection( |
SelectionAdjuster::adjustSelectionInFlatTree(&m_selectionInFlatTree, |
m_selection); |
+ |
+ markDOMSelectionDirty(m_selection); |
} |
void SelectionEditor::setVisibleSelection( |
@@ -103,9 +121,13 @@ void SelectionEditor::setVisibleSelection( |
DCHECK(newSelection.isValidFor(document())) << newSelection; |
DCHECK(!(options & FrameSelection::DoNotAdjustInFlatTree)); |
resetLogicalRange(); |
+ markDOMSelectionDirty(m_selection); |
+ |
m_selectionInFlatTree = newSelection; |
SelectionAdjuster::adjustSelectionInDOMTree(&m_selection, |
m_selectionInFlatTree); |
+ |
+ markDOMSelectionDirty(m_selection); |
} |
void SelectionEditor::setWithoutValidation(const Position& base, |
@@ -115,9 +137,12 @@ void SelectionEditor::setWithoutValidation(const Position& base, |
DCHECK_EQ(base.document(), document()); |
if (extent.isNotNull()) |
DCHECK_EQ(extent.document(), document()); |
+ markDOMSelectionDirty(m_selection); |
+ |
m_selection.setWithoutValidation(base, extent); |
m_selectionInFlatTree.setWithoutValidation(toPositionInFlatTree(base), |
toPositionInFlatTree(extent)); |
+ markDOMSelectionDirty(m_selection); |
} |
void SelectionEditor::documentAttached(Document* document) { |