Changeset 64377 in webkit


Ignore:
Timestamp:
Jul 30, 2010 2:43:48 PM (14 years ago)
Author:
andersca@apple.com
Message:

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.
Location:
trunk
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r64375 r64377  
     12010-07-30  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Implement NPN_Evaluate
     6        https://bugs.webkit.org/show_bug.cgi?id=43268
     7
     8        Add test.
     9
     10        * plugins/npruntime/evaluate-expected.txt: Added.
     11        * plugins/npruntime/evaluate.html: Added.
     12
    1132010-07-30  Satish Sampath  <satish@chromium.org>
    214
  • trunk/WebKit2/ChangeLog

    r64365 r64377  
     12010-07-30  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Implement NPN_Evaluate
     6        https://bugs.webkit.org/show_bug.cgi?id=43268
     7
     8        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
     9        (WebKit::NPRuntimeObjectMap::evaluate):
     10        Evaluate the passed in string.
     11
     12        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
     13        (WebKit::NPN_Evaluate):
     14        Call NetscapePlugin::evaluate.
     15
     16        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
     17        (WebKit::NetscapePlugin::evaluate):
     18        Call PluginController::evaluate.
     19
     20        * WebProcess/Plugins/PluginController.h:
     21        Add evaluate pure virtual member function.
     22
     23        * WebProcess/Plugins/PluginView.cpp:
     24        (WebKit::PluginView::evaluate):
     25        Update the popup window state and call NPRuntimeObjectMap::evaluate.
     26
    1272010-07-30  Anders Carlsson  <andersca@apple.com>
    228
  • trunk/WebKit2/WebProcess/Plugins/NPJSObject.cpp

    r64316 r64377  
    120120}
    121121
    122 bool NPJSObject::invokeDefault(const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
     122bool NPJSObject::invokeDefault(const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
    123123{
    124124    ExecState* exec = m_objectMap->globalExec();
     
    216216}
    217217
    218 bool NPJSObject::construct(const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
     218bool NPJSObject::construct(const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
    219219{
    220220    ExecState* exec = m_objectMap->globalExec();
  • trunk/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.cpp

    r64365 r64377  
    2626#include "NPRuntimeObjectMap.h"
    2727
    28 #include <JavaScriptCore/JSLock.h>
    29 
    3028#include "JSNPObject.h"
    3129#include "NPJSObject.h"
     
    3331#include "NotImplemented.h"
    3432#include "PluginView.h"
     33#include <JavaScriptCore/JSLock.h>
     34#include <JavaScriptCore/SourceCode.h>
    3535#include <WebCore/Frame.h>
    3636
     
    169169}
    170170
     171bool NPRuntimeObjectMap::evaluate(NPObject* npObject, const String&scriptString, NPVariant* result)
     172{
     173    ProtectedPtr<JSGlobalObject> globalObject = this->globalObject();
     174    if (!globalObject)
     175        return false;
     176
     177    ExecState* exec = globalObject->globalExec();
     178   
     179    JSLock lock(SilenceAssertionsOnly);
     180    JSValue thisValue = getOrCreateJSObject(globalObject, npObject);
     181
     182    globalObject->globalData()->timeoutChecker.start();
     183    Completion completion = JSC::evaluate(exec, globalObject->globalScopeChain(), makeSource(UString(scriptString.impl())), thisValue);
     184    globalObject->globalData()->timeoutChecker.stop();
     185
     186    ComplType completionType = completion.complType();
     187
     188    JSValue resultValue;
     189    if (completionType == Normal) {
     190        resultValue = completion.value();
     191        if (!resultValue)
     192            resultValue = jsUndefined();
     193    } else
     194        resultValue = jsUndefined();
     195
     196    exec->clearException();
     197   
     198    convertJSValueToNPVariant(exec, resultValue, *result);
     199    return true;
     200}
     201
    171202void NPRuntimeObjectMap::invalidate()
    172203{
  • trunk/WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.h

    r64365 r64377  
    3939}
    4040
     41namespace WebCore {
     42    class String;
     43}
     44
    4145namespace WebKit {
    4246
     
    5357    // retain it and return it.
    5458    NPObject* getOrCreateNPObject(JSC::JSObject*);
    55 
    5659    void npJSObjectDestroyed(NPJSObject*);
    5760
    5861    // Returns a JSObject object that wraps the given NPObject.
    5962    JSC::JSObject* getOrCreateJSObject(JSC::JSGlobalObject*, NPObject*);
    60 
    6163    void jsNPObjectDestroyed(JSNPObject*);
    6264
    6365    void convertJSValueToNPVariant(JSC::ExecState*, JSC::JSValue, NPVariant&);
    6466    JSC::JSValue convertNPVariantToJSValue(JSC::ExecState*, JSC::JSGlobalObject*, const NPVariant&);
     67
     68    bool evaluate(NPObject*, const WebCore::String&scriptString, NPVariant* result);
    6569
    6670    // Called when the plug-in is destroyed. Will invalidate all the NPObjects.
  • trunk/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp

    r64316 r64377  
    551551}
    552552
    553 static bool NPN_Invoke(NPP, NPObject *npObject, NPIdentifier methodName, const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
     553static bool NPN_Invoke(NPP, NPObject *npObject, NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
    554554{
    555555    if (npObject->_class->invoke)
     
    559559}
    560560
    561 static bool NPN_InvokeDefault(NPP, NPObject *npObject, const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
     561static bool NPN_InvokeDefault(NPP, NPObject *npObject, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
    562562{
    563563    if (npObject->_class->invokeDefault)
     
    567567}
    568568
    569 static bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script, NPVariant *result)
    570 {
    571     notImplemented();
    572     return false;
     569static bool NPN_Evaluate(NPP npp, NPObject *npObject, NPString *script, NPVariant* result)
     570{
     571    RefPtr<NetscapePlugin> plugin = NetscapePlugin::fromNPP(npp);
     572    String scriptString = String::fromUTF8WithLatin1Fallback(script->UTF8Characters, script->UTF8Length);
     573   
     574    return plugin->evaluate(npObject, scriptString, result);
    573575}
    574576
  • trunk/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp

    r64304 r64377  
    149149}
    150150
     151bool NetscapePlugin::evaluate(NPObject* npObject, const String& scriptString, NPVariant* result)
     152{
     153    return m_pluginController->evaluate(npObject, scriptString, result, allowPopups());
     154}
     155
    151156NPObject* NetscapePlugin::windowScriptNPObject()
    152157{
  • trunk/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h

    r64304 r64377  
    6161    NPError destroyStream(NPStream*, NPReason);
    6262    void setStatusbarText(const WebCore::String&);
     63    bool evaluate(NPObject*, const WebCore::String&scriptString, NPVariant* result);
    6364
    6465    // These return retained objects.
  • trunk/WebKit2/WebProcess/Plugins/PluginController.h

    r64304 r64377  
    2828
    2929struct NPObject;
     30typedef struct _NPVariant NPVariant;
    3031
    3132namespace WebCore {
     
    6566    virtual NPObject* pluginElementNPObject() = 0;
    6667
     68    // Evaluates the given script string in the context of the given NPObject.
     69    virtual bool evaluate(NPObject*, const WebCore::String&scriptString, NPVariant* result, bool allowPopups) = 0;
     70
    6771    // Set the statusbar text.
    6872    virtual void setStatusbarText(const WebCore::String&) = 0;
  • trunk/WebKit2/WebProcess/Plugins/PluginView.cpp

    r64365 r64377  
    637637}
    638638
     639bool PluginView::evaluate(NPObject* npObject, const String&scriptString, NPVariant* result, bool allowPopups)
     640{
     641    if (!frame())
     642        return false;
     643
     644    bool oldAllowPopups = frame()->script()->allowPopupsFromPlugin();
     645    frame()->script()->setAllowPopupsFromPlugin(allowPopups);
     646
     647    // FIXME: What happens if calling evaluate will cause the plug-in view to go away.
     648    bool returnValue = m_npRuntimeObjectMap.evaluate(npObject, scriptString, result);
     649
     650    frame()->script()->setAllowPopupsFromPlugin(oldAllowPopups);
     651
     652    return returnValue;
     653}
     654
    639655void PluginView::setStatusbarText(const String& statusbarText)
    640656{
  • trunk/WebKit2/WebProcess/Plugins/PluginView.h

    r64365 r64377  
    104104    virtual NPObject* windowScriptNPObject();
    105105    virtual NPObject* pluginElementNPObject();
     106    virtual bool evaluate(NPObject*, const WebCore::String&scriptString, NPVariant* result, bool allowPopups);
    106107    virtual void setStatusbarText(const WebCore::String&);
    107108
Note: See TracChangeset for help on using the changeset viewer.