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