Changeset 49796 in webkit
- Timestamp:
- Oct 19, 2009 11:50:26 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r49794 r49796 1 2009-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 1 13 2009-10-16 Stephen White <senorblanco@chromium.org> 2 14 -
trunk/WebCore/ChangeLog
r49794 r49796 1 2009-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 1 19 2009-10-16 Stephen White <senorblanco@chromium.org> 2 20 -
trunk/WebCore/bindings/v8/V8NPObject.cpp
r47021 r49796 94 94 VOID_TO_NPVARIANT(result); 95 95 96 bool retval = true; 96 97 switch (functionId) { 97 98 case InvokeMethod: … … 99 100 v8::Handle<v8::String> functionName(v8::String::Cast(*args.Data())); 100 101 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); 102 103 } 103 104 break; 104 105 case InvokeConstruct: 105 106 if (npObject->_class->construct) 106 npObject->_class->construct(npObject, npArgs.get(), numArgs, &result);107 retval = npObject->_class->construct(npObject, npArgs.get(), numArgs, &result); 107 108 break; 108 109 case InvokeDefault: 109 110 if (npObject->_class->invokeDefault) 110 npObject->_class->invokeDefault(npObject, npArgs.get(), numArgs, &result);111 retval = npObject->_class->invokeDefault(npObject, npArgs.get(), numArgs, &result); 111 112 break; 112 113 default: 113 114 break; 114 115 } 116 117 if (!retval) 118 throwError("Error calling method on NPObject!", V8Proxy::GeneralError); 115 119 116 120 for (int i=0; i < numArgs; i++) -
trunk/WebCore/bridge/c/c_instance.cpp
r46431 r49796 122 122 123 123 // Invoke the 'C' method. 124 bool retval = true; 124 125 NPVariant resultVariant; 125 126 VOID_TO_NPVARIANT(resultVariant); … … 128 129 JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly); 129 130 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!"); 133 137 134 138 for (i = 0; i < count; i++) … … 154 158 155 159 // Invoke the 'C' method. 160 bool retval = true; 156 161 NPVariant resultVariant; 157 162 VOID_TO_NPVARIANT(resultVariant); … … 159 164 JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly); 160 165 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!"); 164 172 165 173 for (i = 0; i < count; i++) … … 189 197 190 198 // Invoke the 'C' method. 199 bool retval = true; 191 200 NPVariant resultVariant; 192 201 VOID_TO_NPVARIANT(resultVariant); … … 194 203 JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly); 195 204 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!"); 199 211 200 212 for (i = 0; i < count; i++) -
trunk/WebKitTools/ChangeLog
r49791 r49796 1 2009-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 1 14 2009-10-19 Zan Dobersek <zandobersek@gmail.com> 2 15 -
trunk/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp
r49512 r49796 151 151 ID_TEST_CONSTRUCT, 152 152 ID_TEST_THROW_EXCEPTION_METHOD, 153 ID_TEST_FAIL_METHOD, 153 154 ID_DESTROY_NULL_STREAM, 154 155 NUM_METHOD_IDENTIFIERS … … 176 177 "testConstruct", 177 178 "testThrowException", 179 "testFail", 178 180 "destroyNullStream" 179 181 }; … … 324 326 { 325 327 if (argCount != 1) 326 return false;328 return true; 327 329 NPIdentifier identifier = variantToIdentifier(args[0]); 328 330 if (!identifier) 329 return false;331 return true; 330 332 NPUTF8* utf8String = browser->utf8fromidentifier(identifier); 331 333 if (!utf8String) 332 return false;334 return true; 333 335 STRINGZ_TO_NPVARIANT(utf8String, *result); 334 336 return true; … … 684 686 browser->setexception(header, "plugin object testThrowException SUCCESS"); 685 687 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); 686 692 } else if (name == pluginMethodIdentifiers[ID_DESTROY_NULL_STREAM]) 687 693 return destroyNullStream(plugin, args, argCount, result);
Note: See TracChangeset
for help on using the changeset viewer.