Преглед на файлове

LibWeb: Make CSSKeyframeRule.parentRule actually point to parent rule

Andreas Kling преди 1 година
родител
ревизия
19fa630fa7

+ 2 - 0
Tests/LibWeb/Text/expected/css/keyframes-css-rules.txt

@@ -1,5 +1,7 @@
 fooRule: [object CSSKeyframesRule] ~ @keyframes "foo" { 0% { color: rgb(0, 0, 0); } 100% { color: rgb(255, 255, 255); } }
 fooRule: [object CSSKeyframesRule] ~ @keyframes "foo" { 0% { color: rgb(0, 0, 0); } 100% { color: rgb(255, 255, 255); } }
 fooRule.cssRules: [object CSSRuleList]
 fooRule.cssRules: [object CSSRuleList]
 fooRule.cssRules[0]: [object CSSKeyframeRule] ~ 0% { color: rgb(0, 0, 0); }
 fooRule.cssRules[0]: [object CSSKeyframeRule] ~ 0% { color: rgb(0, 0, 0); }
+fooRule.cssRules[0].parentRule: [object CSSKeyframesRule]
+fooRule.cssRules[0].parentRule: [object CSSKeyframesRule] ~ @keyframes "foo" { 0% { color: rgb(0, 0, 0); } 100% { color: rgb(255, 255, 255); } }
 fooRule.cssRules[0].style.parentRule: [object CSSKeyframeRule] ~ 0% { color: rgb(0, 0, 0); }
 fooRule.cssRules[0].style.parentRule: [object CSSKeyframeRule] ~ 0% { color: rgb(0, 0, 0); }
 fooRule.cssRules[0].style.parentRule === fooRule.cssRules[0]: true
 fooRule.cssRules[0].style.parentRule === fooRule.cssRules[0]: true

+ 2 - 0
Tests/LibWeb/Text/input/css/keyframes-css-rules.html

@@ -11,6 +11,8 @@
         println("fooRule: " + fooRule + " ~ " + fooRule.cssText);
         println("fooRule: " + fooRule + " ~ " + fooRule.cssText);
         println("fooRule.cssRules: " + fooRule.cssRules);
         println("fooRule.cssRules: " + fooRule.cssRules);
         println("fooRule.cssRules[0]: " + fooRule.cssRules[0] + " ~ " + fooRule.cssRules[0].cssText);
         println("fooRule.cssRules[0]: " + fooRule.cssRules[0] + " ~ " + fooRule.cssRules[0].cssText);
+        println("fooRule.cssRules[0].parentRule: " + fooRule.cssRules[0].parentRule);
+        println("fooRule.cssRules[0].parentRule: " + fooRule.cssRules[0].parentRule + " ~ " + fooRule.cssRules[0].parentRule.cssText);
         println("fooRule.cssRules[0].style.parentRule: " + fooRule.cssRules[0].style.parentRule + " ~ " + fooRule.cssRules[0].style.parentRule.cssText);
         println("fooRule.cssRules[0].style.parentRule: " + fooRule.cssRules[0].style.parentRule + " ~ " + fooRule.cssRules[0].style.parentRule.cssText);
         println("fooRule.cssRules[0].style.parentRule === fooRule.cssRules[0]: " + (fooRule.cssRules[0].style.parentRule === fooRule.cssRules[0]));
         println("fooRule.cssRules[0].style.parentRule === fooRule.cssRules[0]: " + (fooRule.cssRules[0].style.parentRule === fooRule.cssRules[0]));
     });
     });

+ 9 - 0
Userland/Libraries/LibWeb/CSS/CSSKeyframesRule.cpp

@@ -19,6 +19,15 @@ JS::NonnullGCPtr<CSSKeyframesRule> CSSKeyframesRule::create(JS::Realm& realm, Fl
     return realm.heap().allocate<CSSKeyframesRule>(realm, realm, move(name), move(css_rules));
     return realm.heap().allocate<CSSKeyframesRule>(realm, realm, move(name), move(css_rules));
 }
 }
 
 
+CSSKeyframesRule::CSSKeyframesRule(JS::Realm& realm, FlyString name, JS::NonnullGCPtr<CSSRuleList> keyframes)
+    : CSSRule(realm)
+    , m_name(move(name))
+    , m_rules(move(keyframes))
+{
+    for (auto& rule : *m_rules)
+        rule->set_parent_rule(this);
+}
+
 void CSSKeyframesRule::visit_edges(Visitor& visitor)
 void CSSKeyframesRule::visit_edges(Visitor& visitor)
 {
 {
     Base::visit_edges(visitor);
     Base::visit_edges(visitor);

+ 1 - 7
Userland/Libraries/LibWeb/CSS/CSSKeyframesRule.h

@@ -37,13 +37,7 @@ public:
     void set_name(String const& name) { m_name = name; }
     void set_name(String const& name) { m_name = name; }
 
 
 private:
 private:
-    CSSKeyframesRule(JS::Realm& realm, FlyString name, JS::NonnullGCPtr<CSSRuleList> keyframes)
-        : CSSRule(realm)
-        , m_name(move(name))
-        , m_rules(move(keyframes))
-    {
-    }
-
+    CSSKeyframesRule(JS::Realm&, FlyString name, JS::NonnullGCPtr<CSSRuleList> keyframes);
     virtual void visit_edges(Visitor&) override;
     virtual void visit_edges(Visitor&) override;
 
 
     virtual void initialize(JS::Realm&) override;
     virtual void initialize(JS::Realm&) override;