Skip to content

Commit

Permalink
Adopt more smart pointers under WebCore/css/query
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=267966

Reviewed by Darin Adler.

* Source/WebCore/css/query/ContainerQueryFeatures.cpp:
* Source/WebCore/css/query/GenericMediaQueryEvaluator.cpp:
(WebCore::MQ::evaluateLengthComparison):
(WebCore::MQ::evaluateNumberComparison):
(WebCore::MQ::evaluateIntegerComparison):
(WebCore::MQ::evaluateResolutionComparison):
(WebCore::MQ::evaluateRatioComparison):
(WebCore::MQ::evaluateBooleanFeature):
* Source/WebCore/css/query/GenericMediaQueryParser.cpp:
(WebCore::MQ::GenericMediaQueryParserBase::consumeBooleanOrPlainFeature):
(WebCore::MQ::GenericMediaQueryParserBase::consumeRangeFeature):
(WebCore::MQ::consumeRatioWithSlash):
(WebCore::MQ::GenericMediaQueryParserBase::consumeValue):
(WebCore::MQ::GenericMediaQueryParserBase::validateFeatureAgainstSchema):
* Source/WebCore/css/query/GenericMediaQueryTypes.h:
* Source/WebCore/css/query/MediaQueryEvaluator.cpp:
(WebCore::MQ::MediaQueryEvaluator::MediaQueryEvaluator):
(WebCore::MQ::MediaQueryEvaluator::evaluate const):
* Source/WebCore/css/query/MediaQueryEvaluator.h:
* Source/WebCore/css/query/MediaQueryFeatures.cpp:
(WebCore::MQ::Features::deviceScaleFactor):
(WebCore::MQ::Features::anyHover):
(WebCore::MQ::Features::anyPointer):
(WebCore::MQ::Features::aspectRatio):
(WebCore::MQ::Features::color):
(WebCore::MQ::Features::colorGamut):
(WebCore::MQ::Features::deviceAspectRatio):
(WebCore::MQ::Features::deviceHeight):
(WebCore::MQ::Features::deviceWidth):
(WebCore::MQ::Features::dynamicRange):
(WebCore::MQ::Features::height):
(WebCore::MQ::Features::hover):
(WebCore::MQ::Features::invertedColors):
(WebCore::MQ::Features::monochrome):
(WebCore::MQ::Features::orientation):
(WebCore::MQ::Features::pointer):
(WebCore::MQ::Features::prefersContrast):
(WebCore::MQ::Features::prefersDarkInterface):
(WebCore::MQ::Features::prefersReducedMotion):
(WebCore::MQ::Features::scripting):
(WebCore::MQ::Features::transform3d):
(WebCore::MQ::Features::update):
(WebCore::MQ::Features::videoPlayableInline):
(WebCore::MQ::Features::width):
(WebCore::MQ::Features::displayMode):
(WebCore::MQ::Features::overflowBlock):
(WebCore::MQ::Features::prefersColorScheme):
* Source/WebCore/page/Frame.cpp:
(WebCore::Frame::protectedVirtualView const):
* Source/WebCore/page/Frame.h:

Canonical link: https://commits.webkit.org/273447@main
  • Loading branch information
