blob: 7ca08c254f68140faf62bf07bf7708a61967db7c [file] [log] [blame]
// Copyright 2018 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_DOM_FLAT_TREE_NODE_DATA_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_DOM_FLAT_TREE_NODE_DATA_H_
#include "base/macros.h"
#include "third_party/blink/renderer/core/dom/node.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
namespace blink {
class HTMLSlotElement;
class FlatTreeNodeData final : public GarbageCollected<FlatTreeNodeData> {
public:
FlatTreeNodeData() {}
void Clear() {
assigned_slot_ = nullptr;
previous_in_assigned_nodes_ = nullptr;
next_in_assigned_nodes_ = nullptr;
}
void Trace(Visitor*);
#if DCHECK_IS_ON()
bool IsCleared() const {
return !assigned_slot_ && !previous_in_assigned_nodes_ &&
!next_in_assigned_nodes_;
}
#endif
private:
void SetAssignedSlot(HTMLSlotElement* assigned_slot) {
assigned_slot_ = assigned_slot;
}
void SetPreviousInAssignedNodes(Node* previous) {
previous_in_assigned_nodes_ = previous;
}
void SetNextInAssignedNodes(Node* next) { next_in_assigned_nodes_ = next; }
HTMLSlotElement* AssignedSlot() { return assigned_slot_; }
Node* PreviousInAssignedNodes() { return previous_in_assigned_nodes_; }
Node* NextInAssignedNodes() { return next_in_assigned_nodes_; }
friend class FlatTreeTraversal;
friend class HTMLSlotElement;
friend HTMLSlotElement* Node::AssignedSlot() const;
friend void Node::ClearFlatTreeNodeDataIfHostChanged(const ContainerNode&);
friend Element* Node::FlatTreeParentForChildDirty() const;
WeakMember<HTMLSlotElement> assigned_slot_;
WeakMember<Node> previous_in_assigned_nodes_;
WeakMember<Node> next_in_assigned_nodes_;
DISALLOW_COPY_AND_ASSIGN(FlatTreeNodeData);
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_DOM_FLAT_TREE_NODE_DATA_H_