1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_H_
6 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_H_
7 
8 #include "third_party/blink/public/mojom/css/preferred_color_scheme.mojom-blink-forward.h"
9 #include "third_party/blink/public/mojom/css/preferred_contrast.mojom-blink-forward.h"
10 #include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h"
11 #include "third_party/blink/renderer/core/core_export.h"
12 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
13 #include "third_party/blink/renderer/platform/heap/handle.h"
14 #include "ui/base/pointer/pointer_device.h"
15 
16 namespace blink {
17 
18 class Document;
19 class CSSPrimitiveValue;
20 class LocalFrame;
21 enum class CSSValueID;
22 enum class ColorSpaceGamut;
23 enum class ForcedColors;
24 enum class NavigationControls;
25 enum class ScreenSpanning;
26 
27 mojom::blink::PreferredColorScheme CSSValueIDToPreferredColorScheme(
28     CSSValueID id);
29 
30 class CORE_EXPORT MediaValues : public GarbageCollected<MediaValues> {
31  public:
32   virtual ~MediaValues() = default;
Trace(Visitor * visitor)33   virtual void Trace(Visitor* visitor) const {}
34 
35   static MediaValues* CreateDynamicIfFrameExists(LocalFrame*);
36   virtual MediaValues* Copy() const = 0;
37 
38   static bool ComputeLengthImpl(double value,
39                                 CSSPrimitiveValue::UnitType,
40                                 unsigned default_font_size,
41                                 double viewport_width,
42                                 double viewport_height,
43                                 double& result);
44   template <typename T>
ComputeLength(double value,CSSPrimitiveValue::UnitType type,unsigned default_font_size,double viewport_width,double viewport_height,T & result)45   static bool ComputeLength(double value,
46                             CSSPrimitiveValue::UnitType type,
47                             unsigned default_font_size,
48                             double viewport_width,
49                             double viewport_height,
50                             T& result) {
51     double temp_result;
52     if (!ComputeLengthImpl(value, type, default_font_size, viewport_width,
53                            viewport_height, temp_result))
54       return false;
55     result = clampTo<T>(temp_result);
56     return true;
57   }
58   virtual bool ComputeLength(double value,
59                              CSSPrimitiveValue::UnitType,
60                              int& result) const = 0;
61   virtual bool ComputeLength(double value,
62                              CSSPrimitiveValue::UnitType,
63                              double& result) const = 0;
64 
65   virtual double ViewportWidth() const = 0;
66   virtual double ViewportHeight() const = 0;
67   virtual int DeviceWidth() const = 0;
68   virtual int DeviceHeight() const = 0;
69   virtual float DevicePixelRatio() const = 0;
70   virtual int ColorBitsPerComponent() const = 0;
71   virtual int MonochromeBitsPerComponent() const = 0;
72   virtual ui::PointerType PrimaryPointerType() const = 0;
73   virtual int AvailablePointerTypes() const = 0;
74   virtual ui::HoverType PrimaryHoverType() const = 0;
75   virtual int AvailableHoverTypes() const = 0;
76   virtual bool ThreeDEnabled() const = 0;
77   virtual bool InImmersiveMode() const = 0;
78   virtual const String MediaType() const = 0;
79   virtual blink::mojom::DisplayMode DisplayMode() const = 0;
80   virtual bool StrictMode() const = 0;
81   virtual Document* GetDocument() const = 0;
82   virtual bool HasValues() const = 0;
83 
84   virtual void OverrideViewportDimensions(double width, double height) = 0;
85   virtual ColorSpaceGamut ColorGamut() const = 0;
86   virtual mojom::blink::PreferredColorScheme GetPreferredColorScheme()
87       const = 0;
88   virtual mojom::blink::PreferredContrast GetPreferredContrast() const = 0;
89   virtual bool PrefersReducedMotion() const = 0;
90   virtual bool PrefersReducedData() const = 0;
91   virtual ForcedColors GetForcedColors() const = 0;
92   virtual NavigationControls GetNavigationControls() const = 0;
93   virtual ScreenSpanning GetScreenSpanning() const = 0;
94 
95  protected:
96   static double CalculateViewportWidth(LocalFrame*);
97   static double CalculateViewportHeight(LocalFrame*);
98   static int CalculateDeviceWidth(LocalFrame*);
99   static int CalculateDeviceHeight(LocalFrame*);
100   static bool CalculateStrictMode(LocalFrame*);
101   static float CalculateDevicePixelRatio(LocalFrame*);
102   static int CalculateColorBitsPerComponent(LocalFrame*);
103   static int CalculateMonochromeBitsPerComponent(LocalFrame*);
104   static int CalculateDefaultFontSize(LocalFrame*);
105   static const String CalculateMediaType(LocalFrame*);
106   static blink::mojom::DisplayMode CalculateDisplayMode(LocalFrame*);
107   static bool CalculateThreeDEnabled(LocalFrame*);
108   static bool CalculateInImmersiveMode(LocalFrame*);
109   static ui::PointerType CalculatePrimaryPointerType(LocalFrame*);
110   static int CalculateAvailablePointerTypes(LocalFrame*);
111   static ui::HoverType CalculatePrimaryHoverType(LocalFrame*);
112   static int CalculateAvailableHoverTypes(LocalFrame*);
113   static ColorSpaceGamut CalculateColorGamut(LocalFrame*);
114   static mojom::blink::PreferredColorScheme CalculatePreferredColorScheme(
115       LocalFrame*);
116   static mojom::blink::PreferredContrast CalculatePreferredContrast(
117       LocalFrame*);
118   static bool CalculatePrefersReducedMotion(LocalFrame*);
119   static bool CalculatePrefersReducedData(LocalFrame*);
120   static ForcedColors CalculateForcedColors();
121   static NavigationControls CalculateNavigationControls(LocalFrame*);
122   static ScreenSpanning CalculateScreenSpanning(LocalFrame*);
123 };
124 
125 }  // namespace blink
126 
127 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_H_
128