[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