On May 19, 2010, at 3:00 PM, Prasad Tammana wrote:

> I'm trying to add support for testing scenarios in the presence of modal 
> dialogs to DumpRenderTree (DRT) and I'm running into an apparent limitation 
> of WebKit support for showModalDialog JavaScript function.  Here is what I'm 
> trying to do:
> 
> 1) I added webViewRunModal function to DRT's UIDelegate implementation and 
> invoked runModalForWindow from it.
> 2) I added an observer for NSWindowWillCloseNotification and invoked 
> abortModal from it.
> 
> The issue I'm running into is that the observer is not getting invoked.  This 
> is what I figured after debugging:
> 1) window.close on the modal dialog  ends up in 
> WebChromeClient::closeWindowSoon()
> 2) This calls [m_webView performSelector:@selector(_closeWindow) 
> withObject:nil afterDelay:0.0];
> 
> As per documentation, performSelector afterDelay sets a timer that'll only 
> run in NSDefaultRunLoopMode, whereas the runModal sets the loop to be in 
> NSModalPanelRunLoopMode and that message never gets dispatch and close() 
> never gets called.
> 
> The only work-around I can come up with is to add an abortModal() method to 
> LayoutTestController and make it available to JavaScript.  Is that what the 
> WebKit apps are expected to do to support showModalDialog()?  Or is there 
> some other hook that I'm missing to make this work?

DumpRenderTree can subclass NSApplication and do this:

- (NSEvent *)nextEventMatchingMask:(NSUInteger)mask untilDate:(NSDate 
*)expiration inMode:(NSString *)mode dequeue:(BOOL)dequeue
{
    if (mode == NSModalPanelRunLoopMode)
        mode = NSDefaultRunLoopMode;
    return [super nextEventMatchingMask:mask untilDate:expiration inMode:mode 
dequeue:dequeue];
}

As far as the broader question is concerned abut other applications, not sure 
of the answer.

    -- Darin

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to