[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 11:36:42 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 1039e40766e0130388558ba734535e6921264675
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Jul 30 21:43:48 2010 +0000
Implement NPN_Evaluate
https://bugs.webkit.org/show_bug.cgi?id=43268
Reviewed by Sam Weinig.
WebKit2:
* WebProcess/Plugins/NPRuntimeObjectMap.cpp:
(WebKit::NPRuntimeObjectMap::evaluate):
Evaluate the passed in string.
* WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
(WebKit::NPN_Evaluate):
Call NetscapePlugin::evaluate.
* WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
(WebKit::NetscapePlugin::evaluate):
Call PluginController::evaluate.
* WebProcess/Plugins/PluginController.h:
Add evaluate pure virtual member function.
* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::evaluate):
Update the popup window state and call NPRuntimeObjectMap::evaluate.
LayoutTests:
Add test.
* plugins/npruntime/evaluate-expected.txt: Added.
* plugins/npruntime/evaluate.html: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@64377 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 532cc59..abb6be4 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,15 @@
+2010-07-30 Anders Carlsson <andersca at apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implement NPN_Evaluate
+ https://bugs.webkit.org/show_bug.cgi?id=43268
+
+ Add test.
+
+ * plugins/npruntime/evaluate-expected.txt: Added.
+ * plugins/npruntime/evaluate.html: Added.
+
2010-07-30 Satish Sampath <satish at chromium.org>
Reviewed by David Levin.
diff --git a/LayoutTests/plugins/npruntime/evaluate-expected.txt b/LayoutTests/plugins/npruntime/evaluate-expected.txt
new file mode 100644
index 0000000..ee2f64d
--- /dev/null
+++ b/LayoutTests/plugins/npruntime/evaluate-expected.txt
@@ -0,0 +1,11 @@
+
+Test NPN_Evaluate
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS plugin.testEvaluate('1') is 1
+PASS plugin.testEvaluate('plugin') is plugin
+PASS plugin.testEvaluate('window') is window
+PASS plugin.testEvaluate('1 + 1') is 2
+
diff --git a/LayoutTests/plugins/npruntime/evaluate.html b/LayoutTests/plugins/npruntime/evaluate.html
new file mode 100644
index 0000000..74c9e40
--- /dev/null
+++ b/LayoutTests/plugins/npruntime/evaluate.html
@@ -0,0 +1,23 @@
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<script>
+function runTest() {
+ plugin = document.getElementById('plugin');
+
+ shouldBe("plugin.testEvaluate('1')", "1");
+ shouldBe("plugin.testEvaluate('plugin')", "plugin");
+ shouldBe("plugin.testEvaluate('window')", "window");
+ shouldBe("plugin.testEvaluate('1 + 1')", "2");
+}
+</script>
+<body onLoad="runTest()">
+<embed id="plugin" type="application/x-webkit-test-netscape" width=100 height=100></embed>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test NPN_Evaluate");
+
+successfullyParsed = true;
+</script>
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 03cc956..af2df8d 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -2,6 +2,32 @@
Reviewed by Sam Weinig.
+ Implement NPN_Evaluate
+ https://bugs.webkit.org/show_bug.cgi?id=43268
+
+ * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
+ (WebKit::NPRuntimeObjectMap::evaluate):
+ Evaluate the passed in string.
+
+ * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
+ (WebKit::NPN_Evaluate):
+ Call NetscapePlugin::evaluate.
+
+ * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
+ (WebKit::NetscapePlugin::evaluate):
+ Call PluginController::evaluate.
+
+ * WebProcess/Plugins/PluginController.h:
+ Add evaluate pure virtual member function.
+
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::evaluate):
+ Update the popup window state and call NPRuntimeObjectMap::evaluate.
+
+2010-07-30 Anders Carlsson <andersca at apple.com>
+
+ Reviewed by Sam Weinig.
+
Implement NPN_InvokeDefault
https://bugs.webkit.org/show_bug.cgi?id=43266
diff --git a/WebKit2/WebProcess/Plugins/NPJSObject.cpp b/WebKit2/WebProcess/Plugins/NPJSObject.cpp
index 9a4bb05..dda6af3 100644
--- a/WebKit2/WebProcess/Plugins/NPJSObject.cpp
+++ b/WebKit2/WebProcess/Plugins/NPJSObject.cpp
@@ -119,7 +119,7 @@ bool NPJSObject::invoke(NPIdentifier methodName, const NPVariant* arguments, uin
return invoke(exec, m_objectMap->globalObject(), function, arguments, argumentCount, result);
}
-bool NPJSObject::invokeDefault(const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
+bool NPJSObject::invokeDefault(const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
{
ExecState* exec = m_objectMap->globalExec();
if (!exec)
@@ -215,7 +215,7 @@ bool NPJSObject::enumerate(NPIdentifier** identifiers, uint32_t* identifierCount
return true;
}
-bool NPJSObject::construct(const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
+bool NPJSObject::construct(const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
{
ExecState* exec = m_objectMap->globalExec();
if (!exec)
diff --git a/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.cpp b/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.cpp
index 76f36c8..673e239 100644
--- a/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.cpp
+++ b/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.cpp
@@ -25,13 +25,13 @@
#include "NPRuntimeObjectMap.h"
-#include <JavaScriptCore/JSLock.h>
-
#include "JSNPObject.h"
#include "NPJSObject.h"
#include "NPRuntimeUtilities.h"
#include "NotImplemented.h"
#include "PluginView.h"
+#include <JavaScriptCore/JSLock.h>
+#include <JavaScriptCore/SourceCode.h>
#include <WebCore/Frame.h>
using namespace JSC;
@@ -168,6 +168,37 @@ void NPRuntimeObjectMap::convertJSValueToNPVariant(ExecState* exec, JSValue valu
ASSERT_NOT_REACHED();
}
+bool NPRuntimeObjectMap::evaluate(NPObject* npObject, const String&scriptString, NPVariant* result)
+{
+ ProtectedPtr<JSGlobalObject> globalObject = this->globalObject();
+ if (!globalObject)
+ return false;
+
+ ExecState* exec = globalObject->globalExec();
+
+ JSLock lock(SilenceAssertionsOnly);
+ JSValue thisValue = getOrCreateJSObject(globalObject, npObject);
+
+ globalObject->globalData()->timeoutChecker.start();
+ Completion completion = JSC::evaluate(exec, globalObject->globalScopeChain(), makeSource(UString(scriptString.impl())), thisValue);
+ globalObject->globalData()->timeoutChecker.stop();
+
+ ComplType completionType = completion.complType();
+
+ JSValue resultValue;
+ if (completionType == Normal) {
+ resultValue = completion.value();
+ if (!resultValue)
+ resultValue = jsUndefined();
+ } else
+ resultValue = jsUndefined();
+
+ exec->clearException();
+
+ convertJSValueToNPVariant(exec, resultValue, *result);
+ return true;
+}
+
void NPRuntimeObjectMap::invalidate()
{
Vector<NPJSObject*> npJSObjects;
diff --git a/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.h b/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.h
index 67a5860..cb530b9 100644
--- a/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.h
+++ b/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.h
@@ -38,6 +38,10 @@ namespace JSC {
class JSValue;
}
+namespace WebCore {
+ class String;
+}
+
namespace WebKit {
class JSNPObject;
@@ -52,17 +56,17 @@ public:
// Returns an NPObject that wraps the given JSObject object. If there is already an NPObject that wraps this JSObject, it will
// retain it and return it.
NPObject* getOrCreateNPObject(JSC::JSObject*);
-
void npJSObjectDestroyed(NPJSObject*);
// Returns a JSObject object that wraps the given NPObject.
JSC::JSObject* getOrCreateJSObject(JSC::JSGlobalObject*, NPObject*);
-
void jsNPObjectDestroyed(JSNPObject*);
void convertJSValueToNPVariant(JSC::ExecState*, JSC::JSValue, NPVariant&);
JSC::JSValue convertNPVariantToJSValue(JSC::ExecState*, JSC::JSGlobalObject*, const NPVariant&);
+ bool evaluate(NPObject*, const WebCore::String&scriptString, NPVariant* result);
+
// Called when the plug-in is destroyed. Will invalidate all the NPObjects.
void invalidate();
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp b/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
index 7404226..7319338 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
@@ -550,7 +550,7 @@ static void NPN_ReleaseObject(NPObject *npObject)
releaseNPObject(npObject);
}
-static bool NPN_Invoke(NPP, NPObject *npObject, NPIdentifier methodName, const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
+static bool NPN_Invoke(NPP, NPObject *npObject, NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
{
if (npObject->_class->invoke)
return npObject->_class->invoke(npObject, methodName, arguments, argumentCount, result);
@@ -558,7 +558,7 @@ static bool NPN_Invoke(NPP, NPObject *npObject, NPIdentifier methodName, const N
return false;
}
-static bool NPN_InvokeDefault(NPP, NPObject *npObject, const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
+static bool NPN_InvokeDefault(NPP, NPObject *npObject, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
{
if (npObject->_class->invokeDefault)
return npObject->_class->invokeDefault(npObject, arguments, argumentCount, result);
@@ -566,10 +566,12 @@ static bool NPN_InvokeDefault(NPP, NPObject *npObject, const NPVariant *argument
return false;
}
-static bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script, NPVariant *result)
+static bool NPN_Evaluate(NPP npp, NPObject *npObject, NPString *script, NPVariant* result)
{
- notImplemented();
- return false;
+ RefPtr<NetscapePlugin> plugin = NetscapePlugin::fromNPP(npp);
+ String scriptString = String::fromUTF8WithLatin1Fallback(script->UTF8Characters, script->UTF8Length);
+
+ return plugin->evaluate(npObject, scriptString, result);
}
static bool NPN_GetProperty(NPP, NPObject* npObject, NPIdentifier propertyName, NPVariant* result)
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
index eeb9ea7..e209ce2 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
@@ -148,6 +148,11 @@ void NetscapePlugin::setStatusbarText(const String& statusbarText)
m_pluginController->setStatusbarText(statusbarText);
}
+bool NetscapePlugin::evaluate(NPObject* npObject, const String& scriptString, NPVariant* result)
+{
+ return m_pluginController->evaluate(npObject, scriptString, result, allowPopups());
+}
+
NPObject* NetscapePlugin::windowScriptNPObject()
{
return m_pluginController->windowScriptNPObject();
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
index f0b987e..eda7b9d 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
@@ -60,6 +60,7 @@ public:
const Vector<char>& httpBody, bool sendNotification, void* notificationData);
NPError destroyStream(NPStream*, NPReason);
void setStatusbarText(const WebCore::String&);
+ bool evaluate(NPObject*, const WebCore::String&scriptString, NPVariant* result);
// These return retained objects.
NPObject* windowScriptNPObject();
diff --git a/WebKit2/WebProcess/Plugins/PluginController.h b/WebKit2/WebProcess/Plugins/PluginController.h
index 1d8eb38..0d3dd29 100644
--- a/WebKit2/WebProcess/Plugins/PluginController.h
+++ b/WebKit2/WebProcess/Plugins/PluginController.h
@@ -27,6 +27,7 @@
#define PluginController_h
struct NPObject;
+typedef struct _NPVariant NPVariant;
namespace WebCore {
class HTTPHeaderMap;
@@ -64,6 +65,9 @@ public:
// Get the NPObject that corresponds to the plug-in's element. Returns a retained object.
virtual NPObject* pluginElementNPObject() = 0;
+ // Evaluates the given script string in the context of the given NPObject.
+ virtual bool evaluate(NPObject*, const WebCore::String&scriptString, NPVariant* result, bool allowPopups) = 0;
+
// Set the statusbar text.
virtual void setStatusbarText(const WebCore::String&) = 0;
diff --git a/WebKit2/WebProcess/Plugins/PluginView.cpp b/WebKit2/WebProcess/Plugins/PluginView.cpp
index a9f28ec..d8a72ae 100644
--- a/WebKit2/WebProcess/Plugins/PluginView.cpp
+++ b/WebKit2/WebProcess/Plugins/PluginView.cpp
@@ -636,6 +636,22 @@ NPObject* PluginView::pluginElementNPObject()
return m_npRuntimeObjectMap.getOrCreateNPObject(object);
}
+bool PluginView::evaluate(NPObject* npObject, const String&scriptString, NPVariant* result, bool allowPopups)
+{
+ if (!frame())
+ return false;
+
+ bool oldAllowPopups = frame()->script()->allowPopupsFromPlugin();
+ frame()->script()->setAllowPopupsFromPlugin(allowPopups);
+
+ // FIXME: What happens if calling evaluate will cause the plug-in view to go away.
+ bool returnValue = m_npRuntimeObjectMap.evaluate(npObject, scriptString, result);
+
+ frame()->script()->setAllowPopupsFromPlugin(oldAllowPopups);
+
+ return returnValue;
+}
+
void PluginView::setStatusbarText(const String& statusbarText)
{
if (!frame())
diff --git a/WebKit2/WebProcess/Plugins/PluginView.h b/WebKit2/WebProcess/Plugins/PluginView.h
index bee8553..b39f6c2 100644
--- a/WebKit2/WebProcess/Plugins/PluginView.h
+++ b/WebKit2/WebProcess/Plugins/PluginView.h
@@ -103,6 +103,7 @@ private:
virtual void cancelStreamLoad(uint64_t streamID);
virtual NPObject* windowScriptNPObject();
virtual NPObject* pluginElementNPObject();
+ virtual bool evaluate(NPObject*, const WebCore::String&scriptString, NPVariant* result, bool allowPopups);
virtual void setStatusbarText(const WebCore::String&);
// WebFrame::LoadListener
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list