summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/CSSStyleSheet.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/css/CSSStyleSheet.h')
-rw-r--r--Source/WebCore/css/CSSStyleSheet.h93
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()