110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// found in the LICENSE file. 410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "config.h" 610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/css/MediaValuesCached.h" 710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/css/CSSPrimitiveValue.h" 910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/dom/Document.h" 10f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/LocalFrame.h" 1110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/rendering/RenderObject.h" 1210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 1410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 1510f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochPassRefPtr<MediaValues> MediaValuesCached::create() 1610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 1710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return adoptRef(new MediaValuesCached()); 1810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 1910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 2010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochPassRefPtr<MediaValues> MediaValuesCached::create(MediaValuesCachedData& data) 2110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 2210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return adoptRef(new MediaValuesCached(data)); 2310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 2410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 2510f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochPassRefPtr<MediaValues> MediaValuesCached::create(Document& document) 2610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 27197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return MediaValuesCached::create(frameFrom(document)); 2810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 2910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 3010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochPassRefPtr<MediaValues> MediaValuesCached::create(LocalFrame* frame) 3110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 32f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu // FIXME - Added an assert here so we can better understand when a frame is present without its view(). 33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ASSERT(!frame || frame->view()); 34323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) // FIXME - Because of crbug.com/371084, document()->renderView() may be null here. 35323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (!frame || !frame->view() || !frame->document() || !frame->document()->renderView()) 3610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return adoptRef(new MediaValuesCached()); 3710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return adoptRef(new MediaValuesCached(frame)); 3810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 3910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 4010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochMediaValuesCached::MediaValuesCached() 4110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 4210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 4310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 4410f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochMediaValuesCached::MediaValuesCached(LocalFrame* frame) 4510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 4610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch ASSERT(isMainThread()); 4710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch ASSERT(frame); 4810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // In case that frame is missing (e.g. for images that their document does not have a frame) 4910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // We simply leave the MediaValues object with the default MediaValuesCachedData values. 5010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_data.viewportWidth = calculateViewportWidth(frame); 5110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_data.viewportHeight = calculateViewportHeight(frame); 5210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_data.deviceWidth = calculateDeviceWidth(frame); 5310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_data.deviceHeight = calculateDeviceHeight(frame); 5410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_data.devicePixelRatio = calculateDevicePixelRatio(frame); 5510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_data.colorBitsPerComponent = calculateColorBitsPerComponent(frame); 5610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_data.monochromeBitsPerComponent = calculateMonochromeBitsPerComponent(frame); 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_data.primaryPointerType = calculatePrimaryPointerType(frame); 587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_data.availablePointerTypes = calculateAvailablePointerTypes(frame); 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_data.primaryHoverType = calculatePrimaryHoverType(frame); 607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_data.availableHoverTypes = calculateAvailableHoverTypes(frame); 6110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_data.defaultFontSize = calculateDefaultFontSize(frame); 6210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_data.threeDEnabled = calculateThreeDEnabled(frame); 6310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_data.strictMode = calculateStrictMode(frame); 64197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch const String mediaType = calculateMediaType(frame); 65197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!mediaType.isEmpty()) 66197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch m_data.mediaType = mediaType.isolatedCopy(); 6710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 6810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 6910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochMediaValuesCached::MediaValuesCached(const MediaValuesCachedData& data) 7010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch : m_data(data) 7110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 7210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 7310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 7410f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochPassRefPtr<MediaValues> MediaValuesCached::copy() const 7510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 7610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return adoptRef(new MediaValuesCached(m_data)); 7710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 7810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 79d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)bool MediaValuesCached::computeLength(double value, CSSPrimitiveValue::UnitType type, int& result) const 80f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{ 81f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return MediaValues::computeLength(value, type, m_data.defaultFontSize, m_data.viewportWidth, m_data.viewportHeight, result); 82f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu} 83f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 84d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)bool MediaValuesCached::computeLength(double value, CSSPrimitiveValue::UnitType type, double& result) const 8510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 8610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return MediaValues::computeLength(value, type, m_data.defaultFontSize, m_data.viewportWidth, m_data.viewportHeight, result); 8710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 8810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 8910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool MediaValuesCached::isSafeToSendToAnotherThread() const 9010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 9110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return hasOneRef(); 9210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 9310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 9410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValuesCached::viewportWidth() const 9510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 9610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_data.viewportWidth; 9710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 9810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 9910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValuesCached::viewportHeight() const 10010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 10110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_data.viewportHeight; 10210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 10310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 10410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValuesCached::deviceWidth() const 10510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 10610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_data.deviceWidth; 10710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 10810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 10910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValuesCached::deviceHeight() const 11010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 11110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_data.deviceHeight; 11210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 11310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 11410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochfloat MediaValuesCached::devicePixelRatio() const 11510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 11610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_data.devicePixelRatio; 11710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 11810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 11910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValuesCached::colorBitsPerComponent() const 12010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 12110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_data.colorBitsPerComponent; 12210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 12310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 12410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValuesCached::monochromeBitsPerComponent() const 12510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 12610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_data.monochromeBitsPerComponent; 12710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 12810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPointerType MediaValuesCached::primaryPointerType() const 13010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_data.primaryPointerType; 1327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciint MediaValuesCached::availablePointerTypes() const 1357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_data.availablePointerTypes; 1377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciHoverType MediaValuesCached::primaryHoverType() const 1407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_data.primaryHoverType; 1427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciint MediaValuesCached::availableHoverTypes() const 1457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_data.availableHoverTypes; 14710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 14810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 14910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool MediaValuesCached::threeDEnabled() const 15010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 15110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_data.threeDEnabled; 15210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 15310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 15410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool MediaValuesCached::strictMode() const 15510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 15610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_data.strictMode; 15710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 158197021e6b966cfb06891637935ef33fff06433d1Ben Murdochconst String MediaValuesCached::mediaType() const 159197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 160197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return m_data.mediaType; 161197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 16210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 16310f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochDocument* MediaValuesCached::document() const 16410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 16510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return 0; 16610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 16710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 16810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool MediaValuesCached::hasValues() const 16910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 17010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return true; 17110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 17210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 17310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} // namespace 174