diff options
Diffstat (limited to 'src/core/file_picker_controller.cpp')
-rw-r--r-- | src/core/file_picker_controller.cpp | 66 |
1 files changed, 46 insertions, 20 deletions
diff --git a/src/core/file_picker_controller.cpp b/src/core/file_picker_controller.cpp index 02d40a054..d6dfa563d 100644 --- a/src/core/file_picker_controller.cpp +++ b/src/core/file_picker_controller.cpp @@ -44,6 +44,7 @@ #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/file_select_listener.h" +#include "ui/shell_dialogs/select_file_dialog.h" #include <QDir> #include <QFileInfo> @@ -56,7 +57,8 @@ namespace QtWebEngineCore { class FilePickerControllerPrivate { public: FilePickerController::FileChooserMode mode; - scoped_refptr<content::FileSelectListener> listener; + scoped_refptr<content::FileSelectListener> fileDialogListener; + ui::SelectFileDialog::Listener *fileSystemAccessDialogListener; QString defaultFileName; QStringList acceptedMimeTypes; }; @@ -65,7 +67,19 @@ FilePickerController *createFilePickerController( FilePickerController::FileChooserMode mode, scoped_refptr<content::FileSelectListener> listener, const QString &defaultFileName, const QStringList &acceptedMimeTypes, QObject *parent = nullptr) { - auto priv = new FilePickerControllerPrivate{mode, listener, defaultFileName, acceptedMimeTypes}; + auto priv = new FilePickerControllerPrivate { mode, listener, nullptr, defaultFileName, + acceptedMimeTypes }; + return new FilePickerController(priv, parent); +} + +FilePickerController *createFilePickerController(FilePickerController::FileChooserMode mode, + ui::SelectFileDialog::Listener *listener, + const QString &defaultFileName, + const QStringList &acceptedMimeTypes, + QObject *parent = nullptr) +{ + auto priv = new FilePickerControllerPrivate { mode, nullptr, listener, defaultFileName, + acceptedMimeTypes }; return new FilePickerController(priv, parent); } @@ -193,27 +207,39 @@ 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() + if (d_ptr->fileDialogListener) { + QStringList files(filesList); + base::FilePath baseDir; + if (d_ptr->mode == UploadFolder && !filesList.isEmpty() && QFileInfo(filesList.first()).isDir()) { - // Enumerate the directory - files = listRecursively(QDir(filesList.first())); - baseDir = toFilePath(filesList.first()); - } + // 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)) { - chooser_files.push_back(blink::mojom::FileChooserFileInfo::NewNativeFile( - blink::mojom::NativeFileInfo::New(toFilePath(file), base::string16()))); - } + std::vector<blink::mojom::FileChooserFileInfoPtr> chooser_files; + for (const auto &file : qAsConst(files)) { + chooser_files.push_back(blink::mojom::FileChooserFileInfo::NewNativeFile( + blink::mojom::NativeFileInfo::New(toFilePath(file), base::string16()))); + } - if (files.isEmpty()) - d_ptr->listener->FileSelectionCanceled(); - else - d_ptr->listener->FileSelected(std::move(chooser_files), - baseDir, - static_cast<blink::mojom::FileChooserParams::Mode>(d_ptr->mode)); + if (files.isEmpty()) + d_ptr->fileDialogListener->FileSelectionCanceled(); + else + d_ptr->fileDialogListener->FileSelected( + std::move(chooser_files), baseDir, + static_cast<blink::mojom::FileChooserParams::Mode>(d_ptr->mode)); + } else if (d_ptr->fileSystemAccessDialogListener) { + std::vector<base::FilePath> files; + for (const auto &file : qAsConst(filesList)) { + files.push_back(toFilePath(file)); + } + + if (files.empty()) + d_ptr->fileSystemAccessDialogListener->FileSelectionCanceled(nullptr); + else + d_ptr->fileSystemAccessDialogListener->MultiFilesSelected(files, nullptr); + } } QStringList FilePickerController::acceptedMimeTypes() const |