Merge from Chromium at DEPS revision r202854
This commit was generated by merge_to_master.py.
Change-Id: I5b225b76b2157384357897051ee5866dd4bb23a8
diff --git a/Source/bindings/tests/results/V8Float64Array.cpp b/Source/bindings/tests/results/V8Float64Array.cpp
index ff9e236..b9b5a73 100644
--- a/Source/bindings/tests/results/V8Float64Array.cpp
+++ b/Source/bindings/tests/results/V8Float64Array.cpp
@@ -35,59 +35,26 @@
#include "core/dom/Document.h"
#include "core/dom/ExceptionCode.h"
#include "core/page/Frame.h"
-#include "wtf/Float32Array.h"
#include "wtf/GetPtr.h"
-#include "wtf/Int32Array.h"
#include "wtf/RefCounted.h"
#include "wtf/RefPtr.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7Float64Array@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore12Float64ArrayE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(Float64Array* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7Float64Array@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore12Float64ArrayE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
} // namespace WebCore
using WebCore::ScriptWrappable;
using WebCore::V8Float64Array;
-using WebCore::Float64Array;
#endif
void initializeScriptWrappableForInterface(Float64Array* object)
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8Float64Array::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -122,7 +89,7 @@
return Float64ArrayV8Internal::setMethod(args);
}
-static v8::Handle<v8::Value> constructor(const v8::Arguments& args)
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
{
return constructWebGLArray<Float64Array, V8Float64Array, double>(args, &V8Float64Array::info, v8::kExternalDoubleArray);
}
@@ -142,15 +109,19 @@
{"set", Float64ArrayV8Internal::setMethodCallback, 0, 0},
};
-v8::Handle<v8::Value> V8Float64Array::constructorCallback(const v8::Arguments& args)
+void V8Float64Array::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (!args.IsConstructCall())
- return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ if (!args.IsConstructCall()) {
+ throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ return;
+ }
- if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
- return args.Holder();
+ if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) {
+ args.GetReturnValue().Set(args.Holder());
+ return;
+ }
- return Float64ArrayV8Internal::constructor(args);
+ Float64ArrayV8Internal::constructor(args);
}
static v8::Persistent<v8::FunctionTemplate> ConfigureV8Float64ArrayTemplate(v8::Persistent<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
@@ -168,6 +139,7 @@
v8::Local<v8::ObjectTemplate> proto = desc->PrototypeTemplate();
UNUSED_PARAM(instance); // In some cases, it will not be used.
UNUSED_PARAM(proto); // In some cases, it will not be used.
+ desc->InstanceTemplate()->SetIndexedPropertyHandler(V8Float64Array::indexedPropertyGetter, V8Float64Array::indexedPropertySetter, 0, 0, nodeCollectionIndexedPropertyEnumerator<Float64Array>);
// Custom Signature 'foo'
const int fooArgc = 1;
@@ -211,10 +183,6 @@
{
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
ASSERT(static_cast<void*>(static_cast<ArrayBufferView*>(impl.get())) == static_cast<void*>(impl.get()));
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
@@ -222,7 +190,7 @@
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8Float64Array::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8Float64Array.h b/Source/bindings/tests/results/V8Float64Array.h
index ee36803..481027e 100644
--- a/Source/bindings/tests/results/V8Float64Array.h
+++ b/Source/bindings/tests/results/V8Float64Array.h
@@ -26,15 +26,11 @@
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
#include "wtf/Float64Array.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8Float64Array {
public:
- static const bool hasDependentLifetime = V8ArrayBufferView::hasDependentLifetime;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -44,7 +40,8 @@
}
static void derefObject(void*);
static WrapperTypeInfo info;
- static v8::Handle<v8::Value> constructorCallback(const v8::Arguments&);
+ static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+ static v8::Handle<v8::Value> indexedPropertyGetter(uint32_t, const v8::AccessorInfo&);
static v8::Handle<v8::Value> indexedPropertySetter(uint32_t, v8::Local<v8::Value>, const v8::AccessorInfo&);
static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
static void installPerContextProperties(v8::Handle<v8::Object>, Float64Array*, v8::Isolate*) { }
diff --git a/Source/bindings/tests/results/V8TestActiveDOMObject.cpp b/Source/bindings/tests/results/V8TestActiveDOMObject.cpp
index dd9614c..03e4627 100644
--- a/Source/bindings/tests/results/V8TestActiveDOMObject.cpp
+++ b/Source/bindings/tests/results/V8TestActiveDOMObject.cpp
@@ -34,40 +34,8 @@
#include "core/page/Frame.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestActiveDOMObject@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore19TestActiveDOMObjectE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestActiveDOMObject* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestActiveDOMObject@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore19TestActiveDOMObjectE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -80,6 +48,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestActiveDOMObject::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -258,16 +228,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8TestActiveDOMObject::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestActiveDOMObject.h b/Source/bindings/tests/results/V8TestActiveDOMObject.h
index af48069..04f20cd 100644
--- a/Source/bindings/tests/results/V8TestActiveDOMObject.h
+++ b/Source/bindings/tests/results/V8TestActiveDOMObject.h
@@ -25,15 +25,11 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestActiveDOMObject {
public:
- static const bool hasDependentLifetime = false;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -66,7 +62,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestActiveDOMObject::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestActiveDOMObject::info.derefObjectFunction);
}
return V8TestActiveDOMObject::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestCallback.h b/Source/bindings/tests/results/V8TestCallback.h
index 53967ff..1ab7520 100644
--- a/Source/bindings/tests/results/V8TestCallback.h
+++ b/Source/bindings/tests/results/V8TestCallback.h
@@ -25,10 +25,9 @@
#include "bindings/v8/ActiveDOMCallback.h"
#include "bindings/v8/DOMWrapperWorld.h"
#include "bindings/v8/ScopedPersistent.h"
-#include "wtf/Forward.h"
-#include <v8.h>
namespace WebCore {
+
class ScriptExecutionContext;
@@ -47,7 +46,6 @@
virtual bool callbackWithNoParam();
virtual bool callbackWithTestObjectParam(TestObj* class1Param);
virtual bool callbackWithTestObjectParam(TestObj* class2Param, const String& strArg);
- COMPILE_ASSERT(false) virtual int callbackWithNonBoolReturnType(TestObj* class3Param);
virtual int customCallback(TestObj* testObjParam, TestObj* testObjParam);
virtual bool callbackWithStringList(RefPtr<DOMStringList> listParam);
virtual bool callbackWithBoolean(bool boolParam);
diff --git a/Source/bindings/tests/results/V8TestCustomAccessors.cpp b/Source/bindings/tests/results/V8TestCustomAccessors.cpp
new file mode 100644
index 0000000..ddb85b0
--- /dev/null
+++ b/Source/bindings/tests/results/V8TestCustomAccessors.cpp
@@ -0,0 +1,148 @@
+/*
+ This file is part of the Blink open source project.
+ This file has been auto-generated by CodeGeneratorV8.pm. DO NOT MODIFY!
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include "config.h"
+#include "V8TestCustomAccessors.h"
+
+#include "RuntimeEnabledFeatures.h"
+#include "bindings/v8/ScriptController.h"
+#include "bindings/v8/V8Binding.h"
+#include "bindings/v8/V8DOMConfiguration.h"
+#include "bindings/v8/V8DOMWrapper.h"
+#include "core/dom/ContextFeatures.h"
+#include "core/dom/Document.h"
+#include "core/dom/ExceptionCode.h"
+#include "core/page/Frame.h"
+#include "wtf/UnusedParam.h"
+
+namespace WebCore {
+
+#if defined(OS_WIN)
+// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
+// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
+} // namespace WebCore
+using WebCore::ScriptWrappable;
+using WebCore::V8TestCustomAccessors;
+using WebCore::TestCustomAccessors;
+#endif
+void initializeScriptWrappableForInterface(TestCustomAccessors* object)
+{
+ if (ScriptWrappable::wrapperCanBeStoredInObject(object))
+ ScriptWrappable::setTypeInfoInObject(object, &V8TestCustomAccessors::info);
+ else
+ ASSERT_NOT_REACHED();
+}
+#if defined(OS_WIN)
+namespace WebCore {
+#endif
+WrapperTypeInfo V8TestCustomAccessors::info = { V8TestCustomAccessors::GetTemplate, V8TestCustomAccessors::derefObject, 0, 0, 0, V8TestCustomAccessors::installPerContextPrototypeProperties, 0, WrapperTypeObjectPrototype };
+
+namespace TestCustomAccessorsV8Internal {
+
+template <typename T> void V8_USE(T) { }
+
+static v8::Handle<v8::Value> anotherFunctionMethod(const v8::Arguments& args)
+{
+ if (args.Length() < 1)
+ return throwNotEnoughArgumentsError(args.GetIsolate());
+ TestCustomAccessors* imp = V8TestCustomAccessors::toNative(args.Holder());
+ V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, str, args[0]);
+ imp->anotherFunction(str);
+ return v8Undefined();
+}
+
+static v8::Handle<v8::Value> anotherFunctionMethodCallback(const v8::Arguments& args)
+{
+ return TestCustomAccessorsV8Internal::anotherFunctionMethod(args);
+}
+
+} // namespace TestCustomAccessorsV8Internal
+
+static const V8DOMConfiguration::BatchedMethod V8TestCustomAccessorsMethods[] = {
+ {"anotherFunction", TestCustomAccessorsV8Internal::anotherFunctionMethodCallback, 0, 1},
+};
+
+static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestCustomAccessorsTemplate(v8::Persistent<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
+{
+ desc->ReadOnlyPrototype();
+
+ v8::Local<v8::Signature> defaultSignature;
+ defaultSignature = V8DOMConfiguration::configureTemplate(desc, "TestCustomAccessors", v8::Persistent<v8::FunctionTemplate>(), V8TestCustomAccessors::internalFieldCount,
+ 0, 0,
+ V8TestCustomAccessorsMethods, WTF_ARRAY_LENGTH(V8TestCustomAccessorsMethods), isolate, currentWorldType);
+ UNUSED_PARAM(defaultSignature); // In some cases, it will not be used.
+ v8::Local<v8::ObjectTemplate> instance = desc->InstanceTemplate();
+ v8::Local<v8::ObjectTemplate> proto = desc->PrototypeTemplate();
+ UNUSED_PARAM(instance); // In some cases, it will not be used.
+ UNUSED_PARAM(proto); // In some cases, it will not be used.
+ desc->InstanceTemplate()->SetIndexedPropertyHandler(V8TestCustomAccessors::indexedPropertyGetter, V8TestCustomAccessors::indexedPropertySetter, 0, V8TestCustomAccessors::indexedPropertyDeleter, nodeCollectionIndexedPropertyEnumerator<TestCustomAccessors>);
+ desc->InstanceTemplate()->SetNamedPropertyHandler(V8TestCustomAccessors::namedPropertyGetter, V8TestCustomAccessors::namedPropertySetter, V8TestCustomAccessors::namedPropertyQuery, V8TestCustomAccessors::namedPropertyDeleter, V8TestCustomAccessors::namedPropertyEnumerator);
+
+ // Custom toString template
+ desc->Set(v8::String::NewSymbol("toString"), V8PerIsolateData::current()->toStringTemplate());
+ return desc;
+}
+
+v8::Persistent<v8::FunctionTemplate> V8TestCustomAccessors::GetTemplate(v8::Isolate* isolate, WrapperWorldType currentWorldType)
+{
+ V8PerIsolateData* data = V8PerIsolateData::from(isolate);
+ V8PerIsolateData::TemplateMap::iterator result = data->templateMap(currentWorldType).find(&info);
+ if (result != data->templateMap(currentWorldType).end())
+ return result->value;
+
+ v8::HandleScope handleScope;
+ v8::Persistent<v8::FunctionTemplate> templ =
+ ConfigureV8TestCustomAccessorsTemplate(data->rawTemplate(&info, currentWorldType), isolate, currentWorldType);
+ data->templateMap(currentWorldType).add(&info, templ);
+ return templ;
+}
+
+bool V8TestCustomAccessors::HasInstance(v8::Handle<v8::Value> value, v8::Isolate* isolate, WrapperWorldType currentWorldType)
+{
+ return V8PerIsolateData::from(isolate)->hasInstance(&info, value, currentWorldType);
+}
+
+bool V8TestCustomAccessors::HasInstanceInAnyWorld(v8::Handle<v8::Value> value, v8::Isolate* isolate)
+{
+ return V8PerIsolateData::from(isolate)->hasInstance(&info, value, MainWorld)
+ || V8PerIsolateData::from(isolate)->hasInstance(&info, value, IsolatedWorld)
+ || V8PerIsolateData::from(isolate)->hasInstance(&info, value, WorkerWorld);
+}
+
+
+v8::Handle<v8::Object> V8TestCustomAccessors::createWrapper(PassRefPtr<TestCustomAccessors> impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+{
+ ASSERT(impl.get());
+ ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
+
+ v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
+ if (UNLIKELY(wrapper.IsEmpty()))
+ return wrapper;
+
+ installPerContextProperties(wrapper, impl.get(), isolate);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
+ return wrapper;
+}
+void V8TestCustomAccessors::derefObject(void* object)
+{
+ static_cast<TestCustomAccessors*>(object)->deref();
+}
+
+} // namespace WebCore
diff --git a/Source/bindings/tests/results/V8TestCustomAccessors.h b/Source/bindings/tests/results/V8TestCustomAccessors.h
new file mode 100644
index 0000000..3c0da60
--- /dev/null
+++ b/Source/bindings/tests/results/V8TestCustomAccessors.h
@@ -0,0 +1,142 @@
+/*
+ This file is part of the Blink open source project.
+ This file has been auto-generated by CodeGeneratorV8.pm. DO NOT MODIFY!
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef V8TestCustomAccessors_h
+#define V8TestCustomAccessors_h
+
+#include "bindings/bindings/tests/idls/TestCustomAccessors.h"
+#include "bindings/v8/V8Binding.h"
+#include "bindings/v8/V8DOMWrapper.h"
+#include "bindings/v8/WrapperTypeInfo.h"
+
+namespace WebCore {
+
+class V8TestCustomAccessors {
+public:
+ static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
+ static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
+ static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
+ static TestCustomAccessors* toNative(v8::Handle<v8::Object> object)
+ {
+ return reinterpret_cast<TestCustomAccessors*>(object->GetAlignedPointerFromInternalField(v8DOMWrapperObjectIndex));
+ }
+ static void derefObject(void*);
+ static WrapperTypeInfo info;
+ static v8::Handle<v8::Value> indexedPropertyGetter(uint32_t, const v8::AccessorInfo&);
+ static v8::Handle<v8::Value> indexedPropertySetter(uint32_t, v8::Local<v8::Value>, const v8::AccessorInfo&);
+ static v8::Handle<v8::Boolean> indexedPropertyDeleter(uint32_t, const v8::AccessorInfo&);
+ static v8::Handle<v8::Value> namedPropertyGetter(v8::Local<v8::String>, const v8::AccessorInfo&);
+ static v8::Handle<v8::Value> namedPropertySetter(v8::Local<v8::String>, v8::Local<v8::Value>, const v8::AccessorInfo&);
+ static v8::Handle<v8::Boolean> namedPropertyDeleter(v8::Local<v8::String>, const v8::AccessorInfo&);
+ static v8::Handle<v8::Array> namedPropertyEnumerator(const v8::AccessorInfo&);
+ static v8::Handle<v8::Integer> namedPropertyQuery(v8::Local<v8::String>, const v8::AccessorInfo&);
+ static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
+ static void installPerContextProperties(v8::Handle<v8::Object>, TestCustomAccessors*, v8::Isolate*) { }
+ static void installPerContextPrototypeProperties(v8::Handle<v8::Object>, v8::Isolate*) { }
+private:
+ friend v8::Handle<v8::Object> wrap(TestCustomAccessors*, v8::Handle<v8::Object> creationContext, v8::Isolate*);
+ static v8::Handle<v8::Object> createWrapper(PassRefPtr<TestCustomAccessors>, v8::Handle<v8::Object> creationContext, v8::Isolate*);
+};
+
+template<>
+class WrapperTypeTraits<TestCustomAccessors > {
+public:
+ static WrapperTypeInfo* info() { return &V8TestCustomAccessors::info; }
+};
+
+
+inline v8::Handle<v8::Object> wrap(TestCustomAccessors* impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+{
+ ASSERT(impl);
+ ASSERT(DOMDataStore::getWrapper(impl, isolate).IsEmpty());
+ if (ScriptWrappable::wrapperCanBeStoredInObject(impl)) {
+ const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
+ // Might be a XXXConstructor::info instead of an XXX::info. These will both have
+ // the same object de-ref functions, though, so use that as the basis of the check.
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestCustomAccessors::info.derefObjectFunction);
+ }
+ return V8TestCustomAccessors::createWrapper(impl, creationContext, isolate);
+}
+
+inline v8::Handle<v8::Value> toV8(TestCustomAccessors* impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+{
+ if (UNLIKELY(!impl))
+ return v8NullWithCheck(isolate);
+ v8::Handle<v8::Value> wrapper = DOMDataStore::getWrapper(impl, isolate);
+ if (!wrapper.IsEmpty())
+ return wrapper;
+ return wrap(impl, creationContext, isolate);
+}
+
+inline v8::Handle<v8::Value> toV8ForMainWorld(TestCustomAccessors* impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+{
+ ASSERT(worldType(isolate) == MainWorld);
+ if (UNLIKELY(!impl))
+ return v8NullWithCheck(isolate);
+ v8::Handle<v8::Value> wrapper = DOMDataStore::getWrapperForMainWorld(impl);
+ if (!wrapper.IsEmpty())
+ return wrapper;
+ return wrap(impl, creationContext, isolate);
+}
+
+template<class HolderContainer, class Wrappable>
+inline v8::Handle<v8::Value> toV8Fast(TestCustomAccessors* impl, const HolderContainer& container, Wrappable* wrappable)
+{
+ if (UNLIKELY(!impl))
+ return v8Null(container.GetIsolate());
+ v8::Handle<v8::Object> wrapper = DOMDataStore::getWrapperFast(impl, container, wrappable);
+ if (!wrapper.IsEmpty())
+ return wrapper;
+ return wrap(impl, container.Holder(), container.GetIsolate());
+}
+
+template<class HolderContainer, class Wrappable>
+inline v8::Handle<v8::Value> toV8FastForMainWorld(TestCustomAccessors* impl, const HolderContainer& container, Wrappable* wrappable)
+{
+ ASSERT(worldType(container.GetIsolate()) == MainWorld);
+ if (UNLIKELY(!impl))
+ return v8Null(container.GetIsolate());
+ v8::Handle<v8::Object> wrapper = DOMDataStore::getWrapperForMainWorld(impl);
+ if (!wrapper.IsEmpty())
+ return wrapper;
+ return wrap(impl, container.Holder(), container.GetIsolate());
+}
+
+template<class HolderContainer, class Wrappable>
+inline v8::Handle<v8::Value> toV8FastForMainWorld(PassRefPtr< TestCustomAccessors > impl, const HolderContainer& container, Wrappable* wrappable)
+{
+ return toV8FastForMainWorld(impl.get(), container, wrappable);
+}
+
+
+template<class HolderContainer, class Wrappable>
+inline v8::Handle<v8::Value> toV8Fast(PassRefPtr< TestCustomAccessors > impl, const HolderContainer& container, Wrappable* wrappable)
+{
+ return toV8Fast(impl.get(), container, wrappable);
+}
+
+inline v8::Handle<v8::Value> toV8(PassRefPtr< TestCustomAccessors > impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+{
+ return toV8(impl.get(), creationContext, isolate);
+}
+
+}
+
+#endif // V8TestCustomAccessors_h
diff --git a/Source/bindings/tests/results/V8TestCustomNamedGetter.cpp b/Source/bindings/tests/results/V8TestCustomNamedGetter.cpp
deleted file mode 100644
index 689de55..0000000
--- a/Source/bindings/tests/results/V8TestCustomNamedGetter.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- This file is part of the Blink open source project.
- This file has been auto-generated by CodeGeneratorV8.pm. DO NOT MODIFY!
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-#include "config.h"
-#include "V8TestCustomNamedGetter.h"
-
-#include "RuntimeEnabledFeatures.h"
-#include "bindings/v8/ScriptController.h"
-#include "bindings/v8/V8Binding.h"
-#include "bindings/v8/V8DOMConfiguration.h"
-#include "bindings/v8/V8DOMWrapper.h"
-#include "core/dom/ContextFeatures.h"
-#include "core/dom/Document.h"
-#include "core/dom/ExceptionCode.h"
-#include "core/page/Frame.h"
-#include "wtf/UnusedParam.h"
-
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestCustomNamedGetter@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore21TestCustomNamedGetterE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
-namespace WebCore {
-
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestCustomNamedGetter* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestCustomNamedGetter@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore21TestCustomNamedGetterE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
-#if defined(OS_WIN)
-// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
-// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
-} // namespace WebCore
-using WebCore::ScriptWrappable;
-using WebCore::V8TestCustomNamedGetter;
-using WebCore::TestCustomNamedGetter;
-#endif
-void initializeScriptWrappableForInterface(TestCustomNamedGetter* object)
-{
- if (ScriptWrappable::wrapperCanBeStoredInObject(object))
- ScriptWrappable::setTypeInfoInObject(object, &V8TestCustomNamedGetter::info);
-}
-#if defined(OS_WIN)
-namespace WebCore {
-#endif
-WrapperTypeInfo V8TestCustomNamedGetter::info = { V8TestCustomNamedGetter::GetTemplate, V8TestCustomNamedGetter::derefObject, 0, 0, 0, V8TestCustomNamedGetter::installPerContextPrototypeProperties, 0, WrapperTypeObjectPrototype };
-
-namespace TestCustomNamedGetterV8Internal {
-
-template <typename T> void V8_USE(T) { }
-
-static v8::Handle<v8::Value> anotherFunctionMethod(const v8::Arguments& args)
-{
- if (args.Length() < 1)
- return throwNotEnoughArgumentsError(args.GetIsolate());
- TestCustomNamedGetter* imp = V8TestCustomNamedGetter::toNative(args.Holder());
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, str, args[0]);
- imp->anotherFunction(str);
- return v8Undefined();
-}
-
-static v8::Handle<v8::Value> anotherFunctionMethodCallback(const v8::Arguments& args)
-{
- return TestCustomNamedGetterV8Internal::anotherFunctionMethod(args);
-}
-
-} // namespace TestCustomNamedGetterV8Internal
-
-static const V8DOMConfiguration::BatchedMethod V8TestCustomNamedGetterMethods[] = {
- {"anotherFunction", TestCustomNamedGetterV8Internal::anotherFunctionMethodCallback, 0, 1},
-};
-
-static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestCustomNamedGetterTemplate(v8::Persistent<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
-{
- desc->ReadOnlyPrototype();
-
- v8::Local<v8::Signature> defaultSignature;
- defaultSignature = V8DOMConfiguration::configureTemplate(desc, "TestCustomNamedGetter", v8::Persistent<v8::FunctionTemplate>(), V8TestCustomNamedGetter::internalFieldCount,
- 0, 0,
- V8TestCustomNamedGetterMethods, WTF_ARRAY_LENGTH(V8TestCustomNamedGetterMethods), isolate, currentWorldType);
- UNUSED_PARAM(defaultSignature); // In some cases, it will not be used.
- v8::Local<v8::ObjectTemplate> instance = desc->InstanceTemplate();
- v8::Local<v8::ObjectTemplate> proto = desc->PrototypeTemplate();
- UNUSED_PARAM(instance); // In some cases, it will not be used.
- UNUSED_PARAM(proto); // In some cases, it will not be used.
- desc->InstanceTemplate()->SetNamedPropertyHandler(V8TestCustomNamedGetter::namedPropertyGetter, 0, 0, 0, 0);
-
- // Custom toString template
- desc->Set(v8::String::NewSymbol("toString"), V8PerIsolateData::current()->toStringTemplate());
- return desc;
-}
-
-v8::Persistent<v8::FunctionTemplate> V8TestCustomNamedGetter::GetTemplate(v8::Isolate* isolate, WrapperWorldType currentWorldType)
-{
- V8PerIsolateData* data = V8PerIsolateData::from(isolate);
- V8PerIsolateData::TemplateMap::iterator result = data->templateMap(currentWorldType).find(&info);
- if (result != data->templateMap(currentWorldType).end())
- return result->value;
-
- v8::HandleScope handleScope;
- v8::Persistent<v8::FunctionTemplate> templ =
- ConfigureV8TestCustomNamedGetterTemplate(data->rawTemplate(&info, currentWorldType), isolate, currentWorldType);
- data->templateMap(currentWorldType).add(&info, templ);
- return templ;
-}
-
-bool V8TestCustomNamedGetter::HasInstance(v8::Handle<v8::Value> value, v8::Isolate* isolate, WrapperWorldType currentWorldType)
-{
- return V8PerIsolateData::from(isolate)->hasInstance(&info, value, currentWorldType);
-}
-
-bool V8TestCustomNamedGetter::HasInstanceInAnyWorld(v8::Handle<v8::Value> value, v8::Isolate* isolate)
-{
- return V8PerIsolateData::from(isolate)->hasInstance(&info, value, MainWorld)
- || V8PerIsolateData::from(isolate)->hasInstance(&info, value, IsolatedWorld)
- || V8PerIsolateData::from(isolate)->hasInstance(&info, value, WorkerWorld);
-}
-
-
-v8::Handle<v8::Object> V8TestCustomNamedGetter::createWrapper(PassRefPtr<TestCustomNamedGetter> impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
-{
- ASSERT(impl.get());
- ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
- v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
- if (UNLIKELY(wrapper.IsEmpty()))
- return wrapper;
-
- installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
- return wrapper;
-}
-void V8TestCustomNamedGetter::derefObject(void* object)
-{
- static_cast<TestCustomNamedGetter*>(object)->deref();
-}
-
-} // namespace WebCore
diff --git a/Source/bindings/tests/results/V8TestCustomNamedGetter.h b/Source/bindings/tests/results/V8TestCustomNamedGetter.h
deleted file mode 100644
index 1f67d82..0000000
--- a/Source/bindings/tests/results/V8TestCustomNamedGetter.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- This file is part of the Blink open source project.
- This file has been auto-generated by CodeGeneratorV8.pm. DO NOT MODIFY!
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-#ifndef V8TestCustomNamedGetter_h
-#define V8TestCustomNamedGetter_h
-
-#include "bindings/bindings/tests/idls/TestCustomNamedGetter.h"
-#include "bindings/v8/V8Binding.h"
-#include "bindings/v8/V8DOMWrapper.h"
-#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
-
-namespace WebCore {
-
-class V8TestCustomNamedGetter {
-public:
- static const bool hasDependentLifetime = false;
- static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
- static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
- static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
- static TestCustomNamedGetter* toNative(v8::Handle<v8::Object> object)
- {
- return reinterpret_cast<TestCustomNamedGetter*>(object->GetAlignedPointerFromInternalField(v8DOMWrapperObjectIndex));
- }
- static void derefObject(void*);
- static WrapperTypeInfo info;
- static v8::Handle<v8::Value> namedPropertyGetter(v8::Local<v8::String>, const v8::AccessorInfo&);
- static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
- static void installPerContextProperties(v8::Handle<v8::Object>, TestCustomNamedGetter*, v8::Isolate*) { }
- static void installPerContextPrototypeProperties(v8::Handle<v8::Object>, v8::Isolate*) { }
-private:
- friend v8::Handle<v8::Object> wrap(TestCustomNamedGetter*, v8::Handle<v8::Object> creationContext, v8::Isolate*);
- static v8::Handle<v8::Object> createWrapper(PassRefPtr<TestCustomNamedGetter>, v8::Handle<v8::Object> creationContext, v8::Isolate*);
-};
-
-template<>
-class WrapperTypeTraits<TestCustomNamedGetter > {
-public:
- static WrapperTypeInfo* info() { return &V8TestCustomNamedGetter::info; }
-};
-
-
-inline v8::Handle<v8::Object> wrap(TestCustomNamedGetter* impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
-{
- ASSERT(impl);
- ASSERT(DOMDataStore::getWrapper(impl, isolate).IsEmpty());
- if (ScriptWrappable::wrapperCanBeStoredInObject(impl)) {
- const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
- // Might be a XXXConstructor::info instead of an XXX::info. These will both have
- // the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestCustomNamedGetter::info.derefObjectFunction);
- }
- return V8TestCustomNamedGetter::createWrapper(impl, creationContext, isolate);
-}
-
-inline v8::Handle<v8::Value> toV8(TestCustomNamedGetter* impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
-{
- if (UNLIKELY(!impl))
- return v8NullWithCheck(isolate);
- v8::Handle<v8::Value> wrapper = DOMDataStore::getWrapper(impl, isolate);
- if (!wrapper.IsEmpty())
- return wrapper;
- return wrap(impl, creationContext, isolate);
-}
-
-inline v8::Handle<v8::Value> toV8ForMainWorld(TestCustomNamedGetter* impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
-{
- ASSERT(worldType(isolate) == MainWorld);
- if (UNLIKELY(!impl))
- return v8NullWithCheck(isolate);
- v8::Handle<v8::Value> wrapper = DOMDataStore::getWrapperForMainWorld(impl);
- if (!wrapper.IsEmpty())
- return wrapper;
- return wrap(impl, creationContext, isolate);
-}
-
-template<class HolderContainer, class Wrappable>
-inline v8::Handle<v8::Value> toV8Fast(TestCustomNamedGetter* impl, const HolderContainer& container, Wrappable* wrappable)
-{
- if (UNLIKELY(!impl))
- return v8Null(container.GetIsolate());
- v8::Handle<v8::Object> wrapper = DOMDataStore::getWrapperFast(impl, container, wrappable);
- if (!wrapper.IsEmpty())
- return wrapper;
- return wrap(impl, container.Holder(), container.GetIsolate());
-}
-
-template<class HolderContainer, class Wrappable>
-inline v8::Handle<v8::Value> toV8FastForMainWorld(TestCustomNamedGetter* impl, const HolderContainer& container, Wrappable* wrappable)
-{
- ASSERT(worldType(container.GetIsolate()) == MainWorld);
- if (UNLIKELY(!impl))
- return v8Null(container.GetIsolate());
- v8::Handle<v8::Object> wrapper = DOMDataStore::getWrapperForMainWorld(impl);
- if (!wrapper.IsEmpty())
- return wrapper;
- return wrap(impl, container.Holder(), container.GetIsolate());
-}
-
-template<class HolderContainer, class Wrappable>
-inline v8::Handle<v8::Value> toV8FastForMainWorld(PassRefPtr< TestCustomNamedGetter > impl, const HolderContainer& container, Wrappable* wrappable)
-{
- return toV8FastForMainWorld(impl.get(), container, wrappable);
-}
-
-
-template<class HolderContainer, class Wrappable>
-inline v8::Handle<v8::Value> toV8Fast(PassRefPtr< TestCustomNamedGetter > impl, const HolderContainer& container, Wrappable* wrappable)
-{
- return toV8Fast(impl.get(), container, wrappable);
-}
-
-inline v8::Handle<v8::Value> toV8(PassRefPtr< TestCustomNamedGetter > impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
-{
- return toV8(impl.get(), creationContext, isolate);
-}
-
-}
-
-#endif // V8TestCustomNamedGetter_h
diff --git a/Source/bindings/tests/results/V8TestEventConstructor.cpp b/Source/bindings/tests/results/V8TestEventConstructor.cpp
index 01f764e..97b72b0 100644
--- a/Source/bindings/tests/results/V8TestEventConstructor.cpp
+++ b/Source/bindings/tests/results/V8TestEventConstructor.cpp
@@ -33,40 +33,8 @@
#include "core/page/Frame.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestEventConstructor@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore20TestEventConstructorE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestEventConstructor* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestEventConstructor@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore20TestEventConstructorE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -79,6 +47,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestEventConstructor::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -111,24 +81,26 @@
return TestEventConstructorV8Internal::attr2AttrGetter(name, info);
}
-static v8::Handle<v8::Value> constructor(const v8::Arguments& args)
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (args.Length() < 1)
- return throwNotEnoughArgumentsError(args.GetIsolate());
+ if (args.Length() < 1) {
+ throwNotEnoughArgumentsError(args.GetIsolate());
+ return;
+ }
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, type, args[0]);
+ V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, type, args[0]);
TestEventConstructorInit eventInit;
if (args.Length() >= 2) {
- V8TRYCATCH(Dictionary, options, Dictionary(args[1], args.GetIsolate()));
+ V8TRYCATCH_VOID(Dictionary, options, Dictionary(args[1], args.GetIsolate()));
if (!fillTestEventConstructorInit(eventInit, options))
- return v8Undefined();
+ return;
}
RefPtr<TestEventConstructor> event = TestEventConstructor::create(type, eventInit);
v8::Handle<v8::Object> wrapper = args.Holder();
V8DOMWrapper::associateObjectWithWrapper(event.release(), &V8TestEventConstructor::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
}
} // namespace TestEventConstructorV8Internal
@@ -145,15 +117,19 @@
return true;
}
-v8::Handle<v8::Value> V8TestEventConstructor::constructorCallback(const v8::Arguments& args)
+void V8TestEventConstructor::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (!args.IsConstructCall())
- return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ if (!args.IsConstructCall()) {
+ throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ return;
+ }
- if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
- return args.Holder();
+ if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) {
+ args.GetReturnValue().Set(args.Holder());
+ return;
+ }
- return TestEventConstructorV8Internal::constructor(args);
+ TestEventConstructorV8Internal::constructor(args);
}
static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestEventConstructorTemplate(v8::Persistent<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
@@ -205,16 +181,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8TestEventConstructor::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestEventConstructor.h b/Source/bindings/tests/results/V8TestEventConstructor.h
index fa1ce52..d69fc7c 100644
--- a/Source/bindings/tests/results/V8TestEventConstructor.h
+++ b/Source/bindings/tests/results/V8TestEventConstructor.h
@@ -25,16 +25,12 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class Dictionary;
class V8TestEventConstructor {
public:
- static const bool hasDependentLifetime = false;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -44,7 +40,7 @@
}
static void derefObject(void*);
static WrapperTypeInfo info;
- static v8::Handle<v8::Value> constructorCallback(const v8::Arguments&);
+ static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
static void installPerContextProperties(v8::Handle<v8::Object>, TestEventConstructor*, v8::Isolate*) { }
static void installPerContextPrototypeProperties(v8::Handle<v8::Object>, v8::Isolate*) { }
@@ -68,7 +64,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestEventConstructor::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestEventConstructor::info.derefObjectFunction);
}
return V8TestEventConstructor::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestEventTarget.cpp b/Source/bindings/tests/results/V8TestEventTarget.cpp
index cbb734e..b6c85cd 100644
--- a/Source/bindings/tests/results/V8TestEventTarget.cpp
+++ b/Source/bindings/tests/results/V8TestEventTarget.cpp
@@ -36,40 +36,8 @@
#include "core/page/Frame.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestEventTarget@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore15TestEventTargetE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestEventTarget* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestEventTarget@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore15TestEventTargetE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -82,6 +50,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestEventTarget::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -98,16 +68,10 @@
return throwNotEnoughArgumentsError(args.GetIsolate());
TestEventTarget* imp = V8TestEventTarget::toNative(args.Holder());
ExceptionCode ec = 0;
- {
V8TRYCATCH(int, index, toUInt32(args[0]));
- if (UNLIKELY(index < 0)) {
- ec = INDEX_SIZE_ERR;
- goto fail;
- }
+ if (UNLIKELY(index < 0))
+ return setDOMException(INDEX_SIZE_ERR, args.GetIsolate());
return toV8(imp->item(index), args.Holder(), args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> itemMethodCallback(const v8::Arguments& args)
@@ -167,15 +131,11 @@
return throwNotEnoughArgumentsError(args.GetIsolate());
TestEventTarget* imp = V8TestEventTarget::toNative(args.Holder());
ExceptionCode ec = 0;
- {
V8TRYCATCH(Event*, evt, V8Event::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate())) ? V8Event::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
bool result = imp->dispatchEvent(evt, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return v8Boolean(result, args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> dispatchEventMethodCallback(const v8::Arguments& args)
@@ -202,6 +162,19 @@
return toV8Fast(element.release(), info, collection);
}
+v8::Handle<v8::Boolean> V8TestEventTarget::indexedPropertyDeleter(unsigned index, const v8::AccessorInfo& info)
+{
+
+ TestEventTarget* collection = toNative(info.Holder());
+ ExceptionCode ec = 0;
+ bool result = collection->anonymousIndexedDeleter(index, ec);
+ if (ec) {
+ setDOMException(ec, info.GetIsolate());
+ return v8::Handle<v8::Boolean>();
+ }
+ return v8Boolean(result);
+}
+
v8::Handle<v8::Value> V8TestEventTarget::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
{
if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty())
@@ -218,6 +191,30 @@
return toV8Fast(element.release(), info, collection);
}
+v8::Handle<v8::Value> V8TestEventTarget::namedPropertySetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
+{
+ if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty())
+ return v8Undefined();
+ if (info.Holder()->HasRealNamedCallbackProperty(name))
+ return v8Undefined();
+ TestEventTarget* collection = toNative(info.Holder());
+ V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, propertyName, name);
+ V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, propertyValue, value);
+ bool result = collection->anonymousNamedSetter(propertyName, propertyValue);
+ if (!result)
+ return v8Undefined();
+ return value;
+}
+
+v8::Handle<v8::Boolean> V8TestEventTarget::namedPropertyDeleter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
+{
+
+ TestEventTarget* collection = toNative(info.Holder());
+ AtomicString propertyName = toWebCoreAtomicString(name);
+ bool result = collection->anonymousNamedDeleter(propertyName);
+ return v8Boolean(result);
+}
+
static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestEventTargetTemplate(v8::Persistent<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
{
desc->ReadOnlyPrototype();
@@ -231,8 +228,8 @@
v8::Local<v8::ObjectTemplate> proto = desc->PrototypeTemplate();
UNUSED_PARAM(instance); // In some cases, it will not be used.
UNUSED_PARAM(proto); // In some cases, it will not be used.
- desc->InstanceTemplate()->SetIndexedPropertyHandler(V8TestEventTarget::indexedPropertyGetter, 0, 0, 0, nodeCollectionIndexedPropertyEnumerator<TestEventTarget>);
- desc->InstanceTemplate()->SetNamedPropertyHandler(V8TestEventTarget::namedPropertyGetter, 0, 0, 0, 0);
+ desc->InstanceTemplate()->SetIndexedPropertyHandler(V8TestEventTarget::indexedPropertyGetter, 0, 0, V8TestEventTarget::indexedPropertyDeleter, nodeCollectionIndexedPropertyEnumerator<TestEventTarget>);
+ desc->InstanceTemplate()->SetNamedPropertyHandler(V8TestEventTarget::namedPropertyGetter, V8TestEventTarget::namedPropertySetter, 0, V8TestEventTarget::namedPropertyDeleter, 0);
desc->InstanceTemplate()->MarkAsUndetectable();
// Custom Signature 'dispatchEvent'
@@ -283,16 +280,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8TestEventTarget::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestEventTarget.h b/Source/bindings/tests/results/V8TestEventTarget.h
index e72c9f8..0262d49 100644
--- a/Source/bindings/tests/results/V8TestEventTarget.h
+++ b/Source/bindings/tests/results/V8TestEventTarget.h
@@ -25,15 +25,11 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestEventTarget {
public:
- static const bool hasDependentLifetime = false;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -45,7 +41,10 @@
static WrapperTypeInfo info;
static EventTarget* toEventTarget(v8::Handle<v8::Object>);
static v8::Handle<v8::Value> indexedPropertyGetter(uint32_t, const v8::AccessorInfo&);
+ static v8::Handle<v8::Boolean> indexedPropertyDeleter(uint32_t, const v8::AccessorInfo&);
static v8::Handle<v8::Value> namedPropertyGetter(v8::Local<v8::String>, const v8::AccessorInfo&);
+ static v8::Handle<v8::Value> namedPropertySetter(v8::Local<v8::String>, v8::Local<v8::Value>, const v8::AccessorInfo&);
+ static v8::Handle<v8::Boolean> namedPropertyDeleter(v8::Local<v8::String>, const v8::AccessorInfo&);
static const int eventListenerCacheIndex = v8DefaultWrapperInternalFieldCount + 0;
static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 1;
static void installPerContextProperties(v8::Handle<v8::Object>, TestEventTarget*, v8::Isolate*) { }
@@ -70,7 +69,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestEventTarget::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestEventTarget::info.derefObjectFunction);
}
return V8TestEventTarget::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestException.cpp b/Source/bindings/tests/results/V8TestException.cpp
index 67e703a..fdfde30 100644
--- a/Source/bindings/tests/results/V8TestException.cpp
+++ b/Source/bindings/tests/results/V8TestException.cpp
@@ -31,40 +31,8 @@
#include "core/page/Frame.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestException@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore13TestExceptionE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestException* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestException@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore13TestExceptionE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -77,6 +45,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestException::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -152,16 +122,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8TestException::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestException.h b/Source/bindings/tests/results/V8TestException.h
index 44b8b0a..f69307a 100644
--- a/Source/bindings/tests/results/V8TestException.h
+++ b/Source/bindings/tests/results/V8TestException.h
@@ -25,15 +25,11 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestException {
public:
- static const bool hasDependentLifetime = false;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -66,7 +62,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestException::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestException::info.derefObjectFunction);
}
return V8TestException::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestInterface.cpp b/Source/bindings/tests/results/V8TestInterface.cpp
index b200bbe..85b0e61 100644
--- a/Source/bindings/tests/results/V8TestInterface.cpp
+++ b/Source/bindings/tests/results/V8TestInterface.cpp
@@ -24,10 +24,12 @@
#include "RuntimeEnabledFeatures.h"
#include "V8Node.h"
+#include "V8NodeList.h"
#include "V8TestObject.h"
#include "bindings/bindings/tests/idls/TestPartialInterface.h"
#include "bindings/v8/ScriptController.h"
#include "bindings/v8/V8Binding.h"
+#include "bindings/v8/V8Collection.h"
#include "bindings/v8/V8DOMConfiguration.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/V8ObjectConstructor.h"
@@ -40,40 +42,8 @@
#include "wtf/RefPtr.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestInterface@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore13TestInterfaceE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestInterface* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestInterface@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore13TestInterfaceE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -86,6 +56,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestInterface::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -417,17 +389,13 @@
return throwNotEnoughArgumentsError(args.GetIsolate());
TestInterface* imp = V8TestInterface::toNative(args.Holder());
ExceptionCode ec = 0;
- {
V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, strArg, args[0]);
V8TRYCATCH(TestObj*, objArg, V8TestObject::HasInstance(args[1], args.GetIsolate(), worldType(args.GetIsolate())) ? V8TestObject::toNative(v8::Handle<v8::Object>::Cast(args[1])) : 0);
ScriptExecutionContext* scriptContext = getScriptExecutionContext();
RefPtr<TestObj> result = TestPartialInterface::supplementalMethod2(scriptContext, imp, strArg, objArg, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return toV8(result.release(), args.Holder(), args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
#endif // ENABLE(Condition11) || ENABLE(Condition12)
@@ -469,26 +437,27 @@
#endif // ENABLE(Condition11) || ENABLE(Condition12)
-static v8::Handle<v8::Value> constructor(const v8::Arguments& args)
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (args.Length() < 1)
- return throwNotEnoughArgumentsError(args.GetIsolate());
-
+ if (args.Length() < 1) {
+ throwNotEnoughArgumentsError(args.GetIsolate());
+ return;
+ }
ExceptionCode ec = 0;
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, str1, args[0]);
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, str2, args[1]);
+ V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, str1, args[0]);
+ V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, str2, args[1]);
ScriptExecutionContext* context = getScriptExecutionContext();
RefPtr<TestInterface> impl = TestInterface::create(context, str1, str2, ec);
v8::Handle<v8::Object> wrapper = args.Holder();
- if (ec)
- goto fail;
+ if (ec) {
+ setDOMException(ec, args.GetIsolate());
+ return;
+ }
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &V8TestInterface::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
- fail:
- return setDOMException(ec, args.GetIsolate());
+ args.GetReturnValue().Set(wrapper);
}
} // namespace TestInterfaceV8Internal
@@ -546,15 +515,41 @@
COMPILE_ASSERT(2 == TestPartialInterface::CONST_IMPL, TestInterfaceEnumCONST_IMPLIsWrongUseDoNotCheckConstants);
#endif
-v8::Handle<v8::Value> V8TestInterface::constructorCallback(const v8::Arguments& args)
+void V8TestInterface::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (!args.IsConstructCall())
- return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ if (!args.IsConstructCall()) {
+ throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ return;
+ }
- if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
- return args.Holder();
+ if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) {
+ args.GetReturnValue().Set(args.Holder());
+ return;
+ }
- return TestInterfaceV8Internal::constructor(args);
+ TestInterfaceV8Internal::constructor(args);
+}
+
+v8::Handle<v8::Value> V8TestInterface::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
+{
+ if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty())
+ return v8Undefined();
+ if (info.Holder()->HasRealNamedCallbackProperty(name))
+ return v8Undefined();
+
+ ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));
+ TestInterface* collection = toNative(info.Holder());
+ AtomicString propertyName = toWebCoreAtomicString(name);
+ bool element0Enabled = false;
+ RefPtr<Node> element0;
+ bool element1Enabled = false;
+ RefPtr<NodeList> element1;
+ collection->getItem(propertyName, element0Enabled, element0, element1Enabled, element1);
+ if (element0Enabled)
+ return toV8Fast(element0.release(), info, collection);
+ if (element1Enabled)
+ return toV8Fast(element1.release(), info, collection);
+ return v8Undefined();
}
static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestInterfaceTemplate(v8::Persistent<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
@@ -582,6 +577,7 @@
}
#endif // ENABLE(Condition11) || ENABLE(Condition12)
+ desc->InstanceTemplate()->SetNamedPropertyHandler(V8TestInterface::namedPropertyGetter, V8TestInterface::namedPropertySetter, 0, 0, 0);
// Custom Signature 'supplementalMethod2'
const int supplementalMethod2Argc = 2;
@@ -660,16 +656,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Dependent);
return wrapper;
}
void V8TestInterface::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestInterface.h b/Source/bindings/tests/results/V8TestInterface.h
index f436ee7..d2d8444 100644
--- a/Source/bindings/tests/results/V8TestInterface.h
+++ b/Source/bindings/tests/results/V8TestInterface.h
@@ -26,15 +26,11 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestInterface {
public:
- static const bool hasDependentLifetime = true;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -45,7 +41,8 @@
static void derefObject(void*);
static WrapperTypeInfo info;
static ActiveDOMObject* toActiveDOMObject(v8::Handle<v8::Object>);
- static v8::Handle<v8::Value> constructorCallback(const v8::Arguments&);
+ static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+ static v8::Handle<v8::Value> namedPropertyGetter(v8::Local<v8::String>, const v8::AccessorInfo&);
static v8::Handle<v8::Value> namedPropertySetter(v8::Local<v8::String>, v8::Local<v8::Value>, const v8::AccessorInfo&);
static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
static void installPerContextProperties(v8::Handle<v8::Object>, TestInterface*, v8::Isolate*);
@@ -70,7 +67,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestInterface::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestInterface::info.derefObjectFunction);
}
return V8TestInterface::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestInterfaceImplementedAs.cpp b/Source/bindings/tests/results/V8TestInterfaceImplementedAs.cpp
index d75ce10..d97c63c 100644
--- a/Source/bindings/tests/results/V8TestInterfaceImplementedAs.cpp
+++ b/Source/bindings/tests/results/V8TestInterfaceImplementedAs.cpp
@@ -35,40 +35,8 @@
#include "wtf/RefPtr.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7RealClass@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore9RealClassE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(RealClass* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7RealClass@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore9RealClassE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -81,6 +49,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestInterfaceImplementedAs::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -237,16 +207,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8TestInterfaceImplementedAs::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestInterfaceImplementedAs.h b/Source/bindings/tests/results/V8TestInterfaceImplementedAs.h
index 66e46ca..93432bd 100644
--- a/Source/bindings/tests/results/V8TestInterfaceImplementedAs.h
+++ b/Source/bindings/tests/results/V8TestInterfaceImplementedAs.h
@@ -25,15 +25,11 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestInterfaceImplementedAs {
public:
- static const bool hasDependentLifetime = false;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -66,7 +62,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestInterfaceImplementedAs::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestInterfaceImplementedAs::info.derefObjectFunction);
}
return V8TestInterfaceImplementedAs::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestMediaQueryListListener.cpp b/Source/bindings/tests/results/V8TestMediaQueryListListener.cpp
index fd9ddfd..2870e14 100644
--- a/Source/bindings/tests/results/V8TestMediaQueryListListener.cpp
+++ b/Source/bindings/tests/results/V8TestMediaQueryListListener.cpp
@@ -33,40 +33,8 @@
#include "core/page/Frame.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestMediaQueryListListener@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore26TestMediaQueryListListenerE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestMediaQueryListListener* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestMediaQueryListListener@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore26TestMediaQueryListListenerE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -79,6 +47,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestMediaQueryListListener::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -161,16 +131,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8TestMediaQueryListListener::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestMediaQueryListListener.h b/Source/bindings/tests/results/V8TestMediaQueryListListener.h
index 2ce4579..7ad6540 100644
--- a/Source/bindings/tests/results/V8TestMediaQueryListListener.h
+++ b/Source/bindings/tests/results/V8TestMediaQueryListListener.h
@@ -25,15 +25,11 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestMediaQueryListListener {
public:
- static const bool hasDependentLifetime = false;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -66,7 +62,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestMediaQueryListListener::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestMediaQueryListListener::info.derefObjectFunction);
}
return V8TestMediaQueryListListener::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestNamedConstructor.cpp b/Source/bindings/tests/results/V8TestNamedConstructor.cpp
index 9634919..c4b0c05 100644
--- a/Source/bindings/tests/results/V8TestNamedConstructor.cpp
+++ b/Source/bindings/tests/results/V8TestNamedConstructor.cpp
@@ -34,40 +34,8 @@
#include "core/page/Frame.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestNamedConstructor@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore20TestNamedConstructorE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestNamedConstructor* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestNamedConstructor@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore20TestNamedConstructorE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -80,6 +48,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestNamedConstructor::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -94,13 +64,17 @@
WrapperTypeInfo V8TestNamedConstructorConstructor::info = { V8TestNamedConstructorConstructor::GetTemplate, V8TestNamedConstructor::derefObject, V8TestNamedConstructor::toActiveDOMObject, 0, 0, V8TestNamedConstructor::installPerContextPrototypeProperties, 0, WrapperTypeObjectPrototype };
-static v8::Handle<v8::Value> V8TestNamedConstructorConstructorCallback(const v8::Arguments& args)
+static void V8TestNamedConstructorConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (!args.IsConstructCall())
- return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ if (!args.IsConstructCall()) {
+ throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ return;
+ }
- if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
- return args.Holder();
+ if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) {
+ args.GetReturnValue().Set(args.Holder());
+ return;
+ }
Document* document = currentDocument();
@@ -108,23 +82,24 @@
// may end up being the only node in the map and get garbage-collected prematurely.
toV8(document, args.Holder(), args.GetIsolate());
- if (args.Length() < 1)
- return throwNotEnoughArgumentsError(args.GetIsolate());
-
+ if (args.Length() < 1) {
+ throwNotEnoughArgumentsError(args.GetIsolate());
+ return;
+ }
ExceptionCode ec = 0;
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, str1, args[0]);
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, str2, args[1]);
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, str3, argumentOrNull(args, 2));
+ V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, str1, args[0]);
+ V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, str2, args[1]);
+ V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, str3, argumentOrNull(args, 2));
RefPtr<TestNamedConstructor> impl = TestNamedConstructor::createForJSConstructor(document, str1, str2, str3, ec);
v8::Handle<v8::Object> wrapper = args.Holder();
- if (ec)
- goto fail;
+ if (ec) {
+ setDOMException(ec, args.GetIsolate());
+ return;
+ }
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &V8TestNamedConstructorConstructor::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
- fail:
- return setDOMException(ec, args.GetIsolate());
+ args.GetReturnValue().Set(wrapper);
}
v8::Persistent<v8::FunctionTemplate> V8TestNamedConstructorConstructor::GetTemplate(v8::Isolate* isolate, WrapperWorldType currentWorldType)
@@ -197,16 +172,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Dependent);
return wrapper;
}
void V8TestNamedConstructor::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestNamedConstructor.h b/Source/bindings/tests/results/V8TestNamedConstructor.h
index 29581ed..aa0197f 100644
--- a/Source/bindings/tests/results/V8TestNamedConstructor.h
+++ b/Source/bindings/tests/results/V8TestNamedConstructor.h
@@ -25,9 +25,6 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
@@ -39,7 +36,6 @@
class V8TestNamedConstructor {
public:
- static const bool hasDependentLifetime = true;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -73,7 +69,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestNamedConstructor::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestNamedConstructor::info.derefObjectFunction);
}
return V8TestNamedConstructor::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestNode.cpp b/Source/bindings/tests/results/V8TestNode.cpp
index 78c93b4..e25bda1 100644
--- a/Source/bindings/tests/results/V8TestNode.cpp
+++ b/Source/bindings/tests/results/V8TestNode.cpp
@@ -33,40 +33,8 @@
#include "core/page/Frame.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestNode@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore8TestNodeE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestNode* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestNode@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore8TestNodeE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -79,6 +47,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestNode::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -89,27 +59,31 @@
template <typename T> void V8_USE(T) { }
-static v8::Handle<v8::Value> constructor(const v8::Arguments& args)
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
{
RefPtr<TestNode> impl = TestNode::create();
v8::Handle<v8::Object> wrapper = args.Holder();
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &V8TestNode::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
}
} // namespace TestNodeV8Internal
-v8::Handle<v8::Value> V8TestNode::constructorCallback(const v8::Arguments& args)
+void V8TestNode::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (!args.IsConstructCall())
- return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ if (!args.IsConstructCall()) {
+ throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ return;
+ }
- if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
- return args.Holder();
+ if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) {
+ args.GetReturnValue().Set(args.Holder());
+ return;
+ }
- return TestNodeV8Internal::constructor(args);
+ TestNodeV8Internal::constructor(args);
}
static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestNodeTemplate(v8::Persistent<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
@@ -165,10 +139,6 @@
{
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
ASSERT(static_cast<void*>(static_cast<Node*>(impl.get())) == static_cast<void*>(impl.get()));
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
@@ -176,7 +146,7 @@
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Dependent);
return wrapper;
}
void V8TestNode::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestNode.h b/Source/bindings/tests/results/V8TestNode.h
index 44b65ec..0fee8ae 100644
--- a/Source/bindings/tests/results/V8TestNode.h
+++ b/Source/bindings/tests/results/V8TestNode.h
@@ -21,19 +21,16 @@
#ifndef V8TestNode_h
#define V8TestNode_h
+#include "V8Node.h"
#include "bindings/bindings/tests/idls/TestNode.h"
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestNode {
public:
- static const bool hasDependentLifetime = true;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -44,7 +41,7 @@
static void derefObject(void*);
static WrapperTypeInfo info;
static EventTarget* toEventTarget(v8::Handle<v8::Object>);
- static v8::Handle<v8::Value> constructorCallback(const v8::Arguments&);
+ static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
static void installPerContextProperties(v8::Handle<v8::Object>, TestNode*, v8::Isolate*) { }
static void installPerContextPrototypeProperties(v8::Handle<v8::Object>, v8::Isolate*) { }
@@ -68,7 +65,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestNode::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestNode::info.derefObjectFunction);
}
return V8TestNode::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestObject.cpp b/Source/bindings/tests/results/V8TestObject.cpp
index 604ac10..6862fc8 100644
--- a/Source/bindings/tests/results/V8TestObject.cpp
+++ b/Source/bindings/tests/results/V8TestObject.cpp
@@ -23,16 +23,19 @@
#include "HTMLNames.h"
#include "RuntimeEnabledFeatures.h"
-#include "ScriptProfile.h"
#include "V8DOMStringList.h"
#include "V8Document.h"
#include "V8Float32Array.h"
+#include "V8MessagePort.h"
#include "V8Node.h"
#include "V8SVGDocument.h"
#include "V8SVGPoint.h"
-#include "V8ScriptProfile.h"
#include "V8TestCallback.h"
+#include "V8TestInterface.h"
#include "V8TestNode.h"
+#include "V8TestObjectectA.h"
+#include "V8TestObjectectB.h"
+#include "V8TestObjectectC.h"
#include "V8TestSubObj.h"
#include "bindings/v8/BindingSecurity.h"
#include "bindings/v8/Dictionary.h"
@@ -48,7 +51,6 @@
#include "bindings/v8/V8HiddenPropertyName.h"
#include "bindings/v8/V8ObjectConstructor.h"
#include "core/dom/ContextFeatures.h"
-#include "core/dom/DOMStringList.h"
#include "core/dom/Document.h"
#include "core/dom/ExceptionCode.h"
#include "core/page/Frame.h"
@@ -56,59 +58,14 @@
#include "core/page/UseCounter.h"
#include "core/svg/properties/SVGPropertyTearOff.h"
#include "core/svg/properties/SVGStaticPropertyTearOff.h"
-#include "wtf/Float32Array.h"
#include "wtf/GetPtr.h"
#include "wtf/RefCounted.h"
#include "wtf/RefPtr.h"
#include "wtf/UnusedParam.h"
#include "wtf/Vector.h"
-#if ENABLE(Condition1)
-#include "V8TestObjectectA.h"
-#endif
-
-#if ENABLE(Condition1) && ENABLE(Condition2)
-#include "V8TestObjectectB.h"
-#endif
-
-#if ENABLE(Condition1) || ENABLE(Condition2)
-#include "V8TestObjectectC.h"
-#endif
-
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestObj@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore7TestObjE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestObj* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestObj@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore7TestObjE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -121,6 +78,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestObject::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -879,6 +838,30 @@
TestObjV8Internal::withScriptExecutionContextAttributeAttrSetter(name, value, info);
}
+static v8::Handle<v8::Value> withActiveWindowAndFirstWindowAttributeAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
+{
+ TestObj* imp = V8TestObject::toNative(info.Holder());
+ return toV8Fast(imp->withActiveWindowAndFirstWindowAttribute(), info, imp);
+}
+
+static v8::Handle<v8::Value> withActiveWindowAndFirstWindowAttributeAttrGetterCallback(v8::Local<v8::String> name, const v8::AccessorInfo& info)
+{
+ return TestObjV8Internal::withActiveWindowAndFirstWindowAttributeAttrGetter(name, info);
+}
+
+static void withActiveWindowAndFirstWindowAttributeAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
+{
+ TestObj* imp = V8TestObject::toNative(info.Holder());
+ V8TRYCATCH_VOID(TestObj*, v, V8TestObject::HasInstance(value, info.GetIsolate(), worldType(info.GetIsolate())) ? V8TestObject::toNative(v8::Handle<v8::Object>::Cast(value)) : 0);
+ imp->setWithActiveWindowAndFirstWindowAttribute(activeDOMWindow(), firstDOMWindow(), WTF::getPtr(v));
+ return;
+}
+
+static void withActiveWindowAndFirstWindowAttributeAttrSetterCallback(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
+{
+ TestObjV8Internal::withActiveWindowAndFirstWindowAttributeAttrSetter(name, value, info);
+}
+
static v8::Handle<v8::Value> withScriptStateAttributeRaisesAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
{
TestObj* imp = V8TestObject::toNative(info.Holder());
@@ -1469,6 +1452,30 @@
TestObjV8Internal::doubleArrayAttrSetter(name, value, info);
}
+static v8::Handle<v8::Value> messagePortArrayAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
+{
+ TestObj* imp = V8TestObject::toNative(info.Holder());
+ return v8Array(imp->messagePortArray(), info.GetIsolate());
+}
+
+static v8::Handle<v8::Value> messagePortArrayAttrGetterCallback(v8::Local<v8::String> name, const v8::AccessorInfo& info)
+{
+ return TestObjV8Internal::messagePortArrayAttrGetter(name, info);
+}
+
+static void messagePortArrayAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
+{
+ TestObj* imp = V8TestObject::toNative(info.Holder());
+ V8TRYCATCH_VOID(Vector<RefPtr<MessagePort> >, v, (toRefPtrNativeArray<MessagePort, V8MessagePort>(value, info.GetIsolate())));
+ imp->setMessagePortArray(v);
+ return;
+}
+
+static void messagePortArrayAttrSetterCallback(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
+{
+ TestObjV8Internal::messagePortArrayAttrSetter(name, value, info);
+}
+
static v8::Handle<v8::Value> contentDocumentAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
{
TestObj* imp = V8TestObject::toNative(info.Holder());
@@ -2444,7 +2451,7 @@
if (args.Length() < 1)
return throwNotEnoughArgumentsError(args.GetIsolate());
TestObj* imp = V8TestObject::toNative(args.Holder());
- V8TRYCATCH(Vector<RefPtr<ScriptProfile> >, sequenceArg, (toRefPtrNativeArray<ScriptProfile, V8ScriptProfile>(args[0], args.GetIsolate())));
+ V8TRYCATCH(Vector<RefPtr<TestInterface> >, sequenceArg, (toRefPtrNativeArray<TestInterface, V8TestInterface>(args[0], args.GetIsolate())));
imp->methodWithSequenceArg(sequenceArg);
return v8Undefined();
}
@@ -2492,16 +2499,12 @@
return throwNotEnoughArgumentsError(args.GetIsolate());
TestObj* imp = V8TestObject::toNative(args.Holder());
ExceptionCode ec = 0;
- {
V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, strArg, args[0]);
V8TRYCATCH(TestObj*, objArg, V8TestObject::HasInstance(args[1], args.GetIsolate(), worldType(args.GetIsolate())) ? V8TestObject::toNative(v8::Handle<v8::Object>::Cast(args[1])) : 0);
RefPtr<TestObj> result = imp->methodThatRequiresAllArgsAndThrows(strArg, objArg, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return toV8(result.release(), args.Holder(), args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> methodThatRequiresAllArgsAndThrowsMethodCallback(const v8::Arguments& args)
@@ -2547,32 +2550,14 @@
return TestObjV8Internal::optionsObjectMethod(args);
}
-static v8::Handle<v8::Value> namedItemMethod(const v8::Arguments& args)
-{
- if (args.Length() < 1)
- return throwNotEnoughArgumentsError(args.GetIsolate());
- TestObj* imp = V8TestObject::toNative(args.Holder());
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, name, args[0]);
- return v8String(imp->namedItem(name), args.GetIsolate(), ReturnUnsafeHandle);
-}
-
-static v8::Handle<v8::Value> namedItemMethodCallback(const v8::Arguments& args)
-{
- return TestObjV8Internal::namedItemMethod(args);
-}
-
static v8::Handle<v8::Value> methodWithExceptionMethod(const v8::Arguments& args)
{
TestObj* imp = V8TestObject::toNative(args.Holder());
ExceptionCode ec = 0;
- {
imp->methodWithException(ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return v8Undefined();
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> methodWithExceptionMethodCallback(const v8::Arguments& args)
@@ -2669,23 +2654,19 @@
{
TestObj* imp = V8TestObject::toNative(args.Holder());
ExceptionCode ec = 0;
- {
ScriptState* currentState = ScriptState::current();
if (!currentState)
return v8Undefined();
ScriptState& state = *currentState;
imp->withScriptStateVoidException(&state, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
if (state.hadException()) {
v8::Local<v8::Value> exception = state.exception();
state.clearException();
return throwError(exception, args.GetIsolate());
}
return v8Undefined();
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> withScriptStateVoidExceptionMethodCallback(const v8::Arguments& args)
@@ -2697,23 +2678,19 @@
{
TestObj* imp = V8TestObject::toNative(args.Holder());
ExceptionCode ec = 0;
- {
ScriptState* currentState = ScriptState::current();
if (!currentState)
return v8Undefined();
ScriptState& state = *currentState;
RefPtr<TestObj> result = imp->withScriptStateObjException(&state, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
if (state.hadException()) {
v8::Local<v8::Value> exception = state.exception();
state.clearException();
return throwError(exception, args.GetIsolate());
}
return toV8(result.release(), args.Holder(), args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> withScriptStateObjExceptionMethodCallback(const v8::Arguments& args)
@@ -2760,7 +2737,6 @@
{
TestObj* imp = V8TestObject::toNative(args.Holder());
ExceptionCode ec = 0;
- {
ScriptState* currentState = ScriptState::current();
if (!currentState)
return v8Undefined();
@@ -2768,16 +2744,13 @@
ScriptExecutionContext* scriptContext = getScriptExecutionContext();
RefPtr<TestObj> result = imp->withScriptExecutionContextAndScriptStateObjException(&state, scriptContext, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
if (state.hadException()) {
v8::Local<v8::Value> exception = state.exception();
state.clearException();
return throwError(exception, args.GetIsolate());
}
return toV8(result.release(), args.Holder(), args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> withScriptExecutionContextAndScriptStateObjExceptionMethodCallback(const v8::Arguments& args)
@@ -2807,6 +2780,18 @@
return TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesMethod(args);
}
+static v8::Handle<v8::Value> withActiveWindowAndFirstWindowMethod(const v8::Arguments& args)
+{
+ TestObj* imp = V8TestObject::toNative(args.Holder());
+ imp->withActiveWindowAndFirstWindow(activeDOMWindow(), firstDOMWindow());
+ return v8Undefined();
+}
+
+static v8::Handle<v8::Value> withActiveWindowAndFirstWindowMethodCallback(const v8::Arguments& args)
+{
+ return TestObjV8Internal::withActiveWindowAndFirstWindowMethod(args);
+}
+
static v8::Handle<v8::Value> methodWithOptionalArgMethod(const v8::Arguments& args)
{
TestObj* imp = V8TestObject::toNative(args.Holder());
@@ -3452,15 +3437,11 @@
return throwNotEnoughArgumentsError(args.GetIsolate());
TestObj* imp = V8TestObject::toNative(args.Holder());
ExceptionCode ec = 0;
- {
V8TRYCATCH(Vector<String>, values, toNativeArray<String>(args[0]));
Vector<String> result = imp->stringArrayFunction(values, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return v8Array(result, args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> stringArrayFunctionMethodCallback(const v8::Arguments& args)
@@ -3474,15 +3455,11 @@
return throwNotEnoughArgumentsError(args.GetIsolate());
TestObj* imp = V8TestObject::toNative(args.Holder());
ExceptionCode ec = 0;
- {
V8TRYCATCH(RefPtr<DOMStringList>, values, toDOMStringList(args[0], args.GetIsolate()));
RefPtr<DOMStringList> result = imp->domStringListFunction(values, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return toV8(result.release(), args.Holder(), args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> domStringListFunctionMethodCallback(const v8::Arguments& args)
@@ -3494,16 +3471,12 @@
{
TestObj* imp = V8TestObject::toNative(args.Holder());
ExceptionCode ec = 0;
- {
if (!BindingSecurity::shouldAllowAccessToNode(imp->getSVGDocument(ec)))
return v8::Handle<v8::Value>(v8Null(args.GetIsolate()));
RefPtr<SVGDocument> result = imp->getSVGDocument(ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return toV8(result.release(), args.Holder(), args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> getSVGDocumentMethodCallback(const v8::Arguments& args)
@@ -3611,17 +3584,13 @@
return throwNotEnoughArgumentsError(args.GetIsolate());
TestObj* imp = V8TestObject::toNative(args.Holder());
ExceptionCode ec = 0;
- {
V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, str, args[0]);
V8TRYCATCH(float, a, static_cast<float>(args[1]->NumberValue()));
V8TRYCATCH(int, b, toInt32(args[2]));
bool result = imp->strictFunction(str, a, b, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return v8Boolean(result, args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> strictFunctionMethodCallback(const v8::Arguments& args)
@@ -3984,19 +3953,23 @@
return TestObjV8Internal::deprecatedStaticMethodMethod(args);
}
-static v8::Handle<v8::Value> constructor(const v8::Arguments& args)
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (args.Length() < 1)
- return throwNotEnoughArgumentsError(args.GetIsolate());
- if (args.Length() <= 0 || !args[0]->IsFunction())
- return throwTypeError(0, args.GetIsolate());
+ if (args.Length() < 1) {
+ throwNotEnoughArgumentsError(args.GetIsolate());
+ return;
+ }
+ if (args.Length() <= 0 || !args[0]->IsFunction()) {
+ throwTypeError(0, args.GetIsolate());
+ return;
+ }
RefPtr<TestCallback> testCallback = V8TestCallback::create(args[0], getScriptExecutionContext());
RefPtr<TestObj> impl = TestObj::create(testCallback);
v8::Handle<v8::Object> wrapper = args.Holder();
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &V8TestObject::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
}
} // namespace TestObjV8Internal
@@ -4070,6 +4043,8 @@
{"withScriptStateAttribute", TestObjV8Internal::withScriptStateAttributeAttrGetterCallback, TestObjV8Internal::withScriptStateAttributeAttrSetterCallback, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'withScriptExecutionContextAttribute' (Type: 'attribute' ExtAttr: 'CallWith')
{"withScriptExecutionContextAttribute", TestObjV8Internal::withScriptExecutionContextAttributeAttrGetterCallback, TestObjV8Internal::withScriptExecutionContextAttributeAttrSetterCallback, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
+ // Attribute 'withActiveWindowAndFirstWindowAttribute' (Type: 'attribute' ExtAttr: 'SetterCallWith')
+ {"withActiveWindowAndFirstWindowAttribute", TestObjV8Internal::withActiveWindowAndFirstWindowAttributeAttrGetterCallback, TestObjV8Internal::withActiveWindowAndFirstWindowAttributeAttrSetterCallback, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'withScriptStateAttributeRaises' (Type: 'attribute' ExtAttr: 'GetterRaisesException CallWith')
{"withScriptStateAttributeRaises", TestObjV8Internal::withScriptStateAttributeRaisesAttrGetterCallback, TestObjV8Internal::withScriptStateAttributeRaisesAttrSetterCallback, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'withScriptExecutionContextAttributeRaises' (Type: 'attribute' ExtAttr: 'GetterRaisesException CallWith')
@@ -4112,9 +4087,9 @@
// Attribute 'conditionalAttr6' (Type: 'attribute' ExtAttr: 'Conditional')
{"conditionalAttr6", TestObjV8Internal::TestObjConstructorGetter, TestObjV8Internal::TestObjReplaceableAttrSetterCallback, 0, 0, &V8TestObjectectC::info, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None | v8::DontEnum), 0 /* on instance */},
#endif // ENABLE(Condition1) || ENABLE(Condition2)
- // Attribute 'cachedAttribute1' (Type: 'attribute' ExtAttr: 'CachedAttribute')
+ // Attribute 'cachedAttribute1' (Type: 'attribute' ExtAttr: '')
{"cachedAttribute1", TestObjV8Internal::cachedAttribute1AttrGetterCallback, 0, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
- // Attribute 'cachedAttribute2' (Type: 'attribute' ExtAttr: 'CachedAttribute')
+ // Attribute 'cachedAttribute2' (Type: 'attribute' ExtAttr: '')
{"cachedAttribute2", TestObjV8Internal::cachedAttribute2AttrGetterCallback, 0, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'anyAttribute' (Type: 'attribute' ExtAttr: '')
{"anyAttribute", TestObjV8Internal::anyAttributeAttrGetterCallback, TestObjV8Internal::anyAttributeAttrSetterCallback, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
@@ -4122,6 +4097,8 @@
{"floatArray", TestObjV8Internal::floatArrayAttrGetterCallback, TestObjV8Internal::floatArrayAttrSetterCallback, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'doubleArray' (Type: 'attribute' ExtAttr: '')
{"doubleArray", TestObjV8Internal::doubleArrayAttrGetterCallback, TestObjV8Internal::doubleArrayAttrSetterCallback, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
+ // Attribute 'messagePortArray' (Type: 'attribute' ExtAttr: '')
+ {"messagePortArray", TestObjV8Internal::messagePortArrayAttrGetterCallback, TestObjV8Internal::messagePortArrayAttrSetterCallback, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'contentDocument' (Type: 'attribute' ExtAttr: 'CheckSecurityForNode')
{"contentDocument", TestObjV8Internal::contentDocumentAttrGetterCallback, 0, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'mutablePoint' (Type: 'attribute' ExtAttr: '')
@@ -4193,7 +4170,6 @@
{"methodWithEnumArg", TestObjV8Internal::methodWithEnumArgMethodCallback, 0, 1},
{"serializedValue", TestObjV8Internal::serializedValueMethodCallback, 0, 1},
{"optionsObject", TestObjV8Internal::optionsObjectMethodCallback, 0, 1},
- {"namedItem", TestObjV8Internal::namedItemMethodCallback, 0, 1},
{"methodWithException", TestObjV8Internal::methodWithExceptionMethodCallback, 0, 0},
{"customMethod", TestObjV8Internal::customMethodMethodCallback, 0, 0},
{"customMethodWithArgs", TestObjV8Internal::customMethodWithArgsMethodCallback, 0, 3},
@@ -4207,6 +4183,7 @@
{"withScriptExecutionContextAndScriptState", TestObjV8Internal::withScriptExecutionContextAndScriptStateMethodCallback, 0, 0},
{"withScriptExecutionContextAndScriptStateObjException", TestObjV8Internal::withScriptExecutionContextAndScriptStateObjExceptionMethodCallback, 0, 0},
{"withScriptExecutionContextAndScriptStateWithSpaces", TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesMethodCallback, 0, 0},
+ {"withActiveWindowAndFirstWindow", TestObjV8Internal::withActiveWindowAndFirstWindowMethodCallback, 0, 0},
{"methodWithOptionalArg", TestObjV8Internal::methodWithOptionalArgMethodCallback, 0, 0},
{"methodWithNonOptionalArgAndOptionalArg", TestObjV8Internal::methodWithNonOptionalArgAndOptionalArgMethodCallback, 0, 1},
{"methodWithNonOptionalArgAndTwoOptionalArgs", TestObjV8Internal::methodWithNonOptionalArgAndTwoOptionalArgsMethodCallback, 0, 1},
@@ -4286,15 +4263,19 @@
COMPILE_ASSERT(15 == TestObj::CONST_IMPL, TestObjEnumCONST_IMPLIsWrongUseDoNotCheckConstants);
COMPILE_ASSERT(1 == TestObj::DEPRECATED_CONSTANT, TestObjEnumDEPRECATED_CONSTANTIsWrongUseDoNotCheckConstants);
-v8::Handle<v8::Value> V8TestObject::constructorCallback(const v8::Arguments& args)
+void V8TestObject::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (!args.IsConstructCall())
- return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ if (!args.IsConstructCall()) {
+ throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ return;
+ }
- if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
- return args.Holder();
+ if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) {
+ args.GetReturnValue().Set(args.Holder());
+ return;
+ }
- return TestObjV8Internal::constructor(args);
+ TestObjV8Internal::constructor(args);
}
v8::Handle<v8::Value> V8TestObject::indexedPropertyGetter(uint32_t index, const v8::AccessorInfo& info)
@@ -4494,16 +4475,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8TestObject::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestObject.h b/Source/bindings/tests/results/V8TestObject.h
index 5702982..f367af5 100644
--- a/Source/bindings/tests/results/V8TestObject.h
+++ b/Source/bindings/tests/results/V8TestObject.h
@@ -25,15 +25,11 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestObject {
public:
- static const bool hasDependentLifetime = false;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -46,7 +42,7 @@
static v8::Handle<v8::Value> customMethodMethodCustom(const v8::Arguments&);
static v8::Handle<v8::Value> customMethodWithArgsMethodCustom(const v8::Arguments&);
static v8::Handle<v8::Value> classMethod2MethodCustom(const v8::Arguments&);
- static v8::Handle<v8::Value> constructorCallback(const v8::Arguments&);
+ static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
static v8::Handle<v8::Value> customAttrAttrGetterCustom(v8::Local<v8::String> name, const v8::AccessorInfo&);
static void customAttrAttrSetterCustom(v8::Local<v8::String> name, v8::Local<v8::Value>, const v8::AccessorInfo&);
static v8::Handle<v8::Value> indexedPropertyGetter(uint32_t, const v8::AccessorInfo&);
@@ -74,7 +70,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestObject::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestObject::info.derefObjectFunction);
}
return V8TestObject::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestOverloadedConstructors.cpp b/Source/bindings/tests/results/V8TestOverloadedConstructors.cpp
index fc74a38..73affc5 100644
--- a/Source/bindings/tests/results/V8TestOverloadedConstructors.cpp
+++ b/Source/bindings/tests/results/V8TestOverloadedConstructors.cpp
@@ -34,44 +34,10 @@
#include "core/dom/Document.h"
#include "core/dom/ExceptionCode.h"
#include "core/page/Frame.h"
-#include "wtf/ArrayBuffer.h"
-#include "wtf/ArrayBufferView.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestOverloadedConstructors@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore26TestOverloadedConstructorsE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestOverloadedConstructors* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestOverloadedConstructors@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore26TestOverloadedConstructorsE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -84,6 +50,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestOverloadedConstructors::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -94,76 +62,91 @@
template <typename T> void V8_USE(T) { }
-static v8::Handle<v8::Value> constructor1(const v8::Arguments& args)
+static void constructor1(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- V8TRYCATCH(ArrayBuffer*, arrayBuffer, V8ArrayBuffer::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate())) ? V8ArrayBuffer::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
+ V8TRYCATCH_VOID(ArrayBuffer*, arrayBuffer, V8ArrayBuffer::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate())) ? V8ArrayBuffer::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
RefPtr<TestOverloadedConstructors> impl = TestOverloadedConstructors::create(arrayBuffer);
v8::Handle<v8::Object> wrapper = args.Holder();
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &V8TestOverloadedConstructors::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
}
-static v8::Handle<v8::Value> constructor2(const v8::Arguments& args)
+static void constructor2(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- V8TRYCATCH(ArrayBufferView*, arrayBufferView, V8ArrayBufferView::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate())) ? V8ArrayBufferView::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
+ V8TRYCATCH_VOID(ArrayBufferView*, arrayBufferView, V8ArrayBufferView::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate())) ? V8ArrayBufferView::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
RefPtr<TestOverloadedConstructors> impl = TestOverloadedConstructors::create(arrayBufferView);
v8::Handle<v8::Object> wrapper = args.Holder();
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &V8TestOverloadedConstructors::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
}
-static v8::Handle<v8::Value> constructor3(const v8::Arguments& args)
+static void constructor3(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- V8TRYCATCH(Blob*, blob, V8Blob::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate())) ? V8Blob::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
+ V8TRYCATCH_VOID(Blob*, blob, V8Blob::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate())) ? V8Blob::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
RefPtr<TestOverloadedConstructors> impl = TestOverloadedConstructors::create(blob);
v8::Handle<v8::Object> wrapper = args.Holder();
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &V8TestOverloadedConstructors::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
}
-static v8::Handle<v8::Value> constructor4(const v8::Arguments& args)
+static void constructor4(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, string, args[0]);
+ V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, string, args[0]);
RefPtr<TestOverloadedConstructors> impl = TestOverloadedConstructors::create(string);
v8::Handle<v8::Object> wrapper = args.Holder();
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &V8TestOverloadedConstructors::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
}
-static v8::Handle<v8::Value> constructor(const v8::Arguments& args)
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if ((args.Length() == 1 && (V8ArrayBuffer::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate())))))
- return TestOverloadedConstructorsV8Internal::constructor1(args);
- if ((args.Length() == 1 && (V8ArrayBufferView::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate())))))
- return TestOverloadedConstructorsV8Internal::constructor2(args);
- if ((args.Length() == 1 && (V8Blob::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate())))))
- return TestOverloadedConstructorsV8Internal::constructor3(args);
- if (args.Length() == 1)
- return TestOverloadedConstructorsV8Internal::constructor4(args);
- if (args.Length() < 1)
- return throwNotEnoughArgumentsError(args.GetIsolate());
- return throwTypeError(0, args.GetIsolate());
+ if ((args.Length() == 1 && (V8ArrayBuffer::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate()))))) {
+ TestOverloadedConstructorsV8Internal::constructor1(args);
+ return;
+ }
+ if ((args.Length() == 1 && (V8ArrayBufferView::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate()))))) {
+ TestOverloadedConstructorsV8Internal::constructor2(args);
+ return;
+ }
+ if ((args.Length() == 1 && (V8Blob::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate()))))) {
+ TestOverloadedConstructorsV8Internal::constructor3(args);
+ return;
+ }
+ if (args.Length() == 1) {
+ TestOverloadedConstructorsV8Internal::constructor4(args);
+ return;
+ }
+ if (args.Length() < 1) {
+ throwNotEnoughArgumentsError(args.GetIsolate());
+ return;
+ }
+ throwTypeError(0, args.GetIsolate());
+ return;
}
} // namespace TestOverloadedConstructorsV8Internal
-v8::Handle<v8::Value> V8TestOverloadedConstructors::constructorCallback(const v8::Arguments& args)
+void V8TestOverloadedConstructors::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (!args.IsConstructCall())
- return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ if (!args.IsConstructCall()) {
+ throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ return;
+ }
- if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
- return args.Holder();
+ if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) {
+ args.GetReturnValue().Set(args.Holder());
+ return;
+ }
- return TestOverloadedConstructorsV8Internal::constructor(args);
+ TestOverloadedConstructorsV8Internal::constructor(args);
}
static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestOverloadedConstructorsTemplate(v8::Persistent<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
@@ -215,16 +198,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8TestOverloadedConstructors::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestOverloadedConstructors.h b/Source/bindings/tests/results/V8TestOverloadedConstructors.h
index 6fc3751..aa645d4 100644
--- a/Source/bindings/tests/results/V8TestOverloadedConstructors.h
+++ b/Source/bindings/tests/results/V8TestOverloadedConstructors.h
@@ -25,15 +25,11 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestOverloadedConstructors {
public:
- static const bool hasDependentLifetime = false;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -43,7 +39,7 @@
}
static void derefObject(void*);
static WrapperTypeInfo info;
- static v8::Handle<v8::Value> constructorCallback(const v8::Arguments&);
+ static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
static void installPerContextProperties(v8::Handle<v8::Object>, TestOverloadedConstructors*, v8::Isolate*) { }
static void installPerContextPrototypeProperties(v8::Handle<v8::Object>, v8::Isolate*) { }
@@ -67,7 +63,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestOverloadedConstructors::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestOverloadedConstructors::info.derefObjectFunction);
}
return V8TestOverloadedConstructors::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestSerializedScriptValueInterface.cpp b/Source/bindings/tests/results/V8TestSerializedScriptValueInterface.cpp
index 1874d21..0d8246d 100644
--- a/Source/bindings/tests/results/V8TestSerializedScriptValueInterface.cpp
+++ b/Source/bindings/tests/results/V8TestSerializedScriptValueInterface.cpp
@@ -22,10 +22,8 @@
#if ENABLE(Condition1) || ENABLE(Condition2)
#include "V8TestSerializedScriptValueInterface.h"
-#include "MessagePort.h"
#include "RuntimeEnabledFeatures.h"
#include "SerializedScriptValue.h"
-#include "V8MessagePort.h"
#include "bindings/v8/ScriptController.h"
#include "bindings/v8/SerializedScriptValue.h"
#include "bindings/v8/V8Binding.h"
@@ -36,40 +34,8 @@
#include "core/page/Frame.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestSerializedScriptValueInterface@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore34TestSerializedScriptValueInterfaceE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestSerializedScriptValueInterface* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestSerializedScriptValueInterface@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore34TestSerializedScriptValueInterfaceE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -82,6 +48,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestSerializedScriptValueInterface::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -159,24 +127,6 @@
TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrSetter(name, value, info);
}
-static v8::Handle<v8::Value> portsAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
-{
- TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterface::toNative(info.Holder());
- MessagePortArray* ports = imp->ports();
- if (!ports)
- return v8::Array::New(0);
- MessagePortArray portsCopy(*ports);
- v8::Local<v8::Array> portArray = v8::Array::New(portsCopy.size());
- for (size_t i = 0; i < portsCopy.size(); ++i)
- portArray->Set(v8Integer(i, info.GetIsolate()), toV8Fast(portsCopy[i].get(), info, imp));
- return portArray;
-}
-
-static v8::Handle<v8::Value> portsAttrGetterCallback(v8::Local<v8::String> name, const v8::AccessorInfo& info)
-{
- return TestSerializedScriptValueInterfaceV8Internal::portsAttrGetter(name, info);
-}
-
static v8::Handle<v8::Value> cachedReadonlyValueAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
{
v8::Handle<v8::String> propertyName = v8::String::NewSymbol("cachedReadonlyValue");
@@ -204,8 +154,6 @@
{"readonlyValue", TestSerializedScriptValueInterfaceV8Internal::readonlyValueAttrGetterCallback, 0, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'cachedValue' (Type: 'attribute' ExtAttr: 'CachedAttribute')
{"cachedValue", TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrGetterCallback, TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrSetterCallback, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
- // Attribute 'ports' (Type: 'attribute' ExtAttr: '')
- {"ports", TestSerializedScriptValueInterfaceV8Internal::portsAttrGetterCallback, 0, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'cachedReadonlyValue' (Type: 'attribute' ExtAttr: 'CachedAttribute')
{"cachedReadonlyValue", TestSerializedScriptValueInterfaceV8Internal::cachedReadonlyValueAttrGetterCallback, 0, 0, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
};
@@ -257,16 +205,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8TestSerializedScriptValueInterface::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestSerializedScriptValueInterface.h b/Source/bindings/tests/results/V8TestSerializedScriptValueInterface.h
index e1509b4..78c33da 100644
--- a/Source/bindings/tests/results/V8TestSerializedScriptValueInterface.h
+++ b/Source/bindings/tests/results/V8TestSerializedScriptValueInterface.h
@@ -26,15 +26,11 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestSerializedScriptValueInterface {
public:
- static const bool hasDependentLifetime = false;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -67,7 +63,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestSerializedScriptValueInterface::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestSerializedScriptValueInterface::info.derefObjectFunction);
}
return V8TestSerializedScriptValueInterface::createWrapper(impl, creationContext, isolate);
}
diff --git a/Source/bindings/tests/results/V8TestTypedefs.cpp b/Source/bindings/tests/results/V8TestTypedefs.cpp
index cdc1ae5..307d8e4 100644
--- a/Source/bindings/tests/results/V8TestTypedefs.cpp
+++ b/Source/bindings/tests/results/V8TestTypedefs.cpp
@@ -23,7 +23,6 @@
#include "RuntimeEnabledFeatures.h"
#include "SerializedScriptValue.h"
-#include "V8DOMStringList.h"
#include "V8SVGPoint.h"
#include "V8SerializedScriptValue.h"
#include "V8TestCallback.h"
@@ -35,47 +34,14 @@
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/V8ObjectConstructor.h"
#include "core/dom/ContextFeatures.h"
-#include "core/dom/DOMStringList.h"
#include "core/dom/Document.h"
#include "core/dom/ExceptionCode.h"
#include "core/page/Frame.h"
#include "core/svg/properties/SVGPropertyTearOff.h"
#include "wtf/UnusedParam.h"
-#if ENABLE(BINDING_INTEGRITY)
-#if defined(OS_WIN)
-#pragma warning(disable: 4483)
-extern "C" { extern void (*const __identifier("??_7TestTypedefs@WebCore@@6B@")[])(); }
-#else
-extern "C" { extern void* _ZTVN7WebCore12TestTypedefsE[]; }
-#endif
-#endif // ENABLE(BINDING_INTEGRITY)
-
namespace WebCore {
-#if ENABLE(BINDING_INTEGRITY)
-// This checks if a DOM object that is about to be wrapped is valid.
-// Specifically, it checks that a vtable of the DOM object is equal to
-// a vtable of an expected class.
-// Due to a dangling pointer, the DOM object you are wrapping might be
-// already freed or realloced. If freed, the check will fail because
-// a free list pointer should be stored at the head of the DOM object.
-// If realloced, the check will fail because the vtable of the DOM object
-// differs from the expected vtable (unless the same class of DOM object
-// is realloced on the slot).
-inline void checkTypeOrDieTrying(TestTypedefs* object)
-{
- void* actualVTablePointer = *(reinterpret_cast<void**>(object));
-#if defined(OS_WIN)
- void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestTypedefs@WebCore@@6B@"));
-#else
- void* expectedVTablePointer = &_ZTVN7WebCore12TestTypedefsE[2];
-#endif
- if (actualVTablePointer != expectedVTablePointer)
- CRASH();
-}
-#endif // ENABLE(BINDING_INTEGRITY)
-
#if defined(OS_WIN)
// In ScriptWrappable, the use of extern function prototypes inside templated static methods has an issue on windows.
// These prototypes do not pick up the surrounding namespace, so drop out of WebCore as a workaround.
@@ -88,6 +54,8 @@
{
if (ScriptWrappable::wrapperCanBeStoredInObject(object))
ScriptWrappable::setTypeInfoInObject(object, &V8TestTypedefs::info);
+ else
+ ASSERT_NOT_REACHED();
}
#if defined(OS_WIN)
namespace WebCore {
@@ -391,15 +359,11 @@
return throwNotEnoughArgumentsError(args.GetIsolate());
TestTypedefs* imp = V8TestTypedefs::toNative(args.Holder());
ExceptionCode ec = 0;
- {
V8TRYCATCH(Vector<String>, values, toNativeArray<String>(args[0]));
Vector<String> result = imp->stringArrayFunction(values, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return v8Array(result, args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> stringArrayFunctionMethodCallback(const v8::Arguments& args)
@@ -413,15 +377,11 @@
return throwNotEnoughArgumentsError(args.GetIsolate());
TestTypedefs* imp = V8TestTypedefs::toNative(args.Holder());
ExceptionCode ec = 0;
- {
V8TRYCATCH(Vector<String>, values, toNativeArray<String>(args[0]));
Vector<String> result = imp->stringArrayFunction2(values, ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return v8Array(result, args.GetIsolate());
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> stringArrayFunction2MethodCallback(const v8::Arguments& args)
@@ -433,14 +393,10 @@
{
TestTypedefs* imp = V8TestTypedefs::toNative(args.Holder());
ExceptionCode ec = 0;
- {
imp->methodWithException(ec);
if (UNLIKELY(ec))
- goto fail;
+ return setDOMException(ec, args.GetIsolate());
return v8Undefined();
- }
- fail:
- return setDOMException(ec, args.GetIsolate());
}
static v8::Handle<v8::Value> methodWithExceptionMethodCallback(const v8::Arguments& args)
@@ -448,20 +404,24 @@
return TestTypedefsV8Internal::methodWithExceptionMethod(args);
}
-static v8::Handle<v8::Value> constructor(const v8::Arguments& args)
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (args.Length() < 2)
- return throwNotEnoughArgumentsError(args.GetIsolate());
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, hello, args[0]);
- if (args.Length() <= 1 || !args[1]->IsFunction())
- return throwTypeError(0, args.GetIsolate());
+ if (args.Length() < 2) {
+ throwNotEnoughArgumentsError(args.GetIsolate());
+ return;
+ }
+ V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, hello, args[0]);
+ if (args.Length() <= 1 || !args[1]->IsFunction()) {
+ throwTypeError(0, args.GetIsolate());
+ return;
+ }
RefPtr<TestCallback> testCallback = V8TestCallback::create(args[1], getScriptExecutionContext());
RefPtr<TestTypedefs> impl = TestTypedefs::create(hello, testCallback);
v8::Handle<v8::Object> wrapper = args.Holder();
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &V8TestTypedefs::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
}
} // namespace TestTypedefsV8Internal
@@ -495,15 +455,19 @@
{"methodWithException", TestTypedefsV8Internal::methodWithExceptionMethodCallback, 0, 0},
};
-v8::Handle<v8::Value> V8TestTypedefs::constructorCallback(const v8::Arguments& args)
+void V8TestTypedefs::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (!args.IsConstructCall())
- return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ if (!args.IsConstructCall()) {
+ throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ return;
+ }
- if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
- return args.Holder();
+ if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) {
+ args.GetReturnValue().Set(args.Holder());
+ return;
+ }
- return TestTypedefsV8Internal::constructor(args);
+ TestTypedefsV8Internal::constructor(args);
}
static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestTypedefsTemplate(v8::Persistent<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
@@ -559,16 +523,12 @@
ASSERT(impl.get());
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty());
-#if ENABLE(BINDING_INTEGRITY)
- checkTypeOrDieTrying(impl.get());
-#endif
-
v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &info, impl.get(), isolate);
if (UNLIKELY(wrapper.IsEmpty()))
return wrapper;
installPerContextProperties(wrapper, impl.get(), isolate);
- V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, hasDependentLifetime ? WrapperConfiguration::Dependent : WrapperConfiguration::Independent);
+ V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, WrapperConfiguration::Independent);
return wrapper;
}
void V8TestTypedefs::derefObject(void* object)
diff --git a/Source/bindings/tests/results/V8TestTypedefs.h b/Source/bindings/tests/results/V8TestTypedefs.h
index 20b344c..2e2bff4 100644
--- a/Source/bindings/tests/results/V8TestTypedefs.h
+++ b/Source/bindings/tests/results/V8TestTypedefs.h
@@ -25,15 +25,11 @@
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/WrapperTypeInfo.h"
-#include "wtf/HashMap.h"
-#include "wtf/text/StringHash.h"
-#include <v8.h>
namespace WebCore {
class V8TestTypedefs {
public:
- static const bool hasDependentLifetime = false;
static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldType);
static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
static v8::Persistent<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWorldType);
@@ -43,7 +39,7 @@
}
static void derefObject(void*);
static WrapperTypeInfo info;
- static v8::Handle<v8::Value> constructorCallback(const v8::Arguments&);
+ static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
static void installPerContextProperties(v8::Handle<v8::Object>, TestTypedefs*, v8::Isolate*) { }
static void installPerContextPrototypeProperties(v8::Handle<v8::Object>, v8::Isolate*) { }
@@ -67,7 +63,7 @@
const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl);
// Might be a XXXConstructor::info instead of an XXX::info. These will both have
// the same object de-ref functions, though, so use that as the basis of the check.
- RELEASE_ASSERT(actualInfo->derefObjectFunction == V8TestTypedefs::info.derefObjectFunction);
+ RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == V8TestTypedefs::info.derefObjectFunction);
}
return V8TestTypedefs::createWrapper(impl, creationContext, isolate);
}