cdumez committed Jan 24, 2024
1 parent f009f9f commit 1c3b20f
Show file tree
Hide file tree
Showing 9 changed files with 86 additions and 82 deletions.
2 changes: 1 addition & 1 deletion Source/WebCore/css/query/ContainerQueryFeatures.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ struct SizeFeatureSchema : public FeatureSchema {
// or the query container does not support container size queries on the relevant axes, then the result of
// evaluating the size feature is unknown."
// https://drafts.csswg.org/css-contain-3/#size-container
CheckedPtr renderer = dynamicDowncast<RenderBox>(context.renderer);
CheckedPtr renderer = dynamicDowncast<RenderBox>(context.renderer.get());
if (!renderer)
return MQ::EvaluationResult::Unknown;

Expand Down
14 changes: 7 additions & 7 deletions Source/WebCore/css/query/GenericMediaQueryEvaluator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ static EvaluationResult evaluateLengthComparison(LayoutUnit size, const std::opt
if (!comparison)
return EvaluationResult::True;

auto expressionSize = computeLength(comparison->value.get(), conversionData);
auto expressionSize = computeLength(RefPtr { comparison->value }.get(), conversionData);
if (!expressionSize)
return EvaluationResult::Unknown;

Expand All @@ -88,7 +88,7 @@ static EvaluationResult evaluateNumberComparison(double number, const std::optio
if (!comparison)
return EvaluationResult::True;

auto expressionNumber = dynamicDowncast<CSSPrimitiveValue>(comparison->value.get())->doubleValue();
auto expressionNumber = Ref { downcast<CSSPrimitiveValue>(*comparison->value) }->doubleValue();

auto left = side == Side::Left ? expressionNumber : number;
auto right = side == Side::Left ? number : expressionNumber;
Expand All @@ -101,7 +101,7 @@ static EvaluationResult evaluateIntegerComparison(int number, const std::optiona
if (!comparison)
return EvaluationResult::True;

auto expressionNumber = dynamicDowncast<CSSPrimitiveValue>(comparison->value.get())->intValue();
auto expressionNumber = Ref { downcast<CSSPrimitiveValue>(*comparison->value) }->intValue();

auto left = side == Side::Left ? expressionNumber : number;
auto right = side == Side::Left ? number : expressionNumber;
Expand All @@ -114,7 +114,7 @@ static EvaluationResult evaluateResolutionComparison(float resolution, const std
if (!comparison)
return EvaluationResult::True;

auto expressionResolution = dynamicDowncast<CSSPrimitiveValue>(comparison->value.get())->floatValue(CSSUnitType::CSS_DPPX);
auto expressionResolution = Ref { downcast<CSSPrimitiveValue>(*comparison->value) }->floatValue(CSSUnitType::CSS_DPPX);

auto left = side == Side::Left ? expressionResolution : resolution;
auto right = side == Side::Left ? resolution : expressionResolution;
Expand All @@ -138,7 +138,7 @@ static EvaluationResult evaluateRatioComparison(FloatSize size, const std::optio
if (!comparison)
return EvaluationResult::True;

auto* ratioValue = dynamicDowncast<CSSAspectRatioValue>(comparison->value.get());
RefPtr ratioValue = dynamicDowncast<CSSAspectRatioValue>(comparison->value);
if (!ratioValue)
return EvaluationResult::Unknown;

Expand Down Expand Up @@ -170,8 +170,8 @@ EvaluationResult evaluateBooleanFeature(const Feature& feature, bool currentValu
if (!feature.rightComparison)
return toEvaluationResult(currentValue);

auto& value = downcast<CSSPrimitiveValue>(*feature.rightComparison->value);
auto expectedValue = value.intValue();
Ref value = downcast<CSSPrimitiveValue>(*feature.rightComparison->value);
auto expectedValue = value->intValue();

if (expectedValue && expectedValue != 1)
return EvaluationResult::Unknown;
Expand Down
24 changes: 12 additions & 12 deletions Source/WebCore/css/query/GenericMediaQueryParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ std::optional<Feature> GenericMediaQueryParserBase::consumeBooleanOrPlainFeature
if (range.atEnd())
return { };

auto value = consumeValue(range);
RefPtr value = consumeValue(range);
if (!value)
return { };

Expand Down Expand Up @@ -135,7 +135,7 @@ std::optional<Feature> GenericMediaQueryParserBase::consumeRangeFeature(CSSParse
auto consumeLeftComparison = [&]() -> std::optional<Comparison> {
if (range.peek().type() == IdentToken)
return { };
auto value = consumeValue(range);
RefPtr value = consumeValue(range);
if (!value)
return { };
auto op = consumeRangeOperator();
Expand All @@ -151,7 +151,7 @@ std::optional<Feature> GenericMediaQueryParserBase::consumeRangeFeature(CSSParse
auto op = consumeRangeOperator();
if (!op)
return { };
auto value = consumeValue(range);
RefPtr value = consumeValue(range);
if (!value) {
didFailParsing = true;
return { };
Expand Down Expand Up @@ -192,14 +192,14 @@ std::optional<Feature> GenericMediaQueryParserBase::consumeRangeFeature(CSSParse

static RefPtr<CSSValue> consumeRatioWithSlash(CSSParserTokenRange& range)
{
auto leftValue = CSSPropertyParserHelpers::consumeNumber(range, ValueRange::NonNegative);
RefPtr leftValue = CSSPropertyParserHelpers::consumeNumber(range, ValueRange::NonNegative);
if (!leftValue)
return nullptr;

if (!CSSPropertyParserHelpers::consumeSlashIncludingWhitespace(range))
return nullptr;

auto rightValue = CSSPropertyParserHelpers::consumeNumber(range, ValueRange::NonNegative);
RefPtr rightValue = CSSPropertyParserHelpers::consumeNumber(range, ValueRange::NonNegative);
if (!rightValue)
return nullptr;

Expand All @@ -211,21 +211,21 @@ RefPtr<CSSValue> GenericMediaQueryParserBase::consumeValue(CSSParserTokenRange&
if (range.atEnd())
return nullptr;

if (auto value = CSSPropertyParserHelpers::consumeIdent(range))
if (RefPtr value = CSSPropertyParserHelpers::consumeIdent(range))
return value;

auto rangeCopy = range;
if (auto value = consumeRatioWithSlash(range))
if (RefPtr value = consumeRatioWithSlash(range))
return value;
range = rangeCopy;

if (auto value = CSSPropertyParserHelpers::consumeInteger(range))
if (RefPtr value = CSSPropertyParserHelpers::consumeInteger(range))
return value;
if (auto value = CSSPropertyParserHelpers::consumeNumber(range, ValueRange::All))
if (RefPtr value = CSSPropertyParserHelpers::consumeNumber(range, ValueRange::All))
return value;
if (auto value = CSSPropertyParserHelpers::consumeLength(range, HTMLStandardMode, ValueRange::All))
if (RefPtr value = CSSPropertyParserHelpers::consumeLength(range, HTMLStandardMode, ValueRange::All))
return value;
if (auto value = CSSPropertyParserHelpers::consumeResolution(range))
if (RefPtr value = CSSPropertyParserHelpers::consumeResolution(range))
return value;

return nullptr;
Expand All @@ -234,7 +234,7 @@ RefPtr<CSSValue> GenericMediaQueryParserBase::consumeValue(CSSParserTokenRange&
bool GenericMediaQueryParserBase::validateFeatureAgainstSchema(Feature& feature, const FeatureSchema& schema)
{
auto validateValue = [&](auto& value) {
auto* primitiveValue = dynamicDowncast<CSSPrimitiveValue>(value.get());
RefPtr primitiveValue = dynamicDowncast<CSSPrimitiveValue>(value);
switch (schema.valueType) {
case FeatureSchema::ValueType::Integer:
return primitiveValue && primitiveValue->isInteger();
Expand Down
5 changes: 3 additions & 2 deletions Source/WebCore/css/query/GenericMediaQueryTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "CSSToLengthConversionData.h"
#include "CSSValue.h"
#include "CSSValueKeywords.h"
#include <wtf/CheckedPtr.h>
#include <wtf/OptionSet.h>
#include <wtf/text/AtomString.h>

Expand Down Expand Up @@ -72,9 +73,9 @@ struct Condition {
enum class EvaluationResult : uint8_t { False, True, Unknown };

struct FeatureEvaluationContext {
const Document& document;
CheckedRef<const Document> document;
CSSToLengthConversionData conversionData { };
const RenderElement* renderer { nullptr };
CheckedPtr<const RenderElement> renderer { };
};

struct FeatureSchema {
Expand Down
11 changes: 6 additions & 5 deletions Source/WebCore/css/query/MediaQueryEvaluator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ namespace MQ {
MediaQueryEvaluator::MediaQueryEvaluator(const AtomString& mediaType, const Document& document, const RenderStyle* rootElementStyle)
: GenericMediaQueryEvaluator()
, m_mediaType(mediaType)
, m_document(&document)
, m_document(document)
, m_rootElementStyle(rootElementStyle)
{
}
Expand Down Expand Up @@ -73,21 +73,22 @@ bool MediaQueryEvaluator::evaluate(const MediaQuery& query) const
if (!query.condition)
return EvaluationResult::True;

if (!m_document || !m_rootElementStyle)
RefPtr document = m_document.get();
if (!document || !m_rootElementStyle)
return m_staticMediaConditionResult;

if (!m_document->view() || !m_document->documentElement())
if (!document->view() || !document->documentElement())
return EvaluationResult::Unknown;

auto defaultStyle = RenderStyle::create();
auto fontDescription = defaultStyle.fontDescription();
auto size = Style::fontSizeForKeyword(CSSValueMedium, false, *m_document);
auto size = Style::fontSizeForKeyword(CSSValueMedium, false, *document);
fontDescription.setComputedSize(size);
fontDescription.setSpecifiedSize(size);
defaultStyle.setFontDescription(WTFMove(fontDescription));
defaultStyle.fontCascade().update();

FeatureEvaluationContext context { *m_document, { *m_rootElementStyle, &defaultStyle, nullptr, m_document->renderView() }, nullptr };
FeatureEvaluationContext context { *document, { *m_rootElementStyle, &defaultStyle, nullptr, document->renderView() }, nullptr };
return evaluateCondition(*query.condition, context);
}();

Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/css/query/MediaQueryEvaluator.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ class MediaQueryEvaluator : public GenericMediaQueryEvaluator<MediaQueryEvaluato

private:
AtomString m_mediaType;
const Document* m_document { nullptr };
const RenderStyle* m_rootElementStyle { nullptr };
WeakPtr<const Document, WeakPtrImplWithEventTargetData> m_document;
const RenderStyle* m_rootElementStyle { nullptr }; // FIXME: Switch to a smart pointer.
EvaluationResult m_staticMediaConditionResult { EvaluationResult::Unknown };
};

Expand Down
Loading

0 comments on commit 1c3b20f

Please sign in to comment.