Re: [webkit-dev] Calling JavaScript function from within DumpRenderTree

2010-01-02 Thread Maciej Stachowiak


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

2010-01-02 Thread Chris Fleizach

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

2010-01-01 Thread Chris Fleizach
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

2010-01-01 Thread Sam Weinig
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