diff --git a/browser/base/content/test/static/browser_parsable_css.js b/browser/base/content/test/static/browser_parsable_css.js index e9a97752f7b8..f41aa204aea0 100644 --- a/browser/base/content/test/static/browser_parsable_css.js +++ b/browser/base/content/test/static/browser_parsable_css.js @@ -38,6 +38,10 @@ let whitelist = [ {sourceName: /responsive-ua\.css$/i, errorMessage: /Unknown pseudo-class.*moz-dropdown-list/i, isFromDevTools: true}, + // UA-only media features. + {sourceName: /\b(autocomplete-item|svg)\.css$/, + errorMessage: /Expected media feature name but found \u2018-moz.*/i, + isFromDevTools: false}, {sourceName: /\b(contenteditable|EditorOverride|svg|forms|html|mathml|ua)\.css$/i, errorMessage: /Unknown pseudo-class.*-moz-/i, diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp index bce6c51ef7d6..438dc2cecf3a 100644 --- a/layout/style/nsMediaFeatures.cpp +++ b/layout/style/nsMediaFeatures.cpp @@ -394,6 +394,9 @@ GetSystemMetric(nsPresContext* aPresContext, const nsMediaFeature* aFeature, const bool isAccessibleFromContentPages = !(aFeature->mReqFlags & nsMediaFeature::eUserAgentAndChromeOnly); + MOZ_ASSERT(!isAccessibleFromContentPages || + *aFeature->mName == nsGkAtoms::_moz_touch_enabled); + if (isAccessibleFromContentPages && ShouldResistFingerprinting(aPresContext)) { // If "privacy.resistFingerprinting" is enabled, then we simply don't @@ -404,6 +407,7 @@ GetSystemMetric(nsPresContext* aPresContext, const nsMediaFeature* aFeature, MOZ_ASSERT(aFeature->mValueType == nsMediaFeature::eBoolInteger, "unexpected type"); + nsAtom* metricAtom = *aFeature->mData.mMetric; bool hasMetric = nsCSSRuleProcessor::HasSystemMetric(metricAtom); aResult.SetIntValue(hasMetric ? 1 : 0, eCSSUnit_Integer); @@ -414,6 +418,8 @@ GetWindowsTheme(nsPresContext* aPresContext, const nsMediaFeature* aFeature, nsCSSValue& aResult) { aResult.Reset(); + + MOZ_ASSERT(aFeature->mReqFlags & nsMediaFeature::eUserAgentAndChromeOnly); if (ShouldResistFingerprinting(aPresContext)) { return; } @@ -442,6 +448,8 @@ GetOperatingSystemVersion(nsPresContext* aPresContext, const nsMediaFeature* aFe nsCSSValue& aResult) { aResult.Reset(); + + MOZ_ASSERT(aFeature->mReqFlags & nsMediaFeature::eUserAgentAndChromeOnly); if (ShouldResistFingerprinting(aPresContext)) { return; } @@ -466,6 +474,7 @@ static void GetIsGlyph(nsPresContext* aPresContext, const nsMediaFeature* aFeature, nsCSSValue& aResult) { + MOZ_ASSERT(aFeature->mReqFlags & nsMediaFeature::eUserAgentAndChromeOnly); aResult.SetIntValue(aPresContext->IsGlyph() ? 1 : 0, eCSSUnit_Integer); } @@ -683,7 +692,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_overlay_scrollbars, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { &nsGkAtoms::overlay_scrollbars }, GetSystemMetric }, @@ -691,7 +700,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_windows_default_theme, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { &nsGkAtoms::windows_default_theme }, GetSystemMetric }, @@ -699,7 +708,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_mac_graphite_theme, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { &nsGkAtoms::mac_graphite_theme }, GetSystemMetric }, @@ -707,7 +716,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_mac_yosemite_theme, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { &nsGkAtoms::mac_yosemite_theme }, GetSystemMetric }, @@ -715,7 +724,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_windows_accent_color_in_titlebar, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { &nsGkAtoms::windows_accent_color_in_titlebar }, GetSystemMetric }, @@ -723,7 +732,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_windows_compositor, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { &nsGkAtoms::windows_compositor }, GetSystemMetric }, @@ -731,7 +740,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_windows_classic, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { &nsGkAtoms::windows_classic }, GetSystemMetric }, @@ -739,7 +748,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_windows_glass, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { &nsGkAtoms::windows_glass }, GetSystemMetric }, @@ -747,6 +756,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_touch_enabled, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, + // FIXME(emilio): Restrict (or remove?) when bug 1035774 lands. nsMediaFeature::eNoRequirements, { &nsGkAtoms::touch_enabled }, GetSystemMetric @@ -755,7 +765,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_menubar_drag, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { &nsGkAtoms::menubar_drag }, GetSystemMetric }, @@ -763,7 +773,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_windows_theme, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eIdent, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { nullptr }, GetWindowsTheme }, @@ -771,7 +781,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_os_version, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eIdent, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { nullptr }, GetOperatingSystemVersion }, @@ -780,7 +790,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_swipe_animation_enabled, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { &nsGkAtoms::swipe_animation_enabled }, GetSystemMetric }, @@ -792,7 +802,7 @@ nsMediaFeatures::features[] = { &nsGkAtoms::_moz_is_glyph, nsMediaFeature::eMinMaxNotAllowed, nsMediaFeature::eBoolInteger, - nsMediaFeature::eNoRequirements, + nsMediaFeature::eUserAgentAndChromeOnly, { nullptr }, GetIsGlyph }, diff --git a/layout/style/test/chrome/bug418986-2.js b/layout/style/test/chrome/bug418986-2.js index eb2c012a7dc5..a2a1d75270e0 100644 --- a/layout/style/test/chrome/bug418986-2.js +++ b/layout/style/test/chrome/bug418986-2.js @@ -54,11 +54,7 @@ var suppressed_toggles = [ ]; var toggles_enabled_in_content = [ - "-moz-mac-graphite-theme", "-moz-touch-enabled", - "-moz-windows-compositor", - "-moz-windows-default-theme", - "-moz-windows-glass", ]; // Possible values for '-moz-os-version' @@ -87,7 +83,6 @@ var OS = SpecialPowers.Services.appinfo.OS; // available on that OS. if (OS === "WINNT") { suppressed_toggles.push("-moz-windows-classic"); - toggles_enabled_in_content.push("-moz-windows-classic"); } // __keyValMatches(key, val)__. @@ -132,7 +127,7 @@ var testWindowsSpecific = function (resisting, queryName, possibleValues) { foundValue = val; } }); - if (resisting) { + if (resisting || !is_chrome_window) { ok(!foundValue, queryName + " should have no match"); } else { ok(foundValue, foundValue ? ("Match found: '" + queryName + ":" + foundValue + "'") diff --git a/layout/style/test/test_media_queries.html b/layout/style/test/test_media_queries.html index 55d889ebc53b..8afb071d9c05 100644 --- a/layout/style/test/test_media_queries.html +++ b/layout/style/test/test_media_queries.html @@ -638,48 +638,48 @@ function run() { expression_should_not_be_parseable("-moz-scrollbar-end-backward"); expression_should_not_be_parseable("-moz-scrollbar-end-forward"); expression_should_not_be_parseable("-moz-scrollbar-thumb-proportional"); - expression_should_be_parseable("-moz-overlay-scrollbars"); - expression_should_be_parseable("-moz-windows-default-theme"); - expression_should_be_parseable("-moz-mac-graphite-theme"); - expression_should_be_parseable("-moz-mac-yosemite-theme"); - expression_should_be_parseable("-moz-windows-accent-color-in-titlebar"); - expression_should_be_parseable("-moz-windows-compositor"); - expression_should_be_parseable("-moz-windows-classic"); - expression_should_be_parseable("-moz-windows-glass"); + expression_should_not_be_parseable("-moz-overlay-scrollbars"); + expression_should_not_be_parseable("-moz-windows-default-theme"); + expression_should_not_be_parseable("-moz-mac-graphite-theme"); + expression_should_not_be_parseable("-moz-mac-yosemite-theme"); + expression_should_not_be_parseable("-moz-windows-accent-color-in-titlebar"); + expression_should_not_be_parseable("-moz-windows-compositor"); + expression_should_not_be_parseable("-moz-windows-classic"); + expression_should_not_be_parseable("-moz-windows-glass"); + expression_should_not_be_parseable("-moz-swipe-animation-enabled"); expression_should_be_parseable("-moz-touch-enabled"); - expression_should_be_parseable("-moz-swipe-animation-enabled"); expression_should_not_be_parseable("-moz-scrollbar-start-backward: 0"); expression_should_not_be_parseable("-moz-scrollbar-start-forward: 0"); expression_should_not_be_parseable("-moz-scrollbar-end-backward: 0"); expression_should_not_be_parseable("-moz-scrollbar-end-forward: 0"); expression_should_not_be_parseable("-moz-scrollbar-thumb-proportional: 0"); - expression_should_be_parseable("-moz-overlay-scrollbars: 0"); - expression_should_be_parseable("-moz-windows-default-theme: 0"); - expression_should_be_parseable("-moz-mac-graphite-theme: 0"); - expression_should_be_parseable("-moz-mac-yosemite-theme: 0"); - expression_should_be_parseable("-moz-windows-accent-color-in-titlebar: 0"); - expression_should_be_parseable("-moz-windows-compositor: 0"); - expression_should_be_parseable("-moz-windows-classic: 0"); - expression_should_be_parseable("-moz-windows-glass: 0"); + expression_should_not_be_parseable("-moz-overlay-scrollbars: 0"); + expression_should_not_be_parseable("-moz-windows-default-theme: 0"); + expression_should_not_be_parseable("-moz-mac-graphite-theme: 0"); + expression_should_not_be_parseable("-moz-mac-yosemite-theme: 0"); + expression_should_not_be_parseable("-moz-windows-accent-color-in-titlebar: 0"); + expression_should_not_be_parseable("-moz-windows-compositor: 0"); + expression_should_not_be_parseable("-moz-windows-classic: 0"); + expression_should_not_be_parseable("-moz-windows-glass: 0"); + expression_should_not_be_parseable("-moz-swipe-animation-enabled: 0"); expression_should_be_parseable("-moz-touch-enabled: 0"); - expression_should_be_parseable("-moz-swipe-animation-enabled: 0"); expression_should_not_be_parseable("-moz-scrollbar-start-backward: 1"); expression_should_not_be_parseable("-moz-scrollbar-start-forward: 1"); expression_should_not_be_parseable("-moz-scrollbar-end-backward: 1"); expression_should_not_be_parseable("-moz-scrollbar-end-forward: 1"); expression_should_not_be_parseable("-moz-scrollbar-thumb-proportional: 1"); - expression_should_be_parseable("-moz-overlay-scrollbars: 1"); - expression_should_be_parseable("-moz-windows-default-theme: 1"); - expression_should_be_parseable("-moz-mac-graphite-theme: 1"); - expression_should_be_parseable("-moz-mac-yosemite-theme: 1"); - expression_should_be_parseable("-moz-windows-accent-color-in-titlebar: 1"); - expression_should_be_parseable("-moz-windows-compositor: 1"); - expression_should_be_parseable("-moz-windows-classic: 1"); - expression_should_be_parseable("-moz-windows-glass: 1"); + expression_should_not_be_parseable("-moz-overlay-scrollbars: 1"); + expression_should_not_be_parseable("-moz-windows-default-theme: 1"); + expression_should_not_be_parseable("-moz-mac-graphite-theme: 1"); + expression_should_not_be_parseable("-moz-mac-yosemite-theme: 1"); + expression_should_not_be_parseable("-moz-windows-accent-color-in-titlebar: 1"); + expression_should_not_be_parseable("-moz-windows-compositor: 1"); + expression_should_not_be_parseable("-moz-windows-classic: 1"); + expression_should_not_be_parseable("-moz-windows-glass: 1"); + expression_should_not_be_parseable("-moz-swipe-animation-enabled: 1"); expression_should_be_parseable("-moz-touch-enabled: 1"); - expression_should_be_parseable("-moz-swipe-animation-enabled: 1"); expression_should_not_be_parseable("-moz-scrollbar-start-backward: -1"); expression_should_not_be_parseable("-moz-scrollbar-start-forward: -1"); @@ -714,55 +714,55 @@ function run() { expression_should_not_be_parseable("-moz-swipe-animation-enabled: true"); // windows theme media queries - expression_should_be_parseable("-moz-windows-theme: aero"); - expression_should_be_parseable("-moz-windows-theme: aero-lite"); - expression_should_be_parseable("-moz-windows-theme: luna-blue"); - expression_should_be_parseable("-moz-windows-theme: luna-olive"); - expression_should_be_parseable("-moz-windows-theme: luna-silver"); - expression_should_be_parseable("-moz-windows-theme: royale"); - expression_should_be_parseable("-moz-windows-theme: generic"); - expression_should_be_parseable("-moz-windows-theme: zune"); - expression_should_be_parseable("-moz-windows-theme: garbage"); + expression_should_not_be_parseable("-moz-windows-theme: aero"); + expression_should_not_be_parseable("-moz-windows-theme: aero-lite"); + expression_should_not_be_parseable("-moz-windows-theme: luna-blue"); + expression_should_not_be_parseable("-moz-windows-theme: luna-olive"); + expression_should_not_be_parseable("-moz-windows-theme: luna-silver"); + expression_should_not_be_parseable("-moz-windows-theme: royale"); + expression_should_not_be_parseable("-moz-windows-theme: generic"); + expression_should_not_be_parseable("-moz-windows-theme: zune"); + expression_should_not_be_parseable("-moz-windows-theme: garbage"); expression_should_not_be_parseable("-moz-windows-theme: ''"); expression_should_not_be_parseable("-moz-windows-theme: "); // os version media queries (currently windows only) - expression_should_be_parseable("-moz-os-version: windows-win7"); - expression_should_be_parseable("-moz-os-version: windows-win8"); - expression_should_be_parseable("-moz-os-version: windows-win10"); + expression_should_not_be_parseable("-moz-os-version: windows-win7"); + expression_should_not_be_parseable("-moz-os-version: windows-win8"); + expression_should_not_be_parseable("-moz-os-version: windows-win10"); expression_should_not_be_parseable("-moz-os-version: "); // OpenType SVG media features - query_should_be_parseable("(-moz-is-glyph)"); + query_should_not_be_parseable("(-moz-is-glyph)"); query_should_not_be_parseable("not (-moz-is-glyph)"); query_should_not_be_parseable("only (-moz-is-glyph)"); - query_should_be_parseable("all and (-moz-is-glyph)"); - query_should_be_parseable("not all and (-moz-is-glyph)"); - query_should_be_parseable("only all and (-moz-is-glyph)"); + query_should_not_be_parseable("all and (-moz-is-glyph)"); + query_should_not_be_parseable("not all and (-moz-is-glyph)"); + query_should_not_be_parseable("only all and (-moz-is-glyph)"); - query_should_be_parseable("(-moz-is-glyph:0)"); + query_should_not_be_parseable("(-moz-is-glyph:0)"); query_should_not_be_parseable("not (-moz-is-glyph:0)"); query_should_not_be_parseable("only (-moz-is-glyph:0)"); - query_should_be_parseable("all and (-moz-is-glyph:0)"); - query_should_be_parseable("not all and (-moz-is-glyph:0)"); - query_should_be_parseable("only all and (-moz-is-glyph:0)"); + query_should_not_be_parseable("all and (-moz-is-glyph:0)"); + query_should_not_be_parseable("not all and (-moz-is-glyph:0)"); + query_should_not_be_parseable("only all and (-moz-is-glyph:0)"); - query_should_be_parseable("(-moz-is-glyph:1)"); + query_should_not_be_parseable("(-moz-is-glyph:1)"); query_should_not_be_parseable("not (-moz-is-glyph:1)"); query_should_not_be_parseable("only (-moz-is-glyph:1)"); - query_should_be_parseable("all and (-moz-is-glyph:1)"); - query_should_be_parseable("not all and (-moz-is-glyph:1)"); - query_should_be_parseable("only all and (-moz-is-glyph:1)"); + query_should_not_be_parseable("all and (-moz-is-glyph:1)"); + query_should_not_be_parseable("not all and (-moz-is-glyph:1)"); + query_should_not_be_parseable("only all and (-moz-is-glyph:1)"); query_should_not_be_parseable("(min--moz-is-glyph:0)"); query_should_not_be_parseable("(max--moz-is-glyph:0)"); query_should_not_be_parseable("(min--moz-is-glyph:1)"); query_should_not_be_parseable("(max--moz-is-glyph:1)"); - should_apply("not all and (-moz-is-glyph)"); - should_apply("(-moz-is-glyph:0)"); - should_apply("not all and (-moz-is-glyph:1)"); - should_apply("only all and (-moz-is-glyph:0)"); + should_not_apply("not all and (-moz-is-glyph)"); + should_not_apply("(-moz-is-glyph:0)"); + should_not_apply("not all and (-moz-is-glyph:1)"); + should_not_apply("only all and (-moz-is-glyph:0)"); should_not_apply("(-moz-is-glyph)"); should_not_apply("(-moz-is-glyph:1)"); should_not_apply("not all and (-moz-is-glyph:0)");