source: webkit/trunk/Source/WebCore/css/parser/MediaQueryParser.cpp

Last change on this file was 293484, checked in by Chris Dumez, 3 years ago

Update equalLettersIgnoringASCIICase() / startsWithLettersIgnoringASCIICase() to take in an ASCIILiteral
https://bugs.webkit.org/show_bug.cgi?id=239775

Reviewed by Geoff Garen.

Update equalLettersIgnoringASCIICase() / startsWithLettersIgnoringASCIICase() to take in an ASCIILiteral,
as we are encouraging developers to use _s suffix for string literals.

  • Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:

(TestWebKitAPI::TEST):

  • Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:

(WTR::xmlRoleValueString):

  • Tools/WebKitTestRunner/cocoa/CrashReporterInfo.mm:

(WTR::testPathFromURL):

  • Source/JavaScriptCore/runtime/Options.cpp:

(JSC::parse):

  • Source/WebCore/PAL/pal/text/TextEncodingRegistry.cpp:

(PAL::defaultTextEncodingNameForSystemLanguage):

  • Source/WebDriver/WebDriverService.cpp:

(WebDriver::WebDriverService::matchCapabilities const):

  • Source/WebKit/NetworkProcess/NetworkDataTaskBlob.cpp:

(WebKit::NetworkDataTaskBlob::resume):

  • Source/WebKit/NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::preconnectTo):

  • Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:

(WebKit::NetworkResourceLoader::didReceiveResponse):

  • Source/WebKit/NetworkProcess/cache/NetworkCache.cpp:

(WebKit::NetworkCache::isMediaMIMEType):

  • Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:

(WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):

  • Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp:

(WebKit::NetworkDataTaskCurl::willPerformHTTPRedirection):

  • Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:

(WebKit::NetworkDataTaskSoup::continueHTTPRedirection):

  • Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp:

(WKWebsitePoliciesSetCustomHeaderFields):

  • Source/WebKit/UIProcess/API/Cocoa/_WKCustomHeaderFields.mm:

(-[_WKCustomHeaderFields setFields:]):

  • Source/WebKit/UIProcess/Cocoa/MediaPermissionUtilities.mm:

(WebKit::visibleDomain):

  • Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:

(WebKit::matchesExtensionOrEquivalent):

  • Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm:

(WebKit::desktopClassBrowsingRecommendedForRequest):

  • Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:

(WebKit::IPCTestingAPI::encodeSharedMemory):

  • Source/WTF/wtf/Assertions.cpp:
  • Source/WTF/wtf/DateMath.cpp:

(WTF::parseDateFromNullTerminatedCharacters):

  • Source/WTF/wtf/SortedArrayMap.h:

(WTF::operator==):

  • Source/WTF/wtf/text/AtomString.h:

(WTF::equalLettersIgnoringASCIICase):

  • Source/WTF/wtf/text/StringCommon.h:

(WTF::equalLettersIgnoringASCIICase):
(WTF::equalLettersIgnoringASCIICaseCommon):
(WTF::startsWithLettersIgnoringASCIICaseCommon):
(WTF::equalLettersIgnoringASCIICaseCommonWithoutLength): Deleted.
(WTF::startsWithLettersIgnoringASCIICaseCommonWithoutLength): Deleted.

  • Source/WTF/wtf/text/StringImpl.h:

(WTF::startsWithLettersIgnoringASCIICase):
(WTF::equalLettersIgnoringASCIICase):

  • Source/WTF/wtf/text/StringView.h:

(WTF::equalLettersIgnoringASCIICase):
(WTF::startsWithLettersIgnoringASCIICase):

  • Source/WTF/wtf/text/WTFString.h:

(WTF::equalLettersIgnoringASCIICase):
(WTF::startsWithLettersIgnoringASCIICase):

  • Source/WebCore/Modules/applepay/PaymentCoordinator.cpp:

(WebCore::PaymentCoordinator::validatedPaymentNetwork const):

  • Source/WebCore/Modules/applicationmanifest/ApplicationManifestParser.cpp:

(WebCore::ApplicationManifestParser::parseIcons):

  • Source/WebCore/Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.cpp:

(WebCore::LegacyCDMPrivateClearKey::supportsKeySystem):
(WebCore::LegacyCDMPrivateClearKey::supportsKeySystemAndMimeType):

  • Source/WebCore/Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:

(WebCore::CDMSessionClearKey::update):

  • Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp:

(WebCore::FetchBodyConsumer::packageFormData):

  • Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp:

(WebCore::isValidVideoMIMEType):
(WebCore::isValidAudioMIMEType):

  • Source/WebCore/Modules/mediarecorder/MediaRecorderProvider.cpp:

(WebCore::MediaRecorderProvider::isSupported):

  • Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:

(WebCore::YouTubePluginReplacement::supportsMIMEType):
(WebCore::YouTubePluginReplacement::supportsFileExtension):
(WebCore::isYouTubeURL):
(WebCore::processAndCreateYouTubeURL):
(WebCore::YouTubePluginReplacement::youTubeURLFromAbsoluteURL):

  • Source/WebCore/Modules/webauthn/AuthenticatorCoordinator.cpp:

(WebCore::AuthenticatorCoordinatorInternal::needsAppIdQuirks):

  • Source/WebCore/Modules/websockets/WebSocketHandshake.cpp:

(WebCore::WebSocketHandshake::checkResponseHeaders):

  • Source/WebCore/accessibility/AXObjectCache.cpp:

(WebCore::AXObjectCache::isModalElement const):
(WebCore::AXObjectCache::handleMenuItemSelected):
(WebCore::isNodeAriaVisible):

  • Source/WebCore/accessibility/AccessibilityARIAGrid.cpp:

(WebCore::AccessibilityARIAGrid::isMultiSelectable const):

  • Source/WebCore/accessibility/AccessibilityListBoxOption.cpp:

(WebCore::AccessibilityListBoxOption::isEnabled const):

  • Source/WebCore/accessibility/AccessibilityNodeObject.cpp:

(WebCore::AccessibilityNodeObject::determineAccessibilityRoleFromNode const):
(WebCore::AccessibilityNodeObject::isEnabled const):
(WebCore::AccessibilityNodeObject::isIndeterminate const):
(WebCore::AccessibilityNodeObject::isPressed const):
(WebCore::AccessibilityNodeObject::isChecked const):
(WebCore::AccessibilityNodeObject::isMultiSelectable const):
(WebCore::AccessibilityNodeObject::isRequired const):
(WebCore::AccessibilityNodeObject::elementAttributeValue const):
(WebCore::shouldUseAccessibilityObjectInnerText):
(WebCore::AccessibilityNodeObject::textUnderElement const):

  • Source/WebCore/accessibility/AccessibilityObject.cpp:

