diff options
author | Viktor Engelmann <viktor.engelmann@qt.io> | 2017-02-28 12:56:42 +0100 |
---|---|---|
committer | Viktor Engelmann <viktor.engelmann@qt.io> | 2017-02-28 12:14:33 +0000 |
commit | 3f1805f8569337a21b72324d5edad329d5dfe872 (patch) | |
tree | b8f403bd9f85269ac4475b1e6c0064a646de84d7 /src/core/file_picker_controller.cpp | |
parent | 47b498b1d05a5f13e8af8241fb6df9d09a631595 (diff) |
Pass <input type="file"> result to correct RenderFrameHost
In WebContentsDelegateQt::RunFileChooser, we get a
content::RenderFrameHost*, to which chromium wants us to pass the
files that were selected. We now store that pointer in the
FilePickerController, so that we can pass the files there in
FilePickerController::filesSelectedInChooser.
The attribute content::WebContents *m_contents is no longer needed
then, because that was only used to obtain the main frame to which
the files were sent (this caused problems when the file input was
inside an iframe - we sent the result to the wrong frame in that
case, so the file input object remained blocked).
Task-number: QTBUG-59168
Change-Id: Ic2fdacb225e5a1a9e46ced6a1e4a9ff428f18a62
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'src/core/file_picker_controller.cpp')
-rw-r--r-- | src/core/file_picker_controller.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/core/file_picker_controller.cpp b/src/core/file_picker_controller.cpp index 74b097ef6..158ff7f67 100644 --- a/src/core/file_picker_controller.cpp +++ b/src/core/file_picker_controller.cpp @@ -49,18 +49,18 @@ namespace QtWebEngineCore { -FilePickerController::FilePickerController(FileChooserMode mode, content::WebContents *contents, const QString &defaultFileName, const QStringList &acceptedMimeTypes, QObject *parent) +FilePickerController::FilePickerController(FileChooserMode mode, content::RenderFrameHost *frameHost, const QString &defaultFileName, const QStringList &acceptedMimeTypes, QObject *parent) : QObject(parent) , m_defaultFileName(defaultFileName) , m_acceptedMimeTypes(acceptedMimeTypes) - , m_contents(contents) + , m_frameHost(frameHost) , m_mode(mode) { } void FilePickerController::accepted(const QStringList &files) { - FilePickerController::filesSelectedInChooser(files, m_contents); + FilePickerController::filesSelectedInChooser(files, m_frameHost); } void FilePickerController::accepted(const QVariant &files) @@ -76,12 +76,12 @@ void FilePickerController::accepted(const QVariant &files) qWarning("An unhandled type '%s' was provided in FilePickerController::accepted(QVariant)", files.typeName()); } - FilePickerController::filesSelectedInChooser(stringList, m_contents); + FilePickerController::filesSelectedInChooser(stringList, m_frameHost); } void FilePickerController::rejected() { - FilePickerController::filesSelectedInChooser(QStringList(), m_contents); + FilePickerController::filesSelectedInChooser(QStringList(), m_frameHost); } static QStringList listRecursively(const QDir &dir) @@ -103,15 +103,14 @@ ASSERT_ENUMS_MATCH(FilePickerController::OpenMultiple, content::FileChooserParam ASSERT_ENUMS_MATCH(FilePickerController::UploadFolder, content::FileChooserParams::UploadFolder) ASSERT_ENUMS_MATCH(FilePickerController::Save, content::FileChooserParams::Save) -void FilePickerController::filesSelectedInChooser(const QStringList &filesList, content::WebContents *contents) +void FilePickerController::filesSelectedInChooser(const QStringList &filesList, content::RenderFrameHost *frameHost) { - content::RenderViewHost *rvh = contents->GetRenderViewHost(); - Q_ASSERT(rvh); + Q_ASSERT(frameHost); QStringList files(filesList); if (this->m_mode == UploadFolder && !filesList.isEmpty() && QFileInfo(filesList.first()).isDir()) // Enumerate the directory files = listRecursively(QDir(filesList.first())); - rvh->GetMainFrame()->FilesSelectedInChooser(toVector<content::FileChooserFileInfo>(files), static_cast<content::FileChooserParams::Mode>(this->m_mode)); + frameHost->FilesSelectedInChooser(toVector<content::FileChooserFileInfo>(files), static_cast<content::FileChooserParams::Mode>(this->m_mode)); } QStringList FilePickerController::acceptedMimeTypes() const |