Explorar el Código

LibWeb: Use JS::MarkedVector while parsing CSS keyframe rules

We need to be sure they are marked in case the GC runs while we're
in the CSS parser.
Andreas Kling hace 1 año
padre
commit
9577cd853a

+ 1 - 1
Userland/Libraries/LibWeb/CSS/CSSKeyframesRule.cpp

@@ -10,7 +10,7 @@
 
 namespace Web::CSS {
 
-JS::NonnullGCPtr<CSSKeyframesRule> CSSKeyframesRule::create(JS::Realm& realm, AK::FlyString name, Vector<JS::NonnullGCPtr<CSSKeyframeRule>> keyframes)
+JS::NonnullGCPtr<CSSKeyframesRule> CSSKeyframesRule::create(JS::Realm& realm, FlyString name, JS::MarkedVector<JS::NonnullGCPtr<CSSKeyframeRule>> keyframes)
 {
     return realm.heap().allocate<CSSKeyframesRule>(realm, realm, move(name), move(keyframes));
 }

+ 2 - 2
Userland/Libraries/LibWeb/CSS/CSSKeyframesRule.h

@@ -21,7 +21,7 @@ class CSSKeyframesRule final : public CSSRule {
     WEB_PLATFORM_OBJECT(CSSKeyframesRule, CSSRule);
 
 public:
-    [[nodiscard]] static JS::NonnullGCPtr<CSSKeyframesRule> create(JS::Realm&, FlyString name, Vector<JS::NonnullGCPtr<CSSKeyframeRule>>);
+    [[nodiscard]] static JS::NonnullGCPtr<CSSKeyframesRule> create(JS::Realm&, FlyString name, JS::MarkedVector<JS::NonnullGCPtr<CSSKeyframeRule>>);
 
     virtual ~CSSKeyframesRule() = default;
 
@@ -34,7 +34,7 @@ public:
     void set_name(String const& name) { m_name = name; }
 
 private:
-    CSSKeyframesRule(JS::Realm& realm, FlyString name, Vector<JS::NonnullGCPtr<CSSKeyframeRule>> keyframes)
+    CSSKeyframesRule(JS::Realm& realm, FlyString name, JS::MarkedVector<JS::NonnullGCPtr<CSSKeyframeRule>> keyframes)
         : CSSRule(realm)
         , m_name(move(name))
         , m_keyframes(move(keyframes))

+ 1 - 1
Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

@@ -1505,7 +1505,7 @@ CSSRule* Parser::convert_to_rule(NonnullRefPtr<Rule> rule)
 
             auto child_tokens = TokenStream { rule->block()->values() };
 
-            Vector<JS::NonnullGCPtr<CSSKeyframeRule>> keyframes;
+            JS::MarkedVector<JS::NonnullGCPtr<CSSKeyframeRule>> keyframes(m_context.realm().heap());
             while (child_tokens.has_next_token()) {
                 child_tokens.skip_whitespace();
                 // keyframe-selector = <keyframe-keyword> | <percentage>