(WebCore::AccessibilityObject::autoCompleteValue const):
(WebCore::AccessibilityObject::contentEditableAttributeIsEnabled):
(WebCore::AccessibilityObject::ariaIsMultiline const):
(WebCore::AccessibilityObject::liveRegionStatusIsEnabled):
(WebCore::AccessibilityObject::sortDirection const):
(WebCore::AccessibilityObject::popupValue const):
(WebCore::AccessibilityObject::supportsPressed const):
(WebCore::AccessibilityObject::supportsExpanded const):
(WebCore::AccessibilityObject::isExpanded const):
(WebCore::AccessibilityObject::checkboxOrRadioValue const):
(WebCore::AccessibilityObject::isAXHidden const):
(WebCore::AccessibilityObject::setIsIgnoredFromParentDataForChild):

  • Source/WebCore/accessibility/AccessibilityRenderObject.cpp:

(WebCore::AccessibilityRenderObject::hasPopup const):
(WebCore::AccessibilityRenderObject::supportsDragging const):
(WebCore::AccessibilityRenderObject::defaultObjectInclusion const):
(WebCore::AccessibilityRenderObject::isSelected const):
(WebCore::AccessibilityRenderObject::orientation const):
(WebCore::AccessibilityRenderObject::liveRegionAtomic const):

  • Source/WebCore/accessibility/AccessibilitySlider.cpp:

(WebCore::AccessibilitySlider::orientation const):

  • Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm:

(WebCore::AccessibilityObject::rolePlatformDescription const):

  • Source/WebCore/animation/KeyframeEffect.cpp:

(WebCore::KeyframeEffect::processKeyframes):

  • Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:

(WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):

  • Source/WebCore/css/CSSFontFaceSrcValue.cpp:

(WebCore::CSSFontFaceSrcValue::isSVGFontFaceSrc const):

  • Source/WebCore/css/MediaList.cpp:

(WebCore::reportMediaQueryWarningIfNeeded):

  • Source/WebCore/css/MediaQueryEvaluator.cpp:

(WebCore::MediaQueryEvaluator::mediaTypeMatch const):
(WebCore::MediaQueryEvaluator::mediaTypeMatchSpecific const):
(WebCore::evaluateResolution):

  • Source/WebCore/css/PropertySetCSSStyleDeclaration.cpp:

(WebCore::PropertySetCSSStyleDeclaration::setProperty):

  • Source/WebCore/css/parser/CSSParserFastPaths.cpp:

(WebCore::isUniversalKeyword):

  • Source/WebCore/css/parser/CSSParserImpl.cpp:

(WebCore::consumeStringOrURI):
(WebCore::CSSParserImpl::consumeImportRule):
(WebCore::CSSParserImpl::consumeDeclaration):
(WebCore::CSSParserImpl::consumeKeyframeKeyList):

  • Source/WebCore/css/parser/CSSParserSelector.cpp:

(WebCore::CSSParserSelector::parsePagePseudoSelector):
(WebCore::CSSParserSelector::parsePseudoElementSelector):

  • Source/WebCore/css/parser/CSSParserTokenRange.cpp:

(WebCore::CSSParserTokenRange::consumeBlockCheckingForEditability):

  • Source/WebCore/css/parser/CSSPropertyParser.cpp:

(WebCore::consumeAnimationName):

  • Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:

(WebCore::CSSPropertyParserHelpersWorkerSafe::consumeUnicodeRangeString):

  • Source/WebCore/css/parser/CSSSelectorParser.cpp:

(WebCore::CSSSelectorParser::consumePseudo):
(WebCore::CSSSelectorParser::consumeAttributeFlags):
(WebCore::consumeANPlusB):

  • Source/WebCore/css/parser/CSSSupportsParser.cpp:

(WebCore::CSSSupportsParser::consumeCondition):

  • Source/WebCore/css/parser/CSSTokenizer.cpp:

(WebCore::CSSTokenizer::consumeIdentLikeToken):

  • Source/WebCore/css/parser/MediaQueryParser.cpp:

(WebCore::MediaQueryParser::readMediaNot):
(WebCore::isRestrictorOrLogicalOperator):
(WebCore::MediaQueryParser::readMediaType):
(WebCore::MediaQueryParser::readAnd):
(WebCore::MediaQueryParser::handleBlocks):

  • Source/WebCore/css/parser/SizesCalcParser.cpp:

(WebCore::SizesCalcParser::calcToReversePolishNotation):

  • Source/WebCore/css/typedom/transform/CSSPerspective.cpp:

(WebCore::checkLength):

  • Source/WebCore/dom/DOMImplementation.cpp:

(WebCore::DOMImplementation::createDocument):

  • Source/WebCore/dom/Document.cpp:

(WebCore::Document::determineActiveThemeColorMetaElement):
(WebCore::Document::processColorScheme):
(WebCore::Document::processFormatDetection):
(WebCore::Document::createEvent):
(WebCore::Document::setDesignMode):
(WebCore::Document::parseDNSPrefetchControlHeader):

  • Source/WebCore/dom/Element.cpp:

(WebCore::isStyleAttribute):
(WebCore::Element::isSpellCheckingEnabled const):
(WebCore::Element::canContainRangeEndPoint const):

  • Source/WebCore/dom/InlineStyleSheetOwner.cpp:

(WebCore::isValidCSSContentType):

  • Source/WebCore/dom/ScriptElement.cpp:

(WebCore::ScriptElement::determineScriptType const):
(WebCore::ScriptElement::isScriptForEventSupported const):

  • Source/WebCore/dom/SecurityContext.cpp:

(WebCore::SecurityContext::parseSandboxPolicy):

  • Source/WebCore/dom/ViewportArguments.cpp:

(WebCore::findSizeValue):
(WebCore::findScaleValue):
(WebCore::findBooleanValue):
(WebCore::parseViewportFitValue):
(WebCore::setViewportFeature):

  • Source/WebCore/editing/EditorCommand.cpp:

(WebCore::executeDefaultParagraphSeparator):
(WebCore::executeStyleWithCSS):
(WebCore::executeUseCSS):

  • Source/WebCore/editing/TextIterator.cpp:

(WebCore::isRendererReplacedElement):

  • Source/WebCore/editing/cocoa/DataDetection.mm:

(WebCore::DataDetection::requiresExtendedContext):
(WebCore::removeResultLinksFromAnchor):
(WebCore::searchForLinkRemovingExistingDDLinks):
(WebCore::DataDetection::isDataDetectorElement):

  • Source/WebCore/history/HistoryItem.cpp:

(WebCore::HistoryItem::setFormInfoFromRequest):

  • Source/WebCore/html/Autocapitalize.cpp:

(WebCore::autocapitalizeTypeForAttributeValue):

  • Source/WebCore/html/Autofill.cpp:

