blob: 51b9336ce6ca1585492174420f1b2b527b62281c [file] [log] [blame]
// Copyright 2015 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/inspector/inspected_frames.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/platform/weborigin/security_origin.h"
namespace blink {
InspectedFrames::InspectedFrames(LocalFrame* root) : root_(root) {}
InspectedFrames::Iterator InspectedFrames::begin() {
return Iterator(root_, root_);
}
InspectedFrames::Iterator InspectedFrames::end() {
return Iterator(root_, nullptr);
}
bool InspectedFrames::Contains(LocalFrame* frame) const {
return frame->GetProbeSink() == root_->GetProbeSink();
}
LocalFrame* InspectedFrames::FrameWithSecurityOrigin(
const String& origin_raw_string) {
for (LocalFrame* frame : *this) {
if (frame->GetDocument()->GetSecurityOrigin()->ToRawString() ==
origin_raw_string)
return frame;
}
return nullptr;
}
InspectedFrames::Iterator::Iterator(LocalFrame* root, LocalFrame* current)
: root_(root), current_(current) {}
InspectedFrames::Iterator& InspectedFrames::Iterator::operator++() {
if (!current_)
return *this;
Frame* frame = current_->Tree().TraverseNext(root_);
current_ = nullptr;
for (; frame; frame = frame->Tree().TraverseNext(root_)) {
if (!frame->IsLocalFrame())
continue;
LocalFrame* local = ToLocalFrame(frame);
if (local->GetProbeSink() == root_->GetProbeSink()) {
current_ = local;
break;
}
}
return *this;
}
InspectedFrames::Iterator InspectedFrames::Iterator::operator++(int) {
LocalFrame* old = current_;
++*this;
return Iterator(root_, old);
}
bool InspectedFrames::Iterator::operator==(const Iterator& other) {
return current_ == other.current_ && root_ == other.root_;
}
bool InspectedFrames::Iterator::operator!=(const Iterator& other) {
return !(*this == other);
}
void InspectedFrames::Trace(blink::Visitor* visitor) {
visitor->Trace(root_);
}
} // namespace blink