diff options
-rw-r--r-- | src/core/file_picker_controller.cpp | 8 | ||||
-rw-r--r-- | tests/auto/quick/qmltests2/data/tst_filePicker.qml | 15 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/core/file_picker_controller.cpp b/src/core/file_picker_controller.cpp index 4b0576465..22c18ec6f 100644 --- a/src/core/file_picker_controller.cpp +++ b/src/core/file_picker_controller.cpp @@ -194,9 +194,13 @@ ASSERT_ENUMS_MATCH(FilePickerController::Save, blink::mojom::FileChooserParams_M void FilePickerController::filesSelectedInChooser(const QStringList &filesList) { QStringList files(filesList); + base::FilePath baseDir; if (d_ptr->mode == UploadFolder && !filesList.isEmpty() - && QFileInfo(filesList.first()).isDir()) // Enumerate the directory + && QFileInfo(filesList.first()).isDir()) { + // Enumerate the directory files = listRecursively(QDir(filesList.first())); + baseDir = toFilePath(filesList.first()); + } std::vector<blink::mojom::FileChooserFileInfoPtr> chooser_files; for (const auto &file : qAsConst(files)) { @@ -208,7 +212,7 @@ void FilePickerController::filesSelectedInChooser(const QStringList &filesList) d_ptr->listener->FileSelectionCanceled(); else d_ptr->listener->FileSelected(std::move(chooser_files), - /* FIXME? */ base::FilePath(), + baseDir, static_cast<blink::mojom::FileChooserParams::Mode>(d_ptr->mode)); } diff --git a/tests/auto/quick/qmltests2/data/tst_filePicker.qml b/tests/auto/quick/qmltests2/data/tst_filePicker.qml index 26d74e2d3..5b963c7bf 100644 --- a/tests/auto/quick/qmltests2/data/tst_filePicker.qml +++ b/tests/auto/quick/qmltests2/data/tst_filePicker.qml @@ -157,6 +157,16 @@ TestWebEngineView { webEngineView.url = Qt.resolvedUrl("directoryupload.html") verify(webEngineView.waitForLoadSucceeded()) + webEngineView.runJavaScript( + "let relativePathCount = 0;" + + "document.getElementById('upfile').addEventListener('change', function(event) {" + + " let files = event.target.files;" + + " for (let i = 0; i < files.length; i++) {" + + " if (files[i].webkitRelativePath != '')" + + " relativePathCount++;" + + " }" + + "}, false);") + FilePickerParams.selectFiles = true FilePickerParams.selectedFilesUrl.push(Qt.resolvedUrl("../data")) @@ -164,6 +174,11 @@ TestWebEngineView { tryCompare(FilePickerParams, "filePickerOpened", true) // Check that the title is a file list (eg. "test1.html,test2.html") tryVerify(function() { return webEngineView.title.match("^([^,]+,)+[^,]+$"); }) + + var relativePathCount = 0; + runJavaScript("relativePathCount", function(result) { relativePathCount = result; }); + // The number of files in data directory may vary + tryVerify(function() { return relativePathCount > 0; }); } function test_reject() { |