Home | History | Annotate | Download | only in css
      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 #include "config.h"
      6 #include "core/css/MediaValuesCached.h"
      7 
      8 #include "core/css/CSSPrimitiveValue.h"
      9 #include "core/dom/Document.h"
     10 #include "core/frame/LocalFrame.h"
     11 #include "core/rendering/RenderObject.h"
     12 
     13 namespace blink {
     14 
     15 PassRefPtr<MediaValues> MediaValuesCached::create()
     16 {
     17     return adoptRef(new MediaValuesCached());
     18 }
     19 
     20 PassRefPtr<MediaValues> MediaValuesCached::create(MediaValuesCachedData& data)
     21 {
     22     return adoptRef(new MediaValuesCached(data));
     23 }
     24 
     25 PassRefPtr<MediaValues> MediaValuesCached::create(Document& document)
     26 {
     27     return MediaValuesCached::create(frameFrom(document));
     28 }
     29 
     30 PassRefPtr<MediaValues> MediaValuesCached::create(LocalFrame* frame)
     31 {
     32     // FIXME - Added an assert here so we can better understand when a frame is present without its view().
     33     ASSERT(!frame || frame->view());
     34     // FIXME - Because of crbug.com/371084, document()->renderView() may be null here.
     35     if (!frame || !frame->view() || !frame->document() || !frame->document()->renderView())
     36         return adoptRef(new MediaValuesCached());
     37     return adoptRef(new MediaValuesCached(frame));
     38 }
     39 
     40 MediaValuesCached::MediaValuesCached()
     41 {
     42 }
     43 
     44 MediaValuesCached::MediaValuesCached(LocalFrame* frame)
     45 {
     46     ASSERT(isMainThread());
     47     ASSERT(frame);
     48     // In case that frame is missing (e.g. for images that their document does not have a frame)
     49     // We simply leave the MediaValues object with the default MediaValuesCachedData values.
     50     m_data.viewportWidth = calculateViewportWidth(frame);
     51     m_data.viewportHeight = calculateViewportHeight(frame);
     52     m_data.deviceWidth = calculateDeviceWidth(frame);
     53     m_data.deviceHeight = calculateDeviceHeight(frame);
     54     m_data.devicePixelRatio = calculateDevicePixelRatio(frame);
     55     m_data.colorBitsPerComponent = calculateColorBitsPerComponent(frame);
     56     m_data.monochromeBitsPerComponent = calculateMonochromeBitsPerComponent(frame);
     57     m_data.primaryPointerType = calculatePrimaryPointerType(frame);
     58     m_data.availablePointerTypes = calculateAvailablePointerTypes(frame);
     59     m_data.primaryHoverType = calculatePrimaryHoverType(frame);
     60     m_data.availableHoverTypes = calculateAvailableHoverTypes(frame);
     61     m_data.defaultFontSize = calculateDefaultFontSize(frame);
     62     m_data.threeDEnabled = calculateThreeDEnabled(frame);
     63     m_data.strictMode = calculateStrictMode(frame);
     64     const String mediaType = calculateMediaType(frame);
     65     if (!mediaType.isEmpty())
     66         m_data.mediaType = mediaType.isolatedCopy();
     67 }
     68 
     69 MediaValuesCached::MediaValuesCached(const MediaValuesCachedData& data)
     70     : m_data(data)
     71 {
     72 }
     73 
     74 PassRefPtr<MediaValues> MediaValuesCached::copy() const
     75 {
     76     return adoptRef(new MediaValuesCached(m_data));
     77 }
     78 
     79 bool MediaValuesCached::computeLength(double value, CSSPrimitiveValue::UnitType type, int& result) const
     80 {
     81     return MediaValues::computeLength(value, type, m_data.defaultFontSize, m_data.viewportWidth, m_data.viewportHeight, result);
     82 }
     83 
     84 bool MediaValuesCached::computeLength(double value, CSSPrimitiveValue::UnitType type, double& result) const
     85 {
     86     return MediaValues::computeLength(value, type, m_data.defaultFontSize, m_data.viewportWidth, m_data.viewportHeight, result);
     87 }
     88 
     89 bool MediaValuesCached::isSafeToSendToAnotherThread() const
     90 {
     91     return hasOneRef();
     92 }
     93 
     94 int MediaValuesCached::viewportWidth() const
     95 {
     96     return m_data.viewportWidth;
     97 }
     98 
     99 int MediaValuesCached::viewportHeight() const
    100 {
    101     return m_data.viewportHeight;
    102 }
    103 
    104 int MediaValuesCached::deviceWidth() const
    105 {
    106     return m_data.deviceWidth;
    107 }
    108 
    109 int MediaValuesCached::deviceHeight() const
    110 {
    111     return m_data.deviceHeight;
    112 }
    113 
    114 float MediaValuesCached::devicePixelRatio() const
    115 {
    116     return m_data.devicePixelRatio;
    117 }
    118 
    119 int MediaValuesCached::colorBitsPerComponent() const
    120 {
    121     return m_data.colorBitsPerComponent;
    122 }
    123 
    124 int MediaValuesCached::monochromeBitsPerComponent() const
    125 {
    126     return m_data.monochromeBitsPerComponent;
    127 }
    128 
    129 PointerType MediaValuesCached::primaryPointerType() const
    130 {
    131     return m_data.primaryPointerType;
    132 }
    133 
    134 int MediaValuesCached::availablePointerTypes() const
    135 {
    136     return m_data.availablePointerTypes;
    137 }
    138 
    139 HoverType MediaValuesCached::primaryHoverType() const
    140 {
    141     return m_data.primaryHoverType;
    142 }
    143 
    144 int MediaValuesCached::availableHoverTypes() const
    145 {
    146     return m_data.availableHoverTypes;
    147 }
    148 
    149 bool MediaValuesCached::threeDEnabled() const
    150 {
    151     return m_data.threeDEnabled;
    152 }
    153 
    154 bool MediaValuesCached::strictMode() const
    155 {
    156     return m_data.strictMode;
    157 }
    158 const String MediaValuesCached::mediaType() const
    159 {
    160     return m_data.mediaType;
    161 }
    162 
    163 Document* MediaValuesCached::document() const
    164 {
    165     return 0;
    166 }
    167 
    168 bool MediaValuesCached::hasValues() const
    169 {
    170     return true;
    171 }
    172 
    173 } // namespace
    174