[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

andersca at apple.com andersca at apple.com
Wed Dec 22 15:34:48 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 09cd734767b255e25451f85eba2e9de1ad82abf9
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Nov 8 19:05:44 2010 +0000

    Correctly convert NPObjectProxy to NPVariantData
    https://bugs.webkit.org/show_bug.cgi?id=49190
    
    Reviewed by John Sullivan.
    
    WebKit2:
    
    * Shared/Plugins/NPObjectMessageReceiver.h:
    (WebKit::NPObjectMessageReceiver::npObject):
    Add NPObject getter.
    
    * Shared/Plugins/NPObjectProxy.h:
    (WebKit::NPObjectProxy::npObjectID):
    Add NPObjectID getter.
    
    * Shared/Plugins/NPRemoteObjectMap.cpp:
    (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
    Handle the case where the NPObject is an NPObjectProxy.
    
    (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
    Handle NPVariantData::LocalNPObjectID.
    
    * Shared/Plugins/NPVariantData.cpp:
    (WebKit::NPVariantData::makeRemoteNPObjectID):
    * Shared/Plugins/NPVariantData.h:
    New function for creating an NPVariantData that contains a remote NPObject ID.
    
    LayoutTests:
    
    Remove now passing test.
    
    * platform/mac-wk2/Skipped:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71546 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 3ff129b..6547e5b 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,14 @@
+2010-11-08  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by John Sullivan.
+
+        Correctly convert NPObjectProxy to NPVariantData
+        https://bugs.webkit.org/show_bug.cgi?id=49190
+
+        Remove now passing test.
+
+        * platform/mac-wk2/Skipped:
+
 2010-11-08  Darin Adler  <darin at apple.com>
 
         Rubber stamped by Alexey Proskuryakov.
diff --git a/LayoutTests/platform/mac-wk2/Skipped b/LayoutTests/platform/mac-wk2/Skipped
index 82706d2..ec3dd1b 100644
--- a/LayoutTests/platform/mac-wk2/Skipped
+++ b/LayoutTests/platform/mac-wk2/Skipped
@@ -1741,7 +1741,6 @@ plugins/npruntime/invoke-browserfuncs.html
 plugins/npruntime/invoke-default.html
 plugins/npruntime/npruntime.html
 plugins/npruntime/plugin-scriptable-object-invoke-default.html
-plugins/npruntime/round-trip-npobject.html
  
 ########################################
 
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index ae72efc..cf6e397 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,30 @@
+2010-11-08  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by John Sullivan.
+
+        Correctly convert NPObjectProxy to NPVariantData
+        https://bugs.webkit.org/show_bug.cgi?id=49190
+
+        * Shared/Plugins/NPObjectMessageReceiver.h:
+        (WebKit::NPObjectMessageReceiver::npObject):
+        Add NPObject getter.
+
+        * Shared/Plugins/NPObjectProxy.h:
+        (WebKit::NPObjectProxy::npObjectID):
+        Add NPObjectID getter.
+
+        * Shared/Plugins/NPRemoteObjectMap.cpp:
+        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
+        Handle the case where the NPObject is an NPObjectProxy.
+
+        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
+        Handle NPVariantData::LocalNPObjectID.
+
+        * Shared/Plugins/NPVariantData.cpp:
+        (WebKit::NPVariantData::makeRemoteNPObjectID):
+        * Shared/Plugins/NPVariantData.h:
+        New function for creating an NPVariantData that contains a remote NPObject ID.
+
 2010-11-08  Alexey Proskuryakov  <ap at apple.com>
 
         Reviewed by Darin Adler.
diff --git a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h
index 1f5cd06..cbfa020 100644
--- a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h
+++ b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h
@@ -47,6 +47,8 @@ public:
     ~NPObjectMessageReceiver();
 
     CoreIPC::SyncReplyMode didReceiveSyncNPObjectMessageReceiverMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
+
+    NPObject* npObject() const { return m_npObject; }
     
 private:
     NPObjectMessageReceiver(NPRemoteObjectMap* npRemoteObjectMap, uint64_t npObjectID, NPObject* npObject);
diff --git a/WebKit2/Shared/Plugins/NPObjectProxy.h b/WebKit2/Shared/Plugins/NPObjectProxy.h
index bc6cfb1..4fc02cf 100644
--- a/WebKit2/Shared/Plugins/NPObjectProxy.h
+++ b/WebKit2/Shared/Plugins/NPObjectProxy.h
@@ -49,6 +49,8 @@ public:
         return static_cast<NPObjectProxy*>(npObject);
     }
 
+    uint64_t npObjectID() const { return m_npObjectID; }
+
     void invalidate();
 
 private:
diff --git a/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp b/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
index dca7a27..a7ca1dc 100644
--- a/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
+++ b/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
@@ -112,9 +112,14 @@ NPVariantData NPRemoteObjectMap::npVariantToNPVariantData(const NPVariant& varia
     case NPVariantType_Object: {
         NPObject* npObject = variant.value.objectValue;
         if (NPObjectProxy::isNPObjectProxy(npObject)) {
-            // FIXME: Handle this.
-            notImplemented();
-            return NPVariantData::makeVoid();
+            NPObjectProxy* npObjectProxy = NPObjectProxy::toNPObjectProxy(npObject);
+
+            uint64_t npObjectID = npObjectProxy->npObjectID();
+
+            // FIXME: Under some circumstances, this might leak the NPObjectProxy object. 
+            // Figure out how to avoid that.
+            retainNPObject(npObjectProxy);
+            return NPVariantData::makeRemoteNPObjectID(npObjectID);
         }
 
         uint64_t npObjectID = registerNPObject(npObject);
@@ -152,10 +157,24 @@ NPVariant NPRemoteObjectMap::npVariantDataToNPVariant(const NPVariantData& npVar
         STRINGN_TO_NPVARIANT(npString.UTF8Characters, npString.UTF8Length, npVariant);
         break;
     }
-    case NPVariantData::LocalNPObjectID:
-        notImplemented();
-        VOID_TO_NPVARIANT(npVariant);
+    case NPVariantData::LocalNPObjectID: {
+        uint64_t npObjectID = npVariantData.localNPObjectIDValue();
+        ASSERT(npObjectID);
+
+        NPObjectMessageReceiver* npObjectMessageReceiver = m_registeredNPObjects.get(npObjectID);
+        if (!npObjectMessageReceiver) {
+            ASSERT_NOT_REACHED();
+            VOID_TO_NPVARIANT(npVariant);
+            break;
+        }
+
+        NPObject* npObject = npObjectMessageReceiver->npObject();
+        ASSERT(npObject);
+
+        retainNPObject(npObject);
+        OBJECT_TO_NPVARIANT(npObject, npVariant);
         break;
+    }
     case NPVariantData::RemoteNPObjectID: {
         NPObject* npObjectProxy = createNPObjectProxy(npVariantData.remoteNPObjectIDValue());
         OBJECT_TO_NPVARIANT(npObjectProxy, npVariant);
diff --git a/WebKit2/Shared/Plugins/NPVariantData.cpp b/WebKit2/Shared/Plugins/NPVariantData.cpp
index bc6f0e3..b100589 100644
--- a/WebKit2/Shared/Plugins/NPVariantData.cpp
+++ b/WebKit2/Shared/Plugins/NPVariantData.cpp
@@ -108,6 +108,16 @@ NPVariantData NPVariantData::makeLocalNPObjectID(uint64_t value)
     return npVariantData;
 }
 
+NPVariantData NPVariantData::makeRemoteNPObjectID(uint64_t value)
+{
+    NPVariantData npVariantData;
+
+    npVariantData.m_type = NPVariantData::RemoteNPObjectID;
+    npVariantData.m_remoteNPObjectIDValue = value;
+
+    return npVariantData;
+}
+
 void NPVariantData::encode(CoreIPC::ArgumentEncoder* encoder) const
 {
     encoder->encode(m_type);
diff --git a/WebKit2/Shared/Plugins/NPVariantData.h b/WebKit2/Shared/Plugins/NPVariantData.h
index 18d3ecf..805640e 100644
--- a/WebKit2/Shared/Plugins/NPVariantData.h
+++ b/WebKit2/Shared/Plugins/NPVariantData.h
@@ -60,6 +60,7 @@ public:
     static NPVariantData makeDouble(double value);
     static NPVariantData makeString(const char* string, unsigned length);
     static NPVariantData makeLocalNPObjectID(uint64_t value);
+    static NPVariantData makeRemoteNPObjectID(uint64_t value);
 
     Type type() const { return static_cast<Type>(m_type); }
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list