Index: Source/core/css/CSSSelector.cpp |
diff --git a/Source/core/css/CSSSelector.cpp b/Source/core/css/CSSSelector.cpp |
index 39baba00f3e037e0af2ba92d86761da0daaa4776..dee84bc8b4d44ab890bd02e99652db71a9534799 100644 |
--- a/Source/core/css/CSSSelector.cpp |
+++ b/Source/core/css/CSSSelector.cpp |
@@ -267,174 +267,119 @@ PseudoId CSSSelector::pseudoId(PseudoType type) |
return NOPSEUDO; |
} |
+// Could be made smaller and faster by replacing pointer with an |
+// offset into a string buffer and making the bit fields smaller but |
+// that could not be maintained by hand. |
+struct NameToPseudoStruct { |
+ const char* string; |
+ unsigned type:8; |
+ unsigned requirement:8; |
+}; |
+ |
+const static NameToPseudoStruct pseudoTypeMap[] = { |
+{"active", CSSSelector::PseudoActive, 0}, |
+{"after", CSSSelector::PseudoAfter, 0}, |
+{"-webkit-any(", CSSSelector::PseudoAny, 0}, |
+{"-webkit-any-link", CSSSelector::PseudoAnyLink, 0}, |
+{"-webkit-autofill", CSSSelector::PseudoAutofill, 0}, |
+{"backdrop", CSSSelector::PseudoBackdrop, 0}, |
+{"before", CSSSelector::PseudoBefore, 0}, |
+{"checked", CSSSelector::PseudoChecked, 0}, |
+{"default", CSSSelector::PseudoDefault, 0}, |
+{"disabled", CSSSelector::PseudoDisabled, 0}, |
+{"read-only", CSSSelector::PseudoReadOnly, 0}, |
+{"read-write", CSSSelector::PseudoReadWrite, 0}, |
+{"valid", CSSSelector::PseudoValid, 0}, |
+{"invalid", CSSSelector::PseudoInvalid, 0}, |
+{"-webkit-drag", CSSSelector::PseudoDrag, 0}, |
+{"empty", CSSSelector::PseudoEmpty, 0}, |
+{"enabled", CSSSelector::PseudoEnabled, 0}, |
+{"first-child", CSSSelector::PseudoFirstChild, 0}, |
+{"first-letter", CSSSelector::PseudoFirstLetter, 0}, |
+{"first-line", CSSSelector::PseudoFirstLine, 0}, |
+{"first-of-type", CSSSelector::PseudoFirstOfType, 0}, |
+{"-webkit-full-page-media", CSSSelector::PseudoFullPageMedia, 0}, |
+{"nth-child(", CSSSelector::PseudoNthChild, 0}, |
+{"nth-of-type(", CSSSelector::PseudoNthOfType, 0}, |
+{"nth-last-child(", CSSSelector::PseudoNthLastChild, 0}, |
+{"nth-last-of-type(", CSSSelector::PseudoNthLastOfType, 0}, |
+{"focus", CSSSelector::PseudoFocus, 0}, |
+{"hover", CSSSelector::PseudoHover, 0}, |
+{"indeterminate", CSSSelector::PseudoIndeterminate, 0}, |
+{"last-child", CSSSelector::PseudoLastChild, 0}, |
+{"last-of-type", CSSSelector::PseudoLastOfType, 0}, |
+{"link", CSSSelector::PseudoLink, 0}, |
+{"lang(", CSSSelector::PseudoLang, 0}, |
+{"not(", CSSSelector::PseudoNot, 0}, |
+{"only-child", CSSSelector::PseudoOnlyChild, 0}, |
+{"only-of-type", CSSSelector::PseudoOnlyOfType, 0}, |
+{"optional", CSSSelector::PseudoOptional, 0}, |
+{"required", CSSSelector::PseudoRequired, 0}, |
+{"-webkit-resizer", CSSSelector::PseudoResizer, 0}, |
+{"root", CSSSelector::PseudoRoot, 0}, |
+{"-webkit-scrollbar", CSSSelector::PseudoScrollbar, 0}, |
+{"-webkit-scrollbar-button", CSSSelector::PseudoScrollbarButton, 0}, |
+{"-webkit-scrollbar-corner", CSSSelector::PseudoScrollbarCorner, 0}, |
+{"-webkit-scrollbar-thumb", CSSSelector::PseudoScrollbarThumb, 0}, |
+{"-webkit-scrollbar-track", CSSSelector::PseudoScrollbarTrack, 0}, |
+{"-webkit-scrollbar-track-piece", CSSSelector::PseudoScrollbarTrackPiece, 0}, |
+{"selection", CSSSelector::PseudoSelection, 0}, |
+{"target", CSSSelector::PseudoTarget, 0}, |
+{"visited", CSSSelector::PseudoVisited, 0}, |
+{"window-inactive", CSSSelector::PseudoWindowInactive, 0}, |
+{"decrement", CSSSelector::PseudoDecrement, 0}, |
+{"increment", CSSSelector::PseudoIncrement, 0}, |
+{"start", CSSSelector::PseudoStart, 0}, |
+{"end", CSSSelector::PseudoEnd, 0}, |
+{"horizontal", CSSSelector::PseudoHorizontal, 0}, |
+{"vertical", CSSSelector::PseudoVertical, 0}, |
+{"double-button", CSSSelector::PseudoDoubleButton, 0}, |
+{"single-button", CSSSelector::PseudoSingleButton, 0}, |
+{"no-button", CSSSelector::PseudoNoButton, 0}, |
+{"corner-present", CSSSelector::PseudoCornerPresent, 0}, |
+{"first", CSSSelector::PseudoFirstPage, 0}, |
+{"left", CSSSelector::PseudoLeftPage, 0}, |
+{"right", CSSSelector::PseudoRightPage, 0}, |
+{"-webkit-full-screen", CSSSelector::PseudoFullScreen, 0}, |
+{"-webkit-full-screen-document", CSSSelector::PseudoFullScreenDocument, 0}, |
+{"-webkit-full-screen-ancestor", CSSSelector::PseudoFullScreenAncestor, 0}, |
+{"cue(", CSSSelector::PseudoCue, 0}, |
+{"cue", CSSSelector::PseudoWebKitCustomElement, 0}, |
+{"future", CSSSelector::PseudoFutureCue, 0}, |
+{"past", CSSSelector::PseudoPastCue, 0}, |
+{"-webkit-distributed(", CSSSelector::PseudoDistributed, 0}, |
+{"in-range", CSSSelector::PseudoInRange, 0}, |
+{"out-of-range", CSSSelector::PseudoOutOfRange, 0}, |
+{"scope", CSSSelector::PseudoScope, 0}, |
+{"unresolved", CSSSelector::PseudoUnresolved, 0}, |
+{"host", CSSSelector::PseudoHost, CSSSelector::RequiresShadowDOM}, |
+{"host(", CSSSelector::PseudoHost, CSSSelector::RequiresShadowDOM}, |
+{"ancestor", CSSSelector::PseudoAncestor, CSSSelector::RequiresShadowDOM}, |
+{"ancestor(", CSSSelector::PseudoAncestor, CSSSelector::RequiresShadowDOM}, |
+}; |
+ |
static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap() |
{ |
- DEFINE_STATIC_LOCAL(AtomicString, active, ("active", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, after, ("after", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, any, ("-webkit-any(", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, anyLink, ("-webkit-any-link", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, autofill, ("-webkit-autofill", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, backdrop, ("backdrop", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, before, ("before", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, checked, ("checked", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, defaultString, ("default", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, disabled, ("disabled", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, readOnly, ("read-only", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, readWrite, ("read-write", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, valid, ("valid", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, invalid, ("invalid", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, drag, ("-webkit-drag", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, empty, ("empty", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, enabled, ("enabled", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, firstChild, ("first-child", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, firstLetter, ("first-letter", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, firstLine, ("first-line", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, firstOfType, ("first-of-type", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, fullPageMedia, ("-webkit-full-page-media", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, nthChild, ("nth-child(", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, nthOfType, ("nth-of-type(", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, nthLastChild, ("nth-last-child(", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, nthLastOfType, ("nth-last-of-type(", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, focus, ("focus", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, hover, ("hover", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, indeterminate, ("indeterminate", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, lastChild, ("last-child", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, lastOfType, ("last-of-type", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, link, ("link", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, lang, ("lang(", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, notStr, ("not(", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, onlyChild, ("only-child", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, onlyOfType, ("only-of-type", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, optional, ("optional", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, required, ("required", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, resizer, ("-webkit-resizer", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, root, ("root", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, scrollbar, ("-webkit-scrollbar", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, scrollbarButton, ("-webkit-scrollbar-button", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, scrollbarCorner, ("-webkit-scrollbar-corner", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, scrollbarThumb, ("-webkit-scrollbar-thumb", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, scrollbarTrack, ("-webkit-scrollbar-track", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, scrollbarTrackPiece, ("-webkit-scrollbar-track-piece", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, selection, ("selection", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, target, ("target", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, visited, ("visited", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, windowInactive, ("window-inactive", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, decrement, ("decrement", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, increment, ("increment", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, start, ("start", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, end, ("end", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, horizontal, ("horizontal", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, vertical, ("vertical", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, doubleButton, ("double-button", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, singleButton, ("single-button", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, noButton, ("no-button", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, cornerPresent, ("corner-present", AtomicString::ConstructFromLiteral)); |
- // Paged Media pseudo-classes |
- DEFINE_STATIC_LOCAL(AtomicString, firstPage, ("first", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, leftPage, ("left", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, rightPage, ("right", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, fullScreen, ("-webkit-full-screen", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, fullScreenDocument, ("-webkit-full-screen-document", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, fullScreenAncestor, ("-webkit-full-screen-ancestor", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, cue, ("cue(", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, cueWithoutParen, ("cue", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, futureCue, ("future", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, pastCue, ("past", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, distributed, ("-webkit-distributed(", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, inRange, ("in-range", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, outOfRange, ("out-of-range", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, scope, ("scope", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, unresolved, ("unresolved", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, host, ("host", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, hostWithParams, ("host(", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, ancestor, ("ancestor", AtomicString::ConstructFromLiteral)); |
- DEFINE_STATIC_LOCAL(AtomicString, ancestorWithParams, ("ancestor(", AtomicString::ConstructFromLiteral)); |
- |
static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0; |
if (!nameToPseudoType) { |
nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>; |
- nameToPseudoType->set(active.impl(), CSSSelector::PseudoActive); |
- nameToPseudoType->set(after.impl(), CSSSelector::PseudoAfter); |
- nameToPseudoType->set(anyLink.impl(), CSSSelector::PseudoAnyLink); |
- nameToPseudoType->set(any.impl(), CSSSelector::PseudoAny); |
- nameToPseudoType->set(autofill.impl(), CSSSelector::PseudoAutofill); |
- nameToPseudoType->set(backdrop.impl(), CSSSelector::PseudoBackdrop); |
- nameToPseudoType->set(before.impl(), CSSSelector::PseudoBefore); |
- nameToPseudoType->set(checked.impl(), CSSSelector::PseudoChecked); |
- nameToPseudoType->set(defaultString.impl(), CSSSelector::PseudoDefault); |
- nameToPseudoType->set(disabled.impl(), CSSSelector::PseudoDisabled); |
- nameToPseudoType->set(readOnly.impl(), CSSSelector::PseudoReadOnly); |
- nameToPseudoType->set(readWrite.impl(), CSSSelector::PseudoReadWrite); |
- nameToPseudoType->set(valid.impl(), CSSSelector::PseudoValid); |
- nameToPseudoType->set(invalid.impl(), CSSSelector::PseudoInvalid); |
- nameToPseudoType->set(drag.impl(), CSSSelector::PseudoDrag); |
- nameToPseudoType->set(enabled.impl(), CSSSelector::PseudoEnabled); |
- nameToPseudoType->set(empty.impl(), CSSSelector::PseudoEmpty); |
- nameToPseudoType->set(firstChild.impl(), CSSSelector::PseudoFirstChild); |
- nameToPseudoType->set(fullPageMedia.impl(), CSSSelector::PseudoFullPageMedia); |
- nameToPseudoType->set(lastChild.impl(), CSSSelector::PseudoLastChild); |
- nameToPseudoType->set(lastOfType.impl(), CSSSelector::PseudoLastOfType); |
- nameToPseudoType->set(onlyChild.impl(), CSSSelector::PseudoOnlyChild); |
- nameToPseudoType->set(onlyOfType.impl(), CSSSelector::PseudoOnlyOfType); |
- nameToPseudoType->set(firstLetter.impl(), CSSSelector::PseudoFirstLetter); |
- nameToPseudoType->set(firstLine.impl(), CSSSelector::PseudoFirstLine); |
- nameToPseudoType->set(firstOfType.impl(), CSSSelector::PseudoFirstOfType); |
- nameToPseudoType->set(focus.impl(), CSSSelector::PseudoFocus); |
- nameToPseudoType->set(hover.impl(), CSSSelector::PseudoHover); |
- nameToPseudoType->set(indeterminate.impl(), CSSSelector::PseudoIndeterminate); |
- nameToPseudoType->set(link.impl(), CSSSelector::PseudoLink); |
- nameToPseudoType->set(lang.impl(), CSSSelector::PseudoLang); |
- nameToPseudoType->set(notStr.impl(), CSSSelector::PseudoNot); |
- nameToPseudoType->set(nthChild.impl(), CSSSelector::PseudoNthChild); |
- nameToPseudoType->set(nthOfType.impl(), CSSSelector::PseudoNthOfType); |
- nameToPseudoType->set(nthLastChild.impl(), CSSSelector::PseudoNthLastChild); |
- nameToPseudoType->set(nthLastOfType.impl(), CSSSelector::PseudoNthLastOfType); |
- nameToPseudoType->set(root.impl(), CSSSelector::PseudoRoot); |
- nameToPseudoType->set(windowInactive.impl(), CSSSelector::PseudoWindowInactive); |
- nameToPseudoType->set(decrement.impl(), CSSSelector::PseudoDecrement); |
- nameToPseudoType->set(increment.impl(), CSSSelector::PseudoIncrement); |
- nameToPseudoType->set(start.impl(), CSSSelector::PseudoStart); |
- nameToPseudoType->set(end.impl(), CSSSelector::PseudoEnd); |
- nameToPseudoType->set(horizontal.impl(), CSSSelector::PseudoHorizontal); |
- nameToPseudoType->set(vertical.impl(), CSSSelector::PseudoVertical); |
- nameToPseudoType->set(doubleButton.impl(), CSSSelector::PseudoDoubleButton); |
- nameToPseudoType->set(singleButton.impl(), CSSSelector::PseudoSingleButton); |
- nameToPseudoType->set(noButton.impl(), CSSSelector::PseudoNoButton); |
- nameToPseudoType->set(optional.impl(), CSSSelector::PseudoOptional); |
- nameToPseudoType->set(required.impl(), CSSSelector::PseudoRequired); |
- nameToPseudoType->set(resizer.impl(), CSSSelector::PseudoResizer); |
- nameToPseudoType->set(scope.impl(), CSSSelector::PseudoScope); |
- nameToPseudoType->set(scrollbar.impl(), CSSSelector::PseudoScrollbar); |
- nameToPseudoType->set(scrollbarButton.impl(), CSSSelector::PseudoScrollbarButton); |
- nameToPseudoType->set(scrollbarCorner.impl(), CSSSelector::PseudoScrollbarCorner); |
- nameToPseudoType->set(scrollbarThumb.impl(), CSSSelector::PseudoScrollbarThumb); |
- nameToPseudoType->set(scrollbarTrack.impl(), CSSSelector::PseudoScrollbarTrack); |
- nameToPseudoType->set(scrollbarTrackPiece.impl(), CSSSelector::PseudoScrollbarTrackPiece); |
- nameToPseudoType->set(cornerPresent.impl(), CSSSelector::PseudoCornerPresent); |
- nameToPseudoType->set(selection.impl(), CSSSelector::PseudoSelection); |
- nameToPseudoType->set(target.impl(), CSSSelector::PseudoTarget); |
- nameToPseudoType->set(visited.impl(), CSSSelector::PseudoVisited); |
- nameToPseudoType->set(firstPage.impl(), CSSSelector::PseudoFirstPage); |
- nameToPseudoType->set(leftPage.impl(), CSSSelector::PseudoLeftPage); |
- nameToPseudoType->set(rightPage.impl(), CSSSelector::PseudoRightPage); |
- nameToPseudoType->set(fullScreen.impl(), CSSSelector::PseudoFullScreen); |
- nameToPseudoType->set(fullScreenDocument.impl(), CSSSelector::PseudoFullScreenDocument); |
- nameToPseudoType->set(fullScreenAncestor.impl(), CSSSelector::PseudoFullScreenAncestor); |
- nameToPseudoType->set(cue.impl(), CSSSelector::PseudoCue); |
- nameToPseudoType->set(cueWithoutParen.impl(), CSSSelector::PseudoWebKitCustomElement); |
- nameToPseudoType->set(futureCue.impl(), CSSSelector::PseudoFutureCue); |
- nameToPseudoType->set(pastCue.impl(), CSSSelector::PseudoPastCue); |
- nameToPseudoType->set(distributed.impl(), CSSSelector::PseudoDistributed); |
- nameToPseudoType->set(inRange.impl(), CSSSelector::PseudoInRange); |
- nameToPseudoType->set(outOfRange.impl(), CSSSelector::PseudoOutOfRange); |
- nameToPseudoType->set(unresolved.impl(), CSSSelector::PseudoUnresolved); |
- if (RuntimeEnabledFeatures::shadowDOMEnabled()) { |
- nameToPseudoType->set(host.impl(), CSSSelector::PseudoHost); |
- nameToPseudoType->set(hostWithParams.impl(), CSSSelector::PseudoHost); |
- nameToPseudoType->set(ancestor.impl(), CSSSelector::PseudoAncestor); |
- nameToPseudoType->set(ancestorWithParams.impl(), CSSSelector::PseudoAncestor); |
+ |
+ size_t pseudoCount = WTF_ARRAY_LENGTH(pseudoTypeMap); |
+ for (size_t i = 0; i < pseudoCount; i++) { |
+ if (pseudoTypeMap[i].requirement == CSSSelector::RequiresShadowDOM) { |
+ if (!RuntimeEnabledFeatures::shadowDOMEnabled()) |
+ continue; |
+ } |
+ |
+ const char* str = pseudoTypeMap[i].string; |
+ CSSSelector::PseudoType type; |
+ type = static_cast<CSSSelector::PseudoType>(pseudoTypeMap[i].type); |
+ // This is a one-time leak. |
+ AtomicString* name = new AtomicString(str, strlen(str), AtomicString::ConstructFromLiteral); |
+ nameToPseudoType->set(name->impl(), type); |
} |
} |
+ |
return nameToPseudoType; |
} |