(WebCore::AutofillData::createFromHTMLFormControlElement):

  • Source/WebCore/html/HTMLAnchorElement.cpp:

(WebCore::HTMLAnchorElement::draggable const):
(WebCore::HTMLAnchorElement::relList):

  • Source/WebCore/html/HTMLAreaElement.cpp:

(WebCore::HTMLAreaElement::parseAttribute):

  • Source/WebCore/html/HTMLBRElement.cpp:

(WebCore::HTMLBRElement::collectPresentationalHintsForAttribute):

  • Source/WebCore/html/HTMLBodyElement.cpp:

(WebCore::HTMLBodyElement::collectPresentationalHintsForAttribute):

  • Source/WebCore/html/HTMLButtonElement.cpp:

(WebCore::HTMLButtonElement::parseAttribute):

  • Source/WebCore/html/HTMLDivElement.cpp:

(WebCore::HTMLDivElement::collectPresentationalHintsForAttribute):

  • Source/WebCore/html/HTMLElement.cpp:

(WebCore::isLTROrRTLIgnoringCase):
(WebCore::contentEditableType):
(WebCore::HTMLElement::collectPresentationalHintsForAttribute):
(WebCore::toValidDirValue):
(WebCore::HTMLElement::applyAlignmentAttributeToStyle):
(WebCore::HTMLElement::setContentEditable):
(WebCore::HTMLElement::draggable const):
(WebCore::HTMLElement::translate const):
(WebCore::HTMLElement::hasDirectionAuto const):
(WebCore::HTMLElement::directionality const):
(WebCore::HTMLElement::dirAttributeChanged):
(WebCore::parseLegacyColorValue):
(WebCore::HTMLElement::shouldAutocorrect const):

  • Source/WebCore/html/HTMLEmbedElement.cpp:

(WebCore::HTMLEmbedElement::collectPresentationalHintsForAttribute):

  • Source/WebCore/html/HTMLFormControlElement.cpp:

(WebCore::HTMLFormControlElement::shouldAutocorrect const):

  • Source/WebCore/html/HTMLFormElement.cpp:

(WebCore::parseFormRelAttributes):
(WebCore::HTMLFormElement::shouldAutocorrect const):
(WebCore::HTMLFormElement::relList):
(WebCore::HTMLFormElement::shouldAutocomplete const):
(WebCore::HTMLFormElement::autocomplete const):

  • Source/WebCore/html/HTMLFrameElementBase.cpp:

(WebCore::HTMLFrameElementBase::scrollingMode const):

  • Source/WebCore/html/HTMLFrameSetElement.cpp:

(WebCore::HTMLFrameSetElement::parseAttribute):

  • Source/WebCore/html/HTMLHRElement.cpp:

(WebCore::HTMLHRElement::collectPresentationalHintsForAttribute):

  • Source/WebCore/html/HTMLIFrameElement.cpp:

(WebCore::HTMLIFrameElement::parseAttribute):
(WebCore::HTMLIFrameElement::loadingForBindings const):
(WebCore::isFrameLazyLoadable):

  • Source/WebCore/html/HTMLImageElement.cpp:

(WebCore::HTMLImageElement::hasLazyLoadableAttributeValue):
(WebCore::parseCrossoriginState):
(WebCore::HTMLImageElement::decodingMode const):

  • Source/WebCore/html/HTMLInputElement.cpp:

(WebCore::HTMLInputElement::parseAttribute):
(WebCore::HTMLInputElement::mediaCaptureType const):

  • Source/WebCore/html/HTMLLinkElement.cpp:

(WebCore::HTMLLinkElement::as const):
(WebCore::HTMLLinkElement::process):

  • Source/WebCore/html/HTMLMarqueeElement.cpp:

(WebCore::HTMLMarqueeElement::collectPresentationalHintsForAttribute):

  • Source/WebCore/html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::parseAttribute):

  • Source/WebCore/html/HTMLMenuElement.cpp:

(WebCore::HTMLMenuElement::parseAttribute):

  • Source/WebCore/html/HTMLMetaElement.cpp:

(WebCore::HTMLMetaElement::attributeChanged):
(WebCore::HTMLMetaElement::removedFromAncestor):
(WebCore::HTMLMetaElement::process):

  • Source/WebCore/html/HTMLObjectElement.cpp:

(WebCore::mapDataParamToSrc):
(WebCore::HTMLObjectElement::parametersForPlugin):
(WebCore::HTMLObjectElement::containsJavaApplet const):

  • Source/WebCore/html/HTMLParagraphElement.cpp:

(WebCore::HTMLParagraphElement::collectPresentationalHintsForAttribute):

  • Source/WebCore/html/HTMLParamElement.cpp:

(WebCore::HTMLParamElement::isURLParameter):

  • Source/WebCore/html/HTMLTableElement.cpp:

(WebCore::getBordersFromFrameAttributeValue):
(WebCore::HTMLTableElement::collectPresentationalHintsForAttribute):
(WebCore::HTMLTableElement::parseAttribute):

  • Source/WebCore/html/HTMLTablePartElement.cpp:

(WebCore::HTMLTablePartElement::collectPresentationalHintsForAttribute):

  • Source/WebCore/html/HTMLTextAreaElement.cpp:

(WebCore::HTMLTextAreaElement::parseAttribute):

  • Source/WebCore/html/HTMLTextFormControlElement.cpp:

(WebCore::HTMLTextFormControlElement::setRangeText):
(WebCore::HTMLTextFormControlElement::directionForFormData const):

  • Source/WebCore/html/HTMLVideoElement.cpp:

(WebCore::HTMLVideoElement::parseAttribute):

  • Source/WebCore/html/InputType.cpp:

(WebCore::InputType::applyStep):

  • Source/WebCore/html/LinkRelAttribute.cpp:

(WebCore::LinkRelAttribute::LinkRelAttribute):
(WebCore::LinkRelAttribute::isSupported):

  • Source/WebCore/html/MediaElementSession.cpp:

(WebCore::MediaElementSession::wirelessVideoPlaybackDisabled const):

  • Source/WebCore/html/NumberInputType.cpp:

(WebCore::NumberInputType::sizeShouldIncludeDecoration const):

  • Source/WebCore/html/RangeInputType.cpp:

(WebCore::RangeInputType::createStepRange const):
(WebCore::RangeInputType::handleKeydownEvent):

  • Source/WebCore/html/StepRange.cpp:

(WebCore::StepRange::parseStep):

  • Source/WebCore/html/canvas/CanvasStyle.cpp:

(WebCore::isCurrentColorString):

  • Source/WebCore/html/parser/CSSPreloadScanner.cpp:

(WebCore::CSSPreloadScanner::emitRule):

  • Source/WebCore/html/parser/HTMLConstructionSite.cpp:

