PassOwnPtr<CSSParserSelector> CSSSelectorParser::rewriteSpecifiers(PassOwnPtr<CSSParserSelector> specifiers, PassOwnPtr<CSSParserSelector> newSpecifier) { if (newSpecifier->crossesTreeScopes()) { // Unknown pseudo element always goes at the top of selector chain. newSpecifier->appendTagHistory(CSSSelector::ShadowPseudo, specifiers); return newSpecifier; } if (newSpecifier->isContentPseudoElement()) { newSpecifier->appendTagHistory(CSSSelector::SubSelector, specifiers); return newSpecifier; } if (specifiers->crossesTreeScopes()) { // Specifiers for unknown pseudo element go right behind it in the chain. specifiers->insertTagHistory(CSSSelector::SubSelector, newSpecifier, CSSSelector::ShadowPseudo); return specifiers; } if (specifiers->isContentPseudoElement()) { specifiers->insertTagHistory(CSSSelector::SubSelector, newSpecifier, CSSSelector::SubSelector); return specifiers; } specifiers->appendTagHistory(CSSSelector::SubSelector, newSpecifier); return specifiers; }