summaryrefslogtreecommitdiffstats
path: root/src/core/file_picker_controller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/file_picker_controller.cpp')
-rw-r--r--src/core/file_picker_controller.cpp66
1 files changed, 46 insertions, 20 deletions
diff --git a/src/core/file_picker_controller.cpp b/src/core/file_picker_controller.cpp
index 1494d8aae..537a01508 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 <QtCore/qcoreapplication.h>
#include <QDir>
@@ -57,7 +58,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;
};
@@ -66,7 +68,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);
}
@@ -194,27 +208,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