summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/css/MediaValuesCached.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/css/MediaValuesCached.cpp')
-rw-r--r--chromium/third_party/WebKit/Source/core/css/MediaValuesCached.cpp169
1 files changed, 169 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/core/css/MediaValuesCached.cpp b/chromium/third_party/WebKit/Source/core/css/MediaValuesCached.cpp
new file mode 100644
index 00000000000..570a3a51709
--- /dev/null
+++ b/chromium/third_party/WebKit/Source/core/css/MediaValuesCached.cpp
@@ -0,0 +1,169 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "config.h"
+#include "core/css/MediaValuesCached.h"
+
+#include "core/css/CSSPrimitiveValue.h"
+#include "core/dom/Document.h"
+#include "core/frame/LocalFrame.h"
+#include "core/html/imports/HTMLImportsController.h"
+#include "core/rendering/RenderObject.h"
+
+namespace WebCore {
+
+PassRefPtr<MediaValues> MediaValuesCached::create()
+{
+ return adoptRef(new MediaValuesCached());
+}
+
+PassRefPtr<MediaValues> MediaValuesCached::create(MediaValuesCachedData& data)
+{
+ return adoptRef(new MediaValuesCached(data));
+}
+
+PassRefPtr<MediaValues> MediaValuesCached::create(Document& document)
+{
+ Document* executingDocument = document.importsController() ? document.importsController()->master() : &document;
+ ASSERT(executingDocument);
+ return MediaValuesCached::create(executingDocument->frame());
+}
+
+PassRefPtr<MediaValues> MediaValuesCached::create(LocalFrame* frame)
+{
+ // FIXME - Added an assert here so we can better understand when a frame is present without its view().
+ ASSERT(!frame || frame->view());
+ // FIXME - Because of crbug.com/371084, document()->renderView() may be null here.
+ if (!frame || !frame->view() || !frame->document() || !frame->document()->renderView())
+ return adoptRef(new MediaValuesCached());
+ return adoptRef(new MediaValuesCached(frame));
+}
+
+MediaValuesCached::MediaValuesCached()
+{
+}
+
+MediaValuesCached::MediaValuesCached(LocalFrame* frame)
+{
+ ASSERT(isMainThread());
+ ASSERT(frame);
+ // In case that frame is missing (e.g. for images that their document does not have a frame)
+ // We simply leave the MediaValues object with the default MediaValuesCachedData values.
+ m_data.viewportWidth = calculateViewportWidth(frame);
+ m_data.viewportHeight = calculateViewportHeight(frame);
+ m_data.deviceWidth = calculateDeviceWidth(frame);
+ m_data.deviceHeight = calculateDeviceHeight(frame);
+ m_data.devicePixelRatio = calculateDevicePixelRatio(frame);
+ m_data.colorBitsPerComponent = calculateColorBitsPerComponent(frame);
+ m_data.monochromeBitsPerComponent = calculateMonochromeBitsPerComponent(frame);
+ m_data.pointer = calculateLeastCapablePrimaryPointerDeviceType(frame);
+ m_data.defaultFontSize = calculateDefaultFontSize(frame);
+ m_data.threeDEnabled = calculateThreeDEnabled(frame);
+ m_data.scanMediaType = calculateScanMediaType(frame);
+ m_data.screenMediaType = calculateScreenMediaType(frame);
+ m_data.printMediaType = calculatePrintMediaType(frame);
+ m_data.strictMode = calculateStrictMode(frame);
+}
+
+MediaValuesCached::MediaValuesCached(const MediaValuesCachedData& data)
+ : m_data(data)
+{
+}
+
+PassRefPtr<MediaValues> MediaValuesCached::copy() const
+{
+ return adoptRef(new MediaValuesCached(m_data));
+}
+
+bool MediaValuesCached::computeLength(double value, CSSPrimitiveValue::UnitType type, int& result) const
+{
+ return MediaValues::computeLength(value, type, m_data.defaultFontSize, m_data.viewportWidth, m_data.viewportHeight, result);
+}
+
+bool MediaValuesCached::computeLength(double value, CSSPrimitiveValue::UnitType type, double& result) const
+{
+ return MediaValues::computeLength(value, type, m_data.defaultFontSize, m_data.viewportWidth, m_data.viewportHeight, result);
+}
+
+bool MediaValuesCached::isSafeToSendToAnotherThread() const
+{
+ return hasOneRef();
+}
+
+int MediaValuesCached::viewportWidth() const
+{
+ return m_data.viewportWidth;
+}
+
+int MediaValuesCached::viewportHeight() const
+{
+ return m_data.viewportHeight;
+}
+
+int MediaValuesCached::deviceWidth() const
+{
+ return m_data.deviceWidth;
+}
+
+int MediaValuesCached::deviceHeight() const
+{
+ return m_data.deviceHeight;
+}
+
+float MediaValuesCached::devicePixelRatio() const
+{
+ return m_data.devicePixelRatio;
+}
+
+int MediaValuesCached::colorBitsPerComponent() const
+{
+ return m_data.colorBitsPerComponent;
+}
+
+int MediaValuesCached::monochromeBitsPerComponent() const
+{
+ return m_data.monochromeBitsPerComponent;
+}
+
+MediaValues::PointerDeviceType MediaValuesCached::pointer() const
+{
+ return m_data.pointer;
+}
+
+bool MediaValuesCached::threeDEnabled() const
+{
+ return m_data.threeDEnabled;
+}
+
+bool MediaValuesCached::scanMediaType() const
+{
+ return m_data.scanMediaType;
+}
+
+bool MediaValuesCached::screenMediaType() const
+{
+ return m_data.screenMediaType;
+}
+
+bool MediaValuesCached::printMediaType() const
+{
+ return m_data.printMediaType;
+}
+
+bool MediaValuesCached::strictMode() const
+{
+ return m_data.strictMode;
+}
+
+Document* MediaValuesCached::document() const
+{
+ return 0;
+}
+
+bool MediaValuesCached::hasValues() const
+{
+ return true;
+}
+
+} // namespace