blob: f87ef85775e03f6271e24e28ee1ef82ebf5b11e5 [file] [log] [blame]
// Copyright 2020 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_CSS_COUNTER_STYLE_MAP_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_COUNTER_STYLE_MAP_H_
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/css/counter_style.h"
#include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
#include "third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h"
namespace blink {
class Document;
class TreeScope;
class CounterStyle;
class RuleSet;
class CORE_EXPORT CounterStyleMap : public GarbageCollected<CounterStyleMap> {
public:
static CounterStyleMap* GetUACounterStyleMap();
static CounterStyleMap* GetUserCounterStyleMap(Document&);
static CounterStyleMap* GetAuthorCounterStyleMap(const TreeScope&);
static CounterStyleMap* CreateUserCounterStyleMap(Document&);
static CounterStyleMap* CreateAuthorCounterStyleMap(TreeScope&);
CounterStyle* FindCounterStyleAcrossScopes(const AtomicString& name) const;
void AddCounterStyles(const RuleSet&);
void SetIsPredefined();
void ResolveReferences(HeapHashSet<Member<CounterStyleMap>>& resolved_maps);
static void ResolveAllReferences(Document&,
const HeapHashSet<Member<TreeScope>>&);
void MarkDirtyCounterStyles(HeapHashSet<Member<CounterStyle>>& visited);
static void MarkAllDirtyCounterStyles(Document&,
const HeapHashSet<Member<TreeScope>>&);
void Dispose();
CounterStyleMap(Document* document, TreeScope* tree_scope);
void Trace(Visitor*) const;
private:
CounterStyleMap* GetAncestorMap() const;
void ResolveExtendsFor(CounterStyle&);
void ResolveFallbackFor(CounterStyle&);
// Null means these are user-agent rules.
Member<Document> owner_document_;
// Null tree scope and non-null document means these are user rules.
Member<TreeScope> tree_scope_;
HeapHashMap<AtomicString, Member<CounterStyle>> counter_styles_;
friend class CounterStyleMapTest;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_COUNTER_STYLE_MAP_H_