[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