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

japhet at chromium.org japhet at chromium.org
Thu Apr 8 01:08:27 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 08a27ba911d65c91243c42c8c1c7438096628ac0
Author: japhet at chromium.org <japhet at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Jan 14 22:07:58 2010 +0000

    2010-01-14  Nate Chapin  <japhet at chromium.org>
    
            Reviewed by Dimitri Glazkov.
    
            Standardize the rest of the v8 bindings on toNative() wherever possible.
    
            https://bugs.webkit.org/show_bug.cgi?id=33677
    
            * bindings/v8/NPV8Object.cpp:
            (v8ObjectToNPObject): Special case for converting NPObjects, since there aren't genereated bindings for them.
            * bindings/v8/NPV8Object.h:
            * bindings/v8/ScriptController.cpp:
            * bindings/v8/V8Collection.cpp:
            * bindings/v8/V8Collection.h:
            (WebCore::toNativeCollection): Special case for converting V8Collections, since there aren't genereated bindings for them.
            * bindings/v8/V8DOMWindowShell.cpp:
            * bindings/v8/V8DOMWrapper.cpp:
            * bindings/v8/V8DOMWrapper.h:
            * bindings/v8/V8NPObject.cpp:
            * bindings/v8/V8Proxy.cpp:
            * bindings/v8/V8SVGPODTypeWrapper.h:
            * bindings/v8/WorkerContextExecutionProxy.cpp:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53290 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index d26a213..febde8e 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,26 @@
+2010-01-14  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Dimitri Glazkov.
+
+        Standardize the rest of the v8 bindings on toNative() wherever possible.
+
+        https://bugs.webkit.org/show_bug.cgi?id=33677
+
+        * bindings/v8/NPV8Object.cpp:
+        (v8ObjectToNPObject): Special case for converting NPObjects, since there aren't genereated bindings for them.
+        * bindings/v8/NPV8Object.h:
+        * bindings/v8/ScriptController.cpp:
+        * bindings/v8/V8Collection.cpp:
+        * bindings/v8/V8Collection.h:
+        (WebCore::toNativeCollection): Special case for converting V8Collections, since there aren't genereated bindings for them.
+        * bindings/v8/V8DOMWindowShell.cpp:
+        * bindings/v8/V8DOMWrapper.cpp:
+        * bindings/v8/V8DOMWrapper.h:
+        * bindings/v8/V8NPObject.cpp:
+        * bindings/v8/V8Proxy.cpp:
+        * bindings/v8/V8SVGPODTypeWrapper.h:
+        * bindings/v8/WorkerContextExecutionProxy.cpp:
+
 2010-01-14  Evan Stade  <estade at chromium.org>
 
         Reviewed by Eric Seidel.
diff --git a/WebCore/bindings/v8/NPV8Object.cpp b/WebCore/bindings/v8/NPV8Object.cpp
index c5db79b..cb6c688 100644
--- a/WebCore/bindings/v8/NPV8Object.cpp
+++ b/WebCore/bindings/v8/NPV8Object.cpp
@@ -95,6 +95,11 @@ static v8::Local<v8::String> npIdentifierToV8Identifier(NPIdentifier name)
     return v8::String::New(buffer);
 }
 
