Changeset 64246 in webkit


Ignore:
Timestamp:
Jul 28, 2010 5:14:08 PM (14 years ago)
Author:
andersca@apple.com
Message:

Implement NPN_InvokeDefault and NPN_Construct
https://bugs.webkit.org/show_bug.cgi?id=43160

Reviewed by Sam Weinig.

WebKit2:

  • WebProcess/Plugins/NPJSObject.cpp:

(WebKit::NPJSObject::invoke):
Just call invoke directly.

(WebKit::NPJSObject::invokeDefault):
Call invoke.

(WebKit::NPJSObject::construct):
Implement this.

(WebKit::NPJSObject::invoke):
Add new invoke overload that takes the function as a JSValue.

(WebKit::NPJSObject::npClass):
Add NP_Construct.

(WebKit::NPJSObject::NP_InvokeDefault):
Call NPJSObject::invokeDefault.

(WebKit::NPJSObject::NP_Construct):
Call NPJSObject::construct.

  • WebProcess/Plugins/NPJSObject.h:
  • WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:

(WebKit::NPN_GetValue):
Handle the Core Animation drawing model and the Carbon event model.

(WebKit::NPN_InvokeDefault):
Call the NPClass::invokeDefault function.

(WebKit::NPN_Construct):
Call the NPClass::construct function.

LayoutTests:

  • platform/mac-wk2/Skipped:

