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

Side by Side Diff: Source/core/css/CSSSelector.cpp

Issue 138023007: Renamed :host to :ancestor and made :host to match only shadow host. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 11 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 /* 1 /*
2 * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * 1999 Waldo Bastian (bastian@kde.org) 3 * 1999 Waldo Bastian (bastian@kde.org)
4 * 2001 Andreas Schlapbach (schlpbch@iam.unibe.ch) 4 * 2001 Andreas Schlapbach (schlpbch@iam.unibe.ch)
5 * 2001-2003 Dirk Mueller (mueller@kde.org) 5 * 2001-2003 Dirk Mueller (mueller@kde.org)
6 * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2008 David Smith (catfish.man@gmail.com) 7 * Copyright (C) 2008 David Smith (catfish.man@gmail.com)
8 * Copyright (C) 2010 Google Inc. All rights reserved. 8 * Copyright (C) 2010 Google Inc. All rights reserved.
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 } 89 }
90 90
91 inline unsigned CSSSelector::specificityForOneSelector() const 91 inline unsigned CSSSelector::specificityForOneSelector() const
92 { 92 {
93 // FIXME: Pseudo-elements and pseudo-classes do not have the same specificit y. This function 93 // FIXME: Pseudo-elements and pseudo-classes do not have the same specificit y. This function
94 // isn't quite correct. 94 // isn't quite correct.
95 switch (m_match) { 95 switch (m_match) {
96 case Id: 96 case Id:
97 return 0x10000; 97 return 0x10000;
98 case PseudoClass: 98 case PseudoClass:
99 if (pseudoType() == PseudoHost) 99 if (pseudoType() == PseudoHost || pseudoType() == PseudoAncestor)
100 return 0; 100 return 0;
101 // fall through. 101 // fall through.
102 case Exact: 102 case Exact:
103 case Class: 103 case Class:
104 case Set: 104 case Set:
105 case List: 105 case List:
106 case Hyphen: 106 case Hyphen:
107 case PseudoElement: 107 case PseudoElement:
108 case Contain: 108 case Contain:
109 case Begin: 109 case Begin:
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 case PseudoUserAgentCustomElement: 244 case PseudoUserAgentCustomElement:
245 case PseudoWebKitCustomElement: 245 case PseudoWebKitCustomElement:
246 case PseudoCue: 246 case PseudoCue:
247 case PseudoFutureCue: 247 case PseudoFutureCue:
248 case PseudoPastCue: 248 case PseudoPastCue:
249 case PseudoSeamlessDocument: 249 case PseudoSeamlessDocument:
250 case PseudoDistributed: 250 case PseudoDistributed:
251 case PseudoUnresolved: 251 case PseudoUnresolved:
252 case PseudoContent: 252 case PseudoContent:
253 case PseudoHost: 253 case PseudoHost:
254 case PseudoAncestor:
254 case PseudoFullScreen: 255 case PseudoFullScreen:
255 case PseudoFullScreenDocument: 256 case PseudoFullScreenDocument:
256 case PseudoFullScreenAncestor: 257 case PseudoFullScreenAncestor:
257 return NOPSEUDO; 258 return NOPSEUDO;
258 case PseudoNotParsed: 259 case PseudoNotParsed:
259 ASSERT_NOT_REACHED(); 260 ASSERT_NOT_REACHED();
260 return NOPSEUDO; 261 return NOPSEUDO;
261 } 262 }
262 263
263 ASSERT_NOT_REACHED(); 264 ASSERT_NOT_REACHED();
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 DEFINE_STATIC_LOCAL(AtomicString, pastCue, ("past", AtomicString::ConstructF romLiteral)); 340 DEFINE_STATIC_LOCAL(AtomicString, pastCue, ("past", AtomicString::ConstructF romLiteral));
340 DEFINE_STATIC_LOCAL(AtomicString, seamlessDocument, ("-webkit-seamless-docum ent", AtomicString::ConstructFromLiteral)); 341 DEFINE_STATIC_LOCAL(AtomicString, seamlessDocument, ("-webkit-seamless-docum ent", AtomicString::ConstructFromLiteral));
341 DEFINE_STATIC_LOCAL(AtomicString, distributed, ("-webkit-distributed(", Atom icString::ConstructFromLiteral)); 342 DEFINE_STATIC_LOCAL(AtomicString, distributed, ("-webkit-distributed(", Atom icString::ConstructFromLiteral));
342 DEFINE_STATIC_LOCAL(AtomicString, inRange, ("in-range", AtomicString::Constr uctFromLiteral)); 343 DEFINE_STATIC_LOCAL(AtomicString, inRange, ("in-range", AtomicString::Constr uctFromLiteral));
343 DEFINE_STATIC_LOCAL(AtomicString, outOfRange, ("out-of-range", AtomicString: :ConstructFromLiteral)); 344 DEFINE_STATIC_LOCAL(AtomicString, outOfRange, ("out-of-range", AtomicString: :ConstructFromLiteral));
344 DEFINE_STATIC_LOCAL(AtomicString, scope, ("scope", AtomicString::ConstructFr omLiteral)); 345 DEFINE_STATIC_LOCAL(AtomicString, scope, ("scope", AtomicString::ConstructFr omLiteral));
345 DEFINE_STATIC_LOCAL(AtomicString, unresolved, ("unresolved", AtomicString::C onstructFromLiteral)); 346 DEFINE_STATIC_LOCAL(AtomicString, unresolved, ("unresolved", AtomicString::C onstructFromLiteral));
346 DEFINE_STATIC_LOCAL(AtomicString, content, ("content", AtomicString::Constru ctFromLiteral)); 347 DEFINE_STATIC_LOCAL(AtomicString, content, ("content", AtomicString::Constru ctFromLiteral));
347 DEFINE_STATIC_LOCAL(AtomicString, host, ("host", AtomicString::ConstructFrom Literal)); 348 DEFINE_STATIC_LOCAL(AtomicString, host, ("host", AtomicString::ConstructFrom Literal));
348 DEFINE_STATIC_LOCAL(AtomicString, hostWithParams, ("host(", AtomicString::Co nstructFromLiteral)); 349 DEFINE_STATIC_LOCAL(AtomicString, hostWithParams, ("host(", AtomicString::Co nstructFromLiteral));
350 DEFINE_STATIC_LOCAL(AtomicString, ancestor, ("ancestor", AtomicString::Const ructFromLiteral));
351 DEFINE_STATIC_LOCAL(AtomicString, ancestorWithParams, ("ancestor(", AtomicSt ring::ConstructFromLiteral));
349 352
350 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0; 353 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0;
351 if (!nameToPseudoType) { 354 if (!nameToPseudoType) {
352 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>; 355 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>;
353 nameToPseudoType->set(active.impl(), CSSSelector::PseudoActive); 356 nameToPseudoType->set(active.impl(), CSSSelector::PseudoActive);
354 nameToPseudoType->set(after.impl(), CSSSelector::PseudoAfter); 357 nameToPseudoType->set(after.impl(), CSSSelector::PseudoAfter);
355 nameToPseudoType->set(anyLink.impl(), CSSSelector::PseudoAnyLink); 358 nameToPseudoType->set(anyLink.impl(), CSSSelector::PseudoAnyLink);
356 nameToPseudoType->set(any.impl(), CSSSelector::PseudoAny); 359 nameToPseudoType->set(any.impl(), CSSSelector::PseudoAny);
357 nameToPseudoType->set(autofill.impl(), CSSSelector::PseudoAutofill); 360 nameToPseudoType->set(autofill.impl(), CSSSelector::PseudoAutofill);
358 nameToPseudoType->set(backdrop.impl(), CSSSelector::PseudoBackdrop); 361 nameToPseudoType->set(backdrop.impl(), CSSSelector::PseudoBackdrop);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 nameToPseudoType->set(cueWithoutParen.impl(), CSSSelector::PseudoWebKitC ustomElement); 424 nameToPseudoType->set(cueWithoutParen.impl(), CSSSelector::PseudoWebKitC ustomElement);
422 nameToPseudoType->set(futureCue.impl(), CSSSelector::PseudoFutureCue); 425 nameToPseudoType->set(futureCue.impl(), CSSSelector::PseudoFutureCue);
423 nameToPseudoType->set(pastCue.impl(), CSSSelector::PseudoPastCue); 426 nameToPseudoType->set(pastCue.impl(), CSSSelector::PseudoPastCue);
424 nameToPseudoType->set(seamlessDocument.impl(), CSSSelector::PseudoSeamle ssDocument); 427 nameToPseudoType->set(seamlessDocument.impl(), CSSSelector::PseudoSeamle ssDocument);
425 nameToPseudoType->set(distributed.impl(), CSSSelector::PseudoDistributed ); 428 nameToPseudoType->set(distributed.impl(), CSSSelector::PseudoDistributed );
426 nameToPseudoType->set(inRange.impl(), CSSSelector::PseudoInRange); 429 nameToPseudoType->set(inRange.impl(), CSSSelector::PseudoInRange);
427 nameToPseudoType->set(outOfRange.impl(), CSSSelector::PseudoOutOfRange); 430 nameToPseudoType->set(outOfRange.impl(), CSSSelector::PseudoOutOfRange);
428 if (RuntimeEnabledFeatures::shadowDOMEnabled()) { 431 if (RuntimeEnabledFeatures::shadowDOMEnabled()) {
429 nameToPseudoType->set(host.impl(), CSSSelector::PseudoHost); 432 nameToPseudoType->set(host.impl(), CSSSelector::PseudoHost);
430 nameToPseudoType->set(hostWithParams.impl(), CSSSelector::PseudoHost ); 433 nameToPseudoType->set(hostWithParams.impl(), CSSSelector::PseudoHost );
434 nameToPseudoType->set(ancestor.impl(), CSSSelector::PseudoAncestor);
435 nameToPseudoType->set(ancestorWithParams.impl(), CSSSelector::Pseudo Ancestor);
431 nameToPseudoType->set(content.impl(), CSSSelector::PseudoContent); 436 nameToPseudoType->set(content.impl(), CSSSelector::PseudoContent);
432 } 437 }
433 if (RuntimeEnabledFeatures::customElementsEnabled()) 438 if (RuntimeEnabledFeatures::customElementsEnabled())
434 nameToPseudoType->set(unresolved.impl(), CSSSelector::PseudoUnresolv ed); 439 nameToPseudoType->set(unresolved.impl(), CSSSelector::PseudoUnresolv ed);
435 } 440 }
436 return nameToPseudoType; 441 return nameToPseudoType;
437 } 442 }
438 443
439 CSSSelector::PseudoType CSSSelector::parsePseudoType(const AtomicString& name) 444 CSSSelector::PseudoType CSSSelector::parsePseudoType(const AtomicString& name)
440 { 445 {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 case PseudoNotParsed: 546 case PseudoNotParsed:
542 case PseudoFullScreen: 547 case PseudoFullScreen:
543 case PseudoFullScreenDocument: 548 case PseudoFullScreenDocument:
544 case PseudoFullScreenAncestor: 549 case PseudoFullScreenAncestor:
545 case PseudoSeamlessDocument: 550 case PseudoSeamlessDocument:
546 case PseudoInRange: 551 case PseudoInRange:
547 case PseudoOutOfRange: 552 case PseudoOutOfRange:
548 case PseudoFutureCue: 553 case PseudoFutureCue:
549 case PseudoPastCue: 554 case PseudoPastCue:
550 case PseudoHost: 555 case PseudoHost:
556 case PseudoAncestor:
551 case PseudoUnresolved: 557 case PseudoUnresolved:
552 break; 558 break;
553 case PseudoFirstPage: 559 case PseudoFirstPage:
554 case PseudoLeftPage: 560 case PseudoLeftPage:
555 case PseudoRightPage: 561 case PseudoRightPage:
556 isPagePseudoClass = true; 562 isPagePseudoClass = true;
557 break; 563 break;
558 } 564 }
559 565
560 bool matchPagePseudoClass = (m_match == PagePseudoClass); 566 bool matchPagePseudoClass = (m_match == PagePseudoClass);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 case PseudoAny: { 646 case PseudoAny: {
641 const CSSSelector* firstSubSelector = cs->selectorList()->first( ); 647 const CSSSelector* firstSubSelector = cs->selectorList()->first( );
642 for (const CSSSelector* subSelector = firstSubSelector; subSelec tor; subSelector = CSSSelectorList::next(subSelector)) { 648 for (const CSSSelector* subSelector = firstSubSelector; subSelec tor; subSelector = CSSSelectorList::next(subSelector)) {
643 if (subSelector != firstSubSelector) 649 if (subSelector != firstSubSelector)
644 str.append(','); 650 str.append(',');
645 str.append(subSelector->selectorText()); 651 str.append(subSelector->selectorText());
646 } 652 }
647 str.append(')'); 653 str.append(')');
648 break; 654 break;
649 } 655 }
650 case PseudoHost: { 656 case PseudoHost:
657 case PseudoAncestor: {
651 if (cs->selectorList()) { 658 if (cs->selectorList()) {
652 const CSSSelector* firstSubSelector = cs->selectorList()->fi rst(); 659 const CSSSelector* firstSubSelector = cs->selectorList()->fi rst();
653 for (const CSSSelector* subSelector = firstSubSelector; subS elector; subSelector = CSSSelectorList::next(subSelector)) { 660 for (const CSSSelector* subSelector = firstSubSelector; subS elector; subSelector = CSSSelectorList::next(subSelector)) {
654 if (subSelector != firstSubSelector) 661 if (subSelector != firstSubSelector)
655 str.append(','); 662 str.append(',');
656 str.append(subSelector->selectorText()); 663 str.append(subSelector->selectorText());
657 } 664 }
658 str.append(')'); 665 str.append(')');
659 } 666 }
660 break; 667 break;
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 case CSSSelector::PseudoNthChild: 799 case CSSSelector::PseudoNthChild:
793 case CSSSelector::PseudoNthLastChild: 800 case CSSSelector::PseudoNthLastChild:
794 case CSSSelector::PseudoNthOfType: 801 case CSSSelector::PseudoNthOfType:
795 case CSSSelector::PseudoNthLastOfType: 802 case CSSSelector::PseudoNthLastOfType:
796 case CSSSelector::PseudoFirstChild: 803 case CSSSelector::PseudoFirstChild:
797 case CSSSelector::PseudoLastChild: 804 case CSSSelector::PseudoLastChild:
798 case CSSSelector::PseudoFirstOfType: 805 case CSSSelector::PseudoFirstOfType:
799 case CSSSelector::PseudoLastOfType: 806 case CSSSelector::PseudoLastOfType:
800 case CSSSelector::PseudoOnlyOfType: 807 case CSSSelector::PseudoOnlyOfType:
801 case CSSSelector::PseudoHost: 808 case CSSSelector::PseudoHost:
809 case CSSSelector::PseudoAncestor:
802 return true; 810 return true;
803 default: 811 default:
804 return false; 812 return false;
805 } 813 }
806 } 814 }
807 815
808 bool CSSSelector::isCompound() const 816 bool CSSSelector::isCompound() const
809 { 817 {
810 if (!validateSubSelector(this)) 818 if (!validateSubSelector(this))
811 return false; 819 return false;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 return false; 916 return false;
909 return (count - m_b) % m_a == 0; 917 return (count - m_b) % m_a == 0;
910 } else { 918 } else {
911 if (count > m_b) 919 if (count > m_b)
912 return false; 920 return false;
913 return (m_b - count) % (-m_a) == 0; 921 return (m_b - count) % (-m_a) == 0;
914 } 922 }
915 } 923 }
916 924
917 } // namespace WebCore 925 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698