#include "third_party/blink/renderer/core/css/media_query_evaluator.h"
#include "third_party/blink/public/common/css/forced_colors.h"
#include "third_party/blink/public/common/css/navigation_controls.h"
#include "third_party/blink/public/common/css/scripting.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
#include "third_party/blink/public/mojom/device_posture/device_posture_provider.mojom-blink.h"
#include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h"
#include "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h"
#include "third_party/blink/renderer/core/css/css_container_values.h"
#include "third_party/blink/renderer/core/css/css_primitive_value.h"
#include "third_party/blink/renderer/core/css/css_resolution_units.h"
#include "third_party/blink/renderer/core/css/css_to_length_conversion_data.h"
#include "third_party/blink/renderer/core/css/css_unparsed_declaration_value.h"
#include "third_party/blink/renderer/core/css/media_feature_names.h"
#include "third_party/blink/renderer/core/css/media_features.h"
#include "third_party/blink/renderer/core/css/media_list.h"
#include "third_party/blink/renderer/core/css/media_query.h"
#include "third_party/blink/renderer/core/css/media_values.h"
#include "third_party/blink/renderer/core/css/media_values_dynamic.h"
#include "third_party/blink/renderer/core/css/parser/css_tokenizer.h"
#include "third_party/blink/renderer/core/css/parser/css_variable_parser.h"
#include "third_party/blink/renderer/core/css/properties/longhands/custom_property.h"
#include "third_party/blink/renderer/core/css/resolver/media_query_result.h"
#include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
#include "third_party/blink/renderer/core/css_value_keywords.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/frame/web_feature.h"
#include "third_party/blink/renderer/core/media_type_names.h"
#include "third_party/blink/renderer/core/probe/core_probes.h"
#include "third_party/blink/renderer/core/style/computed_style.h"
#include "third_party/blink/renderer/platform/graphics/color_space_gamut.h"
#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
#include "third_party/blink/renderer/platform/wtf/hash_map.h"
#include "ui/base/ui_base_types.h"
#include "ui/gfx/geometry/rect_f.h"
namespace blink {
namespace {
template <class T>
void MaybeRecordMediaFeatureValue(
const MediaValues& media_values,
const IdentifiableSurface::MediaFeatureName feature_name,
T value) { … }
KleeneValue KleeneOr(KleeneValue a, KleeneValue b) { … }
KleeneValue KleeneAnd(KleeneValue a, KleeneValue b) { … }
}
DevicePostureType;
HoverType;
PointerType;
EvalFunc;
FunctionMap;
static FunctionMap* g_function_map;
MediaQueryEvaluator::MediaQueryEvaluator(const char* accepted_media_type)
: … { … }
MediaQueryEvaluator::MediaQueryEvaluator(LocalFrame* frame)
: … { … }
MediaQueryEvaluator::MediaQueryEvaluator(const MediaValues* container_values)
: … { … }
MediaQueryEvaluator::~MediaQueryEvaluator() = default;
void MediaQueryEvaluator::Trace(Visitor* visitor) const { … }
const String MediaQueryEvaluator::MediaType() const { … }
bool MediaQueryEvaluator::MediaTypeMatch(
const String& media_type_to_match) const { … }
static bool ApplyRestrictor(MediaQuery::RestrictorType r, KleeneValue value) { … }
bool MediaQueryEvaluator::Eval(const MediaQuery& query) const { … }
bool MediaQueryEvaluator::Eval(const MediaQuery& query,
MediaQueryResultFlags* result_flags) const { … }
bool MediaQueryEvaluator::Eval(const MediaQuerySet& query_set) const { … }
bool MediaQueryEvaluator::Eval(const MediaQuerySet& query_set,
MediaQueryResultFlags* result_flags) const { … }
KleeneValue MediaQueryEvaluator::Eval(const MediaQueryExpNode& node) const { … }
KleeneValue MediaQueryEvaluator::Eval(
const MediaQueryExpNode& node,
MediaQueryResultFlags* result_flags) const { … }
KleeneValue MediaQueryEvaluator::EvalNot(
const MediaQueryExpNode& operand_node,
MediaQueryResultFlags* result_flags) const { … }
KleeneValue MediaQueryEvaluator::EvalAnd(
const MediaQueryExpNode& left_node,
const MediaQueryExpNode& right_node,
MediaQueryResultFlags* result_flags) const { … }
KleeneValue MediaQueryEvaluator::EvalOr(
const MediaQueryExpNode& left_node,
const MediaQueryExpNode& right_node,
MediaQueryResultFlags* result_flags) const { … }
bool MediaQueryEvaluator::DidResultsChange(
const HeapVector<MediaQuerySetResult>& result_flags) const { … }
static bool HandleNegativeMediaFeatureValue(MediaQueryOperator op) { … }
template <typename T>
bool CompareValue(T actual_value, T query_value, MediaQueryOperator op) { … }
bool CompareDoubleValue(double actual_value,
double query_value,
MediaQueryOperator op) { … }
static bool CompareAspectRatioValue(const MediaQueryExpValue& value,
int width,
int height,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool NumberValue(const MediaQueryExpValue& value,
float& result,
const MediaValues& media_values) { … }
static bool ColorMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool ColorIndexMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool MonochromeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool DisplayModeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool DisplayStateMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool ResizableMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool OrientationMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool AspectRatioMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool DeviceAspectRatioMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool DynamicRangeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool VideoDynamicRangeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool EvalResolution(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool DevicePixelRatioMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool ResolutionMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool GridMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool ComputeLength(const MediaQueryExpValue& value,
const MediaValues& media_values,
double& result) { … }
static bool ComputeLengthAndCompare(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values,
double compare_to_value) { … }
static bool DeviceHeightMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool DeviceWidthMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool HeightMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool WidthMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool InlineSizeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool BlockSizeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool MinColorMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxColorMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinColorIndexMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxColorIndexMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinMonochromeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxMonochromeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinAspectRatioMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxAspectRatioMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinDeviceAspectRatioMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxDeviceAspectRatioMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinDevicePixelRatioMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxDevicePixelRatioMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinHeightMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxHeightMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinWidthMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxWidthMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinBlockSizeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxBlockSizeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinInlineSizeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxInlineSizeMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinDeviceHeightMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxDeviceHeightMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinDeviceWidthMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxDeviceWidthMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MinResolutionMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool MaxResolutionMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool Transform3dMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool HoverMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool AnyHoverMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool OriginTrialTestMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool PointerMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool PrefersReducedMotionMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool PrefersReducedDataMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool PrefersReducedTransparencyMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool AnyPointerMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool ScanMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool ColorGamutMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool PrefersColorSchemeMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool PrefersContrastMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool ForcedColorsMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool NavigationControlsMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool HorizontalViewportSegmentsMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool VerticalViewportSegmentsMediaFeatureEval(
const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool OverflowInlineMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool OverflowBlockMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool DevicePostureMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool UpdateMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool StuckMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool SnappedMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator op,
const MediaValues& media_values) { … }
static bool InvertedColorsMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static bool ScriptingMediaFeatureEval(const MediaQueryExpValue& value,
MediaQueryOperator,
const MediaValues& media_values) { … }
static MediaQueryOperator ReverseOperator(MediaQueryOperator op) { … }
void MediaQueryEvaluator::Init() { … }
KleeneValue MediaQueryEvaluator::EvalFeature(
const MediaQueryFeatureExpNode& feature,
MediaQueryResultFlags* result_flags) const { … }
KleeneValue MediaQueryEvaluator::EvalStyleFeature(
const MediaQueryFeatureExpNode& feature,
MediaQueryResultFlags* result_flags) const { … }
}