Hello to everyone, I'm working on making QWebEngine work correctly in Konqueror when downloading files (although I didn't have much time to spend on this in the last months).
The problem is that instead of downloading the correct files, in some cases Konqueror download html files. This only happens from sites requiring authentication (I first noticed when trying to download a file from my bank's web page); besides, it only happens if I try to use KIO for the download, for example calling KIO::copy from a slot connected with QWebEngineProfile::downloadRequested. The file downloads correctly if Konqueror downloads it using the mechanism provided by QWebEngine, that is calling QWebEngineDownloaditem::accept. I believe that the issue is caused by cookies, and in particular by the fact that QWebEngine doesn't share its cookies with KIO so that, when KIO attempts to download the file, it doesn't have the cookie(s) associated with the session opened in the browser and the web page refuses to let it download the file (indeed, one of the sites where this happens returned a login page instead of the PDF I wanted to download). Looking at the documentation both for QWebEngine and for KIO regarding cookies. I found out two classes: * on QWebEngine's side, there's QWebEngineCookieStore, which provides signals emitted whenever a cookie is added or removed and which, according to documentation [1], "can be used to synchronize cookies of Chromium and the QNetworkAccessManager" * on KIO's side, there's KIO::Integration::AccessManager, which derives from QNetworkAccessManager and which should work along QWebEngineCookieStore. The example in the documentation for KIO::Integration::AccessManager refers to QWebView and says to call QWebPage::setNetworkAccessManager to have the QWebView and KIO to use the same access manager. Unfortunately, QWebEngine can't be integrated with a QNetworkAccessManager: not only QWebEnginePage doesn't have a setNetworkAccessManager method, but the documentation for QWebEngine explicitly says that it doesn't use QNetworkAccess. Because of this, I thought to do things the other way round: I created a KIO::Integration::AccessManager and, used slots connected with QWebEngineCookieStore signals, to add cookies to it. Unfortunately, this doesn't fix the issue. I believe this is because I haven't told KIO to use the new access manager. The problem is that I can see any way to do it. Does anyone have suggestions on how to do this? Thanks Stefano [1] http://doc.qt.io/qt-5/qwebenginecookiestore.html#details