mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 11:55:49 +00:00
Bug 1176968 part 2: Add "requirement flags" field to media query features, and logic for ignoring the feature if requirements aren't met. r=heycam
This commit is contained in:
parent
b3e5df1df4
commit
72ffc49c97
@ -3411,6 +3411,7 @@ CSSParserImpl::ParseMediaQueryExpression(nsMediaQuery* aQuery)
|
||||
// case insensitive from CSS - must be lower cased
|
||||
nsContentUtils::ASCIIToLower(mToken.mIdent);
|
||||
nsDependentString featureString(mToken.mIdent, 0);
|
||||
uint8_t satisfiedReqFlags = 0;
|
||||
|
||||
// Strip off "min-"/"max-" prefix from featureString:
|
||||
if (StringBeginsWith(featureString, NS_LITERAL_STRING("min-"))) {
|
||||
@ -3426,7 +3427,11 @@ CSSParserImpl::ParseMediaQueryExpression(nsMediaQuery* aQuery)
|
||||
nsCOMPtr<nsIAtom> mediaFeatureAtom = do_GetAtom(featureString);
|
||||
const nsMediaFeature *feature = nsMediaFeatures::features;
|
||||
for (; feature->mName; ++feature) {
|
||||
if (*(feature->mName) == mediaFeatureAtom) {
|
||||
// See if name matches & all requirement flags are satisfied:
|
||||
// (We check requirements by turning off all of the flags that have been
|
||||
// satisfied, and then see if the result is 0.)
|
||||
if (*(feature->mName) == mediaFeatureAtom &&
|
||||
!(feature->mReqFlags & ~satisfiedReqFlags)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -420,6 +420,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::width,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eLength,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetWidth
|
||||
},
|
||||
@ -427,6 +428,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::height,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eLength,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetHeight
|
||||
},
|
||||
@ -434,6 +436,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::deviceWidth,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eLength,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetDeviceWidth
|
||||
},
|
||||
@ -441,6 +444,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::deviceHeight,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eLength,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetDeviceHeight
|
||||
},
|
||||
@ -448,6 +452,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::orientation,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eEnumerated,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ kOrientationKeywords },
|
||||
GetOrientation
|
||||
},
|
||||
@ -455,6 +460,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::aspectRatio,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eIntRatio,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetAspectRatio
|
||||
},
|
||||
@ -462,6 +468,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::deviceAspectRatio,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eIntRatio,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetDeviceAspectRatio
|
||||
},
|
||||
@ -469,6 +476,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::color,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetColor
|
||||
},
|
||||
@ -476,6 +484,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::colorIndex,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetColorIndex
|
||||
},
|
||||
@ -483,6 +492,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::monochrome,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetMonochrome
|
||||
},
|
||||
@ -490,6 +500,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::resolution,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eResolution,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetResolution
|
||||
},
|
||||
@ -497,6 +508,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::scan,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eEnumerated,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ kScanKeywords },
|
||||
GetScan
|
||||
},
|
||||
@ -504,6 +516,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::grid,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetGrid
|
||||
},
|
||||
@ -513,6 +526,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_device_pixel_ratio,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eFloat,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetDevicePixelRatio
|
||||
},
|
||||
@ -520,6 +534,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_device_orientation,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eEnumerated,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ kOrientationKeywords },
|
||||
GetDeviceOrientation
|
||||
},
|
||||
@ -527,6 +542,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_is_resource_document,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetIsResourceDocument
|
||||
},
|
||||
@ -534,6 +550,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_color_picker_available,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::color_picker_available },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -541,6 +558,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_scrollbar_start_backward,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::scrollbar_start_backward },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -548,6 +566,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_scrollbar_start_forward,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::scrollbar_start_forward },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -555,6 +574,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_scrollbar_end_backward,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::scrollbar_end_backward },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -562,6 +582,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_scrollbar_end_forward,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::scrollbar_end_forward },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -569,6 +590,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_scrollbar_thumb_proportional,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::scrollbar_thumb_proportional },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -576,6 +598,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_images_in_menus,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::images_in_menus },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -583,6 +606,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_images_in_buttons,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::images_in_buttons },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -590,6 +614,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_overlay_scrollbars,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::overlay_scrollbars },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -597,6 +622,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_windows_default_theme,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::windows_default_theme },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -604,6 +630,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_mac_graphite_theme,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::mac_graphite_theme },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -611,6 +638,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_mac_lion_theme,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::mac_lion_theme },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -618,6 +646,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_mac_yosemite_theme,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::mac_yosemite_theme },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -625,6 +654,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_windows_compositor,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::windows_compositor },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -632,6 +662,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_windows_classic,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::windows_classic },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -639,6 +670,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_windows_glass,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::windows_glass },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -646,6 +678,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_touch_enabled,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::touch_enabled },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -653,6 +686,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_menubar_drag,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::menubar_drag },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -660,6 +694,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_windows_theme,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eIdent,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetWindowsTheme
|
||||
},
|
||||
@ -667,6 +702,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_os_version,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eIdent,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetOperatinSystemVersion
|
||||
},
|
||||
@ -675,6 +711,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_swipe_animation_enabled,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::swipe_animation_enabled },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -683,6 +720,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_physical_home_button,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ &nsGkAtoms::physical_home_button },
|
||||
GetSystemMetric
|
||||
},
|
||||
@ -694,6 +732,7 @@ nsMediaFeatures::features[] = {
|
||||
&nsGkAtoms::_moz_is_glyph,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eBoolInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
GetIsGlyph
|
||||
},
|
||||
@ -702,6 +741,7 @@ nsMediaFeatures::features[] = {
|
||||
nullptr,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
nsMediaFeature::eInteger,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ nullptr },
|
||||
nullptr
|
||||
},
|
||||
|
@ -46,6 +46,13 @@ struct nsMediaFeature {
|
||||
};
|
||||
ValueType mValueType;
|
||||
|
||||
enum RequirementFlags : uint8_t {
|
||||
// Bitfield of requirements that must be satisfied in order for this
|
||||
// media feature to be active.
|
||||
eNoRequirements = 0
|
||||
};
|
||||
uint8_t mReqFlags;
|
||||
|
||||
union {
|
||||
// In static arrays, it's the first member that's initialized. We
|
||||
// need that to be void* so we can initialize both other types.
|
||||
|
Loading…
Reference in New Issue
Block a user