static CSSStyleSheet* findStyleSheet(StyleEngine* styleEngine, StyleRule* rule) { // FIXME: StyleEngine has a bunch of different accessors for StyleSheet lists, is this the only one we need to care about? const Vector<RefPtr<CSSStyleSheet> >& stylesheets = styleEngine->activeAuthorStyleSheets(); for (size_t i = 0; i < stylesheets.size(); ++i) { CSSStyleSheet* sheet = stylesheets[i].get(); for (unsigned j = 0; j < sheet->length(); ++j) { CSSRule* cssRule = sheet->item(j); if (cssRule->type() != CSSRule::STYLE_RULE) continue; CSSStyleRule* cssStyleRule = toCSSStyleRule(cssRule); if (cssStyleRule->styleRule() == rule) return sheet; } } return 0; }
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 { result = findStyleRule(nestedRuleList(cssRule), styleRule); } } return result; }
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; }