| 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..09a6a9a30e3b55a4e21d22505595acbdc49c6c0b 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,24 @@ SelectionEditor::visibleSelection<EditingInFlatTreeStrategy>() const {
|
| return m_selectionInFlatTree;
|
| }
|
|
|
| +static void markDOMSelectionDirty(const VisibleSelection& selection) {
|
| + if (selection.isNone())
|
| + return;
|
| +
|
| + Document* rootDocument =
|
| + selection.start().anchorNode()->document().frame()->document();
|
| +
|
| + if (rootDocument->hasSelection())
|
| + rootDocument->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(
|
| @@ -103,6 +117,8 @@ 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);
|
| @@ -115,6 +131,8 @@ 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));
|
|
|