(WebCore::HTMLConstructionSite::setCompatibilityModeFromDoctype):

  • Source/WebCore/html/parser/HTMLElementStack.cpp:

(WebCore::HTMLElementStack::isHTMLIntegrationPoint):

  • Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:

(WebCore::HTMLMetaCharsetParser::encodingFromMetaAttributes):

  • Source/WebCore/html/parser/HTMLParserIdioms.cpp:

(WebCore::parseCORSSettingsAttribute):

  • Source/WebCore/html/parser/HTMLPreloadScanner.cpp:

(WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):

  • Source/WebCore/html/parser/HTMLTreeBuilder.cpp:

(WebCore::HTMLTreeBuilder::processStartTagForInBody):
(WebCore::HTMLTreeBuilder::processStartTagForInTable):

  • Source/WebCore/html/parser/ParsingUtilities.h:

(WebCore::skipExactlyIgnoringASCIICase):

  • Source/WebCore/html/track/TextTrack.cpp:

(WebCore::TextTrack::setKindKeywordIgnoringASCIICase):

  • Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp:

(WebCore::InspectorNetworkAgent::shouldTreatAsText):

  • Source/WebCore/loader/CrossOriginAccessControl.cpp:

(WebCore::createPotentialAccessControlRequest):

  • Source/WebCore/loader/DocumentLoader.cpp:

(WebCore::DocumentLoader::loadApplicationManifest):

  • Source/WebCore/loader/FetchIdioms.cpp:

(WebCore::shouldBlockResponseDueToMIMEType):

  • Source/WebCore/loader/FormSubmission.cpp:

(WebCore::appendMailtoPostFormDataToURL):
(WebCore::FormSubmission::Attributes::parseEncodingType):
(WebCore::FormSubmission::Attributes::parseMethodType):

  • Source/WebCore/loader/FrameLoader.cpp:

(WebCore::FrameLoader::shouldPerformFragmentNavigation):

  • Source/WebCore/loader/LinkHeader.cpp:

(WebCore::paramterNameFromString):

  • Source/WebCore/loader/LinkLoader.cpp:

(WebCore::LinkLoader::resourceTypeFromAsAttribute):
(WebCore::LinkLoader::preconnectIfNeeded):

  • Source/WebCore/loader/ResourceCryptographicDigest.cpp:

(WebCore::parseHashAlgorithmAdvancingPosition):

  • Source/WebCore/loader/ServerTiming.cpp:

(WebCore::ServerTiming::setParameter):

  • Source/WebCore/loader/TextResourceDecoder.cpp:

(WebCore::TextResourceDecoder::determineContentType):
(WebCore::TextResourceDecoder::setEncoding):

  • Source/WebCore/loader/appcache/ApplicationCache.cpp:

(WebCore::ApplicationCache::requestIsHTTPOrHTTPSGet):

  • Source/WebCore/loader/appcache/ApplicationCacheManifestParser.cpp:

(WebCore::parseApplicationCacheManifest):

  • Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:

(WebCore::ApplicationCacheStorage::shouldStoreResourceAsFlatFile):

  • Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp:

(WebCore::CachedCSSStyleSheet::mimeTypeAllowedByNosniff const):
(WebCore::CachedCSSStyleSheet::canUseSheet const):

  • Source/WebCore/loader/cache/CachedResource.cpp:

(WebCore::shouldCacheSchemeIndefinitely):

  • Source/WebCore/mathml/MathMLElement.cpp:

(WebCore::MathMLElement::collectPresentationalHintsForAttribute):

  • Source/WebCore/mathml/MathMLFractionElement.cpp:

(WebCore::MathMLFractionElement::lineThickness):
(WebCore::MathMLFractionElement::cachedFractionAlignment):

  • Source/WebCore/page/DOMSelection.cpp:

(WebCore::DOMSelection::modify):

  • Source/WebCore/page/EventSource.cpp:

(WebCore::EventSource::responseIsValid const):

  • Source/WebCore/page/FrameView.cpp:

(WebCore::FrameView::scrollToFragmentInternal):

  • Source/WebCore/page/Page.cpp:

(WebCore::Page::useDarkAppearance const):

  • Source/WebCore/page/PageConsoleClient.cpp:

(WebCore::PageConsoleClient::screenshot):

  • Source/WebCore/page/Quirks.cpp:

(WebCore::isYahooMail):
(WebCore::Quirks::needsFormControlToBeMouseFocusable const):
(WebCore::Quirks::needsSeekingSupportDisabled const):
(WebCore::Quirks::needsPerDocumentAutoplayBehavior const):
(WebCore::Quirks::shouldAutoplayWebAudioForArbitraryUserGesture const):
(WebCore::Quirks::shouldTooltipPreventFromProceedingWithClick const):
(WebCore::Quirks::needsMillisecondResolutionForHighResTimeStamp const):
(WebCore::Quirks::shouldStripQuotationMarkInFontFaceSetFamily const):
(WebCore::Quirks::isTouchBarUpdateSupressedForHiddenContentEditable const):
(WebCore::Quirks::isNeverRichlyEditableForTouchBar const):
(WebCore::shouldSuppressAutocorrectionAndAutocaptializationInHiddenEditableAreasForHost):
(WebCore::Quirks::shouldDispatchSyntheticMouseEventsWhenModifyingSelection const):
(WebCore::Quirks::needsYouTubeMouseOutQuirk const):
(WebCore::Quirks::shouldAvoidUsingIOS13ForGmail const):
(WebCore::Quirks::isGoogleMaps const):
(WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):
(WebCore::Quirks::shouldDispatchedSimulatedMouseEventsAssumeDefaultPrevented const):
(WebCore::Quirks::simulatedMouseEventTypeForTarget const):
(WebCore::Quirks::shouldMakeTouchEventNonCancelableForTarget const):
(WebCore::Quirks::shouldPreventPointerMediaQueryFromEvaluatingToCoarse const):
(WebCore::Quirks::shouldPreventDispatchOfTouchEvent const):
(WebCore::Quirks::shouldAvoidResizingWhenInputViewBoundsChange const):
(WebCore::Quirks::shouldDisablePointerEventsQuirk const):
(WebCore::Quirks::needsDeferKeyDownAndKeyPressTimersUntilNextEditingCommand const):
(WebCore::Quirks::needsInputModeNoneImplicitly const):
(WebCore::Quirks::needsGMailOverflowScrollQuirk const):
(WebCore::Quirks::needsYouTubeOverflowScrollQuirk const):
(WebCore::Quirks::needsFullscreenDisplayNoneQuirk const):
(WebCore::Quirks::shouldSilenceWindowResizeEvents const):
(WebCore::Quirks::shouldSilenceMediaQueryListChangeEvents const):
(WebCore::Quirks::shouldAvoidScrollingWhenFocusedContentIsVisible const):
(WebCore::Quirks::shouldUseLegacySelectPopoverDismissalBehaviorInDataActivation const):
(WebCore::Quirks::shouldIgnoreAriaForFastPathContentObservationCheck const):
(WebCore::Quirks::shouldOpenAsAboutBlank const):
(WebCore::Quirks::shouldBypassBackForwardCache const):
(WebCore::Quirks::shouldIgnoreContentObservationForSyntheticClick const):
(WebCore::Quirks::needsVP9FullRangeFlagQuirk const):
(WebCore::Quirks::needsHDRPixelDepthQuirk const):
(WebCore::Quirks::needsBlackFullscreenBackgroundQuirk const):
(WebCore::Quirks::shouldDisableEndFullscreenEventWhenEnteringPictureInPictureFromFullscreenQuirk const):
(WebCore::Quirks::needsToForceUserSelectAndUserDragWhenInstallingImageOverlay const):

  • Source/WebCore/page/SecurityOrigin.cpp:

