diff options
Diffstat (limited to 'Source/WebCore/css/CSSStyleSheet.h')
-rw-r--r-- | Source/WebCore/css/CSSStyleSheet.h | 93 |
1 files changed, 56 insertions, 37 deletions
diff --git a/Source/WebCore/css/CSSStyleSheet.h b/Source/WebCore/css/CSSStyleSheet.h index dca3e13ac..e8b711415 100644 --- a/Source/WebCore/css/CSSStyleSheet.h +++ b/Source/WebCore/css/CSSStyleSheet.h @@ -18,20 +18,20 @@ * Boston, MA 02110-1301, USA. */ -#ifndef CSSStyleSheet_h -#define CSSStyleSheet_h +#pragma once #include "CSSParserMode.h" -#include "CSSRule.h" +#include "ExceptionOr.h" #include "StyleSheet.h" #include <memory> #include <wtf/HashMap.h> #include <wtf/Noncopyable.h> +#include <wtf/TypeCasts.h> #include <wtf/text/AtomicStringHash.h> +#include <wtf/text/TextPosition.h> namespace WebCore { -class CSSCharsetRule; class CSSImportRule; class CSSParser; class CSSRule; @@ -39,54 +39,63 @@ class CSSRuleList; class CSSStyleSheet; class CachedCSSStyleSheet; class Document; +class Element; class MediaQuerySet; -class SecurityOrigin; class StyleRuleKeyframes; class StyleSheetContents; -typedef int ExceptionCode; +namespace Style { +class Scope; +} class CSSStyleSheet final : public StyleSheet { public: - static PassRef<CSSStyleSheet> create(PassRef<StyleSheetContents>, CSSImportRule* ownerRule = 0); - static PassRef<CSSStyleSheet> create(PassRef<StyleSheetContents>, Node* ownerNode); - static PassRef<CSSStyleSheet> createInline(Node&, const URL&, const String& encoding = String()); + static Ref<CSSStyleSheet> create(Ref<StyleSheetContents>&&, CSSImportRule* ownerRule = 0); + static Ref<CSSStyleSheet> create(Ref<StyleSheetContents>&&, Node& ownerNode, const std::optional<bool>& isOriginClean = std::nullopt); + static Ref<CSSStyleSheet> createInline(Ref<StyleSheetContents>&&, Element& owner, const TextPosition& startPosition); virtual ~CSSStyleSheet(); - virtual CSSStyleSheet* parentStyleSheet() const override; - virtual Node* ownerNode() const override { return m_ownerNode; } - virtual MediaList* media() const override; - virtual String href() const override; - virtual String title() const override { return m_title; } - virtual bool disabled() const override { return m_isDisabled; } - virtual void setDisabled(bool) override; + CSSStyleSheet* parentStyleSheet() const final; + Node* ownerNode() const final { return m_ownerNode; } + MediaList* media() const final; + String href() const final; + String title() const final { return m_title; } + bool disabled() const final { return m_isDisabled; } + void setDisabled(bool) final; - PassRefPtr<CSSRuleList> cssRules(); - unsigned insertRule(const String& rule, unsigned index, ExceptionCode&); - void deleteRule(unsigned index, ExceptionCode&); + WEBCORE_EXPORT RefPtr<CSSRuleList> cssRules(); + WEBCORE_EXPORT ExceptionOr<unsigned> insertRule(const String& rule, unsigned index); + ExceptionOr<unsigned> deprecatedInsertRule(const String& rule); + WEBCORE_EXPORT ExceptionOr<void> deleteRule(unsigned index); - // IE Extensions - PassRefPtr<CSSRuleList> rules(); - int addRule(const String& selector, const String& style, int index, ExceptionCode&); - int addRule(const String& selector, const String& style, ExceptionCode&); - void removeRule(unsigned index, ExceptionCode& ec) { deleteRule(index, ec); } + WEBCORE_EXPORT RefPtr<CSSRuleList> rules(); + WEBCORE_EXPORT ExceptionOr<int> addRule(const String& selector, const String& style, std::optional<unsigned> index); + ExceptionOr<void> removeRule(unsigned index) { return deleteRule(index); } // For CSSRuleList. unsigned length() const; CSSRule* item(unsigned index); - virtual void clearOwnerNode() override; - virtual CSSImportRule* ownerRule() const override { return m_ownerRule; } - virtual URL baseURL() const override; - virtual bool isLoading() const override; + void clearOwnerNode() final; + CSSImportRule* ownerRule() const final { return m_ownerRule; } + URL baseURL() const final; + bool isLoading() const final; void clearOwnerRule() { m_ownerRule = 0; } + Document* ownerDocument() const; + CSSStyleSheet& rootStyleSheet(); + const CSSStyleSheet& rootStyleSheet() const; + Style::Scope* styleScope(); + MediaQuerySet* mediaQueries() const { return m_mediaQueries.get(); } - void setMediaQueries(PassRefPtr<MediaQuerySet>); + void setMediaQueries(Ref<MediaQuerySet>&&); void setTitle(const String& title) { m_title = title; } + bool hadRulesMutation() const { return m_mutatedRules; } + void clearHadRulesMutation() { m_mutatedRules = false; } + enum RuleMutationType { OtherMutation, RuleInsertion }; enum WhetherContentsWereClonedForMutation { ContentsWereNotClonedForMutation = 0, ContentsWereClonedForMutation }; @@ -112,33 +121,43 @@ public: void clearChildRuleCSSOMWrappers(); void reattachChildRuleCSSOMWrappers(); - StyleSheetContents& contents() { return m_contents.get(); } + StyleSheetContents& contents() { return m_contents; } + + bool isInline() const { return m_isInlineStylesheet; } + TextPosition startPosition() const { return m_startPosition; } void detachFromDocument() { m_ownerNode = nullptr; } private: - CSSStyleSheet(PassRef<StyleSheetContents>, CSSImportRule* ownerRule); - CSSStyleSheet(PassRef<StyleSheetContents>, Node* ownerNode, bool isInlineStylesheet); + CSSStyleSheet(Ref<StyleSheetContents>&&, CSSImportRule* ownerRule); + CSSStyleSheet(Ref<StyleSheetContents>&&, Node* ownerNode, const TextPosition& startPosition, bool isInlineStylesheet); + CSSStyleSheet(Ref<StyleSheetContents>&&, Node& ownerNode, const TextPosition& startPosition, bool isInlineStylesheet, const std::optional<bool>&); - virtual bool isCSSStyleSheet() const override { return true; } - virtual String type() const override { return ASCIILiteral("text/css"); } + bool isCSSStyleSheet() const final { return true; } + String type() const final { return ASCIILiteral("text/css"); } bool canAccessRules() const; - + Ref<StyleSheetContents> m_contents; bool m_isInlineStylesheet; bool m_isDisabled; + bool m_mutatedRules; + std::optional<bool> m_isOriginClean; String m_title; RefPtr<MediaQuerySet> m_mediaQueries; Node* m_ownerNode; CSSImportRule* m_ownerRule; + TextPosition m_startPosition; + mutable RefPtr<MediaList> m_mediaCSSOMWrapper; mutable Vector<RefPtr<CSSRule>> m_childRuleCSSOMWrappers; mutable std::unique_ptr<CSSRuleList> m_ruleListCSSOMWrapper; }; -} // namespace +} // namespace WebCore -#endif +SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::CSSStyleSheet) + static bool isType(const WebCore::StyleSheet& styleSheet) { return styleSheet.isCSSStyleSheet(); } +SPECIALIZE_TYPE_TRAITS_END() |