Remove plugins/npruntime/invoke-default.html

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r64244 r64246  
     12010-07-28  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Implement NPN_InvokeDefault and NPN_Construct
     6        https://bugs.webkit.org/show_bug.cgi?id=43160
     7
     8        * platform/mac-wk2/Skipped:
     9        Remove plugins/npruntime/invoke-default.html
     10
    1112010-07-28  Tony Chang  <tony@chromium.org>
    212
  • trunk/LayoutTests/platform/mac-wk2/Skipped

    r64244 r64246  
    14151415plugins/npruntime/enumerate.html
    14161416plugins/npruntime/get-property-return-value.html
    1417 plugins/npruntime/invoke-default.html
    14181417plugins/npruntime/npruntime.html
    14191418plugins/npruntime/round-trip-npobject.html
  • trunk/WebKit2/ChangeLog

    r64244 r64246  
     12010-07-28  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Implement NPN_InvokeDefault and NPN_Construct
     6        https://bugs.webkit.org/show_bug.cgi?id=43160
     7
     8        * WebProcess/Plugins/NPJSObject.cpp:
     9        (WebKit::NPJSObject::invoke):
     10        Just call invoke directly.
     11
     12        (WebKit::NPJSObject::invokeDefault):
     13        Call invoke.
     14
     15        (WebKit::NPJSObject::construct):
     16        Implement this.
     17
     18        (WebKit::NPJSObject::invoke):
     19        Add new invoke overload that takes the function as a JSValue.
     20
     21        (WebKit::NPJSObject::npClass):
     22        Add NP_Construct.
     23
     24        (WebKit::NPJSObject::NP_InvokeDefault):
     25        Call NPJSObject::invokeDefault.
     26
     27        (WebKit::NPJSObject::NP_Construct):
     28        Call NPJSObject::construct.
     29
     30        * WebProcess/Plugins/NPJSObject.h:
     31        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
     32        (WebKit::NPN_GetValue):
     33        Handle the Core Animation drawing model and the Carbon event model.
     34
     35        (WebKit::NPN_InvokeDefault):
     36        Call the NPClass::invokeDefault function.
     37
     38        (WebKit::NPN_Construct):
     39        Call the NPClass::construct function.
     40
    1412010-07-28  Anders Carlsson  <andersca@apple.com>
    242
  • trunk/WebKit2/WebProcess/Plugins/NPJSObject.cpp

    r64244 r64246  
    117117
    118118    JSValue function = m_jsObject->get(exec, identifierFromIdentifierRep(exec, identifierRep));
    119     CallData callData;
    120     CallType callType = getCallData(function, callData);
    121     if (callType == CallTypeNone)
    122         return false;
    123 
    124     // Convert the passed in arguments.
    125     MarkedArgumentBuffer argumentList;
    126     for (uint32_t i = 0; i < argumentCount; ++i)
    127         argumentList.append(m_objectMap->convertNPVariantToJSValue(exec, arguments[i]));
    128 
    129     exec->globalData().timeoutChecker.start();
    130     JSValue value = JSC::call(exec, function, callType, callData, m_jsObject, argumentList);
    131     exec->globalData().timeoutChecker.stop();
    132 
    133     // Convert and return the result of the function call.
    134     m_objectMap->convertJSValueToNPVariant(exec, value, *result);
    135     exec->clearException();
    136    
    137     return true;
     119    return invoke(exec, function, arguments, argumentCount, result);
     120}
     121
     122bool NPJSObject::invokeDefault(const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
     123{
     124    ExecState* exec = m_objectMap->globalExec();
     125    if (!exec)
     126        return false;
     127
     128    JSLock lock(SilenceAssertionsOnly);
     129
     130    JSValue function = m_jsObject;
     131    return invoke(exec, function, arguments, argumentCount, result);
    138132}
    139133
     
    175169    m_objectMap->convertJSValueToNPVariant(exec, jsResult, *result);
    176170    exec->clearException();
     171    return true;
     172}
     173
     174bool NPJSObject::construct(const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
     175{
     176    ExecState* exec = m_objectMap->globalExec();
     177    if (!exec)
     178        return false;
     179
     180    JSLock lock(SilenceAssertionsOnly);
     181
     182    ConstructData constructData;
     183    ConstructType constructType = getConstructData(m_jsObject, constructData);
     184    if (constructType == ConstructTypeNone)
     185        return false;
     186
     187    // Convert the passed in arguments.
     188    MarkedArgumentBuffer argumentList;
     189    for (uint32_t i = 0; i < argumentCount; ++i)
     190        argumentList.append(m_objectMap->convertNPVariantToJSValue(exec, arguments[i]));
     191
     192    exec->globalData().timeoutChecker.start();
     193    JSValue value = JSC::construct(exec, m_jsObject, constructType, constructData, argumentList);
     194    exec->globalData().timeoutChecker.stop();
     195   
     196    // Convert and return the new object.
     197    m_objectMap->convertJSValueToNPVariant(exec, value, *result);
     198    exec->clearException();
     199
     200    return true;
     201}
     202
     203bool NPJSObject::invoke(ExecState* exec, JSValue function, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
     204{
     205    CallData callData;
     206    CallType callType = getCallData(function, callData);
     207    if (callType == CallTypeNone)
     208        return false;
     209
     210    // Convert the passed in arguments.
     211    MarkedArgumentBuffer argumentList;
     212    for (uint32_t i = 0; i < argumentCount; ++i)
     213        argumentList.append(m_objectMap->convertNPVariantToJSValue(exec, arguments[i]));
     214
     215    exec->globalData().timeoutChecker.start();
     216    JSValue value = JSC::call(exec, function, callType, callData, m_jsObject, argumentList);
     217    exec->globalData().timeoutChecker.stop();
     218
     219    // Convert and return the result of the function call.
     220    m_objectMap->convertJSValueToNPVariant(exec, value, *result);
     221    exec->clearException();
     222   
    177223    return true;
    178224}
     
    193239        0,
    194240        0,
    195         0
     241        NP_Construct
    196242    };
    197243
     
    222268}
    223269   
    224 bool NPJSObject::NP_InvokeDefault(NPObject*, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
     270bool NPJSObject::NP_InvokeDefault(NPObject* npObject, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
     271{
     272    return toNPJSObject(npObject)->invokeDefault(arguments, argumentCount, result);
     273}
     274   
     275bool NPJSObject::NP_HasProperty(NPObject* npObject, NPIdentifier propertyName)
     276{
     277    return toNPJSObject(npObject)->hasProperty(propertyName);
     278}
     279
     280bool NPJSObject::NP_GetProperty(NPObject* npObject, NPIdentifier propertyName, NPVariant* result)
     281{
     282    return toNPJSObject(npObject)->getProperty(propertyName, result);
     283}
     284
     285bool NPJSObject::NP_SetProperty(NPObject*, NPIdentifier propertyName, const NPVariant* value)
    225286{
    226287    notImplemented();
    227288    return false;
    228289}
    229    
    230 bool NPJSObject::NP_HasProperty(NPObject* npObject, NPIdentifier propertyName)
    231 {
    232     return toNPJSObject(npObject)->hasProperty(propertyName);
    233 }
    234 
    235 bool NPJSObject::NP_GetProperty(NPObject* npObject, NPIdentifier propertyName, NPVariant* result)
    236 {
    237     return toNPJSObject(npObject)->getProperty(propertyName, result);
    238 }
    239 
    240 bool NPJSObject::NP_SetProperty(NPObject*, NPIdentifier propertyName, const NPVariant* value)
    241 {
    242     notImplemented();
    243     return false;
    244 }
    245 
     290
     291bool NPJSObject::NP_Construct(NPObject* npObject, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
     292{
     293    return toNPJSObject(npObject)->construct(arguments, argumentCount, result);
     294}
     295   
    246296} // namespace WebKit
  • trunk/WebKit2/WebProcess/Plugins/NPJSObject.h

    r64244 r64246  
    6161
    6262    bool hasMethod(NPIdentifier methodName);
    63     bool invoke(NPIdentifier methodName, const NPVariant *arguments, uint32_t argumentCount, NPVariant *result);
     63    bool invoke(NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
     64    bool invokeDefault(const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
    6465    bool hasProperty(NPIdentifier propertyName);
    6566    bool getProperty(NPIdentifier propertyName, NPVariant* result);
     67    bool construct(const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
     68
     69    bool invoke(JSC::ExecState*, JSC::JSValue function, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
    6670
    6771    static NPClass* npClass();
     
    6973    static void NP_Deallocate(NPObject*);
    7074    static bool NP_HasMethod(NPObject*, NPIdentifier methodName);
    71     static bool NP_Invoke(NPObject*, NPIdentifier methodName, const NPVariant *arguments, uint32_t argumentCount, NPVariant *result);
    72     static bool NP_InvokeDefault(NPObject*, const NPVariant *arguments, uint32_t argumentCount, NPVariant *result);
     75    static bool NP_Invoke(NPObject*, NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
     76    static bool NP_InvokeDefault(NPObject*, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
    7377    static bool NP_HasProperty(NPObject*, NPIdentifier propertyName);
    7478    static bool NP_GetProperty(NPObject*, NPIdentifier propertyName, NPVariant* result);
    7579    static bool NP_SetProperty(NPObject*, NPIdentifier propertyName, const NPVariant* value);
     80    static bool NP_Construct(NPObject*, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
    7681   
    7782    NPRuntimeObjectMap* m_objectMap;
  • trunk/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp

    r64244 r64246  
    408408        case NPNVsupportsCoreGraphicsBool:
    409409            // Always claim to support the Core Graphics drawing model.
    410             *(NPBool *)value = true;
     410            *(NPBool*)value = true;
     411            break;
     412
     413        case NPNVsupportsCoreAnimationBool:
     414            // FIXME: We should support the Core Animation drawing model.
     415            *(NPBool*)value = false;
    411416            break;
    412417
    413418        case NPNVsupportsCocoaBool:
    414419            // Always claim to support the Cocoa event model.
    415             *(NPBool *)value = true;
     420            *(NPBool*)value = true;
     421            break;
     422
     423       case NPNVsupportsCarbonBool:
     424            // FIXME: We should support the Carbon event model.
     425            *(NPBool*)value = false;
    416426            break;
    417427#endif
     
    539549}
    540550
    541 static bool NPN_InvokeDefault(NPP npp, NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result)
    542 {
    543     notImplemented();
     551static bool NPN_InvokeDefault(NPP, NPObject *npObject, const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
     552{
     553    if (npObject->_class->invokeDefault)
     554        return npObject->_class->invokeDefault(npObject, arguments, argumentCount, result);
     555
    544556    return false;
    545557}
     
    621633}
    622634
    623 static bool NPN_Construct(NPP npp, NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result)
    624 {
    625     notImplemented();
     635static bool NPN_Construct(NPP, NPObject* npObject, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
     636{
     637    if (NP_CLASS_STRUCT_VERSION_HAS_CTOR(npObject->_class) && npObject->_class->construct)
     638        return npObject->_class->construct(npObject, arguments, argumentCount, result);
     639
    626640    return false;
    627641}
Note: See TracChangeset for help on using the changeset viewer.