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
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev