Changeset 49796 in webkit


Ignore:
Timestamp:
Oct 19, 2009 11:50:26 AM (14 years ago)
Author:
eric@webkit.org
Message:

2009-10-19 Nate Chapin <Nate Chapin>

Reviewed by Adam Barth.

Test that the proper exception is thrown into JS when a plugin
invoke call returns false.

https://bugs.webkit.org/show_bug.cgi?id=30239

  • plugins/netscape-invoke-failure-expected.txt: Added.
  • plugins/netscape-invoke-failure.html: Added.

2009-10-19 Nate Chapin <Nate Chapin>

Reviewed by Adam Barth.

If a call to a plugin's invokeMethod, invokeDefault or construct
returns false, throw an exception into JS.

https://bugs.webkit.org/show_bug.cgi?id=30239

Test: plugins/netscape-invoke-failure.html

  • bindings/v8/V8NPObject.cpp: Check return values of invokeMethod, invokeDefault and construct. (npObjectInvokeImpl):
  • bridge/c/c_instance.cpp: (JSC::Bindings::CInstance::invokeMethod): Check return value (JSC::Bindings::CInstance::invokeDefaultMethod): Check return value (JSC::Bindings::CInstance::invokeConstruct): Check return value

2009-10-19 Nate Chapin <Nate Chapin>

Reviewed by Adam Barth.

Add testFail() to test plugin so we can test our handling of a
plugin invoke call returning false.

https://bugs.webkit.org/show_bug.cgi?id=30239

  • DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Add testFail(). (pluginInvoke): (testIdentifierToString): Always return true, since returning false will now cause an exception to be thrown.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r49794 r49796  
     12009-10-19  Nate Chapin  <japhet@chromium.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        Test that the proper exception is thrown into JS when a plugin
     6        invoke call returns false.
     7
     8        https://bugs.webkit.org/show_bug.cgi?id=30239
     9
     10        * plugins/netscape-invoke-failure-expected.txt: Added.
     11        * plugins/netscape-invoke-failure.html: Added.
     12
    1132009-10-16  Stephen White  <senorblanco@chromium.org>
    214
  • trunk/WebCore/ChangeLog

    r49794 r49796  
     12009-10-19  Nate Chapin  <japhet@chromium.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        If a call to a plugin's invokeMethod, invokeDefault or construct
     6        returns false, throw an exception into JS.       
     7
     8        https://bugs.webkit.org/show_bug.cgi?id=30239
     9
     10        Test: plugins/netscape-invoke-failure.html
     11
     12        * bindings/v8/V8NPObject.cpp: Check return values of invokeMethod, invokeDefault and construct.
     13        (npObjectInvokeImpl):
     14        * bridge/c/c_instance.cpp:
     15        (JSC::Bindings::CInstance::invokeMethod): Check return value
     16        (JSC::Bindings::CInstance::invokeDefaultMethod): Check return value
     17        (JSC::Bindings::CInstance::invokeConstruct): Check return value
     18
    1192009-10-16  Stephen White  <senorblanco@chromium.org>
    220
  • trunk/WebCore/bindings/v8/V8NPObject.cpp

    r47021 r49796  
    9494    VOID_TO_NPVARIANT(result);
    9595
     96    bool retval = true;
    9697    switch (functionId) {
    9798    case InvokeMethod:
     
    99100            v8::Handle<v8::String> functionName(v8::String::Cast(*args.Data()));
    100101            NPIdentifier identifier = getStringIdentifier(functionName);
    101             npObject->_class->invoke(npObject, identifier, npArgs.get(), numArgs, &result);
     102            retval = npObject->_class->invoke(npObject, identifier, npArgs.get(), numArgs, &result);
    102103        }
    103104        break;
    104105    case InvokeConstruct:
    105106        if (npObject->_class->construct)
    106             npObject->_class->construct(npObject, npArgs.get(), numArgs, &result);
     107            retval = npObject->_class->construct(npObject, npArgs.get(), numArgs, &result);
    107108        break;
    108109    case InvokeDefault:
    109110        if (npObject->_class->invokeDefault)
    110             npObject->_class->invokeDefault(npObject, npArgs.get(), numArgs, &result);
     111            retval = npObject->_class->invokeDefault(npObject, npArgs.get(), numArgs, &result);
    111112        break;
    112113    default:
    113114        break;
    114115    }
     116
     117    if (!retval)
     118        throwError("Error calling method on NPObject!", V8Proxy::GeneralError);
    115119
    116120    for (int i=0; i < numArgs; i++)
  • trunk/WebCore/bridge/c/c_instance.cpp

    r46431 r49796  
    122122
    123123    // Invoke the 'C' method.
     124    bool retval = true;
    124125    NPVariant resultVariant;
    125126    VOID_TO_NPVARIANT(resultVariant);
     
    128129        JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
    129130        ASSERT(globalExceptionString().isNull());
    130         _object->_class->invoke(_object, ident, cArgs.data(), count, &resultVariant);
    131         moveGlobalExceptionToExecState(exec);
    132     }
     131        retval = _object->_class->invoke(_object, ident, cArgs.data(), count, &resultVariant);
     132        moveGlobalExceptionToExecState(exec);
     133    }
     134   
     135    if (!retval)
     136        throwError(exec, GeneralError, "Error calling method on NPObject!");
    133137
    134138    for (i = 0; i < count; i++)
     
    154158
    155159    // Invoke the 'C' method.
     160    bool retval = true;
    156161    NPVariant resultVariant;
    157162    VOID_TO_NPVARIANT(resultVariant);
     
    159164        JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
    160165        ASSERT(globalExceptionString().isNull());
    161         _object->_class->invokeDefault(_object, cArgs.data(), count, &resultVariant);
    162         moveGlobalExceptionToExecState(exec);
    163     }
     166        retval = _object->_class->invokeDefault(_object, cArgs.data(), count, &resultVariant);
     167        moveGlobalExceptionToExecState(exec);
     168    }
     169   
     170    if (!retval)
     171        throwError(exec, GeneralError, "Error calling method on NPObject!");
    164172
    165173    for (i = 0; i < count; i++)
     
    189197
    190198    // Invoke the 'C' method.
     199    bool retval = true;
    191200    NPVariant resultVariant;
    192201    VOID_TO_NPVARIANT(resultVariant);
     
    194203        JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
    195204        ASSERT(globalExceptionString().isNull());
    196         _object->_class->construct(_object, cArgs.data(), count, &resultVariant);
    197         moveGlobalExceptionToExecState(exec);
    198     }
     205        retval = _object->_class->construct(_object, cArgs.data(), count, &resultVariant);
     206        moveGlobalExceptionToExecState(exec);
     207    }
     208   
     209    if (!retval)
     210        throwError(exec, GeneralError, "Error calling method on NPObject!");
    199211
    200212    for (i = 0; i < count; i++)
  • trunk/WebKitTools/ChangeLog

    r49791 r49796  
     12009-10-19  Nate Chapin  <japhet@chromium.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        Add testFail() to test plugin so we can test our handling of a
     6        plugin invoke call returning false.
     7
     8        https://bugs.webkit.org/show_bug.cgi?id=30239
     9
     10        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Add testFail().
     11        (pluginInvoke):
     12        (testIdentifierToString): Always return true, since returning false will now cause an exception to be thrown.
     13
    1142009-10-19  Zan Dobersek  <zandobersek@gmail.com>
    215
  • trunk/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp

    r49512 r49796  
    151151    ID_TEST_CONSTRUCT,
    152152    ID_TEST_THROW_EXCEPTION_METHOD,
     153    ID_TEST_FAIL_METHOD,
    153154    ID_DESTROY_NULL_STREAM,
    154155    NUM_METHOD_IDENTIFIERS
     
    176177    "testConstruct",
    177178    "testThrowException",
     179    "testFail",
    178180    "destroyNullStream"
    179181};
     
    324326{
    325327    if (argCount != 1)
    326         return false;
     328        return true;
    327329    NPIdentifier identifier = variantToIdentifier(args[0]);
    328330    if (!identifier)
    329         return false;
     331        return true;
    330332    NPUTF8* utf8String = browser->utf8fromidentifier(identifier);
    331333    if (!utf8String)
    332         return false;
     334        return true;
    333335    STRINGZ_TO_NPVARIANT(utf8String, *result);
    334336    return true;
     
    684686        browser->setexception(header, "plugin object testThrowException SUCCESS");
    685687        return true;
     688    } else if (name == pluginMethodIdentifiers[ID_TEST_FAIL_METHOD]) {
     689        NPObject* windowScriptObject;
     690        browser->getvalue(plugin->npp, NPNVWindowNPObject, &windowScriptObject);
     691        browser->invoke(plugin->npp, windowScriptObject, name, args, argCount, result);
    686692    } else if (name == pluginMethodIdentifiers[ID_DESTROY_NULL_STREAM])
    687693        return destroyNullStream(plugin, args, argCount, result);
Note: See TracChangeset for help on using the changeset viewer.