(WebCore::isFeedWithNestedProtocolInHTTPFamily):
(WebCore::SecurityOrigin::isLocalHostOrLoopbackIPAddress):

  • Source/WebCore/page/SecurityOriginData.cpp:

(WebCore::SecurityOriginData::databaseIdentifier const):

  • Source/WebCore/page/UserContentURLPattern.cpp:

(WebCore::UserContentURLPattern::parse):
(WebCore::UserContentURLPattern::matches const):

  • Source/WebCore/page/WindowFeatures.cpp:

(WebCore::setWindowFeature):
(WebCore::boolFeature):

  • Source/WebCore/page/csp/ContentSecurityPolicy.cpp:

(WebCore::ContentSecurityPolicy::reportUnsupportedDirective const):
(WebCore::ContentSecurityPolicy::reportInvalidSourceExpression const):

  • Source/WebCore/page/csp/ContentSecurityPolicySourceList.cpp:

(WebCore::isSourceListNone):
(WebCore::schemeIsInHttpFamily):
(WebCore::ContentSecurityPolicySourceList::isValidSourceForExtensionMode):
(WebCore::ContentSecurityPolicySourceList::parseSource):
(WebCore::ContentSecurityPolicySourceList::parseNonceSource):

  • Source/WebCore/platform/MIMETypeRegistry.cpp:

(WebCore::MIMETypeRegistry::isSupportedImageVideoOrSVGMIMEType):
(WebCore::MIMETypeRegistry::isSupportedWebAssemblyMIMEType):
(WebCore::MIMETypeRegistry::isSupportedStyleSheetMIMEType):
(WebCore::MIMETypeRegistry::isSupportedFontMIMEType):
(WebCore::MIMETypeRegistry::isTextMediaPlaylistMIMEType):
(WebCore::MIMETypeRegistry::isSupportedJSONMIMEType):
(WebCore::MIMETypeRegistry::isSupportedTextTrackMIMEType):
(WebCore::MIMETypeRegistry::isTextMIMEType):
(WebCore::MIMETypeRegistry::isXMLMIMEType):
(WebCore::MIMETypeRegistry::isXMLEntityMIMEType):
(WebCore::MIMETypeRegistry::isJavaAppletMIMEType):
(WebCore::MIMETypeRegistry::isPostScriptMIMEType):
(WebCore::MIMETypeRegistry::canShowMIMEType):

  • Source/WebCore/platform/PreviewConverter.cpp:

(WebCore::PreviewConverter::supportsMIMEType):

  • Source/WebCore/platform/ReferrerPolicy.cpp:

(WebCore::parseReferrerPolicyToken):

  • Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:

(WebCore::parseLicenseFormat):
(WebCore::CDMFactoryClearKey::supportsKeySystem):
(WebCore::CDMPrivateClearKey::supportsInitData const):
(WebCore::CDMInstanceSessionClearKey::requestLicense):

  • Source/WebCore/platform/graphics/FontCache.cpp:

(WebCore::FontCache::alternateFamilyName):

  • Source/WebCore/platform/graphics/FontDescription.cpp:

(WebCore::computeSpecializedChineseLocale):

  • Source/WebCore/platform/graphics/FontGenericFamilies.cpp:

(WebCore::computeUserPrefersSimplified):

  • Source/WebCore/platform/graphics/MIMETypeCache.cpp:

(WebCore::MIMETypeCache::shouldOverrideExtendedType):

  • Source/WebCore/platform/graphics/MediaPlayer.cpp:

(WebCore::MediaPlayer::supportsType):

  • Source/WebCore/platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:

(WebCore::CDMPrivateMediaSourceAVFObjC::supportsKeySystemAndMimeType):

  • Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:

(WebCore::keySystemIsSupported):

  • Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:

(WebCore::CDMSessionAVContentKeySession::generateKeyRequest):

  • Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:

(WebCore::CDMSessionAVStreamSession::generateKeyRequest):

  • Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

(WebCore::willUseWebMFormatReaderForType):
(WebCore::keySystemIsSupported):
(WebCore::MediaPlayerPrivateAVFoundationObjC::supportsKeySystem):

  • Source/WebCore/platform/graphics/cg/ImageBufferUtilitiesCG.cpp:

(WebCore::utiFromImageBufferMIMEType):

  • Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:

(WebCore::FontCache::similarFont):
(WebCore::isDotPrefixedForbiddenFont):
(WebCore::fontWithFamilySpecialCase):
(WebCore::FontCache::platformAlternateFamilyName):

  • Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp:

(WebCore::matchSystemFontUse):

  • Source/WebCore/platform/graphics/cocoa/SourceBufferParserWebM.cpp:

(WebCore::SourceBufferParserWebM::isContentTypeSupported):

  • Source/WebCore/platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:

(WebCore::SystemFontDatabaseCoreText::monospaceFamily):

  • Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp:

(WebCore::isCommonlyUsedGenericFamily):

  • Source/WebCore/platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:

(WebCore::FontCustomPlatformData::supportsFormat):

  • Source/WebCore/platform/graphics/gstreamer/DMABufVideoSinkGStreamer.cpp:

(webKitDMABufVideoSinkIsEnabled):

  • Source/WebCore/platform/graphics/gstreamer/eme/CDMThunder.cpp:

(WebCore::CDMPrivateThunder::supportsInitData const):

  • Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp:

(WebCore::FontCustomPlatformData::supportsFormat):

  • Source/WebCore/platform/graphics/win/FontCacheWin.cpp:

(WebCore::adjustedGDIFontWeight):
(WebCore::FontCache::createFontPlatformData):
(WebCore::FontCache::platformAlternateFamilyName):

  • Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:

(WebCore::FontCustomPlatformData::supportsFormat):

  • Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.cpp:

