Bug 1337305 Part 2: Change GetCSSStyleRules to return RuleNodes for Gecko rules, and nothing otherwise (instead of asserting). draft
authorBrad Werth <bwerth@mozilla.com>
Mon, 13 Mar 2017 17:24:38 -0700
changeset 497865 8d55e33a0455582e7ffca81e5652e12b3f3a6985
parent 497864 b0d9d6f48e7c5a47f0d1fe8ce27aa17fd6fdf37b
child 549022 ab026fc53c2b1f52ca902366a6eefc16c32c09d5
push id49046
push userbwerth@mozilla.com
push dateTue, 14 Mar 2017 00:26:57 +0000
bugs1337305
milestone55.0a1
Bug 1337305 Part 2: Change GetCSSStyleRules to return RuleNodes for Gecko rules, and nothing otherwise (instead of asserting). MozReview-Commit-ID: EQWOstveuaU
layout/inspector/inDOMUtils.cpp
--- a/layout/inspector/inDOMUtils.cpp
+++ b/layout/inspector/inDOMUtils.cpp
@@ -237,37 +237,40 @@ inDOMUtils::GetCSSStyleRules(nsIDOMEleme
   RefPtr<nsStyleContext> styleContext =
     GetCleanStyleContextForElement(element, pseudoElt);
   if (!styleContext) {
     // This can fail for elements that are not in the document or
     // if the document they're in doesn't have a presshell.  Bail out.
     return NS_OK;
   }
 
-  nsRuleNode* ruleNode = styleContext->RuleNode();
-
-  AutoTArray<nsRuleNode*, 16> ruleNodes;
-  while (!ruleNode->IsRoot()) {
-    ruleNodes.AppendElement(ruleNode);
-    ruleNode = ruleNode->GetParent();
-  }
+  NonOwningStyleContextSource source = styleContext->StyleSource();
+  if (!source.IsNull() && source.IsGeckoRuleNodeOrNull()) {
+    nsRuleNode* ruleNode = source.AsGeckoRuleNode();
 
-  nsCOMPtr<nsIMutableArray> rules = nsArray::Create();
-  for (nsRuleNode* ruleNode : Reversed(ruleNodes)) {
-    RefPtr<Declaration> decl = do_QueryObject(ruleNode->GetRule());
-    if (decl) {
-      css::Rule* owningRule = decl->GetOwningRule();
-      if (owningRule) {
-        rules->AppendElement(owningRule, /*weak =*/ false);
+    AutoTArray<nsRuleNode*, 16> ruleNodes;
+    while (!ruleNode->IsRoot()) {
+      ruleNodes.AppendElement(ruleNode);
+      ruleNode = ruleNode->GetParent();
+    }
+
+    nsCOMPtr<nsIMutableArray> rules = nsArray::Create();
+    for (nsRuleNode* ruleNode : Reversed(ruleNodes)) {
+      RefPtr<Declaration> decl = do_QueryObject(ruleNode->GetRule());
+      if (decl) {
+        css::Rule* owningRule = decl->GetOwningRule();
+        if (owningRule) {
+          rules->AppendElement(owningRule, /*weak =*/ false);
+        }
       }
     }
+
+    rules.forget(_retval);
   }
 
-  rules.forget(_retval);
-
   return NS_OK;
 }
 
 static already_AddRefed<StyleRule>
 GetRuleFromDOMRule(nsIDOMCSSStyleRule *aRule, ErrorResult& rv)
 {
   nsCOMPtr<nsICSSStyleRuleDOMWrapper> rule = do_QueryInterface(aRule);
   if (!rule) {