[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:23:58 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit fc2d73b0579ae140a1311cecc5daea5d226c825d
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Nov 2 20:24:26 2010 +0000

    Add some support for remote and local NPObjects to NPRemoteObjectMap
    https://bugs.webkit.org/show_bug.cgi?id=48864
    
    Reviewed by Adam Roben.
    
    * Shared/Plugins/NPRemoteObjectMap.cpp:
    (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
    If the NPVariant contains an NPObject that isn't an NPObjectProxy, register it
    and return its ID.
    
    (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
    If the NPVariantData contains a remote object, create an NPObjectProxy and return it.
    
    * Shared/Plugins/NPVariantData.cpp:
    (WebKit::NPVariantData::NPVariantData):
    Initialize m_localNPObjectIDValue and m_remoteNPObjectIDValue.
    
    (WebKit::NPVariantData::makeLocalNPObjectID):
    Create an NPVariantData that contains a local NPObject ID.
    
    (WebKit::NPVariantData::encode):
    Handle local and remote NPObject IDs.
    
    (WebKit::NPVariantData::decode):
    Decode local and remote NPObject IDs and "swap them" so an encoded remote NPObject ID is
    decoded as a local NPObjectID (and vice versa).
    
    * Shared/Plugins/NPVariantData.h:
    (WebKit::NPVariantData::localNPObjectIDValue):
    (WebKit::NPVariantData::remoteNPObjectIDValue):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71156 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 02f0b16..a6eb294 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,5 +1,38 @@
 2010-11-02  Anders Carlsson  <andersca at apple.com>
 
+        Reviewed by Adam Roben.
+
+        Add some support for remote and local NPObjects to NPRemoteObjectMap
+        https://bugs.webkit.org/show_bug.cgi?id=48864
+
+        * Shared/Plugins/NPRemoteObjectMap.cpp:
+        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
+        If the NPVariant contains an NPObject that isn't an NPObjectProxy, register it
+        and return its ID.
+
+        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
+        If the NPVariantData contains a remote object, create an NPObjectProxy and return it.
+
+        * Shared/Plugins/NPVariantData.cpp:
+        (WebKit::NPVariantData::NPVariantData):
+        Initialize m_localNPObjectIDValue and m_remoteNPObjectIDValue.
+
+        (WebKit::NPVariantData::makeLocalNPObjectID):
+        Create an NPVariantData that contains a local NPObject ID.
+
+        (WebKit::NPVariantData::encode):
+        Handle local and remote NPObject IDs.
+
+        (WebKit::NPVariantData::decode):
+        Decode local and remote NPObject IDs and "swap them" so an encoded remote NPObject ID is
+        decoded as a local NPObjectID (and vice versa).
+
+        * Shared/Plugins/NPVariantData.h:
+        (WebKit::NPVariantData::localNPObjectIDValue):
+        (WebKit::NPVariantData::remoteNPObjectIDValue):
+
+2010-11-02  Anders Carlsson  <andersca at apple.com>
+
         Attempt to fix a GCC release only warning.
 
         * Shared/Plugins/NPVariantData.cpp:
diff --git a/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp b/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
index 5f0879a..34440ef 100644
--- a/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
+++ b/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
@@ -102,9 +102,21 @@ NPVariantData NPRemoteObjectMap::npVariantToNPVariantData(const NPVariant& varia
     case NPVariantType_Null:
     case NPVariantType_Int32:
     case NPVariantType_String:
-    case NPVariantType_Object:
         notImplemented();
         return NPVariantData::makeVoid();
+
+    case NPVariantType_Object: {
+        NPObject* npObject = variant.value.objectValue;
+        if (NPObjectProxy::isNPObjectProxy(npObject)) {
+            // FIXME: Handle this.
+            notImplemented();
+            return NPVariantData::makeVoid();
+        }
+
+        uint64_t npObjectID = registerNPObject(npObject);
+        return NPVariantData::makeLocalNPObjectID(npObjectID);
+    }
+
     }
 
     ASSERT_NOT_REACHED();
@@ -125,6 +137,15 @@ NPVariant NPRemoteObjectMap::npVariantDataToNPVariant(const NPVariantData& npVar
     case NPVariantData::Double:
         DOUBLE_TO_NPVARIANT(npVariantData.doubleValue(), npVariant);
         break;
+    case NPVariantData::LocalNPObjectID:
+        notImplemented();
+        VOID_TO_NPVARIANT(npVariant);
+        break;
+    case NPVariantData::RemoteNPObjectID: {
+        NPObject* npObjectProxy = createNPObjectProxy(npVariantData.remoteNPObjectIDValue());
+        OBJECT_TO_NPVARIANT(npObjectProxy, npVariant);
+        break;
+    }
     }
 
     return npVariant;
diff --git a/WebKit2/Shared/Plugins/NPVariantData.cpp b/WebKit2/Shared/Plugins/NPVariantData.cpp
index a36594e..9b427a9 100644
--- a/WebKit2/Shared/Plugins/NPVariantData.cpp
+++ b/WebKit2/Shared/Plugins/NPVariantData.cpp
@@ -37,6 +37,8 @@ NPVariantData::NPVariantData()
     : m_type(NPVariantData::Void)
     , m_boolValue(false)
     , m_doubleValue(0)
+    , m_localNPObjectIDValue(0)
+    , m_remoteNPObjectIDValue(0)
 {
 }
 
@@ -65,6 +67,16 @@ NPVariantData NPVariantData::makeDouble(double value)
     return npVariantData;
 }
 
+NPVariantData NPVariantData::makeLocalNPObjectID(uint64_t value)
+{
+    NPVariantData npVariantData;
+
+    npVariantData.m_type = NPVariantData::LocalNPObjectID;
+    npVariantData.m_localNPObjectIDValue = value;
+
+    return npVariantData;
+}
+
 void NPVariantData::encode(CoreIPC::ArgumentEncoder* encoder) const
 {
     encoder->encode(m_type);
@@ -73,19 +85,37 @@ void NPVariantData::encode(CoreIPC::ArgumentEncoder* encoder) const
     case NPVariantData::Void:
         break;
     case NPVariantData::Bool:
-        encoder->encode(m_boolValue);
+        encoder->encode(boolValue());
         break;
     case NPVariantData::Double:
-        encoder->encode(m_doubleValue);
+        encoder->encode(doubleValue());
+        break;
+    case NPVariantData::LocalNPObjectID:
+        encoder->encode(localNPObjectIDValue());
+        break;
+    case NPVariantData::RemoteNPObjectID:
+        encoder->encode(remoteNPObjectIDValue());
         break;
     }
 }
 
 bool NPVariantData::decode(CoreIPC::ArgumentDecoder* decoder, NPVariantData& result)
 {
-    if (!decoder->decode(result.m_type))
+    uint32_t type;
+    if (!decoder->decode(type))
         return false;
 
+    // We special-case LocalNPObjectID and RemoteNPObjectID here so a LocalNPObjectID is
+    // decoded as a RemoteNPObjectID and vice versa.
+    // This is done because the type is from the perspective of the other connection, and
+    // thus we have to adjust it to match our own perspective.
+    if (type == NPVariantData::LocalNPObjectID)
+        type = NPVariantData::RemoteNPObjectID;
+    else if (type == NPVariantData::RemoteNPObjectID)
+        type = NPVariantData::LocalNPObjectID;
+
+    result.m_type = type;
+
     switch (result.m_type) {
     case NPVariantData::Void:
         return true;
@@ -93,6 +123,10 @@ bool NPVariantData::decode(CoreIPC::ArgumentDecoder* decoder, NPVariantData& res
         return decoder->decode(result.m_boolValue);
     case NPVariantData::Double:
         return decoder->decode(result.m_doubleValue);
+    case NPVariantData::LocalNPObjectID:
+        return decoder->decode(result.m_localNPObjectIDValue);
+    case NPVariantData::RemoteNPObjectID:
+        return decoder->decode(result.m_remoteNPObjectIDValue);
     default:
         return false;
     }
diff --git a/WebKit2/Shared/Plugins/NPVariantData.h b/WebKit2/Shared/Plugins/NPVariantData.h
index 72c6722..c6db5bf 100644
--- a/WebKit2/Shared/Plugins/NPVariantData.h
+++ b/WebKit2/Shared/Plugins/NPVariantData.h
@@ -43,12 +43,15 @@ public:
         Void,
         Bool,
         Double,
+        LocalNPObjectID,
+        RemoteNPObjectID,
     };
     NPVariantData();
 
     static NPVariantData makeVoid();
     static NPVariantData makeBool(bool value);
     static NPVariantData makeDouble(double value);
+    static NPVariantData makeLocalNPObjectID(uint64_t value);
 
     Type type() const { return static_cast<Type>(m_type); }
 
@@ -64,6 +67,18 @@ public:
         return m_doubleValue;
     }
 
+    uint64_t localNPObjectIDValue() const
+    {
+        ASSERT(type() == NPVariantData::LocalNPObjectID);
+        return m_localNPObjectIDValue;
+    }
+
+    uint64_t remoteNPObjectIDValue() const
+    {
+        ASSERT(type() == NPVariantData::RemoteNPObjectID);
+        return m_remoteNPObjectIDValue;
+    }
+
     void encode(CoreIPC::ArgumentEncoder*) const;
     static bool decode(CoreIPC::ArgumentDecoder*, NPVariantData&);
 
@@ -71,6 +86,8 @@ private:
     uint32_t m_type;
     bool m_boolValue;
     double m_doubleValue;
+    uint64_t m_localNPObjectIDValue;
+    uint64_t m_remoteNPObjectIDValue;
 };
 
 } // namespace WebKit

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list