Chromium Code Reviews| Index: Source/core/dom/CompositorProxy.cpp |
| diff --git a/Source/core/dom/CompositorProxy.cpp b/Source/core/dom/CompositorProxy.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d2282b7cf1c09867e7af806042c66fc0f616e612 |
| --- /dev/null |
| +++ b/Source/core/dom/CompositorProxy.cpp |
| @@ -0,0 +1,83 @@ |
| +// Copyright 2015 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/dom/CompositorProxy.h" |
| + |
| +#include "bindings/core/v8/ExceptionMessages.h" |
| +#include "bindings/core/v8/ExceptionState.h" |
| +#include "core/dom/ExecutionContext.h" |
| +#include "core/inspector/InspectorNodeIds.h" |
| + |
| +namespace blink { |
| + |
| +static struct { |
| + const char* name; |
| + CompositorProxy::Attributes attribute; |
| +} allowedAttributes[] = { |
|
esprehn
2015/03/25 23:21:48
Lets declare the struct and the usage separately,
sadrul
2015/03/27 17:23:28
Done.
|
| + { "opacity", CompositorProxy::Attributes::OPACITY }, |
| + { "scrolltop", CompositorProxy::Attributes::SCROLL_TOP }, |
| + { "touch", CompositorProxy::Attributes::TOUCH }, |
| + { "transform", CompositorProxy::Attributes::TRANSFORM }, |
| +}; |
| + |
| +CompositorProxy* CompositorProxy::create(ExecutionContext* context, Element* element, Vector<String>& attributeArray, ExceptionState& exceptionState) |
|
esprehn
2015/03/25 23:21:48
OwnPtr, this leaks when not in Oilpan mode.
|
| +{ |
| + if (!context->isDocument()) { |
| + exceptionState.throwTypeError(ExceptionMessages::failedToConstruct("CompositorProxy", "Can only be created from the main context.")); |
| + exceptionState.throwIfNeeded(); |
| + return nullptr; |
| + } |
| + |
| + uint32_t attributeFlags = 0; |
| + for (const auto& attribute : attributeArray) { |
| + Attributes currentAttribute = Attributes::NONE; |
| + for (unsigned i = 0; i < arraysize(allowedAttributes); ++i) { |
| + if (attribute.lower() == allowedAttributes[i].name) { |
|
esprehn
2015/03/25 23:21:48
Call .lower() first and then use std::lower_bound
sadrul
2015/03/27 17:23:28
Done.
|
| + currentAttribute = allowedAttributes[i].attribute; |
| + } |
| + } |
| + if (currentAttribute == Attributes::NONE) { |
| + exceptionState.throwTypeError("Unknown attribute'" + attribute + "'"); |
| + exceptionState.throwIfNeeded(); |
| + return nullptr; |
| + } |
| + attributeFlags |= static_cast<uint32_t>(currentAttribute); |
| + } |
| + |
| + ASSERT(attributeFlags); |
|
esprehn
2015/03/25 23:21:48
This assert should be in the constructor?
sadrul
2015/03/27 17:23:28
Done.
|
| + return new CompositorProxy(element, attributeFlags); |
| +} |
| + |
| +CompositorProxy* CompositorProxy::create(uint64_t elementId, uint32_t attributeFlags) |
| +{ |
| + ASSERT(!isMainThread()); |
|
esprehn
2015/03/25 23:21:48
Move this assert into the constructor.
sadrul
2015/03/27 17:23:28
Done.
|
| +#ifndef NDEBUG |
| + uint32_t sanityCheckAttributes = attributeFlags; |
|
esprehn
2015/03/25 23:21:48
This assert block for sanity checking should be in
sadrul
2015/03/27 17:23:28
Done.
|
| + for (unsigned i = 0; i < arraysize(allowedAttributes); ++i) { |
| + sanityCheckAttributes &= ~static_cast<uint32_t>(allowedAttributes[i].attribute); |
| + } |
| + ASSERT(!sanityCheckAttributes); |
| +#endif |
| + return new CompositorProxy(elementId, attributeFlags); |
| +} |
| + |
| +CompositorProxy::CompositorProxy(Element* element, uint32_t attributeFlags) |
|
esprehn
2015/03/25 23:21:48
reference
sadrul
2015/03/27 17:23:28
Done.
|
| + : m_elementId(InspectorNodeIds::idForNode(element)) |
|
esprehn
2015/03/25 23:21:48
We should move InspectorNodeIds into code in a fir
sadrul
2015/03/27 17:23:28
Done. (https://codereview.chromium.org/997073004/)
|
| + , m_attributes(attributeFlags) |
| +{ |
| + ASSERT(isMainThread()); |
| +} |
| + |
| +CompositorProxy::CompositorProxy(uint64_t elementId, uint32_t attributeFlags) |
| + : m_elementId(elementId) |
| + , m_attributes(attributeFlags) |
| +{ |
| +} |
| + |
| +CompositorProxy::~CompositorProxy() |
| +{ |
| +} |
| + |
| +} // namespace blink |