diff options
author | Steve Block <steveblock@google.com> | 2011-05-25 19:08:45 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2011-06-08 13:51:31 +0100 |
commit | 2bde8e466a4451c7319e3a072d118917957d6554 (patch) | |
tree | 28f4a1b869a513e565c7760d0e6a06e7cf1fe95a /Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp | |
parent | 6939c99b71d9372d14a0c74a772108052e8c48c8 (diff) | |
download | external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.zip external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.gz external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.bz2 |
Merge WebKit at r82507: Initial merge by git
Change-Id: I60ce9d780725b58b45e54165733a8ffee23b683e
Diffstat (limited to 'Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp')
-rw-r--r-- | Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp | 57 |
1 files changed, 34 insertions, 23 deletions
diff --git a/Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp b/Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp index 0e164f1..70978c5 100644 --- a/Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp +++ b/Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp @@ -50,7 +50,6 @@ PassRefPtr<NPRemoteObjectMap> NPRemoteObjectMap::create(CoreIPC::Connection* con NPRemoteObjectMap::NPRemoteObjectMap(CoreIPC::Connection* connection) : m_connection(connection) - , m_isInvalidating(false) { } @@ -60,9 +59,9 @@ NPRemoteObjectMap::~NPRemoteObjectMap() ASSERT(m_registeredNPObjects.isEmpty()); } -NPObject* NPRemoteObjectMap::createNPObjectProxy(uint64_t remoteObjectID) +NPObject* NPRemoteObjectMap::createNPObjectProxy(uint64_t remoteObjectID, Plugin* plugin) { - NPObjectProxy* npObjectProxy = NPObjectProxy::create(this, remoteObjectID); + NPObjectProxy* npObjectProxy = NPObjectProxy::create(this, plugin, remoteObjectID); m_npObjectProxies.add(npObjectProxy); @@ -71,16 +70,16 @@ NPObject* NPRemoteObjectMap::createNPObjectProxy(uint64_t remoteObjectID) void NPRemoteObjectMap::npObjectProxyDestroyed(NPObject* npObject) { - ASSERT(NPObjectProxy::isNPObjectProxy(npObject)); - ASSERT(m_npObjectProxies.contains(npObject)); + NPObjectProxy* npObjectProxy = NPObjectProxy::toNPObjectProxy(npObject); + ASSERT(m_npObjectProxies.contains(npObjectProxy)); - m_npObjectProxies.remove(npObject); + m_npObjectProxies.remove(npObjectProxy); } -uint64_t NPRemoteObjectMap::registerNPObject(NPObject* npObject) +uint64_t NPRemoteObjectMap::registerNPObject(NPObject* npObject, Plugin* plugin) { uint64_t npObjectID = generateNPObjectID(); - m_registeredNPObjects.set(npObjectID, NPObjectMessageReceiver::create(this, npObjectID, npObject).leakPtr()); + m_registeredNPObjects.set(npObjectID, NPObjectMessageReceiver::create(this, plugin, npObjectID, npObject).leakPtr()); return npObjectID; } @@ -90,7 +89,7 @@ void NPRemoteObjectMap::unregisterNPObject(uint64_t npObjectID) m_registeredNPObjects.remove(npObjectID); } -NPVariantData NPRemoteObjectMap::npVariantToNPVariantData(const NPVariant& variant) +NPVariantData NPRemoteObjectMap::npVariantToNPVariantData(const NPVariant& variant, Plugin* plugin) { switch (variant.type) { case NPVariantType_Void: @@ -124,7 +123,7 @@ NPVariantData NPRemoteObjectMap::npVariantToNPVariantData(const NPVariant& varia return NPVariantData::makeRemoteNPObjectID(npObjectID); } - uint64_t npObjectID = registerNPObject(npObject); + uint64_t npObjectID = registerNPObject(npObject, plugin); return NPVariantData::makeLocalNPObjectID(npObjectID); } @@ -134,7 +133,7 @@ NPVariantData NPRemoteObjectMap::npVariantToNPVariantData(const NPVariant& varia return NPVariantData::makeVoid(); } -NPVariant NPRemoteObjectMap::npVariantDataToNPVariant(const NPVariantData& npVariantData) +NPVariant NPRemoteObjectMap::npVariantDataToNPVariant(const NPVariantData& npVariantData, Plugin* plugin) { NPVariant npVariant; @@ -178,7 +177,7 @@ NPVariant NPRemoteObjectMap::npVariantDataToNPVariant(const NPVariantData& npVar break; } case NPVariantData::RemoteNPObjectID: { - NPObject* npObjectProxy = createNPObjectProxy(npVariantData.remoteNPObjectIDValue()); + NPObject* npObjectProxy = createNPObjectProxy(npVariantData.remoteNPObjectIDValue(), plugin); OBJECT_TO_NPVARIANT(npObjectProxy, npVariant); break; } @@ -187,25 +186,37 @@ NPVariant NPRemoteObjectMap::npVariantDataToNPVariant(const NPVariantData& npVar return npVariant; } -void NPRemoteObjectMap::invalidate() +void NPRemoteObjectMap::pluginDestroyed(Plugin* plugin) { - ASSERT(!m_isInvalidating); - - m_isInvalidating = true; - Vector<NPObjectMessageReceiver*> messageReceivers; - copyValuesToVector(m_registeredNPObjects, messageReceivers); + + // Gather the receivers associated with this plug-in. + for (HashMap<uint64_t, NPObjectMessageReceiver*>::const_iterator it = m_registeredNPObjects.begin(), end = m_registeredNPObjects.end(); it != end; ++it) { + NPObjectMessageReceiver* npObjectMessageReceiver = it->second; + if (npObjectMessageReceiver->plugin() == plugin) + messageReceivers.append(npObjectMessageReceiver); + } // Now delete all the receivers. deleteAllValues(messageReceivers); - ASSERT(m_registeredNPObjects.isEmpty()); + Vector<NPObjectProxy*> objectProxies; + for (HashSet<NPObjectProxy*>::const_iterator it = m_npObjectProxies.begin(), end = m_npObjectProxies.end(); it != end; ++it) { + NPObjectProxy* npObjectProxy = *it; - for (HashSet<NPObject*>::const_iterator it = m_npObjectProxies.begin(), end = m_npObjectProxies.end(); it != end; ++it) - NPObjectProxy::toNPObjectProxy(*it)->invalidate(); - m_npObjectProxies.clear(); + if (npObjectProxy->plugin() == plugin) + objectProxies.append(npObjectProxy); + } + + // Invalidate and remove all proxies associated with this plug-in. + for (size_t i = 0; i < objectProxies.size(); ++i) { + NPObjectProxy* npObjectProxy = objectProxies[i]; - m_isInvalidating = false; + npObjectProxy->invalidate(); + + ASSERT(m_npObjectProxies.contains(npObjectProxy)); + m_npObjectProxies.remove(npObjectProxy); + } } CoreIPC::SyncReplyMode NPRemoteObjectMap::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply) |