+NPObject* v8ObjectToNPObject(v8::Handle<v8::Object> object)
+{
+    return reinterpret_cast<NPObject*>(object->GetPointerFromInternalField(WebCore::v8DOMWrapperObjectIndex)); 
+}
+
 static NPClass V8NPObjectClass = { NP_CLASS_STRUCT_VERSION,
                                    allocV8NPObject,
                                    freeV8NPObject,
@@ -110,7 +115,7 @@ NPObject* npCreateV8ScriptObject(NPP npp, v8::Handle<v8::Object> object, WebCore
         v8::Local<v8::Value> typeIndex = object->GetInternalField(WebCore::v8DOMWrapperTypeIndex);
         if (typeIndex->IsNumber() && typeIndex->Uint32Value() == V8ClassIndex::NPOBJECT) {
 
-            NPObject* returnValue = V8DOMWrapper::convertToNativeObject<NPObject>(V8ClassIndex::NPOBJECT, object);
+            NPObject* returnValue = v8ObjectToNPObject(object);
             _NPN_RetainObject(returnValue);
             return returnValue;
         }
diff --git a/WebCore/bindings/v8/NPV8Object.h b/WebCore/bindings/v8/NPV8Object.h
index eec07ea..91a2d08 100644
--- a/WebCore/bindings/v8/NPV8Object.h
+++ b/WebCore/bindings/v8/NPV8Object.h
@@ -60,4 +60,6 @@ struct PrivateIdentifier {
 
 NPObject* npCreateV8ScriptObject(NPP, v8::Handle<v8::Object>, WebCore::DOMWindow*);
 
+NPObject* v8ObjectToNPObject(v8::Handle<v8::Object>);
+
 #endif // NPV8Object_h
diff --git a/WebCore/bindings/v8/ScriptController.cpp b/WebCore/bindings/v8/ScriptController.cpp
index 8f367c0..84a4d4b 100644
--- a/WebCore/bindings/v8/ScriptController.cpp
+++ b/WebCore/bindings/v8/ScriptController.cpp
@@ -51,6 +51,7 @@
 #include "Settings.h"
 #include "V8Binding.h"
 #include "V8BindingState.h"
+#include "V8Event.h"
 #include "V8IsolatedContext.h"
 #include "V8NPObject.h"
 #include "V8Proxy.h"
@@ -169,7 +170,7 @@ bool ScriptController::processingUserGesture() const
 
     v8::Handle<v8::Object> global = v8Context->Global();
     v8::Handle<v8::Value> jsEvent = global->Get(v8::String::NewSymbol("event"));
-    Event* event = V8DOMWrapper::convertToNativeEvent(jsEvent);
+    Event* event = V8DOMWrapper::isDOMEventWrapper(jsEvent) ? V8Event::toNative(v8::Handle<v8::Object>::Cast(jsEvent)) : 0;
 
     // Based on code from kjs_bindings.cpp.
     // Note: This is more liberal than Firefox's implementation.
diff --git a/WebCore/bindings/v8/V8Collection.cpp b/WebCore/bindings/v8/V8Collection.cpp
index c9fc9ac..2ff5c88 100644
--- a/WebCore/bindings/v8/V8Collection.cpp
+++ b/WebCore/bindings/v8/V8Collection.cpp
@@ -52,7 +52,7 @@ v8::Handle<v8::Value> toOptionsCollectionSetter(uint32_t index, v8::Handle<v8::V
         return value;
     }
 
-    HTMLOptionElement* element = V8DOMWrapper::convertDOMWrapperToNode<HTMLOptionElement>(v8::Handle<v8::Object>::Cast(value));
+    HTMLOptionElement* element = V8HTMLOptionElement::toNative(v8::Handle<v8::Object>::Cast(value));
     base->setOption(index, element, ec);
 
     V8Proxy::setDOMException(ec);
diff --git a/WebCore/bindings/v8/V8Collection.h b/WebCore/bindings/v8/V8Collection.h
index 9a1341b..2ead22f 100644
--- a/WebCore/bindings/v8/V8Collection.h
+++ b/WebCore/bindings/v8/V8Collection.h
@@ -51,6 +51,11 @@ namespace WebCore {
         return V8DOMWrapper::convertToV8Object(type, implementation);
     }
 
+    template<class Collection> static Collection* toNativeCollection(v8::Local<v8::Object> object)
+    {
+        return reinterpret_cast<Collection*>(object->GetPointerFromInternalField(v8DOMWrapperObjectIndex));
+    }
+
     template<class T> static v8::Handle<v8::Value> getV8Object(PassRefPtr<T> implementation, v8::Local<v8::Value> implementationType)
     {
         return getV8Object(implementation.get(), implementationType);
@@ -64,7 +69,7 @@ namespace WebCore {
         ASSERT(V8DOMWrapper::maybeDOMWrapper(object));
         V8ClassIndex::V8WrapperType wrapperType = V8DOMWrapper::domWrapperType(object);
         ASSERT(wrapperType != V8ClassIndex::NODE);
-        Collection* collection = V8DOMWrapper::convertToNativeObject<Collection>(wrapperType, object);
+        Collection* collection = toNativeCollection<Collection>(object);
         AtomicString propertyName = toAtomicWebCoreStringWithNullCheck(name);
         return getV8Object<ItemType>(collection->namedItem(propertyName), implementationType);
     }
@@ -84,26 +89,6 @@ namespace WebCore {
         return getNamedPropertyOfCollection<Collection, ItemType>(name, info.Holder(), info.Data());
     }
 
-    // A template of named property accessor of HTMLSelectElement and HTMLFormElement.
-    template<class Collection> static v8::Handle<v8::Value> nodeCollectionNamedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
-    {
-        ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));
-        ASSERT(V8DOMWrapper::domWrapperType(info.Holder()) == V8ClassIndex::NODE);
-        v8::Handle<v8::Value> value = info.Holder()->GetRealNamedPropertyInPrototypeChain(name);
-
-        if (!value.IsEmpty())
-            return value;
-
-        // Search local callback properties next to find IDL defined
-        // properties.
-        if (info.Holder()->HasRealNamedCallbackProperty(name))
-            return notHandledByInterceptor();
-        Collection* collection = V8DOMWrapper::convertDOMWrapperToNode<Collection>(info.Holder());
-        String propertyName = toWebCoreString(name);
-        void* implementation = collection->namedItem(propertyName);
-        return getV8Object(implementation, info.Data());
-    }
-
     // Returns the property at the index of a collection.
     template<class Collection, class ItemType> static v8::Handle<v8::Value> getIndexedPropertyOfCollection(uint32_t index, v8::Local<v8::Object> object,
                                                                                                            v8::Local<v8::Value> implementationType)
@@ -112,7 +97,7 @@ namespace WebCore {
         ASSERT(V8DOMWrapper::maybeDOMWrapper(object));
         V8ClassIndex::V8WrapperType wrapperType = V8DOMWrapper::domWrapperType(object);
         ASSERT(wrapperType != V8ClassIndex::NODE);
-        Collection* collection = V8DOMWrapper::convertToNativeObject<Collection>(wrapperType, object);
+        Collection* collection = toNativeCollection<Collection>(object);
         return getV8Object<ItemType>(collection->item(index), implementationType);
     }
 
@@ -127,7 +112,7 @@ namespace WebCore {
     {
         ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));
         ASSERT(V8DOMWrapper::domWrapperType(info.Holder()) == V8ClassIndex::NODE);
-        Collection* collection = V8DOMWrapper::convertDOMWrapperToNode<Collection>(info.Holder());
+        Collection* collection = toNativeCollection<Collection>(info.Holder());
         int length = collection->length();
         v8::Handle<v8::Array> properties = v8::Array::New(length);
         for (int i = 0; i < length; ++i) {
@@ -142,8 +127,7 @@ namespace WebCore {
     template<class Collection> static v8::Handle<v8::Array> collectionIndexedPropertyEnumerator(const v8::AccessorInfo& info)
     {
         ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));
-        V8ClassIndex::V8WrapperType wrapperType = V8DOMWrapper::domWrapperType(info.Holder());
-        Collection* collection = V8DOMWrapper::convertToNativeObject<Collection>(wrapperType, info.Holder());
+        Collection* collection = toNativeCollection<Collection>(info.Holder());
         int length = collection->length();
         v8::Handle<v8::Array> properties = v8::Array::New(length);
         for (int i = 0; i < length; ++i) {
@@ -160,8 +144,7 @@ namespace WebCore {
     {
         // FIXME: assert that object must be a collection type
         ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));
-        V8ClassIndex::V8WrapperType wrapperType = V8DOMWrapper::domWrapperType(info.Holder());
-        Collection* collection = V8DOMWrapper::convertToNativeObject<Collection>(wrapperType, info.Holder());
+        Collection* collection = toNativeCollection<Collection>(info.Holder());
         String result = collection->item(index);
         return v8StringOrNull(result);
     }
@@ -172,8 +155,7 @@ namespace WebCore {
     {
         // FIXME: assert that object must be a collection type
         ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));
-        V8ClassIndex::V8WrapperType wrapperType = V8DOMWrapper::domWrapperType(info.Holder());
-        Collection* collection = V8DOMWrapper::convertToNativeObject<Collection>(wrapperType, info.Holder());
+        Collection* collection = toNativeCollection<Collection>(info.Holder());
         String result = collection->item(index);
         return v8String(result);
     }
diff --git a/WebCore/bindings/v8/V8DOMWindowShell.cpp b/WebCore/bindings/v8/V8DOMWindowShell.cpp
index 3b4a901..9a4df61 100644
--- a/WebCore/bindings/v8/V8DOMWindowShell.cpp
+++ b/WebCore/bindings/v8/V8DOMWindowShell.cpp
@@ -51,7 +51,9 @@
 #include "V8DOMMap.h"
 #include "V8DOMWindow.h"
 #include "V8HiddenPropertyName.h"
+#include "V8History.h"
 #include "V8Index.h"
+#include "V8Location.h"
 #include "V8Proxy.h"
 #include "WorkerContextExecutionProxy.h"
 
@@ -95,17 +97,17 @@ static Frame* getTargetFrame(v8::Local<v8::Object> host, v8::Local<v8::Value> da
         if (window.IsEmpty())
             return target;
 
-        DOMWindow* targetWindow = V8DOMWrapper::convertToNativeObject<DOMWindow>(V8ClassIndex::DOMWINDOW, window);
+        DOMWindow* targetWindow = V8DOMWindow::toNative(window);
         target = targetWindow->frame();
         break;
     }
     case V8ClassIndex::LOCATION: {
-        History* history = V8DOMWrapper::convertToNativeObject<History>(V8ClassIndex::HISTORY, host);
+        History* history = V8History::toNative(host);
         target = history->frame();
         break;
     }
     case V8ClassIndex::HISTORY: {
-        Location* location = V8DOMWrapper::convertToNativeObject<Location>(V8ClassIndex::LOCATION, host);
+        Location* location = V8Location::toNative(host);
         target = location->frame();
         break;
     }
diff --git a/WebCore/bindings/v8/V8DOMWrapper.cpp b/WebCore/bindings/v8/V8DOMWrapper.cpp
index b3bdcfa..e6ef679 100644
--- a/WebCore/bindings/v8/V8DOMWrapper.cpp
+++ b/WebCore/bindings/v8/V8DOMWrapper.cpp
@@ -666,11 +666,6 @@ V8ClassIndex::V8WrapperType V8DOMWrapper::domWrapperType(v8::Handle<v8::Object>
     return V8ClassIndex::FromInt(type->Int32Value());
 }
 
-void* V8DOMWrapper::convertToSVGPODTypeImpl(V8ClassIndex::V8WrapperType type, v8::Handle<v8::Value> object)
-{
-    return isWrapperOfType(object, type) ? convertDOMWrapperToNative<void>(v8::Handle<v8::Object>::Cast(object)) : 0;
-}
-
 PassRefPtr<NodeFilter> V8DOMWrapper::wrapNativeNodeFilter(v8::Handle<v8::Value> filter)
 {
     // A NodeFilter is used when walking through a DOM tree or iterating tree
@@ -1522,7 +1517,7 @@ v8::Handle<v8::Value> V8DOMWrapper::convertWindowToV8Object(DOMWindow* window)
     v8::Handle<v8::Object> currentGlobal = currentContext->Global();
     v8::Handle<v8::Object> windowWrapper = V8DOMWrapper::lookupDOMWrapper(V8ClassIndex::DOMWINDOW, currentGlobal);
     if (!windowWrapper.IsEmpty()) {
-        if (convertDOMWrapperToNative<DOMWindow>(windowWrapper) == window)
+        if (V8DOMWindow::toNative(windowWrapper) == window)
             return currentGlobal;
     }
 
diff --git a/WebCore/bindings/v8/V8DOMWrapper.h b/WebCore/bindings/v8/V8DOMWrapper.h
index 606c2de..ee79509 100644
--- a/WebCore/bindings/v8/V8DOMWrapper.h
+++ b/WebCore/bindings/v8/V8DOMWrapper.h
@@ -39,6 +39,7 @@
 #include "V8CustomBinding.h"
 #include "V8CustomXPathNSResolver.h"
 #include "V8DOMMap.h"
+#include "V8Event.h"
 #include "V8Index.h"
 #include "V8Utilities.h"
 #include "V8XPathNSResolver.h"
@@ -121,29 +122,6 @@ namespace WebCore {
             return object.IsEmpty() ? object : object->FindInstanceInPrototypeChain(getTemplate(type));
         }
 
-        // A helper function extract native object pointer from a DOM wrapper
-        // and cast to the specified type.
-        template <class C>
-        static C* convertDOMWrapperToNative(v8::Handle<v8::Object> object)
-        {
-#ifndef NDEBUG
-            v8::HandleScope handleScope;
-            ASSERT(maybeDOMWrapper(object));
-#endif
-            return reinterpret_cast<C*>(object->GetPointerFromInternalField(v8DOMWrapperObjectIndex));
-        }
-
-        template <class C>
-        static C* convertDOMWrapperToNode(v8::Handle<v8::Object> object)
-        {
-#ifndef NDEBUG
-            v8::HandleScope handleScope;
-            ASSERT(maybeDOMWrapper(object));
-            ASSERT(domWrapperType(object) == V8ClassIndex::NODE);
-#endif
-            return convertDOMWrapperToNative<C>(object);
-        }
-
         template<typename T>
         static v8::Handle<v8::Value> convertToV8Object(V8ClassIndex::V8WrapperType type, PassRefPtr<T> imp)
         {
@@ -174,30 +152,6 @@ namespace WebCore {
 
         static v8::Handle<v8::Value> convertNewNodeToV8Object(Node*, V8Proxy*, DOMWrapperMap<Node>&);
 
-        template <class C>
-        static C* convertToNativeObject(V8ClassIndex::V8WrapperType type, v8::Handle<v8::Object> object)
-        {
-            // Native event listener is per frame, it cannot be handled by this generic function.
-            ASSERT(type != V8ClassIndex::EVENTLISTENER);
-            ASSERT(type != V8ClassIndex::EVENTTARGET);
-
-            ASSERT(maybeDOMWrapper(object));
-
-#ifndef NDEBUG
-            const bool typeIsValid =
-#define MAKE_CASE(TYPE, NAME) (type != V8ClassIndex::TYPE) &&
-                DOM_NODE_TYPES(MAKE_CASE)
-#if ENABLE(SVG)
-                SVG_NODE_TYPES(MAKE_CASE)
-#endif
-#undef MAKE_CASE
-                true;
-            ASSERT(typeIsValid);
-#endif
-
-            return convertDOMWrapperToNative<C>(object);
-        }
-
         static V8ClassIndex::V8WrapperType domWrapperType(v8::Handle<v8::Object>);
 
         static v8::Handle<v8::Value> convertEventToV8Object(PassRefPtr<Event> event)
@@ -207,13 +161,6 @@ namespace WebCore {
 
         static v8::Handle<v8::Value> convertEventToV8Object(Event*);
 
-        static Event* convertToNativeEvent(v8::Handle<v8::Value> jsEvent)
-        {
-            if (!isDOMEventWrapper(jsEvent))
-                return 0;
-            return convertDOMWrapperToNative<Event>(v8::Handle<v8::Object>::Cast(jsEvent));
-        }
-
         static v8::Handle<v8::Value> convertEventTargetToV8Object(PassRefPtr<EventTarget> eventTarget)
         {
             return convertEventTargetToV8Object(eventTarget.get());
@@ -253,7 +200,7 @@ namespace WebCore {
         {
             RefPtr<XPathNSResolver> resolver;
             if (V8XPathNSResolver::HasInstance(value))
-                resolver = convertToNativeObject<XPathNSResolver>(V8ClassIndex::XPATHNSRESOLVER, v8::Handle<v8::Object>::Cast(value));
+                resolver = V8XPathNSResolver::toNative(v8::Handle<v8::Object>::Cast(value));
             else if (value->IsObject())
                 resolver = V8CustomXPathNSResolver::create(proxy, value->ToObject());
             return resolver;
@@ -281,8 +228,6 @@ namespace WebCore {
         // Check whether a V8 value is a wrapper of type |classType|.
         static bool isWrapperOfType(v8::Handle<v8::Value>, V8ClassIndex::V8WrapperType);
 
-        static void* convertToSVGPODTypeImpl(V8ClassIndex::V8WrapperType, v8::Handle<v8::Value>);
-
         // Check whether a V8 value is a DOM Event wrapper.
         static bool isDOMEventWrapper(v8::Handle<v8::Value>);
 
diff --git a/WebCore/bindings/v8/V8NPObject.cpp b/WebCore/bindings/v8/V8NPObject.cpp
index 539f5b5..196972e 100644
--- a/WebCore/bindings/v8/V8NPObject.cpp
+++ b/WebCore/bindings/v8/V8NPObject.cpp
@@ -65,10 +65,16 @@ static v8::Handle<v8::Value> npObjectInvokeImpl(const v8::Arguments& args, Invok
     if (V8HTMLAppletElement::HasInstance(args.Holder()) || V8HTMLEmbedElement::HasInstance(args.Holder())
         || V8HTMLObjectElement::HasInstance(args.Holder())) {
         // The holder object is a subtype of HTMLPlugInElement.
-        HTMLPlugInElement* element = V8DOMWrapper::convertDOMWrapperToNode<HTMLPlugInElement>(args.Holder());
+        HTMLPlugInElement* element;
+        if (V8HTMLAppletElement::HasInstance(args.Holder()))
+            element = V8HTMLAppletElement::toNative(args.Holder());
+        else if (V8HTMLEmbedElement::HasInstance(args.Holder()))
+            element = V8HTMLEmbedElement::toNative(args.Holder());
+        else
+            element = V8HTMLObjectElement::toNative(args.Holder());
         ScriptInstance scriptInstance = element->getInstance();
         if (scriptInstance)
-            npObject = V8DOMWrapper::convertToNativeObject<NPObject>(V8ClassIndex::NPOBJECT, scriptInstance->instance());
+            npObject = v8ObjectToNPObject(scriptInstance->instance());
         else
             npObject = 0;
     } else {
@@ -77,7 +83,7 @@ static v8::Handle<v8::Value> npObjectInvokeImpl(const v8::Arguments& args, Invok
         if (args.Holder()->InternalFieldCount() != npObjectInternalFieldCount)
           return throwError("NPMethod called on non-NPObject", V8Proxy::ReferenceError);
 
-        npObject = V8DOMWrapper::convertToNativeObject<NPObject>(V8ClassIndex::NPOBJECT, args.Holder());
+        npObject = v8ObjectToNPObject(args.Holder());
     }
 
     // Verify that our wrapper wasn't using a NPObject which has already been deleted.
@@ -161,7 +167,7 @@ static void weakTemplateCallback(v8::Persistent<v8::Value> object, void* paramet
 
 static v8::Handle<v8::Value> npObjectGetProperty(v8::Local<v8::Object> self, NPIdentifier identifier, v8::Local<v8::Value> key)
 {
-    NPObject* npObject = V8DOMWrapper::convertToNativeObject<NPObject>(V8ClassIndex::NPOBJECT, self);
+    NPObject* npObject = v8ObjectToNPObject(self);
 
     // Verify that our wrapper wasn't using a NPObject which
     // has already been deleted.
@@ -230,7 +236,7 @@ v8::Handle<v8::Value> npObjectGetIndexedProperty(v8::Local<v8::Object> self, uin
 
 static v8::Handle<v8::Value> npObjectSetProperty(v8::Local<v8::Object> self, NPIdentifier identifier, v8::Local<v8::Value> value)
 {
-    NPObject* npObject = V8DOMWrapper::convertToNativeObject<NPObject>(V8ClassIndex::NPOBJECT, self);
+    NPObject* npObject = v8ObjectToNPObject(self);
 
     // Verify that our wrapper wasn't using a NPObject which has already been deleted.
     if (!npObject || !_NPN_IsAlive(npObject)) {
@@ -280,7 +286,7 @@ v8::Handle<v8::Value> npObjectSetIndexedProperty(v8::Local<v8::Object> self, uin
 
 v8::Handle<v8::Array> npObjectPropertyEnumerator(const v8::AccessorInfo& info, bool namedProperty)
 {
-    NPObject* npObject = V8DOMWrapper::convertToNativeObject<NPObject>(V8ClassIndex::NPOBJECT, info.Holder());
+    NPObject* npObject = v8ObjectToNPObject(info.Holder());
 
     // Verify that our wrapper wasn't using a NPObject which
     // has already been deleted.
diff --git a/WebCore/bindings/v8/V8Proxy.cpp b/WebCore/bindings/v8/V8Proxy.cpp
index 05acb9d..d6c27e9 100644
--- a/WebCore/bindings/v8/V8Proxy.cpp
+++ b/WebCore/bindings/v8/V8Proxy.cpp
@@ -497,7 +497,7 @@ DOMWindow* V8Proxy::retrieveWindow(v8::Handle<v8::Context> context)
     ASSERT(!global.IsEmpty());
     global = V8DOMWrapper::lookupDOMWrapper(V8ClassIndex::DOMWINDOW, global);
     ASSERT(!global.IsEmpty());
-    return V8DOMWrapper::convertToNativeObject<DOMWindow>(V8ClassIndex::DOMWINDOW, global);
+    return V8DOMWindow::toNative(global);
 }
 
 Frame* V8Proxy::retrieveFrame(v8::Handle<v8::Context> context)
diff --git a/WebCore/bindings/v8/V8SVGPODTypeWrapper.h b/WebCore/bindings/v8/V8SVGPODTypeWrapper.h
index 8e3b385..f1c0e4a 100644
--- a/WebCore/bindings/v8/V8SVGPODTypeWrapper.h
+++ b/WebCore/bindings/v8/V8SVGPODTypeWrapper.h
@@ -402,14 +402,12 @@ public:
 template <class P>
 P V8SVGPODTypeUtil::toSVGPODType(V8ClassIndex::V8WrapperType type, v8::Handle<v8::Value> object, bool& ok)
 {
-    void *wrapper = V8DOMWrapper::convertToSVGPODTypeImpl(type, object);
-    if (wrapper == NULL) {
+    if (!V8DOMWrapper::isWrapperOfType(object, type)) {
         ok = false;
         return P();
-    } else {
-        ok = true;
-        return *static_cast<V8SVGPODTypeWrapper<P>*>(wrapper);
     }
+    ok = true;
+    return *V8SVGPODTypeWrapper<P>::toNative(v8::Handle<v8::Object>::Cast(object));
 }
 
 } // namespace WebCore
diff --git a/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp b/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
index 7e3c543..57d612f 100644
--- a/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
+++ b/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
@@ -49,6 +49,7 @@
 #include "V8DOMMap.h"
 #include "V8Index.h"
 #include "V8Proxy.h"
+#include "V8WorkerContext.h"
 #include "V8WorkerContextEventListener.h"
 #if ENABLE(WEB_SOCKETS)
 #include "WebSocket.h"
@@ -109,7 +110,7 @@ WorkerContextExecutionProxy* WorkerContextExecutionProxy::retrieve()
     // Return 0 if the current executing context is not the worker context.
     if (global.IsEmpty())
         return 0;
-    WorkerContext* workerContext = V8DOMWrapper::convertToNativeObject<WorkerContext>(V8ClassIndex::WORKERCONTEXT, global);
+    WorkerContext* workerContext = V8WorkerContext::toNative(global);
     return workerContext->script()->proxy();
 }
 
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 0e41096..d55647e 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,15 @@
+2010-01-14  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Dimitri Glazkov.
+
+        Remove references to V8DOMWrapper::convertToNative*().
+
+        https://bugs.webkit.org/show_bug.cgi?id=33677
+
+        * src/WebBindings.cpp:
+        (WebKit::getDragDataImpl):
+        (WebKit::getRangeImpl):
+
 2010-01-14  Kent Tamura  <tkent at chromium.org>
 
         Reviewed by Darin Fisher.
diff --git a/WebKit/chromium/src/WebBindings.cpp b/WebKit/chromium/src/WebBindings.cpp
index 5e68fa3..04f2f85 100644
--- a/WebKit/chromium/src/WebBindings.cpp
+++ b/WebKit/chromium/src/WebBindings.cpp
@@ -46,8 +46,10 @@
 #include "Range.h"
 #include "V8BindingState.h"
 #include "V8DOMWrapper.h"
+#include "V8Event.h"
 #include "V8Helpers.h"
 #include "V8Proxy.h"
+#include "V8Range.h"
 #elif USE(JSC)
 #include "bridge/c/c_utility.h"
 #endif
@@ -224,13 +226,13 @@ static bool getDragDataImpl(NPObject* npobj, int* eventId, WebDragData* data)
 
     // Get the current WebCore event.
     v8::Handle<v8::Value> currentEvent(getEvent(context));
-    Event* event = V8DOMWrapper::convertToNativeEvent(currentEvent);
+    Event* event = V8Event::toNative(v8::Handle<v8::Object>::Cast(currentEvent));
     if (!event)
         return false;
 
     // Check that the given npobj is that event.
     V8NPObject* object = reinterpret_cast<V8NPObject*>(npobj);
-    Event* given = V8DOMWrapper::convertToNativeEvent(object->v8Object);
+    Event* given = V8Event::toNative(object->v8Object);
     if (given != event)
         return false;
 
@@ -285,7 +287,7 @@ static bool getRangeImpl(NPObject* npobj, WebRange* range)
     if (V8ClassIndex::RANGE != V8DOMWrapper::domWrapperType(v8object))
         return false;
 
-    Range* native = V8DOMWrapper::convertToNativeObject<WebCore::Range>(V8ClassIndex::RANGE, v8object);
+    Range* native = V8Range::toNative(v8object);
     if (!native)
         return false;
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list