Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Side by Side Diff: Source/core/css/parser/CSSSelectorParser.cpp

Issue 778003003: List marker pseudo elements. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "config.h" 5 #include "config.h"
6 #include "core/css/parser/CSSSelectorParser.h" 6 #include "core/css/parser/CSSSelectorParser.h"
7 7
8 #include "core/css/CSSSelectorList.h" 8 #include "core/css/CSSSelectorList.h"
9 #include "core/css/StyleSheetContents.h" 9 #include "core/css/StyleSheetContents.h"
10 #include "core/frame/UseCounter.h" 10 #include "core/frame/UseCounter.h"
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 if (attributeValue.type() != IdentToken && attributeValue.type() != StringTo ken) 253 if (attributeValue.type() != IdentToken && attributeValue.type() != StringTo ken)
254 return nullptr; 254 return nullptr;
255 selector->setValue(attributeValue.value()); 255 selector->setValue(attributeValue.value());
256 selector->setAttribute(qualifiedName, consumeAttributeFlags(block)); 256 selector->setAttribute(qualifiedName, consumeAttributeFlags(block));
257 257
258 if (!block.atEnd()) 258 if (!block.atEnd())
259 return nullptr; 259 return nullptr;
260 return selector.release(); 260 return selector.release();
261 } 261 }
262 262
263 bool CSSSelectorParser::selectorIsAllowedInParsingMode(CSSSelector::PseudoType t ype) const
264 {
265 if (isUASheetBehavior(m_context.mode()))
266 return true;
267 return type != CSSSelector::PseudoMarker;
268 }
269
263 PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTokenRan ge& range) 270 PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTokenRan ge& range)
264 { 271 {
265 ASSERT(range.peek().type() == ColonToken); 272 ASSERT(range.peek().type() == ColonToken);
266 range.consume(); 273 range.consume();
267 274
268 int colons = 1; 275 int colons = 1;
269 if (range.peek().type() == ColonToken) { 276 if (range.peek().type() == ColonToken) {
270 range.consume(); 277 range.consume();
271 colons++; 278 colons++;
272 } 279 }
273 280
274 const CSSParserToken& token = range.peek(); 281 const CSSParserToken& token = range.peek();
275 if (token.type() != IdentToken && token.type() != FunctionToken) 282 if (token.type() != IdentToken && token.type() != FunctionToken)
276 return nullptr; 283 return nullptr;
277 284
278 OwnPtr<CSSParserSelector> selector = CSSParserSelector::create(); 285 OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
279 selector->setMatch(colons == 1 ? CSSSelector::PseudoClass : CSSSelector::Pse udoElement); 286 selector->setMatch(colons == 1 ? CSSSelector::PseudoClass : CSSSelector::Pse udoElement);
280 selector->setValue(AtomicString(String(token.value()).lower())); 287 selector->setValue(AtomicString(String(token.value()).lower()));
281 288
282 if (token.type() == IdentToken) { 289 if (token.type() == IdentToken) {
283 range.consume(); 290 range.consume();
284 if (selector->pseudoType() == CSSSelector::PseudoUnknown) 291 if (selector->pseudoType() == CSSSelector::PseudoUnknown
292 || !selectorIsAllowedInParsingMode(selector->pseudoType())) {
285 return nullptr; 293 return nullptr;
294 }
286 return selector.release(); 295 return selector.release();
287 } 296 }
288 297
289 CSSParserTokenRange block = range.consumeBlock(); 298 CSSParserTokenRange block = range.consumeBlock();
290 block.consumeWhitespace(); 299 block.consumeWhitespace();
291 300
292 if ((colons == 1 301 if ((colons == 1
293 && (token.valueEqualsIgnoringCase("host") 302 && (token.valueEqualsIgnoringCase("host")
294 || token.valueEqualsIgnoringCase("host-context") 303 || token.valueEqualsIgnoringCase("host-context")
295 || token.valueEqualsIgnoringCase("-webkit-any"))) 304 || token.valueEqualsIgnoringCase("-webkit-any")))
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 context.useCounter()->count(feature); 684 context.useCounter()->count(feature);
676 if (current->relation() == CSSSelector::ShadowDeep) 685 if (current->relation() == CSSSelector::ShadowDeep)
677 context.useCounter()->count(UseCounter::CSSDeepCombinator); 686 context.useCounter()->count(UseCounter::CSSDeepCombinator);
678 if (current->selectorList()) 687 if (current->selectorList())
679 recordSelectorStats(context, *current->selectorList()); 688 recordSelectorStats(context, *current->selectorList());
680 } 689 }
681 } 690 }
682 } 691 }
683 692
684 } // namespace blink 693 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698