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


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

    More NPRuntime work
    https://bugs.webkit.org/show_bug.cgi?id=48847
    
    Reviewed by Adam Roben.
    
    * PluginProcess/WebProcessConnection.cpp:
    (WebKit::WebProcessConnection::~WebProcessConnection):
    Add assertions.
    
    (WebKit::WebProcessConnection::removePluginControllerProxy):
    If we have no more plug-in controller proxies, invalidate the remote object map.
    
    * Shared/Plugins/NPIdentifierData.cpp:
    (WebKit::NPIdentifierData::createNPIdentifier):
    Create an NPIdentifier from the given NPIdentifierData.
    
    * Shared/Plugins/NPObjectMessageReceiver.cpp:
    (WebKit::NPObjectMessageReceiver::create):
    (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
    This now takes the NPRemoteObjectMap as well as the npObjectID of the object.
    
    (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
    Unregister the object.
    
    (WebKit::NPObjectMessageReceiver::deallocate):
    Delete the object.
    
    (WebKit::NPObjectMessageReceiver::getProperty):
    Ask the NPObject for the property and convert it back to an NPVariantData.
    
    * Shared/Plugins/NPObjectProxy.cpp:
    (WebKit::NPObjectProxy::~NPObjectProxy):
    Send a Deallocate message to the corresponding message receiver on the other side.
    
    (WebKit::NPObjectProxy::getProperty):
    Convert the NPVariantData back to an NPVariant and return it.
    
    * Shared/Plugins/NPRemoteObjectMap.cpp:
    (WebKit::NPRemoteObjectMap::registerNPObject):
    Pass the NPRemoteObjectMap and the npObjectID to NPObjectMessageReceiver::create.
    
    (WebKit::NPRemoteObjectMap::unregisterNPObject):
    Remove the given object from the map of registered objects.
    
    (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
    Given an NPVariant, create an NPVariantData. Only supports void and double types right now.
    
    (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
    Given an NPVariantData, create an NPVariant. Only supports void and double types right now.
    
    (WebKit::NPRemoteObjectMap::invalidate):
    Add stub.
    
    * Shared/Plugins/NPVariantData.cpp:
    (WebKit::NPVariantData::NPVariantData):
    Set the type to void by default.
    
    (WebKit::NPVariantData::makeVoid):
    Return a void NPVariantData.
    
    (WebKit::NPVariantData::makeDouble):
    Return an NPVariantData that contains a double value.
    
    (WebKit::NPVariantData::encode):
    Encode the NPVariantData.
    
    (WebKit::NPVariantData::decode):
    Decode the NPVariantData.
    
    * Shared/Plugins/NPVariantData.h:
    (WebKit::NPVariantData::type):
    Return the type of the NPVariantData.
    
    (WebKit::NPVariantData::doubleValue):
    Return the double value of the NPVariantData.
    
    * UIProcess/WebProcessProxy.cpp:
    (WebKit::WebProcessProxy::didClose):
    Use nullptr instead of 0.
    
    * WebProcess/Plugins/PluginProcessConnection.cpp:
    (WebKit::PluginProcessConnection::~PluginProcessConnection):
    Assert that the connection and the remote object map are both null.
    
    (WebKit::PluginProcessConnection::removePluginProxy):
    If this was the last plug-in proxy, invalidate the remote object map.
    
    * WebProcess/WebProcess.cpp:
    (WebKit::WebProcess::shutdown):
    Use nullptr instead of 0.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71127 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index acdcc04..26eae72 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,96 @@
+2010-11-02  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Adam Roben.
+
+        More NPRuntime work
+        https://bugs.webkit.org/show_bug.cgi?id=48847
+
+        * PluginProcess/WebProcessConnection.cpp:
+        (WebKit::WebProcessConnection::~WebProcessConnection):
+        Add assertions.
+
+        (WebKit::WebProcessConnection::removePluginControllerProxy):
+        If we have no more plug-in controller proxies, invalidate the remote object map.
+
+        * Shared/Plugins/NPIdentifierData.cpp:
+        (WebKit::NPIdentifierData::createNPIdentifier):
+        Create an NPIdentifier from the given NPIdentifierData.
+
+        * Shared/Plugins/NPObjectMessageReceiver.cpp:
+        (WebKit::NPObjectMessageReceiver::create):
+        (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
+        This now takes the NPRemoteObjectMap as well as the npObjectID of the object.
+
+        (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
+        Unregister the object.
+
+        (WebKit::NPObjectMessageReceiver::deallocate):
+        Delete the object.
+
+        (WebKit::NPObjectMessageReceiver::getProperty):
+        Ask the NPObject for the property and convert it back to an NPVariantData.
+
+        * Shared/Plugins/NPObjectProxy.cpp:
+        (WebKit::NPObjectProxy::~NPObjectProxy):
+        Send a Deallocate message to the corresponding message receiver on the other side.
+
+        (WebKit::NPObjectProxy::getProperty):
+        Convert the NPVariantData back to an NPVariant and return it.
+
+        * Shared/Plugins/NPRemoteObjectMap.cpp:
+        (WebKit::NPRemoteObjectMap::registerNPObject):
+        Pass the NPRemoteObjectMap and the npObjectID to NPObjectMessageReceiver::create.
+
+        (WebKit::NPRemoteObjectMap::unregisterNPObject):
+        Remove the given object from the map of registered objects.
+
+        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
+        Given an NPVariant, create an NPVariantData. Only supports void and double types right now.
+
+        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
+        Given an NPVariantData, create an NPVariant. Only supports void and double types right now.
+
+        (WebKit::NPRemoteObjectMap::invalidate):
+        Add stub.
+
+        * Shared/Plugins/NPVariantData.cpp:
+        (WebKit::NPVariantData::NPVariantData):
+        Set the type to void by default.
+
+        (WebKit::NPVariantData::makeVoid):
+        Return a void NPVariantData.
+
+        (WebKit::NPVariantData::makeDouble):
+        Return an NPVariantData that contains a double value.
+
+        (WebKit::NPVariantData::encode):
+        Encode the NPVariantData.
+
+        (WebKit::NPVariantData::decode):
+        Decode the NPVariantData.
+
+        * Shared/Plugins/NPVariantData.h:
+        (WebKit::NPVariantData::type):
+        Return the type of the NPVariantData.
+
+        (WebKit::NPVariantData::doubleValue):
+        Return the double value of the NPVariantData.
+        
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::didClose):
+        Use nullptr instead of 0.
+
+        * WebProcess/Plugins/PluginProcessConnection.cpp:
+        (WebKit::PluginProcessConnection::~PluginProcessConnection):
+        Assert that the connection and the remote object map are both null.
+
+        (WebKit::PluginProcessConnection::removePluginProxy):
+        If this was the last plug-in proxy, invalidate the remote object map.
+
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::shutdown):
+        Use nullptr instead of 0.
+
 2010-11-02  Balazs Kelemen  <kbalazs at webkit.org>
 
         Unreviewed Qt buildfix.
diff --git a/WebKit2/PluginProcess/WebProcessConnection.cpp b/WebKit2/PluginProcess/WebProcessConnection.cpp
index 2502891..3539454 100644
--- a/WebKit2/PluginProcess/WebProcessConnection.cpp
+++ b/WebKit2/PluginProcess/WebProcessConnection.cpp
@@ -42,6 +42,8 @@ PassRefPtr<WebProcessConnection> WebProcessConnection::create(CoreIPC::Connectio
 WebProcessConnection::~WebProcessConnection()
 {
     ASSERT(m_pluginControllers.isEmpty());
+    ASSERT(!m_npRemoteObjectMap);
+    ASSERT(!m_connection);
 }
     
 WebProcessConnection::WebProcessConnection(CoreIPC::Connection::Identifier connectionIdentifier)
@@ -80,9 +82,13 @@ void WebProcessConnection::removePluginControllerProxy(PluginControllerProxy* pl
     if (!m_pluginControllers.isEmpty())
         return;
 
+    // Invalidate our remote object map.
+    m_npRemoteObjectMap->invalidate();
+    m_npRemoteObjectMap = nullptr;
+
     // The last plug-in went away, close this connection.
     m_connection->invalidate();
-    m_connection = 0;
+    m_connection = nullptr;
 
     // This will cause us to be deleted.    
     PluginProcess::shared().removeWebProcessConnection(this);
diff --git a/WebKit2/Shared/Plugins/NPIdentifierData.cpp b/WebKit2/Shared/Plugins/NPIdentifierData.cpp
index 2fe2127..51dd6be 100644
--- a/WebKit2/Shared/Plugins/NPIdentifierData.cpp
+++ b/WebKit2/Shared/Plugins/NPIdentifierData.cpp
@@ -59,6 +59,14 @@ NPIdentifierData NPIdentifierData::fromNPIdentifier(NPIdentifier npIdentifier)
     return npIdentifierData;
 }
 
+NPIdentifier NPIdentifierData::createNPIdentifier() const
+{
+    if (m_isString)
+        return static_cast<NPIdentifier>(IdentifierRep::get(m_string.data()));
+    
+    return static_cast<NPIdentifier>(IdentifierRep::get(m_number));
+}
+
 void NPIdentifierData::encode(CoreIPC::ArgumentEncoder* encoder) const
 {
     encoder->encode(m_isString);
diff --git a/WebKit2/Shared/Plugins/NPIdentifierData.h b/WebKit2/Shared/Plugins/NPIdentifierData.h
index 637ea46..dbe979e 100644
--- a/WebKit2/Shared/Plugins/NPIdentifierData.h
+++ b/WebKit2/Shared/Plugins/NPIdentifierData.h
@@ -45,6 +45,7 @@ public:
     NPIdentifierData();
     
     static NPIdentifierData fromNPIdentifier(NPIdentifier);
+    NPIdentifier createNPIdentifier() const;
 
     void encode(CoreIPC::ArgumentEncoder*) const;
     static bool decode(CoreIPC::ArgumentDecoder*, NPIdentifierData&);
diff --git a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp
index 85775a1..db3d178 100644
--- a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp
+++ b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp
@@ -28,36 +28,53 @@
 #include "NPObjectMessageReceiver.h"
 
 #include "NPIdentifierData.h"
+#include "NPRemoteObjectMap.h"
 #include "NPRuntimeUtilities.h"
+#include "NPVariantData.h"
 #include "NotImplemented.h"
 
 namespace WebKit {
 
-PassOwnPtr<NPObjectMessageReceiver> NPObjectMessageReceiver::create(NPObject* npObject)
+PassOwnPtr<NPObjectMessageReceiver> NPObjectMessageReceiver::create(NPRemoteObjectMap* npRemoteObjectMap, uint64_t npObjectID, NPObject* npObject)
 {
-    return adoptPtr(new NPObjectMessageReceiver(npObject));
+    return adoptPtr(new NPObjectMessageReceiver(npRemoteObjectMap, npObjectID, npObject));
 }
 
-NPObjectMessageReceiver::NPObjectMessageReceiver(NPObject* npObject)
-    : m_npObject(npObject)
+NPObjectMessageReceiver::NPObjectMessageReceiver(NPRemoteObjectMap* npRemoteObjectMap, uint64_t npObjectID, NPObject* npObject)
+    : m_npRemoteObjectMap(npRemoteObjectMap)
+    , m_npObjectID(npObjectID)
+    , m_npObject(npObject)
 {
     retainNPObject(m_npObject);
 }
 
 NPObjectMessageReceiver::~NPObjectMessageReceiver()
 {
+    // FIXME: The remote object map might be destroyed here.
+    m_npRemoteObjectMap->unregisterNPObject(m_npObjectID);
+
     releaseNPObject(m_npObject);
 }
 
 void NPObjectMessageReceiver::deallocate()
 {
-    notImplemented();
+    delete this;
 }
 
-void NPObjectMessageReceiver::getProperty(const NPIdentifierData& propertyNameData, bool& returnValue, NPVariantData& result)
+void NPObjectMessageReceiver::getProperty(const NPIdentifierData& propertyNameData, bool& returnValue, NPVariantData& resultData)
 {
-    notImplemented();
-    returnValue = false;
+    if (!m_npObject->_class->getProperty) {
+        returnValue = false;
+        return;
+    }
+
+    NPVariant result;
+    returnValue = m_npObject->_class->getProperty(m_npObject, propertyNameData.createNPIdentifier(), &result);
+    if (!returnValue)
+        return;
+
+    // Convert the NPVariant to an NPVariantData.
+    resultData = m_npRemoteObjectMap->npVariantToNPVariantData(result);
 }
 
 } // namespace WebKit
diff --git a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h
index 7d813a1..321e0c2 100644
--- a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h
+++ b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h
@@ -36,24 +36,27 @@
 namespace WebKit {
 
 class NPIdentifierData;
+class NPRemoteObjectMap;
 class NPVariantData;
 
 class NPObjectMessageReceiver {
     WTF_MAKE_NONCOPYABLE(NPObjectMessageReceiver);
 
 public:
-    static PassOwnPtr<NPObjectMessageReceiver> create(NPObject* npObject);
+    static PassOwnPtr<NPObjectMessageReceiver> create(NPRemoteObjectMap* npRemoteObjectMap, uint64_t npObjectID, NPObject* npObject);
     ~NPObjectMessageReceiver();
 
     CoreIPC::SyncReplyMode didReceiveSyncNPObjectMessageReceiverMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
     
 private:
-    explicit NPObjectMessageReceiver(NPObject* npObject);
+    NPObjectMessageReceiver(NPRemoteObjectMap* npRemoteObjectMap, uint64_t npObjectID, NPObject* npObject);
 
     // Message handlers.
     void deallocate();
-    void getProperty(const NPIdentifierData&, bool& returnValue, NPVariantData& result);
+    void getProperty(const NPIdentifierData&, bool& returnValue, NPVariantData& resultData);
 
+    NPRemoteObjectMap* m_npRemoteObjectMap;
+    uint64_t m_npObjectID;
     NPObject* m_npObject;
 };
     
diff --git a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.messages.in b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.messages.in
index 158fcab..1fc120f 100644
--- a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.messages.in
+++ b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.messages.in
@@ -27,7 +27,7 @@ messages -> NPObjectMessageReceiver {
     Deallocate() -> ()
 
     # Get the given property.
-    GetProperty(WebKit::NPIdentifierData propertyName) -> (bool returnValue, WebKit::NPVariantData result)
+    GetProperty(WebKit::NPIdentifierData propertyName) -> (bool returnValue, WebKit::NPVariantData resultData)
 }
 
 #endif
diff --git a/WebKit2/Shared/Plugins/NPObjectProxy.cpp b/WebKit2/Shared/Plugins/NPObjectProxy.cpp
index f655f8f..126189d 100644
--- a/WebKit2/Shared/Plugins/NPObjectProxy.cpp
+++ b/WebKit2/Shared/Plugins/NPObjectProxy.cpp
@@ -53,6 +53,10 @@ NPObjectProxy::NPObjectProxy()
 
 NPObjectProxy::~NPObjectProxy()
 {
+    if (!m_npRemoteObjectMap)
+        return;
+
+    m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::Deallocate(), Messages::NPObjectMessageReceiver::Deallocate::Reply(), m_npObjectID);
 }
 
 bool NPObjectProxy::isNPObjectProxy(NPObject* npObject)
@@ -85,8 +89,11 @@ bool NPObjectProxy::getProperty(NPIdentifier propertyName, NPVariant* result)
     if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::GetProperty(propertyNameData), Messages::NPObjectMessageReceiver::GetProperty::Reply(returnValue, resultData), m_npObjectID))
         return false;
 
-    notImplemented();    
-    return false;
+    if (!returnValue)
+        return false;
+
+    *result = m_npRemoteObjectMap->npVariantDataToNPVariant(resultData);
+    return true;
 }
 
 NPClass* NPObjectProxy::npClass()
diff --git a/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp b/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
index fadc713..e8f3c83 100644
--- a/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
+++ b/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
@@ -29,6 +29,8 @@
 
 #include "NPObjectMessageReceiver.h"
 #include "NPObjectProxy.h"
+#include "NPVariantData.h"
+#include "NotImplemented.h"
 #include <wtf/OwnPtr.h>
 
 namespace WebKit {
@@ -61,11 +63,60 @@ NPObject* NPRemoteObjectMap::createNPObjectProxy(uint64_t remoteObjectID)
 uint64_t NPRemoteObjectMap::registerNPObject(NPObject* npObject)
 {
     uint64_t npObjectID = generateNPObjectID();
-    m_registeredNPObjects.set(npObjectID, NPObjectMessageReceiver::create(npObject).leakPtr());
+    m_registeredNPObjects.set(npObjectID, NPObjectMessageReceiver::create(this, npObjectID, npObject).leakPtr());
 
     return npObjectID;
 }
 
+void NPRemoteObjectMap::unregisterNPObject(uint64_t npObjectID)
+{
+    m_registeredNPObjects.remove(npObjectID);
+}
+
+NPVariantData NPRemoteObjectMap::npVariantToNPVariantData(const NPVariant& variant)
+{
+    switch (variant.type) {
+    case NPVariantType_Void:
+        return NPVariantData::makeVoid();
+
+    case NPVariantType_Double:
+        return NPVariantData::makeDouble(variant.value.doubleValue);
+            
+    case NPVariantType_Null:
+    case NPVariantType_Bool:
+    case NPVariantType_Int32:
+    case NPVariantType_String:
+    case NPVariantType_Object:
+        notImplemented();
+        return NPVariantData::makeVoid();
+    }
+
+    ASSERT_NOT_REACHED();
+    return NPVariantData::makeVoid();
+}
+
+NPVariant NPRemoteObjectMap::npVariantDataToNPVariant(const NPVariantData& npVariantData)
+{
+    NPVariant npVariant;
+
+    switch (npVariantData.type()) {
+    case NPVariantData::Void:
+        VOID_TO_NPVARIANT(npVariant);
+        break;
+    case NPVariantData::Double:
+        DOUBLE_TO_NPVARIANT(npVariantData.doubleValue(), npVariant);
+        break;
+    }
+
+    return npVariant;
+}
+
+void NPRemoteObjectMap::invalidate()
+{
+    // FIXME: Invalidate NPObjectProxy and NPObjectMessageReceiver objects.
+    notImplemented();
+}
+
 CoreIPC::SyncReplyMode NPRemoteObjectMap::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply)
 {
     NPObjectMessageReceiver* messageReceiver = m_registeredNPObjects.get(arguments->destinationID());
diff --git a/WebKit2/Shared/Plugins/NPRemoteObjectMap.h b/WebKit2/Shared/Plugins/NPRemoteObjectMap.h
index f0bf42a..535ecd4 100644
--- a/WebKit2/Shared/Plugins/NPRemoteObjectMap.h
+++ b/WebKit2/Shared/Plugins/NPRemoteObjectMap.h
@@ -37,6 +37,7 @@ namespace WebKit {
 
 class NPObjectMessageReceiver;
 class NPObjectProxy;
+class NPVariantData;
 
 class NPRemoteObjectMap : public RefCounted<NPRemoteObjectMap> {
 public:
@@ -48,9 +49,18 @@ public:
 
     // Expose the given NPObject as a remote object. Returns the objectID.
     uint64_t registerNPObject(NPObject*);
+    void unregisterNPObject(uint64_t);
+
+    // Given an NPVariant, creates an NPVariantData object (a CoreIPC representation of an NPVariant).
+    NPVariantData npVariantToNPVariantData(const NPVariant&);
+
+    // Given an NPVariantData, creates an NPVariant object.
+    NPVariant npVariantDataToNPVariant(const NPVariantData&);
 
     CoreIPC::Connection* connection() const { return m_connection; }
 
+    void invalidate();
+
     CoreIPC::SyncReplyMode didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply);
 
 private:
diff --git a/WebKit2/Shared/Plugins/NPVariantData.cpp b/WebKit2/Shared/Plugins/NPVariantData.cpp
index f0b1d48..bacb74d 100644
--- a/WebKit2/Shared/Plugins/NPVariantData.cpp
+++ b/WebKit2/Shared/Plugins/NPVariantData.cpp
@@ -27,19 +27,57 @@
 
 #include "NPVariantData.h"
 
+#include "ArgumentDecoder.h"
+#include "ArgumentEncoder.h"
 #include "NotImplemented.h"
 
 namespace WebKit {
 
-void NPVariantData::encode(CoreIPC::ArgumentEncoder*) const
+NPVariantData::NPVariantData()
+    : m_type(NPVariantData::Void)
 {
-    notImplemented();
 }
 
-bool NPVariantData::decode(CoreIPC::ArgumentDecoder*, NPVariantData&)
+NPVariantData NPVariantData::makeVoid()
 {
-    notImplemented();
-    return false;
+    return NPVariantData();
+}
+
+NPVariantData NPVariantData::makeDouble(double value)
+{
+    NPVariantData npVariantData;
+
+    npVariantData.m_type = NPVariantData::Double;
+    npVariantData.m_doubleValue = value;
+
+    return npVariantData;
+}
+
+void NPVariantData::encode(CoreIPC::ArgumentEncoder* encoder) const
+{
+    encoder->encode(m_type);
+
+    switch (type()) {
+    case NPVariantData::Void:
+        break;
+    case NPVariantData::Double:
+        encoder->encode(m_doubleValue);
+    }
+}
+
+bool NPVariantData::decode(CoreIPC::ArgumentDecoder* decoder, NPVariantData& result)
+{
+    if (!decoder->decode(result.m_type))
+        return false;
+
+    switch (result.m_type) {
+    case NPVariantData::Void:
+        return true;
+    case NPVariantData::Double:
+        return decoder->decode(result.m_doubleValue);
+    default:
+        return false;
+    }
 }
 
 } // namespace WebKit
diff --git a/WebKit2/Shared/Plugins/NPVariantData.h b/WebKit2/Shared/Plugins/NPVariantData.h
index 734ae97..e7cd83f 100644
--- a/WebKit2/Shared/Plugins/NPVariantData.h
+++ b/WebKit2/Shared/Plugins/NPVariantData.h
@@ -39,9 +39,29 @@ namespace WebKit {
 
 class NPVariantData {
 public:
+    enum Type {
+        Void,
+        Double,
+    };
+    NPVariantData();
+
+    static NPVariantData makeVoid();
+    static NPVariantData makeDouble(double value);
+
+    Type type() const { return static_cast<Type>(m_type); }
+
+    double doubleValue() const
+    {
+        ASSERT(type() == NPVariantData::Double);
+        return m_doubleValue;
+    }
+
     void encode(CoreIPC::ArgumentEncoder*) const;
     static bool decode(CoreIPC::ArgumentDecoder*, NPVariantData&);
-    
+
+private:
+    uint32_t m_type;
+    double m_doubleValue;
 };
 
 } // namespace WebKit
diff --git a/WebKit2/UIProcess/WebProcessProxy.cpp b/WebKit2/UIProcess/WebProcessProxy.cpp
index ac31133..bba1948 100644
--- a/WebKit2/UIProcess/WebProcessProxy.cpp
+++ b/WebKit2/UIProcess/WebProcessProxy.cpp
@@ -401,7 +401,7 @@ CoreIPC::SyncReplyMode WebProcessProxy::didReceiveSyncMessage(CoreIPC::Connectio
 
 void WebProcessProxy::didClose(CoreIPC::Connection*)
 {
-    m_connection = 0;
+    m_connection = nullptr;
     m_responsivenessTimer.stop();
 
     Vector<RefPtr<WebFrameProxy> > frames;
diff --git a/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp b/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
index 013bc16..7c09e56 100644
--- a/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
+++ b/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
@@ -46,6 +46,8 @@ PluginProcessConnection::PluginProcessConnection(PluginProcessConnectionManager*
 
 PluginProcessConnection::~PluginProcessConnection()
 {
+    ASSERT(!m_connection);
+    ASSERT(!m_npRemoteObjectMap);
 }
 
 void PluginProcessConnection::addPluginProxy(PluginProxy* plugin)
@@ -62,6 +64,10 @@ void PluginProcessConnection::removePluginProxy(PluginProxy* plugin)
     if (!m_plugins.isEmpty())
         return;
 
+    // Invalidate our remote object map.
+    m_npRemoteObjectMap->invalidate();
+    m_npRemoteObjectMap = 0;
+    
     // We have no more plug-ins, invalidate the connection to the plug-in process.
     ASSERT(m_connection);
     m_connection->invalidate();
diff --git a/WebKit2/WebProcess/WebProcess.cpp b/WebKit2/WebProcess/WebProcess.cpp
index 66c697e..4d243fe 100644
--- a/WebKit2/WebProcess/WebProcess.cpp
+++ b/WebKit2/WebProcess/WebProcess.cpp
@@ -284,7 +284,7 @@ void WebProcess::shutdown()
 
     // Invalidate our connection.
     m_connection->invalidate();
-    m_connection = 0;
+    m_connection = nullptr;
 
     m_runLoop->stop();
 }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list