CSSRule* ElementRuleCollector::findStyleRule(CSSRuleCollection* cssRules, StyleRule* styleRule) { if (!cssRules) return nullptr; CSSRule* result = 0; for (unsigned i = 0; i < cssRules->length() && !result; ++i) { CSSRule* cssRule = cssRules->item(i); CSSRule::Type cssRuleType = cssRule->type(); if (cssRuleType == CSSRule::kStyleRule) { CSSStyleRule* cssStyleRule = toCSSStyleRule(cssRule); if (cssStyleRule->styleRule() == styleRule) result = cssRule; } else if (cssRuleType == CSSRule::kImportRule) { CSSImportRule* cssImportRule = toCSSImportRule(cssRule); result = findStyleRule(cssImportRule->styleSheet(), styleRule); } else { result = findStyleRule(cssRule->cssRules(), styleRule); } } return result; }
CSSRule* ElementRuleCollector::findStyleRule(CSSRuleCollection* cssRules, StyleRule* styleRule) { if (!cssRules) return 0; CSSRule* result = 0; for (unsigned i = 0; i < cssRules->length() && !result; ++i) { CSSRule* cssRule = cssRules->item(i); CSSRule::Type cssRuleType = cssRule->type(); if (cssRuleType == CSSRule::STYLE_RULE) { CSSStyleRule* cssStyleRule = toCSSStyleRule(cssRule); if (cssStyleRule->styleRule() == styleRule) result = cssRule; } else if (cssRuleType == CSSRule::IMPORT_RULE) { CSSImportRule* cssImportRule = toCSSImportRule(cssRule); result = findStyleRule(cssImportRule->styleSheet(), styleRule); } else { result = findStyleRule(nestedRuleList(cssRule), styleRule); } } return result; }
void ElementRuleCollector::appendCSSOMWrapperForRule(CSSStyleSheet* parentStyleSheet, StyleRule* rule) { // |parentStyleSheet| is 0 if and only if the |rule| is coming from User Agent. In this case, // it is safe to create CSSOM wrappers without parentStyleSheets as they will be used only // by inspector which will not try to edit them. RefPtrWillBeRawPtr<CSSRule> cssRule = nullptr; if (parentStyleSheet) cssRule = findStyleRule(parentStyleSheet, rule); else cssRule = rule->createCSSOMWrapper(); ASSERT(!parentStyleSheet || cssRule); ensureRuleList()->rules().append(cssRule); }