summaryrefslogtreecommitdiff
path: root/layout/style/nsMediaFeatures.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layout/style/nsMediaFeatures.cpp')
-rw-r--r--layout/style/nsMediaFeatures.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp
index e44003ce48..9b5331a4a1 100644
--- a/layout/style/nsMediaFeatures.cpp
+++ b/layout/style/nsMediaFeatures.cpp
@@ -20,6 +20,7 @@
#include "nsIDocument.h"
#include "nsIWidget.h"
#include "nsContentUtils.h"
+#include "mozilla/Preferences.h"
#include "mozilla/StyleSheet.h"
#include "mozilla/StyleSheetInlines.h"
@@ -45,6 +46,12 @@ static const nsCSSProps::KTableEntry kDisplayModeKeywords[] = {
{ eCSSKeyword_UNKNOWN, -1 }
};
+static const nsCSSProps::KTableEntry kPrefersColorSchemeKeywords[] = {
+ { eCSSKeyword_light, NS_STYLE_PREFERS_COLOR_SCHEME_LIGHT },
+ { eCSSKeyword_dark, NS_STYLE_PREFERS_COLOR_SCHEME_DARK },
+ { eCSSKeyword_UNKNOWN, -1 },
+};
+
#ifdef XP_WIN
struct WindowsThemeName {
LookAndFeel::WindowsTheme id;
@@ -456,6 +463,25 @@ GetOperatingSystemVersion(nsPresContext* aPresContext, const nsMediaFeature* aFe
}
static nsresult
+GetPrefersColorScheme(nsPresContext* aPresContext, const nsMediaFeature* aFeature,
+ nsCSSValue& aResult)
+{
+ switch(Preferences::GetInt("browser.display.prefers_color_scheme", 1)) {
+ case 1:
+ aResult.SetIntValue(NS_STYLE_PREFERS_COLOR_SCHEME_LIGHT,
+ eCSSUnit_Enumerated);
+ break;
+ case 2:
+ aResult.SetIntValue(NS_STYLE_PREFERS_COLOR_SCHEME_DARK,
+ eCSSUnit_Enumerated);
+ break;
+ default:
+ aResult.Reset();
+ }
+ return NS_OK;
+}
+
+static nsresult
GetIsGlyph(nsPresContext* aPresContext, const nsMediaFeature* aFeature,
nsCSSValue& aResult)
{
@@ -555,6 +581,14 @@ nsMediaFeatures::features[] = {
GetMonochrome
},
{
+ &nsGkAtoms::prefers_color_scheme,
+ nsMediaFeature::eMinMaxNotAllowed,
+ nsMediaFeature::eEnumerated,
+ nsMediaFeature::eNoRequirements,
+ { kPrefersColorSchemeKeywords },
+ GetPrefersColorScheme
+ },
+ {
&nsGkAtoms::resolution,
nsMediaFeature::eMinMaxAllowed,
nsMediaFeature::eResolution,