(WebCore::FontCustomPlatformData::supportsFormat):

  • Source/WebCore/platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:

(WebCore::VideoSampleBufferCompressor::create):

  • Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:

(WebCore::LibWebRTCProvider::createDecodingConfiguration):
(WebCore::LibWebRTCProvider::createEncodingConfiguration):

  • Source/WebCore/platform/network/BlobResourceHandle.cpp:

(WebCore::BlobResourceHandle::loadResourceSynchronously):
(WebCore::BlobResourceHandle::doStart):

  • Source/WebCore/platform/network/CacheValidation.cpp:

(WebCore::parseCacheControlDirectives):

  • Source/WebCore/platform/network/DataURLDecoder.cpp:

(WebCore::DataURLDecoder::shouldRemoveFragmentIdentifier):
(WebCore::DataURLDecoder::DecodeTask::process):

  • Source/WebCore/platform/network/FormData.h:

(WebCore::FormData::parseEncodingType):

  • Source/WebCore/platform/network/HTTPParsers.cpp:

(WebCore::parseContentTypeOptionsHeader):
(WebCore::parseXFrameOptionsHeader):
(WebCore::parseRange):
(WebCore::isForbiddenHeaderName):
(WebCore::isPriviledgedNoCORSRequestHeaderName):
(WebCore::isForbiddenResponseHeaderName):
(WebCore::isForbiddenMethod):
(WebCore::isCrossOriginSafeRequestHeader):

  • Source/WebCore/platform/network/MIMEHeader.cpp:

(WebCore::MIMEHeader::parseContentTransferEncoding):

  • Source/WebCore/platform/network/ResourceRequestBase.cpp:

(WebCore::shouldUseGet):

  • Source/WebCore/platform/network/ResourceResponseBase.cpp:

(WebCore::ResourceResponseBase::isAttachment const):
(WebCore::ResourceResponseBase::isAttachmentWithFilename const):

  • Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:

(WebCore::ResourceHandleCFURLConnectionDelegate::createResourceRequest):

  • Source/WebCore/platform/network/curl/CookieUtil.cpp:

(WebCore::CookieUtil::parseCookieAttributes):

  • Source/WebCore/platform/network/curl/CurlMultipartHandle.cpp:

(WebCore::CurlMultipartHandle::extractBoundary):

  • Source/WebCore/platform/network/curl/ResourceResponseCurl.cpp:

(WebCore::ResourceResponse::isAppendableHeader):
(WebCore::ResourceResponse::appendHTTPHeaderField):

  • Source/WebCore/platform/network/mac/ResourceHandleMac.mm:

(WebCore::ResourceHandle::willSendRequest):

  • Source/WebCore/platform/sql/SQLiteDatabase.cpp:

(WebCore::SQLiteDatabase::useWALJournalMode):

  • Source/WebCore/platform/sql/SQLiteStatement.cpp:

(WebCore::SQLiteStatement::isColumnDeclaredAsBlob):

  • Source/WebCore/platform/win/PasteboardWin.cpp:

(WebCore::clipboardTypeFromMIMEType):

  • Source/WebCore/plugins/PluginData.cpp:

(WebCore::isBuiltInPDFPlugIn):

  • Source/WebCore/rendering/RenderThemeMac.mm:

(WebCore::iconForAttachment):

  • Source/WebCore/style/StyleBuilderConverter.h:

(WebCore::Style::BuilderConverter::convertTouchCallout):

  • Source/WebCore/svg/SVGAElement.cpp:

(WebCore::SVGAElement::relList):

  • Source/WebCore/svg/SVGTests.cpp:

(WebCore::SVGTests::hasFeatureForLegacyBindings):

  • Source/WebCore/svg/SVGToOTFFontConversion.cpp:

(WebCore::SVGToOTFFontConverter::compareCodepointsLexicographically):
(WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter):

  • Source/WebCore/testing/Internals.cpp:

(WebCore::markerTypeFrom):
(WebCore::markerTypesFrom):
(WebCore::Internals::mediaElementHasCharacteristic):
(WebCore::Internals::setCaptionDisplayMode):
(WebCore::Internals::beginMediaSessionInterruption):
(WebCore::Internals::endMediaSessionInterruption):
(WebCore::mediaTypeFromString):
(WebCore::Internals::setMediaSessionRestrictions):
(WebCore::Internals::setMediaElementRestrictions):
(WebCore::Internals::postRemoteControlCommand):
(WebCore::Internals::setAudioContextRestrictions):
(WebCore::Internals::setMockMediaPlaybackTargetPickerState):
(WebCore::Internals::setPageMuted):
(WebCore::Internals::addPrefetchLoadEventListener):

  • Source/WebCore/testing/LegacyMockCDM.cpp:

(WebCore::LegacyMockCDM::supportsKeySystem):
(WebCore::LegacyMockCDM::supportsKeySystemAndMimeType):
(WebCore::LegacyMockCDM::supportsMIMEType):

  • Source/WebCore/testing/MockCDMFactory.cpp:

(WebCore::MockCDMFactory::supportsKeySystem):
(WebCore::MockCDM::sanitizeSessionId const):
(WebCore::MockCDMInstance::setServerCertificate):

  • Source/WebCore/workers/service/server/SWServer.cpp:

(WebCore::SWServer::canHandleScheme const):

  • Source/WebCore/xml/XMLHttpRequest.cpp:

(WebCore::XMLHttpRequest::createDecoder const):

  • Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:

(WebCore::shouldAllowExternalLoad):

Canonical link: https://commits.webkit.org/250018@main

