blob: 0015892f1bff3bb4a042d2411c5e4280074c79a6 [file] [log] [blame]
// 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.
#include "third_party/blink/renderer/core/dom/static_range.h"
#include "third_party/blink/renderer/core/dom/range.h"
#include "third_party/blink/renderer/core/editing/ephemeral_range.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
namespace blink {
StaticRange::StaticRange(Document& document)
: owner_document_(document),
start_container_(document),
start_offset_(0u),
end_container_(document),
end_offset_(0u) {}
StaticRange::StaticRange(Document& document,
Node* start_container,
unsigned start_offset,
Node* end_container,
unsigned end_offset)
: owner_document_(document),
start_container_(start_container),
start_offset_(start_offset),
end_container_(end_container),
end_offset_(end_offset) {}
// static
StaticRange* StaticRange::Create(const EphemeralRange& range) {
DCHECK(!range.IsNull());
return MakeGarbageCollected<StaticRange>(
range.GetDocument(), range.StartPosition().ComputeContainerNode(),
range.StartPosition().ComputeOffsetInContainerNode(),
range.EndPosition().ComputeContainerNode(),
range.EndPosition().ComputeOffsetInContainerNode());
}
void StaticRange::setStart(Node* container, unsigned offset) {
start_container_ = container;
start_offset_ = offset;
}
void StaticRange::setEnd(Node* container, unsigned offset) {
end_container_ = container;
end_offset_ = offset;
}
Range* StaticRange::toRange(ExceptionState& exception_state) const {
Range* range = Range::Create(*owner_document_.Get());
// Do the offset checking.
range->setStart(start_container_, start_offset_, exception_state);
range->setEnd(end_container_, end_offset_, exception_state);
return range;
}
void StaticRange::Trace(Visitor* visitor) {
visitor->Trace(owner_document_);
visitor->Trace(start_container_);
visitor->Trace(end_container_);
ScriptWrappable::Trace(visitor);
}
} // namespace blink