+2009-06-02 Albert J. Wong <ajwong@chromium.org>
+
+ 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 <mitz@apple.com>
Reviewed by John Sullivan.
/*
- * 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
#ifndef V8Utilities_h
#define V8Utilities_h
+// FIXME: Remove once chromium dependencies on v8_utility.h are removed.
+#define V8UTILITIES_DEFINED 1
+
#include <v8.h>
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::Object>, v8::Local<v8::Value>, int cacheIndex);
+ void removeHiddenDependency(v8::Local<v8::Object>, v8::Local<v8::Value>, 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<v8::Object> newInstance(v8::Handle<v8::Function>);
+ static inline v8::Local<v8::Object> newInstance(v8::Handle<v8::ObjectTemplate>);
+ static inline v8::Local<v8::Object> newInstance(v8::Handle<v8::Function>, int argc, v8::Handle<v8::Value> 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<v8::Object> NewInstance(v8::Handle<v8::Function>);
+ static inline v8::Local<v8::Object> NewInstance(v8::Handle<v8::ObjectTemplate>);
+ static inline v8::Local<v8::Object> NewInstance(v8::Handle<v8::Function>, int argc, v8::Handle<v8::Value> argv[]);
+ };
+
+ v8::Local<v8::Object> SafeAllocation::newInstance(v8::Handle<v8::Function> function)
+ {
+ if (function.IsEmpty())
+ return v8::Local<v8::Object>();
+ AllowAllocation allow;
+ return function->NewInstance();
+ }
+
+ v8::Local<v8::Object> SafeAllocation::newInstance(v8::Handle<v8::ObjectTemplate> objectTemplate)
+ {
+ if (objectTemplate.IsEmpty())
+ return v8::Local<v8::Object>();
+ AllowAllocation allow;
+ return objectTemplate->NewInstance();
+ }
+
+ v8::Local<v8::Object> SafeAllocation::newInstance(v8::Handle<v8::Function> function, int argc, v8::Handle<v8::Value> argv[])
+ {
+ if (function.IsEmpty())
+ return v8::Local<v8::Object>();
+ 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<v8::Object> SafeAllocation::NewInstance(v8::Handle<v8::Function> 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::Object>, v8::Local<v8::Value>, int cacheIndex);
-void removeHiddenDependency(v8::Local<v8::Object>, v8::Local<v8::Value>, int cacheIndex);
+ v8::Local<v8::Object> SafeAllocation::NewInstance(v8::Handle<v8::ObjectTemplate> 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<v8::Object> SafeAllocation::NewInstance(v8::Handle<v8::Function> function, int argc, v8::Handle<v8::Value> argv[])
+ {
+ return newInstance(function, argc, argv);
+ }
} // namespace WebCore
// Create a new JS object and use it as the prototype for the shadow global object.
v8::Handle<v8::Function> workerContextConstructor = GetConstructor(V8ClassIndex::WORKERCONTEXT);
- v8::Local<v8::Object> jsWorkerContext = SafeAllocation::NewInstance(workerContextConstructor);
+ v8::Local<v8::Object> jsWorkerContext = SafeAllocation::newInstance(workerContextConstructor);
// Bail out if allocation failed.
if (jsWorkerContext.IsEmpty()) {
dispose();
else
function = V8Proxy::GetTemplate(descType)->GetFunction();
- v8::Local<v8::Object> instance = SafeAllocation::NewInstance(function);
+ v8::Local<v8::Object> instance = SafeAllocation::newInstance(function);
if (!instance.IsEmpty()) {
// Avoid setting the DOM wrapper for failed allocations.
V8Proxy::SetDOMWrapper(instance, V8ClassIndex::ToInt(cptrType), impl);