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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 name = nullAtom; | 339 name = nullAtom; |
340 namespacePrefix = nullAtom; | 340 namespacePrefix = nullAtom; |
341 return false; | 341 return false; |
342 } | 342 } |
343 | 343 |
344 return true; | 344 return true; |
345 } | 345 } |
346 | 346 |
347 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeId( | 347 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeId( |
348 CSSParserTokenRange& range) { | 348 CSSParserTokenRange& range) { |
349 ASSERT(range.peek().type() == HashToken); | 349 DCHECK_EQ(range.peek().type(), HashToken); |
350 if (range.peek().getHashTokenType() != HashTokenId) | 350 if (range.peek().getHashTokenType() != HashTokenId) |
351 return nullptr; | 351 return nullptr; |
352 std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create(); | 352 std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create(); |
353 selector->setMatch(CSSSelector::Id); | 353 selector->setMatch(CSSSelector::Id); |
354 AtomicString value = range.consume().value().toAtomicString(); | 354 AtomicString value = range.consume().value().toAtomicString(); |
355 selector->setValue(value, isQuirksModeBehavior(m_context->matchMode())); | 355 selector->setValue(value, isQuirksModeBehavior(m_context->matchMode())); |
356 return selector; | 356 return selector; |
357 } | 357 } |
358 | 358 |
359 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeClass( | 359 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeClass( |
360 CSSParserTokenRange& range) { | 360 CSSParserTokenRange& range) { |
361 ASSERT(range.peek().type() == DelimiterToken); | 361 DCHECK_EQ(range.peek().type(), DelimiterToken); |
362 ASSERT(range.peek().delimiter() == '.'); | 362 DCHECK_EQ(range.peek().delimiter(), '.'); |
363 range.consume(); | 363 range.consume(); |
364 if (range.peek().type() != IdentToken) | 364 if (range.peek().type() != IdentToken) |
365 return nullptr; | 365 return nullptr; |
366 std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create(); | 366 std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create(); |
367 selector->setMatch(CSSSelector::Class); | 367 selector->setMatch(CSSSelector::Class); |
368 AtomicString value = range.consume().value().toAtomicString(); | 368 AtomicString value = range.consume().value().toAtomicString(); |
369 selector->setValue(value, isQuirksModeBehavior(m_context->matchMode())); | 369 selector->setValue(value, isQuirksModeBehavior(m_context->matchMode())); |
370 return selector; | 370 return selector; |
371 } | 371 } |
372 | 372 |
373 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeAttribute( | 373 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeAttribute( |
374 CSSParserTokenRange& range) { | 374 CSSParserTokenRange& range) { |
375 ASSERT(range.peek().type() == LeftBracketToken); | 375 DCHECK_EQ(range.peek().type(), LeftBracketToken); |
376 CSSParserTokenRange block = range.consumeBlock(); | 376 CSSParserTokenRange block = range.consumeBlock(); |
377 block.consumeWhitespace(); | 377 block.consumeWhitespace(); |
378 | 378 |
379 AtomicString namespacePrefix; | 379 AtomicString namespacePrefix; |
380 AtomicString attributeName; | 380 AtomicString attributeName; |
381 if (!consumeName(block, attributeName, namespacePrefix)) | 381 if (!consumeName(block, attributeName, namespacePrefix)) |
382 return nullptr; | 382 return nullptr; |
383 if (attributeName == starAtom) | 383 if (attributeName == starAtom) |
384 return nullptr; | 384 return nullptr; |
385 block.consumeWhitespace(); | 385 block.consumeWhitespace(); |
(...skipping 27 matching lines...) Expand all Loading... |
413 selector->setValue(attributeValue.value().toAtomicString()); | 413 selector->setValue(attributeValue.value().toAtomicString()); |
414 selector->setAttribute(qualifiedName, consumeAttributeFlags(block)); | 414 selector->setAttribute(qualifiedName, consumeAttributeFlags(block)); |
415 | 415 |
416 if (!block.atEnd()) | 416 if (!block.atEnd()) |
417 return nullptr; | 417 return nullptr; |
418 return selector; | 418 return selector; |
419 } | 419 } |
420 | 420 |
421 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumePseudo( | 421 std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumePseudo( |
422 CSSParserTokenRange& range) { | 422 CSSParserTokenRange& range) { |
423 ASSERT(range.peek().type() == ColonToken); | 423 DCHECK_EQ(range.peek().type(), ColonToken); |
424 range.consume(); | 424 range.consume(); |
425 | 425 |
426 int colons = 1; | 426 int colons = 1; |
427 if (range.peek().type() == ColonToken) { | 427 if (range.peek().type() == ColonToken) { |
428 range.consume(); | 428 range.consume(); |
429 colons++; | 429 colons++; |
430 } | 430 } |
431 | 431 |
432 const CSSParserToken& token = range.peek(); | 432 const CSSParserToken& token = range.peek(); |
433 if (token.type() != IdentToken && token.type() != FunctionToken) | 433 if (token.type() != IdentToken && token.type() != FunctionToken) |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 } | 890 } |
891 if (current->relation() == CSSSelector::IndirectAdjacent) | 891 if (current->relation() == CSSSelector::IndirectAdjacent) |
892 m_context->count(UseCounter::CSSSelectorIndirectAdjacent); | 892 m_context->count(UseCounter::CSSSelectorIndirectAdjacent); |
893 if (current->selectorList()) | 893 if (current->selectorList()) |
894 recordUsageAndDeprecations(*current->selectorList()); | 894 recordUsageAndDeprecations(*current->selectorList()); |
895 } | 895 } |
896 } | 896 } |
897 } | 897 } |
898 | 898 |
899 } // namespace blink | 899 } // namespace blink |
OLD | NEW |