[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.16-1409-g5afdf4d
eric at webkit.org
eric at webkit.org
Thu Dec 3 13:28:04 UTC 2009
The following commit has been merged in the webkit-1.1 branch:
commit 9fdac9bc4ca75816589065a6478ac8ee77baeebb
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Nov 5 22:17:40 2009 +0000
2009-11-05 Kenneth Russell <kbr at google.com>
Reviewed by Dimitri Glazkov.
[V8] Update bindings to use new API for external arrays
https://bugs.webkit.org/show_bug.cgi?id=31181
No new tests; covered by existing WebGL tests.
* bindings/v8/V8DOMWrapper.cpp:
(WebCore::V8DOMWrapper::setIndexedPropertiesToExternalArray):
(WebCore::V8DOMWrapper::getTemplate):
(WebCore::V8DOMWrapper::convertToV8Object):
* bindings/v8/V8DOMWrapper.h:
* bindings/v8/custom/V8CanvasArrayCustom.h:
(WebCore::constructCanvasArray):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@50578 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index b3e5f2f..ef8d126 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,20 @@
+2009-11-05 Kenneth Russell <kbr at google.com>
+
+ Reviewed by Dimitri Glazkov.
+
+ [V8] Update bindings to use new API for external arrays
+ https://bugs.webkit.org/show_bug.cgi?id=31181
+
+ No new tests; covered by existing WebGL tests.
+
+ * bindings/v8/V8DOMWrapper.cpp:
+ (WebCore::V8DOMWrapper::setIndexedPropertiesToExternalArray):
+ (WebCore::V8DOMWrapper::getTemplate):
+ (WebCore::V8DOMWrapper::convertToV8Object):
+ * bindings/v8/V8DOMWrapper.h:
+ * bindings/v8/custom/V8CanvasArrayCustom.h:
+ (WebCore::constructCanvasArray):
+
2009-11-05 Alpha Lam <hclam at chromium.org>
Not reviewed, Chromium build fix.
diff --git a/WebCore/bindings/v8/V8DOMWrapper.cpp b/WebCore/bindings/v8/V8DOMWrapper.cpp
index 39e58c7..4cf495c 100644
--- a/WebCore/bindings/v8/V8DOMWrapper.cpp
+++ b/WebCore/bindings/v8/V8DOMWrapper.cpp
@@ -31,6 +31,7 @@
#include "config.h"
#include "V8DOMWrapper.h"
+#include "CanvasArray.h"
#include "CSSMutableStyleDeclaration.h"
#include "ChromiumBridge.h"
#include "DOMObjectsInclude.h"
@@ -149,6 +150,45 @@ v8::Handle<v8::Value> V8DOMWrapper::convertSVGObjectWithContextToV8Object(V8Clas
#endif
+#if ENABLE(3D_CANVAS)
+void V8DOMWrapper::setIndexedPropertiesToExternalArray(v8::Handle<v8::Object> wrapper,
+ int index,
+ void* address,
+ int length)
+{
+ v8::ExternalArrayType array_type = v8::kExternalByteArray;
+ V8ClassIndex::V8WrapperType classIndex = V8ClassIndex::FromInt(index);
+ switch (classIndex) {
+ case V8ClassIndex::CANVASBYTEARRAY:
+ array_type = v8::kExternalByteArray;
+ break;
+ case V8ClassIndex::CANVASUNSIGNEDBYTEARRAY:
+ array_type = v8::kExternalUnsignedByteArray;
+ break;
+ case V8ClassIndex::CANVASSHORTARRAY:
+ array_type = v8::kExternalShortArray;
+ break;
+ case V8ClassIndex::CANVASUNSIGNEDSHORTARRAY:
+ array_type = v8::kExternalUnsignedShortArray;
+ break;
+ case V8ClassIndex::CANVASINTARRAY:
+ array_type = v8::kExternalIntArray;
+ break;
+ case V8ClassIndex::CANVASUNSIGNEDINTARRAY:
+ array_type = v8::kExternalUnsignedIntArray;
+ break;
+ case V8ClassIndex::CANVASFLOATARRAY:
+ array_type = v8::kExternalFloatArray;
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ wrapper->SetIndexedPropertiesToExternalArrayData(address,
+ array_type,
+ length);
+}
+#endif
+
bool V8DOMWrapper::domObjectHasJSWrapper(void* object)
{
return getDOMObjectMap().contains(object) || getActiveDOMObjectMap().contains(object);
@@ -486,31 +526,24 @@ v8::Persistent<v8::FunctionTemplate> V8DOMWrapper::getTemplate(V8ClassIndex::V8W
break;
case V8ClassIndex::CANVASBYTEARRAY:
descriptor->SetCallHandler(USE_CALLBACK(CanvasByteArrayConstructor));
- descriptor->InstanceTemplate()->SetIndexedPropertyHandler(USE_INDEXED_PROPERTY_GETTER(CanvasByteArray), USE_INDEXED_PROPERTY_SETTER(CanvasByteArray));
break;
case V8ClassIndex::CANVASFLOATARRAY:
descriptor->SetCallHandler(USE_CALLBACK(CanvasFloatArrayConstructor));
- descriptor->InstanceTemplate()->SetIndexedPropertyHandler(USE_INDEXED_PROPERTY_GETTER(CanvasFloatArray), USE_INDEXED_PROPERTY_SETTER(CanvasFloatArray));
break;
case V8ClassIndex::CANVASINTARRAY:
descriptor->SetCallHandler(USE_CALLBACK(CanvasIntArrayConstructor));
- descriptor->InstanceTemplate()->SetIndexedPropertyHandler(USE_INDEXED_PROPERTY_GETTER(CanvasIntArray), USE_INDEXED_PROPERTY_SETTER(CanvasIntArray));
break;
case V8ClassIndex::CANVASSHORTARRAY:
descriptor->SetCallHandler(USE_CALLBACK(CanvasShortArrayConstructor));
- descriptor->InstanceTemplate()->SetIndexedPropertyHandler(USE_INDEXED_PROPERTY_GETTER(CanvasShortArray), USE_INDEXED_PROPERTY_SETTER(CanvasShortArray));
break;
case V8ClassIndex::CANVASUNSIGNEDBYTEARRAY:
descriptor->SetCallHandler(USE_CALLBACK(CanvasUnsignedByteArrayConstructor));
- descriptor->InstanceTemplate()->SetIndexedPropertyHandler(USE_INDEXED_PROPERTY_GETTER(CanvasUnsignedByteArray), USE_INDEXED_PROPERTY_SETTER(CanvasUnsignedByteArray));
break;
case V8ClassIndex::CANVASUNSIGNEDINTARRAY:
descriptor->SetCallHandler(USE_CALLBACK(CanvasUnsignedIntArrayConstructor));
- descriptor->InstanceTemplate()->SetIndexedPropertyHandler(USE_INDEXED_PROPERTY_GETTER(CanvasUnsignedIntArray), USE_INDEXED_PROPERTY_SETTER(CanvasUnsignedIntArray));
break;
case V8ClassIndex::CANVASUNSIGNEDSHORTARRAY:
descriptor->SetCallHandler(USE_CALLBACK(CanvasUnsignedShortArrayConstructor));
- descriptor->InstanceTemplate()->SetIndexedPropertyHandler(USE_INDEXED_PROPERTY_GETTER(CanvasUnsignedShortArray), USE_INDEXED_PROPERTY_SETTER(CanvasUnsignedShortArray));
break;
#endif
case V8ClassIndex::DOMPARSER:
@@ -710,6 +743,28 @@ v8::Handle<v8::Value> V8DOMWrapper::convertToV8Object(V8ClassIndex::V8WrapperTyp
result->SetIndexedPropertiesToPixelData(pixels->data()->data(), pixels->length());
}
+#if ENABLE(3D_CANVAS)
+ // Set up CanvasArray subclasses' accesses similarly.
+ switch (type) {
+ case V8ClassIndex::CANVASBYTEARRAY:
+ case V8ClassIndex::CANVASUNSIGNEDBYTEARRAY:
+ case V8ClassIndex::CANVASSHORTARRAY:
+ case V8ClassIndex::CANVASUNSIGNEDSHORTARRAY:
+ case V8ClassIndex::CANVASINTARRAY:
+ case V8ClassIndex::CANVASUNSIGNEDINTARRAY:
+ case V8ClassIndex::CANVASFLOATARRAY: {
+ CanvasArray* array = reinterpret_cast<CanvasArray*>(impl);
+ setIndexedPropertiesToExternalArray(result,
+ V8ClassIndex::ToInt(type),
+ array->baseAddress(),
+ array->length());
+ break;
+ }
+ default:
+ break;
+ }
+#endif
+
// Special case for non-node objects associated with a
// DOMWindow. Both Safari and FF let the JS wrappers for these
// objects survive GC. To mimic their behavior, V8 creates
diff --git a/WebCore/bindings/v8/V8DOMWrapper.h b/WebCore/bindings/v8/V8DOMWrapper.h
index 2b939c8..1bffc11 100644
--- a/WebCore/bindings/v8/V8DOMWrapper.h
+++ b/WebCore/bindings/v8/V8DOMWrapper.h
@@ -308,6 +308,13 @@ namespace WebCore {
static v8::Handle<v8::Value> convertSVGObjectWithContextToV8Object(V8ClassIndex::V8WrapperType, void*);
#endif
+#if ENABLE(3D_CANVAS)
+ static void setIndexedPropertiesToExternalArray(v8::Handle<v8::Object>,
+ int,
+ void*,
+ int);
+#endif
+
private:
// Set hidden references in a DOMWindow object of a frame.
static void setHiddenWindowReference(Frame*, const int internalIndex, v8::Handle<v8::Object>);
diff --git a/WebCore/bindings/v8/custom/V8CanvasArrayCustom.h b/WebCore/bindings/v8/custom/V8CanvasArrayCustom.h
index 311b838..3e1de30 100644
--- a/WebCore/bindings/v8/custom/V8CanvasArrayCustom.h
+++ b/WebCore/bindings/v8/custom/V8CanvasArrayCustom.h
@@ -94,6 +94,10 @@ namespace WebCore {
return throwError("Invalid arguments to new Canvas<T>Array(CanvasArrayBuffer, int, int)");
// Transform the holder into a wrapper object for the array.
V8DOMWrapper::setDOMWrapper(args.Holder(), classIndex, array.get());
+ V8DOMWrapper::setIndexedPropertiesToExternalArray(args.Holder(),
+ classIndex,
+ array.get()->baseAddress(),
+ array.get()->length());
return toV8(array.release(), args.Holder());
}
@@ -128,6 +132,10 @@ namespace WebCore {
// Transform the holder into a wrapper object for the array.
V8DOMWrapper::setDOMWrapper(args.Holder(), classIndex, array.get());
+ V8DOMWrapper::setIndexedPropertiesToExternalArray(args.Holder(),
+ classIndex,
+ array.get()->baseAddress(),
+ array.get()->length());
return toV8(array.release(), args.Holder());
}
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list