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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/dom/CompositorProxy.h" 6 #include "core/dom/CompositorProxy.h"
7 7
8 #include "bindings/core/v8/ExceptionMessages.h" 8 #include "bindings/core/v8/ExceptionMessages.h"
9 #include "bindings/core/v8/ExceptionState.h" 9 #include "bindings/core/v8/ExceptionState.h"
10 #include "core/dom/ExecutionContext.h" 10 #include "core/dom/ExecutionContext.h"
(...skipping 13 matching lines...) Expand all
24 } 24 }
25 25
26 static uint64_t compositorProxyIdForElement(Element* element) 26 static uint64_t compositorProxyIdForElement(Element* element)
27 { 27 {
28 ASSERT(gElementIdMap); 28 ASSERT(gElementIdMap);
29 if (!gElementIdMap->contains(element)) 29 if (!gElementIdMap->contains(element))
30 gElementIdMap->add(element, nextCompositorProxyId()); 30 gElementIdMap->add(element, nextCompositorProxyId());
31 return gElementIdMap->get(element); 31 return gElementIdMap->get(element);
32 } 32 }
33 33
34 static bool isControlThread()
35 {
36 return !isMainThread();
37 }
38
39 static bool isCallingCompositorFrameCallback()
40 {
41 // TODO(sad):
42 return true;
43 }
44
45 static bool raiseExceptionIfMutationNotAllowed(ExceptionState& exceptionState)
46 {
47 if (!isControlThread()) {
48 exceptionState.throwTypeError("Cannot mutate a proxy attribute from the main page.");
49 return true;
50 }
51 if (!isCallingCompositorFrameCallback()) {
52 exceptionState.throwTypeError("Cannot mutate a proxy attribute outside o f a requestCompositorFrame callback.");
53 return true;
54 }
55 return false;
56 }
57
34 static struct { 58 static struct {
35 const char* name; 59 const char* name;
36 CompositorProxy::Attributes attribute; 60 CompositorProxy::Attributes attribute;
37 } allowedAttributes[] = { 61 } allowedAttributes[] = {
38 { "opacity", CompositorProxy::Attributes::OPACITY }, 62 { "opacity", CompositorProxy::Attributes::OPACITY },
39 { "scrolltop", CompositorProxy::Attributes::SCROLL_TOP }, 63 { "scrolltop", CompositorProxy::Attributes::SCROLL_TOP },
40 { "touch", CompositorProxy::Attributes::TOUCH }, 64 { "touch", CompositorProxy::Attributes::TOUCH },
41 { "transform", CompositorProxy::Attributes::TRANSFORM }, 65 { "transform", CompositorProxy::Attributes::TRANSFORM },
42 }; 66 };
43 67
(...skipping 27 matching lines...) Expand all
71 gElementMap = new ElementMap; 95 gElementMap = new ElementMap;
72 gElementIdMap = new ElementIdMap; 96 gElementIdMap = new ElementIdMap;
73 } else { 97 } else {
74 ASSERT(gElementIdMap); 98 ASSERT(gElementIdMap);
75 } 99 }
76 return new CompositorProxy(element, attributeFlags); 100 return new CompositorProxy(element, attributeFlags);
77 } 101 }
78 102
79 CompositorProxy* CompositorProxy::create(uint64_t elementId, uint32_t attributeF lags) 103 CompositorProxy* CompositorProxy::create(uint64_t elementId, uint32_t attributeF lags)
80 { 104 {
81 ASSERT(!isMainThread()); 105 ASSERT(isControlThread());
82 #ifndef NDEBUG 106 #ifndef NDEBUG
83 uint32_t sanityCheckAttributes = attributeFlags; 107 uint32_t sanityCheckAttributes = attributeFlags;
84 for (unsigned i = 0; i < arraysize(allowedAttributes); ++i) { 108 for (unsigned i = 0; i < arraysize(allowedAttributes); ++i) {
85 sanityCheckAttributes &= ~static_cast<uint32_t>(allowedAttributes[i].att ribute); 109 sanityCheckAttributes &= ~static_cast<uint32_t>(allowedAttributes[i].att ribute);
86 } 110 }
87 ASSERT(!sanityCheckAttributes); 111 ASSERT(!sanityCheckAttributes);
88 #endif 112 #endif
89 return new CompositorProxy(elementId, attributeFlags); 113 return new CompositorProxy(elementId, attributeFlags);
90 } 114 }
91 115
92 CompositorProxy::CompositorProxy(Element* element, uint32_t attributeFlags) 116 CompositorProxy::CompositorProxy(Element* element, uint32_t attributeFlags)
93 : m_elementId(compositorProxyIdForElement(element)) 117 : m_elementId(compositorProxyIdForElement(element))
94 , m_attributes(attributeFlags) 118 , m_mutableAttributes(attributeFlags)
119 , m_mutatedAttributes(0)
95 { 120 {
96 ASSERT(isMainThread()); 121 ASSERT(isMainThread());
97 ASSERT(gElementMap); 122 ASSERT(gElementMap);
98 gElementMap->add(m_elementId, element); 123 gElementMap->add(m_elementId, element);
99 } 124 }
100 125
101 CompositorProxy::CompositorProxy(uint64_t elementId, uint32_t attributeFlags) 126 CompositorProxy::CompositorProxy(uint64_t elementId, uint32_t attributeFlags)
102 : m_elementId(elementId) 127 : m_elementId(elementId)
103 , m_attributes(attributeFlags) 128 , m_mutableAttributes(attributeFlags)
129 , m_mutatedAttributes(0)
104 { 130 {
105 } 131 }
106 132
107 CompositorProxy::~CompositorProxy() 133 CompositorProxy::~CompositorProxy()
108 { 134 {
109 } 135 }
110 136
111 void CompositorProxy::notifyElementGone(Element* element) 137 void CompositorProxy::notifyElementGone(Element* element)
112 { 138 {
113 ASSERT(isMainThread()); 139 ASSERT(isMainThread());
114 if (!gElementMap) 140 if (!gElementMap)
115 return; 141 return;
116 142
117 gElementMap->remove(gElementIdMap->take(element)); 143 gElementMap->remove(gElementIdMap->take(element));
118 } 144 }
119 145
146 double CompositorProxy::opacity(ExceptionState& exceptionState) const
147 {
148 if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
149 return 0.0;
150 return m_opacity;
151 }
152
153 double CompositorProxy::scrollTop(ExceptionState& exceptionState) const
154 {
155 if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
156 return 0.0;
157 return m_scrollTop;
158 }
159
160 Vector<double> CompositorProxy::transform(ExceptionState& exceptionState) const
161 {
162 if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
163 return Vector<double>();
164 return Vector<double>(m_transform);
165 }
166
167 void CompositorProxy::setOpacity(double opacity, ExceptionState& exceptionState)
168 {
169 if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
170 return;
171 if (UNLIKELY(raiseExceptionIfNotMutable(Attributes::OPACITY, exceptionState) ))
172 return;
173 m_opacity = opacity;
174 m_mutatedAttributes |= static_cast<uint32_t>(Attributes::OPACITY);
175 }
176
177 void CompositorProxy::setScrollTop(double scrollTop, ExceptionState& exceptionSt ate)
178 {
179 if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
180 return;
181 if (UNLIKELY(raiseExceptionIfNotMutable(Attributes::SCROLL_TOP, exceptionSta te)))
182 return;
183 m_scrollTop = scrollTop;
184 m_mutatedAttributes |= static_cast<uint32_t>(Attributes::SCROLL_TOP);
185 }
186
187 void CompositorProxy::setTransform(const Vector<double>& transform, ExceptionSta te& exceptionState)
188 {
189 if (UNLIKELY(raiseExceptionIfMutationNotAllowed(exceptionState)))
190 return;
191 if (UNLIKELY(raiseExceptionIfNotMutable(Attributes::TRANSFORM, exceptionStat e)))
192 return;
193 if (UNLIKELY(transform.size() != m_transform.size())) {
194 exceptionState.throwTypeError("Incorrect size of the transform array.");
195 return;
196 }
197 m_transform = transform;
198 m_mutatedAttributes |= static_cast<uint32_t>(Attributes::TRANSFORM);
199 }
200
201 bool CompositorProxy::raiseExceptionIfNotMutable(Attributes attribute, Exception State& exceptionState) const
202 {
203 if (m_mutableAttributes & static_cast<uint32_t>(attribute))
204 return false;
205 exceptionState.throwTypeError("Attempted to mutate non-mutable attribute.");
206 return true;
207 }
208
120 } // namespace blink 209 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698