// Copyright 2020 The Chromium Authors // 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_CSS_RESOLVER_CASCADE_PRIORITY_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_CASCADE_PRIORITY_H_ #include "base/check_op.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/css/resolver/cascade_origin.h" namespace blink { // The origin and importance criteria are evaluated together [1], hence we // encode both into a single integer which will do the right thing when compared // to another such encoded integer. See CascadeOrigin for more information on // how that works. // // [1] https://www.w3.org/TR/css-cascade-3/#cascade-origin inline uint32_t EncodeOriginImportance(CascadeOrigin origin, bool important) { … } // Tree order bits are flipped for important declarations to reverse the // priority [1]. // // [1] https://drafts.csswg.org/css-scoping/#shadow-cascading inline uint32_t EncodeTreeOrder(uint16_t tree_order, bool important) { … } // Layer order bits are flipped for important declarations to reverse the // priority [1]. // // [1] https://drafts.csswg.org/css-cascade-5/#cascade-layering inline uint64_t EncodeLayerOrder(uint16_t layer_order, bool important) { … } // The CascadePriority class encapsulates a subset of the cascading criteria // described by css-cascade [1], and provides a way to compare priorities // quickly by encoding all the information in a single integer. // // It encompasses, from most significant to least significant: // Origin/importance; tree order, which is a number representing the // shadow-including tree order [2]; inline style, which is a boolean incidating // whether the declaration is in the style attribute [3]; layer order, which is // a number representing the cascade layer order in the origin and tree scope // [4]; position, which contains the index (or indices) required to lookup a // declaration in the underlying structure (e.g. a MatchResult); and finally // generation, which is a monotonically increasing number generated by // StyleCascade for each call to StyleCascade::Apply. // // [1] https://drafts.csswg.org/css-cascade/#cascading // [2] https://drafts.csswg.org/css-scoping/#shadow-cascading // [3] https://drafts.csswg.org/css-cascade/#style-attr // [4] https://drafts.csswg.org/css-cascade-5/#layer-ordering class CORE_EXPORT CascadePriority { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_RESOLVER_CASCADE_PRIORITY_H_