[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