| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // https://discourse.wicg.io/t/proposal-staticrange-to-be-used-instead-of-range-for-new-apis/1472 |
| |
| #include "core/dom/StaticRange.h" |
| |
| #include "bindings/core/v8/ExceptionState.h" |
| #include "bindings/core/v8/ScriptState.h" |
| #include "core/dom/Range.h" |
| #include "core/frame/LocalDOMWindow.h" |
| |
| namespace blink { |
| |
| StaticRange::StaticRange(Document& document) |
| : m_ownerDocument(document), |
| m_startContainer(nullptr), |
| m_startOffset(0), |
| m_endContainer(nullptr), |
| m_endOffset(0) {} |
| |
| StaticRange::StaticRange(Document& document, |
| Node* startContainer, |
| int startOffset, |
| Node* endContainer, |
| int endOffset) |
| : m_ownerDocument(document), |
| m_startContainer(startContainer), |
| m_startOffset(startOffset), |
| m_endContainer(endContainer), |
| m_endOffset(endOffset) {} |
| |
| void StaticRange::setStart(Node* container, int offset) { |
| m_startContainer = container; |
| m_startOffset = offset; |
| } |
| |
| void StaticRange::setEnd(Node* container, int offset) { |
| m_endContainer = container; |
| m_endOffset = offset; |
| } |
| |
| Range* StaticRange::toRange(ExceptionState& exceptionState) const { |
| Range* range = Range::create(*m_ownerDocument.get()); |
| // Do the offset checking. |
| range->setStart(m_startContainer, m_startOffset, exceptionState); |
| range->setEnd(m_endContainer, m_endOffset, exceptionState); |
| return range; |
| } |
| |
| DEFINE_TRACE(StaticRange) { |
| visitor->trace(m_ownerDocument); |
| visitor->trace(m_startContainer); |
| visitor->trace(m_endContainer); |
| } |
| |
| } // namespace blink |