Serenity Operating System
at master 63 lines 2.0 kB view raw
1/* 2 * Copyright (c) 2019-2021, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/Function.h> 10#include <LibWeb/CSS/CSSRule.h> 11#include <LibWeb/CSS/CSSRuleList.h> 12#include <LibWeb/CSS/CSSStyleRule.h> 13#include <LibWeb/CSS/StyleSheet.h> 14#include <LibWeb/Loader/Resource.h> 15 16namespace Web::CSS { 17 18class CSSImportRule; 19 20class CSSStyleSheet final 21 : public StyleSheet 22 , public Weakable<CSSStyleSheet> { 23 WEB_PLATFORM_OBJECT(CSSStyleSheet, StyleSheet); 24 25public: 26 static WebIDL::ExceptionOr<JS::NonnullGCPtr<CSSStyleSheet>> create(JS::Realm&, CSSRuleList& rules, MediaList& media, Optional<AK::URL> location); 27 28 virtual ~CSSStyleSheet() override = default; 29 30 void set_owner_css_rule(CSSRule* rule) { m_owner_css_rule = rule; } 31 32 virtual DeprecatedString type() const override { return "text/css"; } 33 34 CSSRuleList const& rules() const { return *m_rules; } 35 CSSRuleList& rules() { return *m_rules; } 36 void set_rules(CSSRuleList& rules) { m_rules = &rules; } 37 38 CSSRuleList* css_rules() { return m_rules; } 39 CSSRuleList const* css_rules() const { return m_rules; } 40 41 WebIDL::ExceptionOr<unsigned> insert_rule(StringView rule, unsigned index); 42 WebIDL::ExceptionOr<void> remove_rule(unsigned index); 43 WebIDL::ExceptionOr<void> delete_rule(unsigned index); 44 45 void for_each_effective_style_rule(Function<void(CSSStyleRule const&)> const& callback) const; 46 // Returns whether the match state of any media queries changed after evaluation. 47 bool evaluate_media_queries(HTML::Window const&); 48 49 void set_style_sheet_list(Badge<StyleSheetList>, StyleSheetList*); 50 51private: 52 CSSStyleSheet(JS::Realm&, CSSRuleList&, MediaList&, Optional<AK::URL> location); 53 54 virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override; 55 virtual void visit_edges(Cell::Visitor&) override; 56 57 CSSRuleList* m_rules { nullptr }; 58 59 JS::GCPtr<StyleSheetList> m_style_sheet_list; 60 CSSRule* m_owner_css_rule { nullptr }; 61}; 62 63}