Index: third_party/WebKit/Source/core/layout/ng/ng_break_token.h |
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_break_token.h b/third_party/WebKit/Source/core/layout/ng/ng_break_token.h |
index 7a1778fbdd19448090df0b0e8091f0b4c041c180..15f0b1e0399a080538559f3e1994f9b871792f81 100644 |
--- a/third_party/WebKit/Source/core/layout/ng/ng_break_token.h |
+++ b/third_party/WebKit/Source/core/layout/ng/ng_break_token.h |
@@ -10,6 +10,27 @@ |
namespace blink { |
+class NGLayoutInputNode; |
+ |
+// A break token is a continuation token for layout. A single layout input node |
+// can have multiple fragments asssociated with it. |
+// |
+// Each fragment has a break token which can be used to determine if a layout |
+// input node has finished producing fragments (aka. is "exhausted" of |
+// fragments), and optionally used to produce the next fragment in the chain. |
+// |
+// See CSS Fragmentation (https://drafts.csswg.org/css-break/) for a detailed |
+// description of different types of breaks which can occur in CSS. |
+// |
+// Each layout algorithm which can fragment, e.g. block-flow can optionally |
+// accept a break token. For example: |
+// |
+// NGLayoutInputNode* node = ...; |
+// NGPhysicalFragment* fragment = node->Layout(space); |
+// DCHECK(!fragment->BreakToken()->IsFinished()); |
+// NGPhysicalFragment* fragment2 = node->Layout(space, fragment->BreakToken()); |
+// |
+// The break token should encapsulate enough information to "resume" the layout. |
class CORE_EXPORT NGBreakToken |
: public GarbageCollectedFinalized<NGBreakToken> { |
public: |
@@ -18,13 +39,24 @@ class CORE_EXPORT NGBreakToken |
enum NGBreakTokenType { kBlockBreakToken, kTextBreakToken }; |
NGBreakTokenType Type() const { return static_cast<NGBreakTokenType>(type_); } |
- DEFINE_INLINE_VIRTUAL_TRACE() {} |
+ // Whether the layout node cannot produce any more fragments. |
+ bool IsFinished() const { return is_finished_; } |
+ |
+ // Returns the node associated with this break token. A break token cannot be |
+ // used with any other node. |
+ NGLayoutInputNode* InputNode() const { return node_; } |
+ |
+ DEFINE_INLINE_VIRTUAL_TRACE() { visitor->trace(node_); } |
protected: |
- NGBreakToken(NGBreakTokenType type) : type_(type) {} |
+ NGBreakToken(NGBreakTokenType type, bool is_finished, NGLayoutInputNode* node) |
+ : type_(type), is_finished_(is_finished), node_(node) {} |
private: |
unsigned type_ : 1; |
+ unsigned is_finished_ : 1; |
+ |
+ Member<NGLayoutInputNode> node_; |
}; |
} // namespace blink |