[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:24:41 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 9c3bcda0cb165e6690b7295afa580a7cb2bd2f2a
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Tue Nov 2 23:16:31 2010 +0000
Add support for NP_HasMethod and NP_Invoke
https://bugs.webkit.org/show_bug.cgi?id=48882
Reviewed by Adam Roben.
WebKit2:
* Platform/CoreIPC/HandleMessage.h:
(CoreIPC::callMemberFunction):
Add new overload.
* Shared/Plugins/NPObjectMessageReceiver.cpp:
(WebKit::NPObjectMessageReceiver::hasMethod):
Call hasMethod and return the result.
(WebKit::NPObjectMessageReceiver::invoke):
Convert the arguments, call invoke and return the result.
(WebKit::NPObjectMessageReceiver::getProperty):
Release the converted variant.
* Shared/Plugins/NPObjectMessageReceiver.messages.in:
Add HasMethod and Invoke messages.
* Shared/Plugins/NPObjectProxy.cpp:
(WebKit::NPObjectProxy::hasMethod):
Send the HasMethod message.
(WebKit::NPObjectProxy::invoke):
Send the Invoke message.
(WebKit::NPObjectProxy::NP_HasMethod):
Call hasMethod.
(WebKit::NPObjectProxy::NP_Invoke):
Call invoke.
LayoutTests:
Remove now passing tests.
* platform/mac-wk2/Skipped:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71183 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 0c0be6d..e4ac434 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,14 @@
+2010-11-02 Anders Carlsson <andersca at apple.com>
+
+ Reviewed by Adam Roben.
+
+ Add support for NP_HasMethod and NP_Invoke
+ https://bugs.webkit.org/show_bug.cgi?id=48882
+
+ Remove now passing tests.
+
+ * platform/mac-wk2/Skipped:
+
2010-11-02 Simon Fraser <simon.fraser at apple.com>
Reviewed by Dan Bernstein.
diff --git a/LayoutTests/platform/mac-wk2/Skipped b/LayoutTests/platform/mac-wk2/Skipped
index 7094945..99b7c48 100644
--- a/LayoutTests/platform/mac-wk2/Skipped
+++ b/LayoutTests/platform/mac-wk2/Skipped
@@ -1717,8 +1717,6 @@ http/tests/plugins/npapi-response-headers.html
plugins/destroy-during-npp-new.html
plugins/destroy-stream-twice.html
plugins/embed-inside-object.html
-plugins/get-empty-url.html
-plugins/get-file-url.html
plugins/get-javascript-url.html
plugins/get-url-with-iframe-target.html
plugins/geturl-replace-query.html
@@ -1744,7 +1742,6 @@ plugins/npruntime/get-property-return-value.html
plugins/npruntime/identifier-conversion.html
plugins/npruntime/invoke-browserfuncs.html
plugins/npruntime/invoke-default.html
-plugins/npruntime/invoke.html
plugins/npruntime/npruntime.html
plugins/npruntime/object-from-destroyed-plugin.html
plugins/npruntime/plugin-scriptable-object-invoke-default.html
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 53a5878..8ff97b5 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,5 +1,42 @@
2010-11-02 Anders Carlsson <andersca at apple.com>
+ Reviewed by Adam Roben.
+
+ Add support for NP_HasMethod and NP_Invoke
+ https://bugs.webkit.org/show_bug.cgi?id=48882
+
+ * Platform/CoreIPC/HandleMessage.h:
+ (CoreIPC::callMemberFunction):
+ Add new overload.
+
+ * Shared/Plugins/NPObjectMessageReceiver.cpp:
+ (WebKit::NPObjectMessageReceiver::hasMethod):
+ Call hasMethod and return the result.
+
+ (WebKit::NPObjectMessageReceiver::invoke):
+ Convert the arguments, call invoke and return the result.
+
+ (WebKit::NPObjectMessageReceiver::getProperty):
+ Release the converted variant.
+
+ * Shared/Plugins/NPObjectMessageReceiver.messages.in:
+ Add HasMethod and Invoke messages.
+
+ * Shared/Plugins/NPObjectProxy.cpp:
+ (WebKit::NPObjectProxy::hasMethod):
+ Send the HasMethod message.
+
+ (WebKit::NPObjectProxy::invoke):
+ Send the Invoke message.
+
+ (WebKit::NPObjectProxy::NP_HasMethod):
+ Call hasMethod.
+
+ (WebKit::NPObjectProxy::NP_Invoke):
+ Call invoke.
+
+2010-11-02 Anders Carlsson <andersca at apple.com>
+
Reviewed by Sam Weinig.
Implement NP_HasProperty for NPObjectProxy
diff --git a/WebKit2/Platform/CoreIPC/HandleMessage.h b/WebKit2/Platform/CoreIPC/HandleMessage.h
index 27e9864..4f27598 100644
--- a/WebKit2/Platform/CoreIPC/HandleMessage.h
+++ b/WebKit2/Platform/CoreIPC/HandleMessage.h
@@ -103,6 +103,12 @@ void callMemberFunction(const Arguments2<P1, P2>& args, Arguments1<R1>& replyArg
(object->*function)(args.argument1, args.argument2, replyArgs.argument1);
}
+template<typename C, typename MF, typename P1, typename P2, typename R1, typename R2>
+void callMemberFunction(const Arguments2<P1, P2>& args, Arguments2<R1, R2>& replyArgs, C* object, MF function)
+{
+ (object->*function)(args.argument1, args.argument2, replyArgs.argument1, replyArgs.argument2);
+}
+
template<typename C, typename MF, typename P1, typename P2, typename P3, typename R1>
void callMemberFunction(const Arguments3<P1, P2, P3>& args, Arguments1<R1>& replyArgs, C* object, MF function)
{
diff --git a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp
index 5cc741f..a37aad9 100644
--- a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp
+++ b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp
@@ -60,6 +60,43 @@ void NPObjectMessageReceiver::deallocate()
delete this;
}
+void NPObjectMessageReceiver::hasMethod(const NPIdentifierData& methodNameData, bool& returnValue)
+{
+ if (!m_npObject->_class->hasMethod) {
+ returnValue = false;
+ return;
+ }
+
+ returnValue = m_npObject->_class->hasMethod(m_npObject, methodNameData.createNPIdentifier());
+}
+
+void NPObjectMessageReceiver::invoke(const NPIdentifierData& methodNameData, const Vector<NPVariantData>& argumentsData, bool& returnValue, NPVariantData& resultData)
+{
+ if (!m_npObject->_class->invoke) {
+ returnValue = false;
+ return;
+ }
+
+ Vector<NPVariant> arguments;
+ for (size_t i = 0; i < argumentsData.size(); ++i)
+ arguments.append(m_npRemoteObjectMap->npVariantDataToNPVariant(argumentsData[i]));
+
+ NPVariant result;
+ returnValue = m_npObject->_class->invoke(m_npObject, methodNameData.createNPIdentifier(), arguments.data(), arguments.size(), &result);
+ if (!returnValue)
+ return;
+
+ // Convert the NPVariant to an NPVariantData.
+ resultData = m_npRemoteObjectMap->npVariantToNPVariantData(result);
+
+ // Release all arguments.
+ for (size_t i = 0; i < argumentsData.size(); ++i)
+ releaseNPVariantValue(&arguments[i]);
+
+ // And release the result.
+ releaseNPVariantValue(&result);
+}
+
void NPObjectMessageReceiver::hasProperty(const NPIdentifierData& propertyNameData, bool& returnValue)
{
if (!m_npObject->_class->hasProperty) {
@@ -84,6 +121,9 @@ void NPObjectMessageReceiver::getProperty(const NPIdentifierData& propertyNameDa
// Convert the NPVariant to an NPVariantData.
resultData = m_npRemoteObjectMap->npVariantToNPVariantData(result);
+
+ // And release the result.
+ releaseNPVariantValue(&result);
}
} // namespace WebKit
diff --git a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h
index a78e13d..c366206 100644
--- a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h
+++ b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h
@@ -53,6 +53,8 @@ private:
// Message handlers.
void deallocate();
+ void hasMethod(const NPIdentifierData&, bool& returnValue);
+ void invoke(const NPIdentifierData&, const Vector<NPVariantData>& argumentsData, bool& returnValue, NPVariantData& resultData);
void hasProperty(const NPIdentifierData&, bool& returnValue);
void getProperty(const NPIdentifierData&, bool& returnValue, NPVariantData& resultData);
diff --git a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.messages.in b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.messages.in
index 3dd0722..60744c3 100644
--- a/WebKit2/Shared/Plugins/NPObjectMessageReceiver.messages.in
+++ b/WebKit2/Shared/Plugins/NPObjectMessageReceiver.messages.in
@@ -24,6 +24,8 @@
messages -> NPObjectMessageReceiver {
Deallocate() -> ()
+ HasMethod(WebKit::NPIdentifierData methodName) -> (bool returnValue)
+ Invoke(WebKit::NPIdentifierData methodName, Vector<WebKit::NPVariantData> argumentsData) -> (bool returnValue, WebKit::NPVariantData resultData)
HasProperty(WebKit::NPIdentifierData propertyName) -> (bool returnValue)
GetProperty(WebKit::NPIdentifierData propertyName) -> (bool returnValue, WebKit::NPVariantData resultData)
}
diff --git a/WebKit2/Shared/Plugins/NPObjectProxy.cpp b/WebKit2/Shared/Plugins/NPObjectProxy.cpp
index c3c4de5..9619a86 100644
--- a/WebKit2/Shared/Plugins/NPObjectProxy.cpp
+++ b/WebKit2/Shared/Plugins/NPObjectProxy.cpp
@@ -27,6 +27,7 @@
#include "NPObjectProxy.h"
+#include "ArgumentCoders.h"
#include "Connection.h"
#include "NPIdentifierData.h"
#include "NPObjectMessageReceiverMessages.h"
@@ -84,6 +85,44 @@ void NPObjectProxy::initialize(NPRemoteObjectMap* npRemoteObjectMap, uint64_t np
m_npObjectID = npObjectID;
}
+bool NPObjectProxy::hasMethod(NPIdentifier methodName)
+{
+ if (!m_npRemoteObjectMap)
+ return false;
+
+ NPIdentifierData methodNameData = NPIdentifierData::fromNPIdentifier(methodName);
+
+ bool returnValue = false;
+
+ if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::HasMethod(methodNameData), Messages::NPObjectMessageReceiver::HasMethod::Reply(returnValue), m_npObjectID))
+ return false;
+
+ return returnValue;
+}
+
+bool NPObjectProxy::invoke(NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
+{
+ if (!m_npRemoteObjectMap)
+ return false;
+
+ NPIdentifierData methodNameData = NPIdentifierData::fromNPIdentifier(methodName);
+ Vector<NPVariantData> argumentsData;
+ for (uint32_t i = 0; i < argumentCount; ++i)
+ argumentsData.append(m_npRemoteObjectMap->npVariantToNPVariantData(arguments[i]));
+
+ bool returnValue = false;
+ NPVariantData resultData;
+
+ if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::Invoke(methodNameData, argumentsData), Messages::NPObjectMessageReceiver::Invoke::Reply(returnValue, resultData), m_npObjectID))
+ return false;
+
+ if (!returnValue)
+ return false;
+
+ *result = m_npRemoteObjectMap->npVariantDataToNPVariant(resultData);
+ return true;
+}
+
bool NPObjectProxy::hasProperty(NPIdentifier propertyName)
{
if (!m_npRemoteObjectMap)
@@ -153,16 +192,14 @@ void NPObjectProxy::NP_Deallocate(NPObject* npObject)
delete npObjectProxy;
}
-bool NPObjectProxy::NP_HasMethod(NPObject*, NPIdentifier methodName)
+bool NPObjectProxy::NP_HasMethod(NPObject* npObject, NPIdentifier methodName)
{
- notImplemented();
- return false;
+ return toNPObjectProxy(npObject)->hasMethod(methodName);
}
-bool NPObjectProxy::NP_Invoke(NPObject*, NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
+bool NPObjectProxy::NP_Invoke(NPObject* npObject, NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
{
- notImplemented();
- return false;
+ return toNPObjectProxy(npObject)->invoke(methodName, arguments, argumentCount, result);
}
bool NPObjectProxy::NP_InvokeDefault(NPObject*, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
diff --git a/WebKit2/Shared/Plugins/NPObjectProxy.h b/WebKit2/Shared/Plugins/NPObjectProxy.h
index cb9d24a..2156f80 100644
--- a/WebKit2/Shared/Plugins/NPObjectProxy.h
+++ b/WebKit2/Shared/Plugins/NPObjectProxy.h
@@ -57,6 +57,8 @@ private:
void initialize(NPRemoteObjectMap* npRemoteObjectMap, uint64_t npObjectID);
+ bool hasMethod(NPIdentifier methodName);
+ bool invoke(NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
bool hasProperty(NPIdentifier propertyName);
bool getProperty(NPIdentifier propertyName, NPVariant* result);
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list