[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

eric at webkit.org eric at webkit.org
Wed Apr 7 23:24:17 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 8c5572e4d9d75884198bfa0d66e9df35c16d5a87
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