From d712c6e426de836f5f2886c435ee9e252ab41113 Mon Sep 17 00:00:00 2001 From: "jianli@chromium.org" Date: Tue, 2 Jun 2009 21:09:14 +0000 Subject: [PATCH] 2009-06-02 Albert J. Wong Reviewed by Dimitri Glazkov. https://bugs.webkit.org/show_bug.cgi?id=25595 Upstream v8_utility.h functions into V8Utilities.h. This patch has some transitional code to make upstreaming easier. This code will be deleted in a few days. * bindings/v8/ScriptFunctionCall.cpp: (WebCore::ScriptFunctionCall::construct): NewInstance -> newInstance. * bindings/v8/V8Utilities.h: (WebCore::AllowAllocation::AllowAllocation): Function added. (WebCore::AllowAllocation::~AllowAllocation): Function added. (WebCore::SafeAllocation::NewInstance): Function added. * bindings/v8/WorkerContextExecutionProxy.cpp: (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): NewInstance -> newInstance. (WebCore::WorkerContextExecutionProxy::toV8): NewInstance -> newInstance. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@44366 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- WebCore/ChangeLog | 21 +++++ WebCore/bindings/v8/ScriptFunctionCall.cpp | 2 +- WebCore/bindings/v8/V8Utilities.h | 97 +++++++++++++++++++--- .../bindings/v8/WorkerContextExecutionProxy.cpp | 4 +- 4 files changed, 109 insertions(+), 15 deletions(-) diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index d4c6626..2324b4b 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,24 @@ +2009-06-02 Albert J. Wong + + Reviewed by Dimitri Glazkov. + + https://bugs.webkit.org/show_bug.cgi?id=25595 + Upstream v8_utility.h functions into V8Utilities.h. This patch has + some transitional code to make upstreaming easier. This code will + be deleted in a few days. + + * bindings/v8/ScriptFunctionCall.cpp: + (WebCore::ScriptFunctionCall::construct): NewInstance -> newInstance. + * bindings/v8/V8Utilities.h: + (WebCore::AllowAllocation::AllowAllocation): Function added. + (WebCore::AllowAllocation::~AllowAllocation): Function added. + (WebCore::SafeAllocation::NewInstance): Function added. + * bindings/v8/WorkerContextExecutionProxy.cpp: + (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): + NewInstance -> newInstance. + (WebCore::WorkerContextExecutionProxy::toV8): NewInstance -> + newInstance. + 2009-06-02 Dan Bernstein Reviewed by John Sullivan. diff --git a/WebCore/bindings/v8/ScriptFunctionCall.cpp b/WebCore/bindings/v8/ScriptFunctionCall.cpp index 58badbf..d2f7a52 100644 --- a/WebCore/bindings/v8/ScriptFunctionCall.cpp +++ b/WebCore/bindings/v8/ScriptFunctionCall.cpp @@ -156,7 +156,7 @@ ScriptObject ScriptFunctionCall::construct(bool& hadException, bool reportExcept for (size_t i = 0; i < m_arguments.size(); ++i) args[i] = m_arguments[i].v8Value(); - v8::Local result = SafeAllocation::NewInstance(constructor, m_arguments.size(), args.get()); + v8::Local result = SafeAllocation::newInstance(constructor, m_arguments.size(), args.get()); if (!scope.success()) { hadException = true; return ScriptObject(); diff --git a/WebCore/bindings/v8/V8Utilities.h b/WebCore/bindings/v8/V8Utilities.h index 7fe7e45..5769910 100644 --- a/WebCore/bindings/v8/V8Utilities.h +++ b/WebCore/bindings/v8/V8Utilities.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008, 2009 Google Inc. All rights reserved. + * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -31,23 +31,96 @@ #ifndef V8Utilities_h #define V8Utilities_h +// FIXME: Remove once chromium dependencies on v8_utility.h are removed. +#define V8UTILITIES_DEFINED 1 + #include namespace WebCore { -class Frame; -class KURL; -class String; + class Frame; + class KURL; + class String; + + // Use an array to hold dependents. It works like a ref-counted scheme. A value can be added more than once to the DOM object. + void createHiddenDependency(v8::Local, v8::Local, int cacheIndex); + void removeHiddenDependency(v8::Local, v8::Local, int cacheIndex); + + bool processingUserGesture(); + bool shouldAllowNavigation(Frame*); + KURL completeURL(const String& relativeURL); + void navigateIfAllowed(Frame*, const KURL&, bool lockHistory, bool lockBackForwardList); + + class AllowAllocation { + public: + inline AllowAllocation() + { + m_previous = m_current; + m_current = true; + } + + inline ~AllowAllocation() + { + m_current = m_previous; + } + + static bool m_current; + + private: + bool m_previous; + }; + + class SafeAllocation { + public: + static inline v8::Local newInstance(v8::Handle); + static inline v8::Local newInstance(v8::Handle); + static inline v8::Local newInstance(v8::Handle, int argc, v8::Handle argv[]); + + // FIXME: These NewInstance functions are here to ease upstreaming. Remove along with V8UTILITIES_DEFINED once chromium dependencies on v8_utility.h are removed. + static inline v8::Local NewInstance(v8::Handle); + static inline v8::Local NewInstance(v8::Handle); + static inline v8::Local NewInstance(v8::Handle, int argc, v8::Handle argv[]); + }; + + v8::Local SafeAllocation::newInstance(v8::Handle function) + { + if (function.IsEmpty()) + return v8::Local(); + AllowAllocation allow; + return function->NewInstance(); + } + + v8::Local SafeAllocation::newInstance(v8::Handle objectTemplate) + { + if (objectTemplate.IsEmpty()) + return v8::Local(); + AllowAllocation allow; + return objectTemplate->NewInstance(); + } + + v8::Local SafeAllocation::newInstance(v8::Handle function, int argc, v8::Handle argv[]) + { + if (function.IsEmpty()) + return v8::Local(); + AllowAllocation allow; + return function->NewInstance(argc, argv); + } + + // FIXME: These NewInstance functions are here to ease upstreaming. Remove along with V8UTILITIES_DEFINED once chromium dependencies on v8_utility.h are removed. + v8::Local SafeAllocation::NewInstance(v8::Handle function) + { + return newInstance(function); + } -// Use an array to hold dependents. It works like a ref-counted scheme. -// A value can be added more than once to the DOM object. -void createHiddenDependency(v8::Local, v8::Local, int cacheIndex); -void removeHiddenDependency(v8::Local, v8::Local, int cacheIndex); + v8::Local SafeAllocation::NewInstance(v8::Handle objectTemplate) + { + return newInstance(objectTemplate); + } -bool processingUserGesture(); -bool shouldAllowNavigation(Frame* frame); -KURL completeURL(const String& relativeURL); -void navigateIfAllowed(Frame* frame, const KURL& url, bool lockHistory, bool lockBackForwardList); + v8::Local SafeAllocation::NewInstance(v8::Handle function, int argc, v8::Handle argv[]) + { + return newInstance(function, argc, argv); + } } // namespace WebCore diff --git a/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp b/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp index 5947a1e..7af9536 100644 --- a/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp +++ b/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp @@ -173,7 +173,7 @@ void WorkerContextExecutionProxy::initContextIfNeeded() // Create a new JS object and use it as the prototype for the shadow global object. v8::Handle workerContextConstructor = GetConstructor(V8ClassIndex::WORKERCONTEXT); - v8::Local jsWorkerContext = SafeAllocation::NewInstance(workerContextConstructor); + v8::Local jsWorkerContext = SafeAllocation::newInstance(workerContextConstructor); // Bail out if allocation failed. if (jsWorkerContext.IsEmpty()) { dispose(); @@ -318,7 +318,7 @@ v8::Local WorkerContextExecutionProxy::toV8(V8ClassIndex::V8WrapperT else function = V8Proxy::GetTemplate(descType)->GetFunction(); - v8::Local instance = SafeAllocation::NewInstance(function); + v8::Local instance = SafeAllocation::newInstance(function); if (!instance.IsEmpty()) { // Avoid setting the DOM wrapper for failed allocations. V8Proxy::SetDOMWrapper(instance, V8ClassIndex::ToInt(cptrType), impl); -- 1.8.3.1