// Copyright 2019 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_LAYOUT_NG_CUSTOM_CUSTOM_LAYOUT_SCOPE_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_CUSTOM_CUSTOM_LAYOUT_SCOPE_H_

#include "third_party/blink/renderer/core/layout/ng/custom/custom_layout_work_task.h"
#include "third_party/blink/renderer/platform/heap/handle.h"

namespace blink {

// The work queue is a list of work tasks which will either produce fragment(s)
// or intrinsic-size(s) for the custom-layout class.
typedef HeapVector<Member<CustomLayoutWorkTask>, 4> CustomLayoutWorkQueue;

// This heap allocated class is used to indicate which custom-layout (heap)
// objects are still valid.
//
// Any objects which have a pointer to this object with |is_detached_| being
// true, or not matching the current scope token should be considered invalid.
class CustomLayoutToken : public GarbageCollected<CustomLayoutToken> {
 public:
  CustomLayoutToken() : is_detached_(false) {}
  void Trace(Visitor* visitor) const {}
  bool IsValid() const;

 private:
  friend class CustomLayoutScope;
  bool is_detached_;
};

// This scope object is used to track which custom-layout (heap) objects are
// valid.
//
// Also maintains the current work queue. Work should only be pushed onto this
// queue if this is the current scope.
class CustomLayoutScope {
  STACK_ALLOCATED();

 public:
  static CustomLayoutScope* Current() { return current_scope_; }

  CustomLayoutScope()
      : prev_scope_(current_scope_),
        token_(MakeGarbageCollected<CustomLayoutToken>()) {
    current_scope_ = this;
  }

  // Marks the scope-token as "detached" for any classes with a pointer to it.
  ~CustomLayoutScope() {
    token_->is_detached_ = true;
    current_scope_ = current_scope_->prev_scope_;
  }

  CustomLayoutWorkQueue* Queue() {
    DCHECK_EQ(this, current_scope_);
    return &queue_;
  }
  CustomLayoutToken* Token() { return token_; }

 private:
  static CustomLayoutScope* current_scope_;

  CustomLayoutScope* prev_scope_;
  CustomLayoutWorkQueue queue_;
  CustomLayoutToken* token_;
};

inline bool CustomLayoutToken::IsValid() const {
  return !is_detached_ && this == CustomLayoutScope::Current()->Token();
}

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_CUSTOM_CUSTOM_LAYOUT_SCOPE_H_
