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 MediaValues_h 6#define MediaValues_h 7 8#include "core/css/CSSPrimitiveValue.h" 9#include "core/css/PointerProperties.h" 10#include "wtf/RefCounted.h" 11#include "wtf/RefPtr.h" 12 13namespace blink { 14 15class Document; 16class CSSPrimitiveValue; 17class LocalFrame; 18 19class MediaValues : public RefCounted<MediaValues> { 20public: 21 22 enum MediaValuesMode { 23 CachingMode, 24 DynamicMode 25 }; 26 27 virtual ~MediaValues() { } 28 29 static PassRefPtr<MediaValues> createDynamicIfFrameExists(LocalFrame*); 30 virtual PassRefPtr<MediaValues> copy() const = 0; 31 virtual bool isSafeToSendToAnotherThread() const = 0; 32 33 static bool computeLengthImpl(double value, CSSPrimitiveValue::UnitType, unsigned defaultFontSize, unsigned viewportWidth, unsigned viewportHeight, double& result); 34 template<typename T> 35 static bool computeLength(double value, CSSPrimitiveValue::UnitType type, unsigned defaultFontSize, unsigned viewportWidth, unsigned viewportHeight, T& result) 36 { 37 double tempResult; 38 if (!computeLengthImpl(value, type, defaultFontSize, viewportWidth, viewportHeight, tempResult)) 39 return false; 40 result = roundForImpreciseConversion<T>(tempResult); 41 return true; 42 } 43 virtual bool computeLength(double value, CSSPrimitiveValue::UnitType, int& result) const = 0; 44 virtual bool computeLength(double value, CSSPrimitiveValue::UnitType, double& result) const = 0; 45 46 virtual int viewportWidth() const = 0; 47 virtual int viewportHeight() const = 0; 48 virtual int deviceWidth() const = 0; 49 virtual int deviceHeight() const = 0; 50 virtual float devicePixelRatio() const = 0; 51 virtual int colorBitsPerComponent() const = 0; 52 virtual int monochromeBitsPerComponent() const = 0; 53 virtual PointerType primaryPointerType() const = 0; 54 virtual int availablePointerTypes() const = 0; 55 virtual HoverType primaryHoverType() const = 0; 56 virtual int availableHoverTypes() const = 0; 57 virtual bool threeDEnabled() const = 0; 58 virtual const String mediaType() const = 0; 59 virtual bool strictMode() const = 0; 60 virtual Document* document() const = 0; 61 virtual bool hasValues() const = 0; 62 63protected: 64 int calculateViewportWidth(LocalFrame*) const; 65 int calculateViewportHeight(LocalFrame*) const; 66 int calculateDeviceWidth(LocalFrame*) const; 67 int calculateDeviceHeight(LocalFrame*) const; 68 bool calculateStrictMode(LocalFrame*) const; 69 float calculateDevicePixelRatio(LocalFrame*) const; 70 int calculateColorBitsPerComponent(LocalFrame*) const; 71 int calculateMonochromeBitsPerComponent(LocalFrame*) const; 72 int calculateDefaultFontSize(LocalFrame*) const; 73 const String calculateMediaType(LocalFrame*) const; 74 bool calculateThreeDEnabled(LocalFrame*) const; 75 PointerType calculatePrimaryPointerType(LocalFrame*) const; 76 int calculateAvailablePointerTypes(LocalFrame*) const; 77 HoverType calculatePrimaryHoverType(LocalFrame*) const; 78 int calculateAvailableHoverTypes(LocalFrame*) const; 79 static LocalFrame* frameFrom(Document&); 80 81}; 82 83} // namespace 84 85#endif // MediaValues_h 86