| Index: third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
|
| index 8fac6031fe0ce2044aa6681ff0f3646af9f0df35..806f0fcfaad8fd267e1a1ef90bb3ff9d7a5d10c8 100644
|
| --- a/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
|
| +++ b/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
|
| @@ -8,6 +8,8 @@
|
| #include "core/css/StyleSheetContents.h"
|
| #include "core/frame/UseCounter.h"
|
| #include "platform/RuntimeEnabledFeatures.h"
|
| +#include "wtf/PtrUtil.h"
|
| +#include <memory>
|
|
|
| namespace blink {
|
|
|
| @@ -104,8 +106,8 @@ CSSSelectorParser::CSSSelectorParser(const CSSParserContext& context, StyleSheet
|
|
|
| CSSSelectorList CSSSelectorParser::consumeComplexSelectorList(CSSParserTokenRange& range)
|
| {
|
| - Vector<OwnPtr<CSSParserSelector>> selectorList;
|
| - OwnPtr<CSSParserSelector> selector = consumeComplexSelector(range);
|
| + Vector<std::unique_ptr<CSSParserSelector>> selectorList;
|
| + std::unique_ptr<CSSParserSelector> selector = consumeComplexSelector(range);
|
| if (!selector)
|
| return CSSSelectorList();
|
| selectorList.append(std::move(selector));
|
| @@ -125,8 +127,8 @@ CSSSelectorList CSSSelectorParser::consumeComplexSelectorList(CSSParserTokenRang
|
|
|
| CSSSelectorList CSSSelectorParser::consumeCompoundSelectorList(CSSParserTokenRange& range)
|
| {
|
| - Vector<OwnPtr<CSSParserSelector>> selectorList;
|
| - OwnPtr<CSSParserSelector> selector = consumeCompoundSelector(range);
|
| + Vector<std::unique_ptr<CSSParserSelector>> selectorList;
|
| + std::unique_ptr<CSSParserSelector> selector = consumeCompoundSelector(range);
|
| range.consumeWhitespace();
|
| if (!selector)
|
| return CSSSelectorList();
|
| @@ -171,9 +173,9 @@ unsigned extractCompoundFlags(const CSSParserSelector& simpleSelector, CSSParser
|
|
|
| } // namespace
|
|
|
| -PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeComplexSelector(CSSParserTokenRange& range)
|
| +std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeComplexSelector(CSSParserTokenRange& range)
|
| {
|
| - OwnPtr<CSSParserSelector> selector = consumeCompoundSelector(range);
|
| + std::unique_ptr<CSSParserSelector> selector = consumeCompoundSelector(range);
|
| if (!selector)
|
| return nullptr;
|
|
|
| @@ -184,7 +186,7 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeComplexSelector(CSSParse
|
| previousCompoundFlags |= extractCompoundFlags(*simple, m_context.mode());
|
|
|
| while (CSSSelector::RelationType combinator = consumeCombinator(range)) {
|
| - OwnPtr<CSSParserSelector> nextSelector = consumeCompoundSelector(range);
|
| + std::unique_ptr<CSSParserSelector> nextSelector = consumeCompoundSelector(range);
|
| if (!nextSelector)
|
| return combinator == CSSSelector::Descendant ? std::move(selector) : nullptr;
|
| if (previousCompoundFlags & HasPseudoElementForRightmostCompound)
|
| @@ -286,9 +288,9 @@ bool isSimpleSelectorValidAfterPseudoElement(const CSSParserSelector& simpleSele
|
|
|
| } // namespace
|
|
|
| -PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSParserTokenRange& range)
|
| +std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSParserTokenRange& range)
|
| {
|
| - OwnPtr<CSSParserSelector> compoundSelector;
|
| + std::unique_ptr<CSSParserSelector> compoundSelector;
|
|
|
| AtomicString namespacePrefix;
|
| AtomicString elementName;
|
| @@ -303,7 +305,7 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSPars
|
| if (m_context.isHTMLDocument())
|
| elementName = elementName.lower();
|
|
|
| - while (OwnPtr<CSSParserSelector> simpleSelector = consumeSimpleSelector(range)) {
|
| + while (std::unique_ptr<CSSParserSelector> simpleSelector = consumeSimpleSelector(range)) {
|
| // TODO(rune@opera.com): crbug.com/578131
|
| // The UASheetMode check is a work-around to allow this selector in mediaControls(New).css:
|
| // video::-webkit-media-text-track-region-container.scrolling
|
| @@ -334,10 +336,10 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSPars
|
| return splitCompoundAtImplicitShadowCrossingCombinator(std::move(compoundSelector));
|
| }
|
|
|
| -PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeSimpleSelector(CSSParserTokenRange& range)
|
| +std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeSimpleSelector(CSSParserTokenRange& range)
|
| {
|
| const CSSParserToken& token = range.peek();
|
| - OwnPtr<CSSParserSelector> selector;
|
| + std::unique_ptr<CSSParserSelector> selector;
|
| if (token.type() == HashToken)
|
| selector = consumeId(range);
|
| else if (token.type() == DelimiterToken && token.delimiter() == '.')
|
| @@ -391,33 +393,33 @@ bool CSSSelectorParser::consumeName(CSSParserTokenRange& range, AtomicString& na
|
| return true;
|
| }
|
|
|
| -PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeId(CSSParserTokenRange& range)
|
| +std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeId(CSSParserTokenRange& range)
|
| {
|
| ASSERT(range.peek().type() == HashToken);
|
| if (range.peek().getHashTokenType() != HashTokenId)
|
| return nullptr;
|
| - OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
|
| + std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create();
|
| selector->setMatch(CSSSelector::Id);
|
| AtomicString value = range.consume().value().toAtomicString();
|
| selector->setValue(value, isQuirksModeBehavior(m_context.matchMode()));
|
| return selector;
|
| }
|
|
|
| -PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeClass(CSSParserTokenRange& range)
|
| +std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeClass(CSSParserTokenRange& range)
|
| {
|
| ASSERT(range.peek().type() == DelimiterToken);
|
| ASSERT(range.peek().delimiter() == '.');
|
| range.consume();
|
| if (range.peek().type() != IdentToken)
|
| return nullptr;
|
| - OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
|
| + std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create();
|
| selector->setMatch(CSSSelector::Class);
|
| AtomicString value = range.consume().value().toAtomicString();
|
| selector->setValue(value, isQuirksModeBehavior(m_context.matchMode()));
|
| return selector;
|
| }
|
|
|
| -PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeAttribute(CSSParserTokenRange& range)
|
| +std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeAttribute(CSSParserTokenRange& range)
|
| {
|
| ASSERT(range.peek().type() == LeftBracketToken);
|
| CSSParserTokenRange block = range.consumeBlock();
|
| @@ -440,7 +442,7 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeAttribute(CSSParserToken
|
| ? QualifiedName(nullAtom, attributeName, nullAtom)
|
| : QualifiedName(namespacePrefix, attributeName, namespaceURI);
|
|
|
| - OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
|
| + std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create();
|
|
|
| if (block.atEnd()) {
|
| selector->setAttribute(qualifiedName, CSSSelector::CaseSensitive);
|
| @@ -461,7 +463,7 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeAttribute(CSSParserToken
|
| return selector;
|
| }
|
|
|
| -PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTokenRange& range)
|
| +std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTokenRange& range)
|
| {
|
| ASSERT(range.peek().type() == ColonToken);
|
| range.consume();
|
| @@ -476,7 +478,7 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTokenRan
|
| if (token.type() != IdentToken && token.type() != FunctionToken)
|
| return nullptr;
|
|
|
| - OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
|
| + std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create();
|
| selector->setMatch(colons == 1 ? CSSSelector::PseudoClass : CSSSelector::PseudoElement);
|
|
|
| String value = token.value().toString();
|
| @@ -506,7 +508,7 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTokenRan
|
| {
|
| DisallowPseudoElementsScope scope(this);
|
|
|
| - OwnPtr<CSSSelectorList> selectorList = adoptPtr(new CSSSelectorList());
|
| + std::unique_ptr<CSSSelectorList> selectorList = wrapUnique(new CSSSelectorList());
|
| *selectorList = consumeCompoundSelectorList(block);
|
| if (!selectorList->isValid() || !block.atEnd())
|
| return nullptr;
|
| @@ -515,11 +517,11 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTokenRan
|
| }
|
| case CSSSelector::PseudoNot:
|
| {
|
| - OwnPtr<CSSParserSelector> innerSelector = consumeCompoundSelector(block);
|
| + std::unique_ptr<CSSParserSelector> innerSelector = consumeCompoundSelector(block);
|
| block.consumeWhitespace();
|
| if (!innerSelector || !innerSelector->isSimple() || !block.atEnd())
|
| return nullptr;
|
| - Vector<OwnPtr<CSSParserSelector>> selectorVector;
|
| + Vector<std::unique_ptr<CSSParserSelector>> selectorVector;
|
| selectorVector.append(std::move(innerSelector));
|
| selector->adoptSelectorVector(selectorVector);
|
| return selector;
|
| @@ -528,11 +530,11 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTokenRan
|
| {
|
| DisallowPseudoElementsScope scope(this);
|
|
|
| - OwnPtr<CSSParserSelector> innerSelector = consumeCompoundSelector(block);
|
| + std::unique_ptr<CSSParserSelector> innerSelector = consumeCompoundSelector(block);
|
| block.consumeWhitespace();
|
| if (!innerSelector || !block.atEnd() || !RuntimeEnabledFeatures::shadowDOMV1Enabled())
|
| return nullptr;
|
| - Vector<OwnPtr<CSSParserSelector>> selectorVector;
|
| + Vector<std::unique_ptr<CSSParserSelector>> selectorVector;
|
| selectorVector.append(std::move(innerSelector));
|
| selector->adoptSelectorVector(selectorVector);
|
| return selector;
|
| @@ -763,13 +765,13 @@ void CSSSelectorParser::prependTypeSelectorIfNeeded(const AtomicString& namespac
|
| compoundSelector->prependTagSelector(tag, determinedPrefix == nullAtom && determinedElementName == starAtom && !explicitForHost);
|
| }
|
|
|
| -PassOwnPtr<CSSParserSelector> CSSSelectorParser::addSimpleSelectorToCompound(PassOwnPtr<CSSParserSelector> compoundSelector, PassOwnPtr<CSSParserSelector> simpleSelector)
|
| +std::unique_ptr<CSSParserSelector> CSSSelectorParser::addSimpleSelectorToCompound(std::unique_ptr<CSSParserSelector> compoundSelector, std::unique_ptr<CSSParserSelector> simpleSelector)
|
| {
|
| compoundSelector->appendTagHistory(CSSSelector::SubSelector, std::move(simpleSelector));
|
| return compoundSelector;
|
| }
|
|
|
| -PassOwnPtr<CSSParserSelector> CSSSelectorParser::splitCompoundAtImplicitShadowCrossingCombinator(PassOwnPtr<CSSParserSelector> compoundSelector)
|
| +std::unique_ptr<CSSParserSelector> CSSSelectorParser::splitCompoundAtImplicitShadowCrossingCombinator(std::unique_ptr<CSSParserSelector> compoundSelector)
|
| {
|
| // The tagHistory is a linked list that stores combinator separated compound selectors
|
| // from right-to-left. Yet, within a single compound selector, stores the simple selectors
|
| @@ -796,7 +798,7 @@ PassOwnPtr<CSSParserSelector> CSSSelectorParser::splitCompoundAtImplicitShadowCr
|
| if (!splitAfter || !splitAfter->tagHistory())
|
| return compoundSelector;
|
|
|
| - OwnPtr<CSSParserSelector> secondCompound = splitAfter->releaseTagHistory();
|
| + std::unique_ptr<CSSParserSelector> secondCompound = splitAfter->releaseTagHistory();
|
| secondCompound->appendTagHistory(secondCompound->pseudoType() == CSSSelector::PseudoSlotted ? CSSSelector::ShadowSlot : CSSSelector::ShadowPseudo, std::move(compoundSelector));
|
| return secondCompound;
|
| }
|
|
|