diff options
author | Joerg Bornemann <joerg.bornemann@theqtcompany.com> | 2015-06-25 15:07:49 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@theqtcompany.com> | 2015-06-25 15:37:29 +0000 |
commit | dd78b4c3d9673b12eb3006140b80056273d4a815 (patch) | |
tree | a13e50d824414a84ff5959468df21be2e5ea88de /src/webenginewidgets/api | |
parent | 47e1ba58ef33ae7a22f122d240aa935d8211046c (diff) |
Fix cancellation of file dialogs.
When the user canceled a file dialog (e.g. provided by an input tag),
then the renderer process would exit and the web page would turn
blank.
We must not pass empty strings or otherwise invalid file paths to
RenderViewHost::FilesSelectedInChooser, because OnUpdateState will
check for accessibility of those files and shutdown the renderer
on failure.
Task-number: QTBUG-46869
Change-Id: Ie01e56999c5e7acd42c5b3fd4993de7f3a5f2e73
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Diffstat (limited to 'src/webenginewidgets/api')
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 1b5a243df..6207a2b30 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -1050,20 +1050,27 @@ QStringList QWebEnginePage::chooseFiles(FileSelectionMode mode, const QStringLis // can work with) and mimetypes ranging from text/plain or images/* to application/vnd.openxmlformats-officedocument.spreadsheetml.sheet Q_UNUSED(acceptedMimeTypes); QStringList ret; + QString str; switch (static_cast<WebContentsAdapterClient::FileChooserMode>(mode)) { case WebContentsAdapterClient::OpenMultiple: ret = QFileDialog::getOpenFileNames(view(), QString()); break; // Chromium extension, not exposed as part of the public API for now. case WebContentsAdapterClient::UploadFolder: - ret << QFileDialog::getExistingDirectory(view(), tr("Select folder to upload")) + QLatin1Char('/'); + str = QFileDialog::getExistingDirectory(view(), tr("Select folder to upload")) + QLatin1Char('/'); + if (!str.isNull()) + ret << str; break; case WebContentsAdapterClient::Save: - ret << QFileDialog::getSaveFileName(view(), QString(), (QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + oldFiles.first())); + str = QFileDialog::getSaveFileName(view(), QString(), (QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + oldFiles.first())); + if (!str.isNull()) + ret << str; break; default: case WebContentsAdapterClient::Open: - ret << QFileDialog::getOpenFileName(view(), QString(), oldFiles.first()); + str = QFileDialog::getOpenFileName(view(), QString(), oldFiles.first()); + if (!str.isNull()) + ret << str; break; } return ret; |