File size: 13.3 KB
Line 
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Copyright (C) 2016 Apple Inc. All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met:
7//
8// * Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// * Redistributions in binary form must reproduce the above
11// copyright notice, this list of conditions and the following disclaimer
12// in the documentation and/or other materials provided with the
13// distribution.
14// * Neither the name of Google Inc. nor the names of its
15// contributors may be used to endorse or promote products derived from
16// this software without specific prior written permission.
17//
18// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30#include "config.h"
31#include "MediaQueryParser.h"
32
33#include "CSSTokenizer.h"
34#include "MediaList.h"
35#include "MediaQueryParserContext.h"
36#include <wtf/Vector.h>
37
38namespace WebCore {
39
40RefPtr<MediaQuerySet> MediaQueryParser::parseMediaQuerySet(const String& queryString, MediaQueryParserContext context)
41{
42 auto tokenizer = CSSTokenizer::tryCreate(queryString);
43 if (UNLIKELY(!tokenizer))
44 return nullptr;
45 return parseMediaQuerySet(tokenizer->tokenRange(), context);
46}
47
48RefPtr<MediaQuerySet> MediaQueryParser::parseMediaQuerySet(CSSParserTokenRange range, MediaQueryParserContext context)
49{
50 return MediaQueryParser(MediaQuerySetParser, context).parseInternal(range);
51}
52
53RefPtr<MediaQuerySet> MediaQueryParser::parseMediaCondition(CSSParserTokenRange range, MediaQueryParserContext context)
54{
55 return MediaQueryParser(MediaConditionParser, context).parseInternal(range);
56}
57
58RefPtr<MediaQuerySet> MediaQueryParser::parseContainerQuery(CSSParserTokenRange range, MediaQueryParserContext context)
59{
60 if (range.atEnd())
61 return nullptr;
62 if (range.peek().type() != LeftParenthesisToken && range.peek().type() != FunctionToken)
63 return nullptr;
64 return MediaQueryParser(ContainerQueryParser, context).parseInternal(range);
65}
66
67const MediaQueryParser::State MediaQueryParser::ReadRestrictor = &MediaQueryParser::readRestrictor;
68const MediaQueryParser::State MediaQueryParser::ReadMediaNot = &MediaQueryParser::readMediaNot;
69const MediaQueryParser::State MediaQueryParser::ReadContainerQuery = &MediaQueryParser::readContainerQuery;
70const MediaQueryParser::State MediaQueryParser::ReadMediaType = &MediaQueryParser::readMediaType;
71const MediaQueryParser::State MediaQueryParser::ReadAnd = &MediaQueryParser::readAnd;
72const MediaQueryParser::State MediaQueryParser::ReadFeatureStart = &MediaQueryParser::readFeatureStart;
73const MediaQueryParser::State MediaQueryParser::ReadFeature = &MediaQueryParser::readFeature;
74const MediaQueryParser::State MediaQueryParser::ReadFeatureColon = &MediaQueryParser::readFeatureColon;
75const MediaQueryParser::State MediaQueryParser::ReadFeatureValue = &MediaQueryParser::readFeatureValue;
76const MediaQueryParser::State MediaQueryParser::ReadFeatureEnd = &MediaQueryParser::readFeatureEnd;
77const MediaQueryParser::State MediaQueryParser::SkipUntilComma = &MediaQueryParser::skipUntilComma;
78const MediaQueryParser::State MediaQueryParser::SkipUntilBlockEnd = &MediaQueryParser::skipUntilBlockEnd;
79const MediaQueryParser::State MediaQueryParser::Done = &MediaQueryParser::done;
80
81MediaQueryParser::MediaQueryParser(ParserType parserType, MediaQueryParserContext context)
82 : m_parserType(parserType)
83 , m_mediaQueryData(context)
84 , m_querySet(MediaQuerySet::create())
85
86{
87 switch (m_parserType) {
88 case MediaQuerySetParser:
89 m_state = &MediaQueryParser::readRestrictor;
90 break;
91 case MediaConditionParser:
92 m_state = &MediaQueryParser::readMediaNot;
93 break;
94 case ContainerQueryParser:
95 m_state = &MediaQueryParser::readContainerQuery;
96 break;
97 }
98}
99
100MediaQueryParser::~MediaQueryParser() = default;
101
102void MediaQueryParser::setStateAndRestrict(State state, MediaQuery::Restrictor restrictor)
103{
104 m_mediaQueryData.setRestrictor(restrictor);
105 m_state = state;
106}
107
108// State machine member functions start here
109void MediaQueryParser::readRestrictor(CSSParserTokenType type, const CSSParserToken& token, CSSParserTokenRange& range)
110{
111 readMediaType(type, token, range);
112}
113
114void MediaQueryParser::readMediaNot(CSSParserTokenType type, const CSSParserToken& token, CSSParserTokenRange& range)
115{
116 if (type == IdentToken && equalLettersIgnoringASCIICase(token.value(), "not"_s))
117 setStateAndRestrict(ReadFeatureStart, MediaQuery::Not);
118 else
119 readFeatureStart(type, token, range);
120}
121
122void MediaQueryParser::readContainerQuery(CSSParserTokenType type, const CSSParserToken&, CSSParserTokenRange&)
123{
124 if (type == FunctionToken || type == LeftParenthesisToken)
125 m_state = ReadFeature;
126}
127
128static bool isRestrictorOrLogicalOperator(const CSSParserToken& token)
129{
130 // FIXME: it would be more efficient to use lower-case always for tokenValue.
131 return equalLettersIgnoringASCIICase(token.value(), "not"_s)
132 || equalLettersIgnoringASCIICase(token.value(), "and"_s)
133 || equalLettersIgnoringASCIICase(token.value(), "or"_s)
134 || equalLettersIgnoringASCIICase(token.value(), "only"_s);
135}
136
137void MediaQueryParser::readMediaType(CSSParserTokenType type, const CSSParserToken& token, CSSParserTokenRange& range)
138{
139 if (type == LeftParenthesisToken) {
140 if (m_mediaQueryData.restrictor() != MediaQuery::None)
141 m_state = SkipUntilComma;
142 else
143 m_state = ReadFeature;
144 } else if (type == IdentToken) {
145 if (m_state == ReadRestrictor && equalLettersIgnoringASCIICase(token.value(), "not"_s))
146 setStateAndRestrict(ReadMediaType, MediaQuery::Not);
147 else if (m_state == ReadRestrictor && equalLettersIgnoringASCIICase(token.value(), "only"_s))
148 setStateAndRestrict(ReadMediaType, MediaQuery::Only);
149 else if (m_mediaQueryData.restrictor() != MediaQuery::None
150 && isRestrictorOrLogicalOperator(token)) {
151 m_state = SkipUntilComma;
152 } else {
153 m_mediaQueryData.setMediaType(token.value().toString());
154 m_state = ReadAnd;
155 }
156 } else if (type == EOFToken && (!m_querySet->queryVector().size() || m_state != ReadRestrictor))
157 m_state = Done;
158 else {
159 m_state = SkipUntilComma;
160 if (type == CommaToken)
161 skipUntilComma(type, token, range);
162 }
163}
164
165void MediaQueryParser::commitMediaQuery()
166{
167 // FIXME-NEWPARSER: Convoluted and awful, but we can't change the MediaQuerySet yet because of the
168 // old parser.
169 static const NeverDestroyed<String> defaultMediaType { "all"_s };
170 MediaQuery mediaQuery { m_mediaQueryData.restrictor(), m_mediaQueryData.mediaType().value_or(defaultMediaType), WTFMove(m_mediaQueryData.expressions()) };
171 m_mediaQueryData.clear();
172 m_querySet->addMediaQuery(WTFMove(mediaQuery));
173}
174
175void MediaQueryParser::readAnd(CSSParserTokenType type, const CSSParserToken& token, CSSParserTokenRange& /*range*/)
176{
177 if (type == IdentToken && equalLettersIgnoringASCIICase(token.value(), "and"_s)) {
178 m_state = ReadFeatureStart;
179 } else if (type == CommaToken && m_parserType != MediaConditionParser) {
180 commitMediaQuery();
181 m_state = ReadRestrictor;
182 } else if (type == EOFToken)
183 m_state = Done;
184 else
185 m_state = SkipUntilComma;
186}
187
188void MediaQueryParser::readFeatureStart(CSSParserTokenType type, const CSSParserToken& /*token*/, CSSParserTokenRange& /*range*/)
189{
190 if (type == LeftParenthesisToken)
191 m_state = ReadFeature;
192 else
193 m_state = SkipUntilComma;
194}
195
196void MediaQueryParser::readFeature(CSSParserTokenType type, const CSSParserToken& token, CSSParserTokenRange& /*range*/)
197{
198 if (type == IdentToken) {
199 m_mediaQueryData.setMediaFeature(token.value().toString());
200 m_state = ReadFeatureColon;
201 } else
202 m_state = SkipUntilComma;
203}
204
205void MediaQueryParser::readFeatureColon(CSSParserTokenType type, const CSSParserToken& token, CSSParserTokenRange& range)
206{
207 if (type == ColonToken) {
208 while (range.peek().type() == WhitespaceToken)
209 range.consume();
210 if (range.peek().type() == RightParenthesisToken || range.peek().type() == EOFToken)
211 m_state = SkipUntilBlockEnd;
212 else
213 m_state = ReadFeatureValue;
214 } else if (type == RightParenthesisToken || type == EOFToken) {
215 m_mediaQueryData.addExpression(range);
216 readFeatureEnd(type, token, range);
217 } else
218 m_state = SkipUntilBlockEnd;
219}
220
221void MediaQueryParser::readFeatureValue(CSSParserTokenType type, const CSSParserToken& token, CSSParserTokenRange& range)
222{
223 if (type == DimensionToken && token.unitType() == CSSUnitType::CSS_UNKNOWN) {
224 range.consume();
225 m_state = SkipUntilComma;
226 } else {
227 m_mediaQueryData.addExpression(range);
228 m_state = ReadFeatureEnd;
229 }
230}
231
232void MediaQueryParser::readFeatureEnd(CSSParserTokenType type, const CSSParserToken& /*token*/, CSSParserTokenRange& /*range*/)
233{
234 if (type == RightParenthesisToken || type == EOFToken) {
235 if (type != EOFToken && m_mediaQueryData.lastExpressionValid())
236 m_state = ReadAnd;
237 else
238 m_state = SkipUntilComma;
239 } else {
240 m_mediaQueryData.removeLastExpression();
241 m_state = SkipUntilBlockEnd;
242 }
243}
244
245void MediaQueryParser::skipUntilComma(CSSParserTokenType type, const CSSParserToken& /*token*/, CSSParserTokenRange& /*range*/)
246{
247 if ((type == CommaToken && !m_blockWatcher.blockLevel()) || type == EOFToken) {
248 m_state = ReadRestrictor;
249 m_mediaQueryData.clear();
250 MediaQuery query = MediaQuery(MediaQuery::Not, "all"_s, Vector<MediaQueryExpression>());
251 m_querySet->addMediaQuery(WTFMove(query));
252 }
253}
254
255void MediaQueryParser::skipUntilBlockEnd(CSSParserTokenType /*type */, const CSSParserToken& token, CSSParserTokenRange& /*range*/)
256{
257 if (token.getBlockType() == CSSParserToken::BlockEnd && !m_blockWatcher.blockLevel())
258 m_state = SkipUntilComma;
259}
260
261void MediaQueryParser::done(CSSParserTokenType /*type*/, const CSSParserToken& /*token*/, CSSParserTokenRange& /*range*/) { }
262
263void MediaQueryParser::handleBlocks(const CSSParserToken& token)
264{
265 if (token.getBlockType() != CSSParserToken::BlockStart)
266 return;
267 auto shouldSkipBlock = [&] {
268 // FIXME: Nested blocks should be supported.
269 if (m_blockWatcher.blockLevel())
270 return true;
271 if (token.type() == LeftParenthesisToken)
272 return false;
273 if (m_parserType == ContainerQueryParser && token.type() == FunctionToken)
274 return !equalLettersIgnoringASCIICase(token.value(), "size"_s);
275 return true;
276 }();
277 if (shouldSkipBlock)
278 m_state = SkipUntilBlockEnd;
279}
280
281void MediaQueryParser::processToken(const CSSParserToken& token, CSSParserTokenRange& range)
282{
283 CSSParserTokenType type = token.type();
284
285 if (type == WhitespaceToken) {
286 range.consume();
287 return;
288 }
289
290 if (m_state != ReadFeatureValue) {
291 handleBlocks(token);
292 m_blockWatcher.handleToken(token);
293 range.consume();
294 }
295
296 // Call the function that handles current state
297 ((this)->*(m_state))(type, token, range);
298}
299
300// The state machine loop
301RefPtr<MediaQuerySet> MediaQueryParser::parseInternal(CSSParserTokenRange& range)
302{
303
304 while (!range.atEnd())
305 processToken(range.peek(), range);
306
307 // FIXME: Can we get rid of this special case?
308 if (m_parserType == MediaQuerySetParser)
309 processToken(CSSParserToken(EOFToken), range);
310
311 if (m_state != ReadAnd && m_state != ReadRestrictor && m_state != Done && m_state != ReadMediaNot) {
312 MediaQuery query = MediaQuery(MediaQuery::Not, "all"_s, Vector<MediaQueryExpression>());
313 m_querySet->addMediaQuery(WTFMove(query));
314 } else if (m_mediaQueryData.currentMediaQueryChanged())
315 commitMediaQuery();
316
317 m_querySet->shrinkToFit();
318
319 return m_querySet;
320}
321
322MediaQueryParser::MediaQueryData::MediaQueryData(MediaQueryParserContext context)
323 : m_context(context)
324{
325}
326
327void MediaQueryParser::MediaQueryData::clear()
328{
329 m_restrictor = MediaQuery::None;
330 m_mediaType = std::nullopt;
331 m_mediaFeature = String();
332 m_expressions.clear();
333}
334
335void MediaQueryParser::MediaQueryData::addExpression(CSSParserTokenRange& range)
336{
337 m_expressions.append(MediaQueryExpression { m_mediaFeature, range, m_context });
338}
339
340bool MediaQueryParser::MediaQueryData::lastExpressionValid()
341{
342 return m_expressions.last().isValid();
343}
344
345void MediaQueryParser::MediaQueryData::removeLastExpression()
346{
347 m_expressions.removeLast();
348}
349
350} // namespace WebCore
Note: See TracBrowser for help on using the repository browser.