Re: [webkit-dev] Calling JavaScript function from within DumpRenderTree
On Jan 1, 2010, at 9:25 PM, Sam Weinig wrote: That said, a more javascripty way to do this would be to pass the function object to liveRegion.addNotificationListener itself. That way, in the test file, you would have, liveRegion.addNotificationListener(function(notification) { // do stuff with notification }); In the implementation of addNotificationListener, you would save the function object off instead of saving off the string, and then call it in _accessibilityNotificationCallback. I would recommend doing it this second way. Note that with this approach you can still declare the function up front, and just pass the name, but you wouldn't pass it with a string. - Maciej ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
Re: [webkit-dev] Calling JavaScript function from within DumpRenderTree
On Jan 2, 2010, at 1:34 AM, Maciej Stachowiak wrote: On Jan 1, 2010, at 9:25 PM, Sam Weinig wrote: That said, a more javascripty way to do this would be to pass the function object to liveRegion.addNotificationListener itself. That way, in the test file, you would have, liveRegion.addNotificationListener(function(notification) { // do stuff with notification }); In the implementation of addNotificationListener, you would save the function object off instead of saving off the string, and then call it in _accessibilityNotificationCallback. I would recommend doing it this second way. Note that with this approach you can still declare the function up front, and just pass the name, but you wouldn't pass it with a string. I agree. I have it working with this method now. Thx ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
[webkit-dev] Calling JavaScript function from within DumpRenderTree
I need to have a layout test register a callback with DRT, then have that callback be called at the appropriate time (in order to test accessibility notifications) I can't figure out the right incantations to do so. I'd like to do something like this in the LayoutTest var addedNotification = liveRegion.addNotificationListener(ariaCallback); then have a function in the test like function ariaCallback(notification) { // do stuff with notification } DRT knows when to call this method, but I'm not sure how.. This is what I have so far, which does not work. // The JavaScript callback we'll use when we get a notification static JSStringRef AXNotificationFunctionCallback = 0; static void _accessibilityNotificationCallback(id element, NSString* notification) { if (!AXNotificationFunctionCallback) return; JSObjectRef function = JSObjectMakeFunction([mainFrame globalContext], NULL, 0, NULL, AXNotificationFunctionCallback, NULL, 1, NULL); JSValueRef argument = JSValueMakeString([mainFrame globalContext], JSStringCreateWithCFString((CFStringRef)notification)); JSObjectCallAsFunction([mainFrame globalContext], function, NULL, 1, argument, NULL); }___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
Re: [webkit-dev] Calling JavaScript function from within DumpRenderTree
On Fri, Jan 1, 2010 at 7:13 PM, Chris Fleizach cfleiz...@apple.com wrote: I need to have a layout test register a callback with DRT, then have that callback be called at the appropriate time (in order to test accessibility notifications) I can't figure out the right incantations to do so. I'd like to do something like this in the LayoutTest var addedNotification = liveRegion.addNotificationListener(ariaCallback); then have a function in the test like function ariaCallback(notification) { // do stuff with notification } DRT knows when to call this method, but I'm not sure how.. This is what I have so far, which does not work. // The JavaScript callback we'll use when we get a notification static JSStringRef AXNotificationFunctionCallback = 0; static void _accessibilityNotificationCallback(id element, NSString* notification) { if (!AXNotificationFunctionCallback) return; JSObjectRef function = JSObjectMakeFunction([mainFrame globalContext], NULL, 0, NULL, AXNotificationFunctionCallback, NULL, 1, NULL); JSValueRef argument = JSValueMakeString([mainFrame globalContext], JSStringCreateWithCFString((CFStringRef)notification)); JSObjectCallAsFunction([mainFrame globalContext], function, NULL, 1, argument, NULL); } What you need to do is lookup the function object on the global object. Your function would look more like: static void _accessibilityNotificationCallback(id element, NSString* notification) { if (!AXNotificationFunctionCallback) return; JSValueRef functionValue = JSObjectGetProperty([mainFrame globalContext], JSContextGetGlobalObject([mainFrame globalContext]), AXNotificationFunctionCallback, NULL); if (!JSValueIsObject(functionValue)) return; JSObjectRef functionObject = static_castJSObjectRef(functionValue); JSValueRef argument = JSValueMakeString([mainFrame globalContext], JSStringCreateWithCFString((CFStringRef)notification)); JSObjectCallAsFunction([mainFrame globalContext], function, NULL, 1, argument, NULL); } (You probably would want to add some more exception checks). That said, a more javascripty way to do this would be to pass the function object to liveRegion.addNotificationListener itself. That way, in the test file, you would have, liveRegion.addNotificationListener(function(notification) { // do stuff with notification }); In the implementation of addNotificationListener, you would save the function object off instead of saving off the string, and then call it in _accessibilityNotificationCallback. -Sam ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev