Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(487)

Unified Diff: Source/core/dom/CompositorProxy.cpp

Issue 1025893002: compositor-worker: Add mutable attributes to CompositorProxy. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/dom/CompositorProxy.cpp
diff --git a/Source/core/dom/CompositorProxy.cpp b/Source/core/dom/CompositorProxy.cpp
index 088ee933df679f4246e048335c280b1375a8c8f8..21ce9ab4fa707c105668305f6288871fc4321ead 100644
--- a/Source/core/dom/CompositorProxy.cpp
+++ b/Source/core/dom/CompositorProxy.cpp
@@ -31,6 +31,30 @@ static uint64_t compositorProxyIdForElement(Element* element)
return gElementIdMap->get(element);
}
+static bool isControlThread()
+{
+ return !isMainThread();
+}
+
+static bool isCallingCompositorFrameCallback()
+{
+ // TODO(sad):
+ return true;
+}
+
+static bool raiseExceptionIfMutationNotAllowed(ExceptionState& exceptionState)
+{
+ if (!isControlThread()) {
+ exceptionState.throwTypeError("Cannot mutate a proxy attribute from the main page.");
+ return true;
+ }
+ if (!isCallingCompositorFrameCallback()) {
+ exceptionState.throwTypeError("Cannot mutate a proxy attribute outside of a requestCompositorFrame callback.");
+ return true;
+ }
+ return false;
+}
+
static struct {
const char* name;
CompositorProxy::Attributes attribute;
@@ -78,7 +102,7 @@ CompositorProxy* CompositorProxy::create(ExecutionContext* context, Element* ele
CompositorProxy* CompositorProxy::create(uint64_t elementId, uint32_t attributeFlags)
{
- ASSERT(!isMainThread());
+ ASSERT(isControlThread());
#ifndef NDEBUG
uint32_t sanityCheckAttributes = attributeFlags;
for (unsigned i = 0; i < arraysize(allowedAttributes); ++i) {
@@ -91,7 +115,8 @@ CompositorProxy* CompositorProxy::create(uint64_t elementId, uint32_t attributeF
CompositorProxy::CompositorProxy(Element* element, uint32_t attributeFlags)
: m_elementId(compositorProxyIdForElement(element))
- , m_attributes(attributeFlags)
+ , m_mutableAttributes(attributeFlags)
+ , m_mutatedAttributes(0)
{
ASSERT(isMainThread());
ASSERT(gElementMap);
@@ -100,7 +125,8 @@ CompositorProxy::CompositorProxy(Element* element, uint32_t attributeFlags)
CompositorProxy::CompositorProxy(uint64_t elementId, uint32_t attributeFlags)
: m_elementId(elementId)
- , m_attributes(attributeFlags)
+ , m_mutableAttributes(attributeFlags)
+ , m_mutatedAttributes(0)
{
}
@@ -117,4 +143,67 @@ void CompositorProxy::notifyElementGone(Element* element)
gElementMap->remove(gElementIdMap->take(element));
}
+double CompositorProxy::opacity(ExceptionState& exceptionState) const
+{
+ if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
+ return 0.0;
+ return m_opacity;
+}
+
+double CompositorProxy::scrollTop(ExceptionState& exceptionState) const
+{
+ if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
+ return 0.0;
+ return m_scrollTop;
+}
+
+Vector<double> CompositorProxy::transform(ExceptionState& exceptionState) const
+{
+ if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
+ return Vector<double>();
+ return Vector<double>(m_transform);
+}
+
+void CompositorProxy::setOpacity(double opacity, ExceptionState& exceptionState)
+{
+ if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
+ return;
+ if (UNLIKELY(raiseExceptionIfNotMutable(Attributes::OPACITY, exceptionState)))
+ return;
+ m_opacity = opacity;
+ m_mutatedAttributes |= static_cast<uint32_t>(Attributes::OPACITY);
+}
+
+void CompositorProxy::setScrollTop(double scrollTop, ExceptionState& exceptionState)
+{
+ if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
+ return;
+ if (UNLIKELY(raiseExceptionIfNotMutable(Attributes::SCROLL_TOP, exceptionState)))
+ return;
+ m_scrollTop = scrollTop;
+ m_mutatedAttributes |= static_cast<uint32_t>(Attributes::SCROLL_TOP);
+}
+
+void CompositorProxy::setTransform(const Vector<double>& transform, ExceptionState& exceptionState)
+{
+ if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
+ return;
+ if (UNLIKELY(raiseExceptionIfNotMutable(Attributes::TRANSFORM, exceptionState)))
+ return;
+ if (UNLIKELY(transform.size() != m_transform.size())) {
+ exceptionState.throwTypeError("Incorrect size of the transform array.");
+ return;
+ }
+ m_transform = transform;
+ m_mutatedAttributes |= static_cast<uint32_t>(Attributes::TRANSFORM);
+}
+
+bool CompositorProxy::raiseExceptionIfNotMutable(Attributes attribute, ExceptionState& exceptionState) const
+{
+ if (m_mutableAttributes & static_cast<uint32_t>(attribute))
+ return false;
+ exceptionState.throwTypeError("Attempted to mutate non-mutable attribute.");
+ return true;
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698