Hi,

The DesktopWebView QML element has an API that corresponds to the 
ChromeClient's decidePolicyForNavigationAction (and work is under way in bug 
#69572 to implement the same API for the touch webview). The API is currently 
structured like this:

DesktopWebView {

    function navigationPolicyForUrl(url, button, modifiers) {
        // Make decision here
    }

}

I'd like to change this API for four reasons:

1) The double-mentioning of url in  *PolicyForUrl(url looks strange :)

2) It is only possible for instances for the QML element to decide on the 
policy.

3) The API is synchronous, while the underlying implementation in 
WebKit2/ChromeClient is asynchronous. So while the engine can do it, our API 
forces the application to make a synchronous decision.

4) Only the magical presence of the function with the right name makes it 
possible for applications to decide on the policy. Qt Creator cannot provide 
any assistance in terms of completion.


I'd like to propose the following alternative API instead, that addresses all 
four points:

The WebView component gets a signal navigationRequested (naturally the name is 
just a proposal) that provides a "NavigationRequest" object (that internally 
wraps a WKFramePolicyListenerRef) and which provides corresponding 
methods/slots for use/download/ignore. This changes the usage to the following 
pattern:

DesktopWebView {
    id: view

}

Connections {
    target: view
    onNavigationRequested: {
         // ...
         request.accept();
    }
}

Note how the decision can be made anywhere in QML, it is up to the application 
whether to respond synchronously or asynchronously and Qt Creator offers signal 
completion for the signal when typing.


What do you think?

Simon
_______________________________________________
webkit-qt mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-qt

Reply via email to