| Index: Source/bindings/v8/ScriptFunction.h
|
| diff --git a/Source/core/testing/LayerRect.h b/Source/bindings/v8/ScriptFunction.h
|
| similarity index 61%
|
| copy from Source/core/testing/LayerRect.h
|
| copy to Source/bindings/v8/ScriptFunction.h
|
| index 4827feee4f2476d200f0a986a73c81ca9cb4d020..a47c4515b3e8e93affc72daa17ad196d0d20c6ed 100644
|
| --- a/Source/core/testing/LayerRect.h
|
| +++ b/Source/bindings/v8/ScriptFunction.h
|
| @@ -28,42 +28,40 @@
|
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| */
|
|
|
| -#ifndef LayerRect_h
|
| -#define LayerRect_h
|
| +#ifndef ScriptFunction_h
|
| +#define ScriptFunction_h
|
|
|
| -#include "core/dom/ClientRect.h"
|
| -
|
| -#include "wtf/PassRefPtr.h"
|
| +#include "bindings/v8/GarbageCollected.h"
|
| +#include "bindings/v8/ScriptValue.h"
|
| +#include "bindings/v8/V8Binding.h"
|
| #include "wtf/RefCounted.h"
|
| -#include "wtf/RefPtr.h"
|
| -#include "wtf/text/WTFString.h"
|
| +#include <v8.h>
|
|
|
| namespace WebCore {
|
|
|
| -class Node;
|
| -
|
| -class LayerRect : public RefCounted<LayerRect> {
|
| -public:
|
| - static PassRefPtr<LayerRect> create(PassRefPtr<Node> node, const String& layerType, PassRefPtr<ClientRect> rect)
|
| +class ScriptFunction : public GarbageCollected<ScriptFunction> {
|
| +protected:
|
| + v8::Handle<v8::Function> releaseToV8Function()
|
| {
|
| - return adoptRef(new LayerRect(node, layerType, rect));
|
| + // FIXME: We need to call v8::Function::EvictFunctionFromCache after
|
| + // https://codereview.appspot.com/13103043/ lands.
|
| + return v8::FunctionTemplate::New(&callCallback, releaseToGarbageCollector())->GetFunction();
|
| }
|
|
|
| - Node* layerRootNode() const { return m_layerRootNode.get(); }
|
| - String layerType() const { return m_layerType; }
|
| - ClientRect* layerRelativeRect() const { return m_rect.get(); }
|
| -
|
| private:
|
| - LayerRect(PassRefPtr<Node> node, const String& layerName, PassRefPtr<ClientRect> rect)
|
| - : m_layerRootNode(node)
|
| - , m_layerType(layerName)
|
| - , m_rect(rect)
|
| + virtual ScriptValue call(ScriptValue) = 0;
|
| +
|
| + static void callCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
|
| {
|
| - }
|
| + v8::Isolate* isolate = args.GetIsolate();
|
| + ASSERT(!args.Data().IsEmpty());
|
| + ScriptFunction* function = ScriptFunction::Cast(args.Data());
|
| + v8::Local<v8::Value> value = args.Length() > 0 ? args[0] : v8::Local<v8::Value>(v8::Undefined(isolate));
|
| +
|
| + ScriptValue result = function->call(ScriptValue(value));
|
|
|
| - RefPtr<Node> m_layerRootNode;
|
| - String m_layerType;
|
| - RefPtr<ClientRect> m_rect;
|
| + v8SetReturnValue(args, result.v8Value());
|
| + }
|
| };
|
|
|
| } // namespace WebCore
|
|
|