blob: de7610a5fbdbc0e39663eda447e1984aa34b7a74 [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_LAYOUT_NG_CUSTOM_CUSTOM_LAYOUT_WORK_TASK_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_CUSTOM_CUSTOM_LAYOUT_WORK_TASK_H_
#include "third_party/blink/renderer/bindings/core/v8/v8_custom_layout_constraints_options.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/heap/heap.h"
namespace blink {
class ComputedStyle;
class CustomLayoutChild;
class CustomLayoutToken;
class LayoutUnit;
class NGConstraintSpace;
class NGLayoutInputNode;
class SerializedScriptValue;
class ScriptPromiseResolver;
// Contains all the information needed to resolve a promise with a fragment or
// intrinsic-sizes.
class CustomLayoutWorkTask final
: public GarbageCollected<CustomLayoutWorkTask> {
public:
enum TaskType {
kLayoutFragment,
kIntrinsicSizes,
};
// Used when resolving a promise with intrinsic-sizes.
CustomLayoutWorkTask(CustomLayoutChild*,
CustomLayoutToken*,
ScriptPromiseResolver*,
const TaskType type);
// Used when resolving a promise with a fragment.
CustomLayoutWorkTask(CustomLayoutChild*,
CustomLayoutToken*,
ScriptPromiseResolver*,
const CustomLayoutConstraintsOptions*,
scoped_refptr<SerializedScriptValue> constraint_data,
const TaskType type);
~CustomLayoutWorkTask();
void Trace(Visitor*) const;
// Runs this work task.
void Run(const NGConstraintSpace& parent_space,
const ComputedStyle& parent_style,
const LayoutUnit child_percentage_resolution_block_size_for_min_max,
bool* child_depends_on_percentage_block_size = nullptr);
private:
Member<CustomLayoutChild> child_;
Member<CustomLayoutToken> token_;
Member<ScriptPromiseResolver> resolver_;
Member<const CustomLayoutConstraintsOptions> options_;
scoped_refptr<SerializedScriptValue> constraint_data_;
TaskType type_;
void RunLayoutFragmentTask(const NGConstraintSpace& parent_space,
const ComputedStyle& parent_style,
NGLayoutInputNode child);
void RunIntrinsicSizesTask(
const ComputedStyle& parent_style,
const LayoutUnit child_percentage_resolution_block_size_for_min_max,
NGLayoutInputNode child,
bool* child_depends_on_percentage_block_size);
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_CUSTOM_CUSTOM_LAYOUT_WORK_TASK_H_