OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/css/parser/CSSSelectorParser.h" | 5 #include "core/css/parser/CSSSelectorParser.h" |
6 | 6 |
7 #include "core/css/CSSSelectorList.h" | 7 #include "core/css/CSSSelectorList.h" |
8 #include "core/css/StyleSheetContents.h" | 8 #include "core/css/StyleSheetContents.h" |
9 #include "core/css/parser/CSSParserContext.h" | 9 #include "core/css/parser/CSSParserContext.h" |
10 #include "core/frame/Deprecation.h" | 10 #include "core/frame/Deprecation.h" |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 const CSSParserSelector& simpleSelector, | 205 const CSSParserSelector& simpleSelector, |
206 CSSSelector::PseudoType compoundPseudoElement) { | 206 CSSSelector::PseudoType compoundPseudoElement) { |
207 if (compoundPseudoElement == CSSSelector::PseudoUnknown) | 207 if (compoundPseudoElement == CSSSelector::PseudoUnknown) |
208 return true; | 208 return true; |
209 if (compoundPseudoElement == CSSSelector::PseudoContent) | 209 if (compoundPseudoElement == CSSSelector::PseudoContent) |
210 return simpleSelector.match() != CSSSelector::PseudoElement; | 210 return simpleSelector.match() != CSSSelector::PseudoElement; |
211 if (simpleSelector.match() != CSSSelector::PseudoClass) | 211 if (simpleSelector.match() != CSSSelector::PseudoClass) |
212 return false; | 212 return false; |
213 CSSSelector::PseudoType pseudo = simpleSelector.pseudoType(); | 213 CSSSelector::PseudoType pseudo = simpleSelector.pseudoType(); |
214 if (pseudo == CSSSelector::PseudoNot) { | 214 if (pseudo == CSSSelector::PseudoNot) { |
215 ASSERT(simpleSelector.selectorList()); | 215 DCHECK(simpleSelector.selectorList()); |
216 ASSERT(simpleSelector.selectorList()->first()); | 216 DCHECK(simpleSelector.selectorList()->first()); |
217 ASSERT(!simpleSelector.selectorList()->first()->tagHistory()); | 217 DCHECK(!simpleSelector.selectorList()->first()->tagHistory()); |
218 pseudo = simpleSelector.selectorList()->first()->getPseudoType(); | 218 pseudo = simpleSelector.selectorList()->first()->getPseudoType(); |
219 } | 219 } |
220 return isPseudoClassValidAfterPseudoElement(pseudo, compoundPseudoElement); | 220 return isPseudoClassValidAfterPseudoElement(pseudo, compoundPseudoElement); |
221 } | 221 } |
222 | 222 |
223 } // namespace | 223 } // namespace |
224 | 224 |
225 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector( | 225 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector( |
226 CSSParserTokenRange& range) { | 226 CSSParserTokenRange& range) { |
227 std::unique_ptr<CSSParserSelector> compoundSelector; | 227 std::unique_ptr<CSSParserSelector> compoundSelector; |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 name = nullAtom; | 334 name = nullAtom; |
335 namespacePrefix = nullAtom; | 335 namespacePrefix = nullAtom; |
336 return false; | 336 return false; |
337 } | 337 } |
338 | 338 |
339 return true; | 339 return true; |
340 } | 340 } |
341 | 341 |
342 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeId( | 342 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeId( |
343 CSSParserTokenRange& range) { | 343 CSSParserTokenRange& range) { |
344 ASSERT(range.peek().type() == HashToken); | 344 DCHECK_EQ(range.peek().type(), HashToken); |
345 if (range.peek().getHashTokenType() != HashTokenId) | 345 if (range.peek().getHashTokenType() != HashTokenId) |
346 return nullptr; | 346 return nullptr; |
347 std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create(); | 347 std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create(); |
348 selector->setMatch(CSSSelector::Id); | 348 selector->setMatch(CSSSelector::Id); |
349 AtomicString value = range.consume().value().toAtomicString(); | 349 AtomicString value = range.consume().value().toAtomicString(); |
350 selector->setValue(value, isQuirksModeBehavior(m_context->matchMode())); | 350 selector->setValue(value, isQuirksModeBehavior(m_context->matchMode())); |
351 return selector; | 351 return selector; |
352 } | 352 } |
353 | 353 |
354 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeClass( | 354 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeClass( |
355 CSSParserTokenRange& range) { | 355 CSSParserTokenRange& range) { |
356 ASSERT(range.peek().type() == DelimiterToken); | 356 DCHECK_EQ(range.peek().type(), DelimiterToken); |
357 ASSERT(range.peek().delimiter() == '.'); | 357 DCHECK_EQ(range.peek().delimiter(), '.'); |
358 range.consume(); | 358 range.consume(); |
359 if (range.peek().type() != IdentToken) | 359 if (range.peek().type() != IdentToken) |
360 return nullptr; | 360 return nullptr; |
361 std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create(); | 361 std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create(); |
362 selector->setMatch(CSSSelector::Class); | 362 selector->setMatch(CSSSelector::Class); |
363 AtomicString value = range.consume().value().toAtomicString(); | 363 AtomicString value = range.consume().value().toAtomicString(); |
364 selector->setValue(value, isQuirksModeBehavior(m_context->matchMode())); | 364 selector->setValue(value, isQuirksModeBehavior(m_context->matchMode())); |
365 return selector; | 365 return selector; |
366 } | 366 } |
367 | 367 |
368 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeAttribute( | 368 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeAttribute( |
369 CSSParserTokenRange& range) { | 369 CSSParserTokenRange& range) { |
370 ASSERT(range.peek().type() == LeftBracketToken); | 370 DCHECK_EQ(range.peek().type(), LeftBracketToken); |
371 CSSParserTokenRange block = range.consumeBlock(); | 371 CSSParserTokenRange block = range.consumeBlock(); |
372 block.consumeWhitespace(); | 372 block.consumeWhitespace(); |
373 | 373 |
374 AtomicString namespacePrefix; | 374 AtomicString namespacePrefix; |
375 AtomicString attributeName; | 375 AtomicString attributeName; |
376 if (!consumeName(block, attributeName, namespacePrefix)) | 376 if (!consumeName(block, attributeName, namespacePrefix)) |
377 return nullptr; | 377 return nullptr; |
378 if (attributeName == starAtom) | 378 if (attributeName == starAtom) |
379 return nullptr; | 379 return nullptr; |
380 block.consumeWhitespace(); | 380 block.consumeWhitespace(); |
(...skipping 27 matching lines...) Expand all Loading... |
408 selector->setValue(attributeValue.value().toAtomicString()); | 408 selector->setValue(attributeValue.value().toAtomicString()); |
409 selector->setAttribute(qualifiedName, consumeAttributeFlags(block)); | 409 selector->setAttribute(qualifiedName, consumeAttributeFlags(block)); |
410 | 410 |
411 if (!block.atEnd()) | 411 if (!block.atEnd()) |
412 return nullptr; | 412 return nullptr; |
413 return selector; | 413 return selector; |
414 } | 414 } |
415 | 415 |
416 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumePseudo( | 416 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumePseudo( |
417 CSSParserTokenRange& range) { | 417 CSSParserTokenRange& range) { |
418 ASSERT(range.peek().type() == ColonToken); | 418 DCHECK_EQ(range.peek().type(), ColonToken); |
419 range.consume(); | 419 range.consume(); |
420 | 420 |
421 int colons = 1; | 421 int colons = 1; |
422 if (range.peek().type() == ColonToken) { | 422 if (range.peek().type() == ColonToken) { |
423 range.consume(); | 423 range.consume(); |
424 colons++; | 424 colons++; |
425 } | 425 } |
426 | 426 |
427 const CSSParserToken& token = range.peek(); | 427 const CSSParserToken& token = range.peek(); |
428 if (token.type() != IdentToken && token.type() != FunctionToken) | 428 if (token.type() != IdentToken && token.type() != FunctionToken) |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
885 } | 885 } |
886 if (current->relation() == CSSSelector::IndirectAdjacent) | 886 if (current->relation() == CSSSelector::IndirectAdjacent) |
887 m_context->count(UseCounter::CSSSelectorIndirectAdjacent); | 887 m_context->count(UseCounter::CSSSelectorIndirectAdjacent); |
888 if (current->selectorList()) | 888 if (current->selectorList()) |
889 recordUsageAndDeprecations(*current->selectorList()); | 889 recordUsageAndDeprecations(*current->selectorList()); |
890 } | 890 } |
891 } | 891 } |
892 } | 892 } |
893 | 893 |
894 } // namespace blink | 894 } // namespace blink |
OLD | NEW |