107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch// found in the LICENSE file. 407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "config.h" 607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/css/MediaValues.h" 707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/css/CSSHelper.h" 910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/css/MediaValuesCached.h" 1010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/css/MediaValuesDynamic.h" 1107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/dom/Document.h" 1207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/dom/Element.h" 1307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/frame/FrameHost.h" 1407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/frame/FrameView.h" 1507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/frame/LocalFrame.h" 1607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/frame/Settings.h" 17197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/html/imports/HTMLImportsController.h" 1807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/page/Page.h" 1907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/rendering/RenderObject.h" 2007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/rendering/RenderView.h" 2107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/rendering/compositing/RenderLayerCompositor.h" 2207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/rendering/style/RenderStyle.h" 2307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "platform/PlatformScreen.h" 2407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 25c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 2607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 2710f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochPassRefPtr<MediaValues> MediaValues::createDynamicIfFrameExists(LocalFrame* frame) 2807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 2910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch if (frame) 3010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return MediaValuesDynamic::create(frame); 3110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return MediaValuesCached::create(); 3210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 3310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 3410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValues::calculateViewportWidth(LocalFrame* frame) const 3510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 3610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch ASSERT(frame && frame->view() && frame->document()); 3707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch int viewportWidth = frame->view()->layoutSize(IncludeScrollbars).width(); 3810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return adjustForAbsoluteZoom(viewportWidth, frame->document()->renderView()); 3907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 4007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 4110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValues::calculateViewportHeight(LocalFrame* frame) const 4207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 4310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch ASSERT(frame && frame->view() && frame->document()); 4407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch int viewportHeight = frame->view()->layoutSize(IncludeScrollbars).height(); 4510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return adjustForAbsoluteZoom(viewportHeight, frame->document()->renderView()); 4607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 4707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 4810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValues::calculateDeviceWidth(LocalFrame* frame) const 4907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 5007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame && frame->view() && frame->settings() && frame->host()); 5107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch int deviceWidth = static_cast<int>(screenRect(frame->view()).width()); 5207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (frame->settings()->reportScreenSizeInPhysicalPixelsQuirk()) 5307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch deviceWidth = lroundf(deviceWidth * frame->host()->deviceScaleFactor()); 5407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return deviceWidth; 5507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 5607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 5710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValues::calculateDeviceHeight(LocalFrame* frame) const 5807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 5907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame && frame->view() && frame->settings() && frame->host()); 6007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch int deviceHeight = static_cast<int>(screenRect(frame->view()).height()); 6107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (frame->settings()->reportScreenSizeInPhysicalPixelsQuirk()) 6207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch deviceHeight = lroundf(deviceHeight * frame->host()->deviceScaleFactor()); 6307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return deviceHeight; 6407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 6507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 6610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool MediaValues::calculateStrictMode(LocalFrame* frame) const 6707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 6807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame && frame->document()); 6907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return !frame->document()->inQuirksMode(); 7007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 7107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 7210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochfloat MediaValues::calculateDevicePixelRatio(LocalFrame* frame) const 7307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 7407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return frame->devicePixelRatio(); 7507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 7607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 7710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValues::calculateColorBitsPerComponent(LocalFrame* frame) const 7807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 7907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame && frame->page() && frame->page()->mainFrame()); 805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!frame->page()->mainFrame()->isLocalFrame() 815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) || screenIsMonochrome(frame->page()->deprecatedLocalMainFrame()->view())) 8207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return 0; 8307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return screenDepthPerComponent(frame->view()); 8407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 8507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 8610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValues::calculateMonochromeBitsPerComponent(LocalFrame* frame) const 8707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 8807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame && frame->page() && frame->page()->mainFrame()); 895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!frame->page()->mainFrame()->isLocalFrame() 905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) || !screenIsMonochrome(frame->page()->deprecatedLocalMainFrame()->view())) 915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return 0; 925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return screenDepthPerComponent(frame->view()); 9307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 9407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 9510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint MediaValues::calculateDefaultFontSize(LocalFrame* frame) const 9607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 9710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return frame->host()->settings().defaultFontSize(); 9807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 9907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 100197021e6b966cfb06891637935ef33fff06433d1Ben Murdochconst String MediaValues::calculateMediaType(LocalFrame* frame) const 10107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 102197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ASSERT(frame); 103197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!frame->view()) 104197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return emptyAtom; 105197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return frame->view()->mediaType(); 10607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 10707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 10810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool MediaValues::calculateThreeDEnabled(LocalFrame* frame) const 10907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 11007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame && frame->contentRenderer() && frame->contentRenderer()->compositor()); 11107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool threeDEnabled = false; 11207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (RenderView* view = frame->contentRenderer()) 113323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) threeDEnabled = view->compositor()->hasAcceleratedCompositing(); 11407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return threeDEnabled; 11507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 11607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 1177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPointerType MediaValues::calculatePrimaryPointerType(LocalFrame* frame) const 11807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 11907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame && frame->settings()); 1207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return frame->settings()->primaryPointerType(); 1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciint MediaValues::calculateAvailablePointerTypes(LocalFrame* frame) const 1247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(frame && frame->settings()); 1267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return frame->settings()->availablePointerTypes(); 1277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 12807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciHoverType MediaValues::calculatePrimaryHoverType(LocalFrame* frame) const 1307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(frame && frame->settings()); 1327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return frame->settings()->primaryHoverType(); 1337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 13407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 1357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciint MediaValues::calculateAvailableHoverTypes(LocalFrame* frame) const 1367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(frame && frame->settings()); 1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return frame->settings()->availableHoverTypes(); 13907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 14007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 141d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)bool MediaValues::computeLengthImpl(double value, CSSPrimitiveValue::UnitType type, unsigned defaultFontSize, unsigned viewportWidth, unsigned viewportHeight, double& result) 14210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 14310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // The logic in this function is duplicated from CSSPrimitiveValue::computeLengthDouble 14410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // because MediaValues::computeLength needs nearly identical logic, but we haven't found a way to make 14510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // CSSPrimitiveValue::computeLengthDouble more generic (to solve both cases) without hurting performance. 14610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 14710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // FIXME - Unite the logic here with CSSPrimitiveValue in a performant way. 148f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu double factor = 0; 14910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch switch (type) { 15010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_EMS: 15110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_REMS: 15210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch factor = defaultFontSize; 15310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 15410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_PX: 15510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch factor = 1; 15610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 15710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_EXS: 15810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // FIXME: We have a bug right now where the zoom will be applied twice to EX units. 15910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // FIXME: We don't seem to be able to cache fontMetrics related values. 16010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // Trying to access them is triggering some sort of microtask. Serving the spec's default instead. 16110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch factor = defaultFontSize / 2.0; 16210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 16310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_CHS: 16410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // FIXME: We don't seem to be able to cache fontMetrics related values. 16510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // Trying to access them is triggering some sort of microtask. Serving the (future) spec default instead. 16610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch factor = defaultFontSize / 2.0; 16710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 16810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_VW: 169f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu factor = viewportWidth / 100.0; 17010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 17110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_VH: 172f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu factor = viewportHeight / 100.0; 17310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 17410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_VMIN: 175f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu factor = std::min(viewportWidth, viewportHeight) / 100.0; 17610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 17710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_VMAX: 178f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu factor = std::max(viewportWidth, viewportHeight) / 100.0; 17910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 18010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_CM: 18110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch factor = cssPixelsPerCentimeter; 18210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 18310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_MM: 18410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch factor = cssPixelsPerMillimeter; 18510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 18610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_IN: 18710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch factor = cssPixelsPerInch; 18810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 18910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_PT: 19010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch factor = cssPixelsPerPoint; 19110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 19210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch case CSSPrimitiveValue::CSS_PC: 19310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch factor = cssPixelsPerPica; 19410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch break; 19510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch default: 19610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return false; 19707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 19807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 199323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) ASSERT(factor > 0); 200f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu result = value * factor; 20110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return true; 20207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 20307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 204197021e6b966cfb06891637935ef33fff06433d1Ben MurdochLocalFrame* MediaValues::frameFrom(Document& document) 205197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 206197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch Document* executingDocument = document.importsController() ? document.importsController()->master() : &document; 207197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ASSERT(executingDocument); 208197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return executingDocument->frame(); 209197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 210197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 21107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} // namespace 212