| Index: third_party/WebKit/Source/core/editing/DOMSelection.cpp
|
| diff --git a/third_party/WebKit/Source/core/editing/DOMSelection.cpp b/third_party/WebKit/Source/core/editing/DOMSelection.cpp
|
| index 4e5fc3c3eafdf43a05406ea05571836019927d53..1361a617dc4482fc973b56119bee3e86c94e6e12 100644
|
| --- a/third_party/WebKit/Source/core/editing/DOMSelection.cpp
|
| +++ b/third_party/WebKit/Source/core/editing/DOMSelection.cpp
|
| @@ -175,6 +175,8 @@ String DOMSelection::type() const {
|
| int DOMSelection::rangeCount() const {
|
| if (!isAvailable())
|
| return 0;
|
| + if (m_range)
|
| + return 1;
|
| return frame()->selection().isNone() ? 0 : 1;
|
| }
|
|
|
| @@ -413,6 +415,14 @@ Range* DOMSelection::getRangeAt(int index, ExceptionState& exceptionState) {
|
| // If you're hitting this, you've added broken multi-range selection support
|
| DCHECK_EQ(rangeCount(), 1);
|
|
|
| + if (m_range)
|
| + return m_range;
|
| +
|
| + m_range = createRangeFromSelectionEditor();
|
| + return m_range;
|
| +}
|
| +
|
| +Range* DOMSelection::createRangeFromSelectionEditor() {
|
| Position anchor = anchorPosition(visibleSelection());
|
| if (!anchor.anchorNode()->isInShadowTree())
|
| return frame()->selection().firstRange();
|
| @@ -427,7 +437,12 @@ Range* DOMSelection::getRangeAt(int index, ExceptionState& exceptionState) {
|
| focusOffset());
|
| }
|
|
|
| +void DOMSelection::markRangeDirty() {
|
| + m_range = nullptr;
|
| +}
|
| +
|
| void DOMSelection::removeAllRanges() {
|
| + m_range = nullptr;
|
| if (!isAvailable())
|
| return;
|
| frame()->selection().clear();
|
| @@ -463,6 +478,7 @@ void DOMSelection::addRange(Range* newRange) {
|
|
|
| if (selection.isNone()) {
|
| selection.setSelectedRange(EphemeralRange(newRange), VP_DEFAULT_AFFINITY);
|
| + m_range = newRange;
|
| return;
|
| }
|
|
|
| @@ -510,6 +526,7 @@ void DOMSelection::addRange(Range* newRange) {
|
| EphemeralRange(start->startPosition(), end->endPosition());
|
| TextAffinity affinity = selection.selection().affinity();
|
| selection.setSelectedRange(merged, affinity);
|
| + m_range = createRange(merged);
|
| }
|
|
|
| void DOMSelection::deleteFromDocument() {
|
| @@ -669,6 +686,7 @@ void DOMSelection::addConsoleError(const String& message) {
|
|
|
| DEFINE_TRACE(DOMSelection) {
|
| visitor->trace(m_treeScope);
|
| + visitor->trace(m_range);
|
| ContextClient::trace(visitor);
|
| }
|
|
|
|
|