summaryrefslogtreecommitdiff
path: root/chromium/ui/shell_dialogs
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/shell_dialogs')
-rw-r--r--chromium/ui/shell_dialogs/BUILD.gn6
-rw-r--r--chromium/ui/shell_dialogs/select_file_dialog.cc27
-rw-r--r--chromium/ui/shell_dialogs/select_file_dialog.h23
-rw-r--r--chromium/ui/shell_dialogs/select_file_dialog_android.cc26
-rw-r--r--chromium/ui/shell_dialogs/select_file_dialog_android.h7
-rw-r--r--chromium/ui/shell_dialogs/select_file_dialog_factory.h6
-rw-r--r--chromium/ui/shell_dialogs/select_file_dialog_fuchsia.cc19
-rw-r--r--chromium/ui/shell_dialogs/select_file_dialog_mac.h3
-rw-r--r--chromium/ui/shell_dialogs/select_file_dialog_mac.mm20
-rw-r--r--chromium/ui/shell_dialogs/select_file_dialog_win.cc25
-rw-r--r--chromium/ui/shell_dialogs/select_file_dialog_win.h3
-rw-r--r--chromium/ui/shell_dialogs/select_file_policy.cc2
-rw-r--r--chromium/ui/shell_dialogs/shell_dialog_linux.cc9
-rw-r--r--chromium/ui/shell_dialogs/shell_dialog_linux.h2
14 files changed, 107 insertions, 71 deletions
diff --git a/chromium/ui/shell_dialogs/BUILD.gn b/chromium/ui/shell_dialogs/BUILD.gn
index 505bf26edea..74080cd385d 100644
--- a/chromium/ui/shell_dialogs/BUILD.gn
+++ b/chromium/ui/shell_dialogs/BUILD.gn
@@ -51,8 +51,6 @@ component("shell_dialogs") {
if (is_android && !use_aura) {
sources += [
- "android/shell_dialogs_jni_registrar.cc",
- "android/shell_dialogs_jni_registrar.h",
"select_file_dialog_android.cc",
"select_file_dialog_android.h",
]
@@ -71,6 +69,10 @@ component("shell_dialogs") {
"AppKit.framework",
]
}
+
+ if (is_fuchsia) {
+ sources += [ "select_file_dialog_fuchsia.cc" ]
+ }
}
test("shell_dialogs_unittests") {
diff --git a/chromium/ui/shell_dialogs/select_file_dialog.cc b/chromium/ui/shell_dialogs/select_file_dialog.cc
index e10afac1b6b..9b60383e547 100644
--- a/chromium/ui/shell_dialogs/select_file_dialog.cc
+++ b/chromium/ui/shell_dialogs/select_file_dialog.cc
@@ -41,17 +41,17 @@ void SelectFileDialog::Listener::FileSelectedWithExtraInfo(
// Most of the dialogs need actual local path, so default to it.
// If local path is empty, use file_path instead.
FileSelected(file.local_path.empty() ? file.file_path : file.local_path,
- index,
- params);
+ index, params);
}
void SelectFileDialog::Listener::MultiFilesSelectedWithExtraInfo(
const std::vector<ui::SelectedFileInfo>& files,
void* params) {
std::vector<base::FilePath> file_paths;
- for (size_t i = 0; i < files.size(); ++i)
- file_paths.push_back(files[i].local_path.empty() ? files[i].file_path
- : files[i].local_path);
+ for (const ui::SelectedFileInfo& file : files) {
+ file_paths.push_back(file.local_path.empty() ? file.file_path
+ : file.local_path);
+ }
MultiFilesSelected(file_paths, params);
}
@@ -65,14 +65,10 @@ void SelectFileDialog::SetFactory(ui::SelectFileDialogFactory* factory) {
// static
scoped_refptr<SelectFileDialog> SelectFileDialog::Create(
Listener* listener,
- ui::SelectFilePolicy* policy) {
- if (dialog_factory_) {
- SelectFileDialog* dialog = dialog_factory_->Create(listener, policy);
- if (dialog)
- return dialog;
- }
-
- return CreateSelectFileDialog(listener, policy);
+ std::unique_ptr<ui::SelectFilePolicy> policy) {
+ if (dialog_factory_)
+ return dialog_factory_->Create(listener, std::move(policy));
+ return CreateSelectFileDialog(listener, std::move(policy));
}
base::FilePath SelectFileDialog::GetShortenedFilePath(
@@ -135,9 +131,8 @@ bool SelectFileDialog::HasMultipleFileTypeChoices() {
}
SelectFileDialog::SelectFileDialog(Listener* listener,
- ui::SelectFilePolicy* policy)
- : listener_(listener),
- select_file_policy_(policy) {
+ std::unique_ptr<ui::SelectFilePolicy> policy)
+ : listener_(listener), select_file_policy_(std::move(policy)) {
DCHECK(listener_);
}
diff --git a/chromium/ui/shell_dialogs/select_file_dialog.h b/chromium/ui/shell_dialogs/select_file_dialog.h
index e5d288a07e9..c554ce2666a 100644
--- a/chromium/ui/shell_dialogs/select_file_dialog.h
+++ b/chromium/ui/shell_dialogs/select_file_dialog.h
@@ -19,6 +19,7 @@
#include "ui/shell_dialogs/shell_dialogs_export.h"
namespace ui {
+
class SelectFileDialogFactory;
class SelectFilePolicy;
struct SelectedFileInfo;
@@ -102,8 +103,14 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog
// Creates a dialog box helper. This is an inexpensive wrapper around the
// platform-native file selection dialog. |policy| is an optional class that
// can prevent showing a dialog.
- static scoped_refptr<SelectFileDialog> Create(Listener* listener,
- SelectFilePolicy* policy);
+ //
+ // The lifetime of the Listener is not managed by this class. The calling
+ // code should call always ListenerDestroyed() (on the base class
+ // BaseShellDialog) when the listener is destroyed since the SelectFileDialog
+ // is refcounted and uses a background thread.
+ static scoped_refptr<SelectFileDialog> Create(
+ Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy);
// Holds information about allowed extensions on a file save dialog.
struct SHELL_DIALOGS_EXPORT FileTypeInfo {
@@ -117,7 +124,7 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog
//
// Only pass more than one extension in the inner vector if the extensions
// are equivalent. Do NOT include leading periods.
- std::vector<std::vector<base::FilePath::StringType> > extensions;
+ std::vector<std::vector<base::FilePath::StringType>> extensions;
// Overrides the system descriptions of the specified extensions. Entries
// correspond to |extensions|; if left blank the system descriptions will
@@ -179,7 +186,9 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog
protected:
friend class base::RefCountedThreadSafe<SelectFileDialog>;
- explicit SelectFileDialog(Listener* listener, SelectFilePolicy* policy);
+
+ explicit SelectFileDialog(Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy);
~SelectFileDialog() override;
// Displays the actual file-selection dialog.
@@ -217,8 +226,10 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog
DISALLOW_COPY_AND_ASSIGN(SelectFileDialog);
};
-SelectFileDialog* CreateSelectFileDialog(SelectFileDialog::Listener* listener,
- SelectFilePolicy* policy);
+SelectFileDialog* CreateSelectFileDialog(
+ SelectFileDialog::Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy);
+
} // namespace ui
#endif // UI_SHELL_DIALOGS_SELECT_FILE_DIALOG_H_
diff --git a/chromium/ui/shell_dialogs/select_file_dialog_android.cc b/chromium/ui/shell_dialogs/select_file_dialog_android.cc
index 30c557d719a..954e19c34d9 100644
--- a/chromium/ui/shell_dialogs/select_file_dialog_android.cc
+++ b/chromium/ui/shell_dialogs/select_file_dialog_android.cc
@@ -14,6 +14,7 @@
#include "base/strings/utf_string_conversions.h"
#include "jni/SelectFileDialog_jni.h"
#include "ui/android/window_android.h"
+#include "ui/shell_dialogs/select_file_policy.h"
#include "ui/shell_dialogs/selected_file_info.h"
using base::android::ConvertJavaStringToUTF8;
@@ -23,9 +24,10 @@ using base::android::ScopedJavaLocalRef;
namespace ui {
// static
-SelectFileDialogImpl* SelectFileDialogImpl::Create(Listener* listener,
- SelectFilePolicy* policy) {
- return new SelectFileDialogImpl(listener, policy);
+SelectFileDialogImpl* SelectFileDialogImpl::Create(
+ Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy) {
+ return new SelectFileDialogImpl(listener, std::move(policy));
}
void SelectFileDialogImpl::OnFileSelected(
@@ -125,16 +127,13 @@ void SelectFileDialogImpl::SelectFileImpl(
owning_window->GetJavaObject());
}
-bool SelectFileDialogImpl::RegisterSelectFileDialog(JNIEnv* env) {
- return RegisterNativesImpl(env);
-}
-
SelectFileDialogImpl::~SelectFileDialogImpl() {
}
-SelectFileDialogImpl::SelectFileDialogImpl(Listener* listener,
- SelectFilePolicy* policy)
- : SelectFileDialog(listener, policy) {
+SelectFileDialogImpl::SelectFileDialogImpl(
+ Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy)
+ : SelectFileDialog(listener, std::move(policy)) {
JNIEnv* env = base::android::AttachCurrentThread();
java_object_.Reset(
Java_SelectFileDialog_create(env, reinterpret_cast<intptr_t>(this)));
@@ -145,9 +144,10 @@ bool SelectFileDialogImpl::HasMultipleFileTypeChoicesImpl() {
return false;
}
-SelectFileDialog* CreateSelectFileDialog(SelectFileDialog::Listener* listener,
- SelectFilePolicy* policy) {
- return SelectFileDialogImpl::Create(listener, policy);
+SelectFileDialog* CreateSelectFileDialog(
+ SelectFileDialog::Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy) {
+ return SelectFileDialogImpl::Create(listener, std::move(policy));
}
} // namespace ui
diff --git a/chromium/ui/shell_dialogs/select_file_dialog_android.h b/chromium/ui/shell_dialogs/select_file_dialog_android.h
index 5291cd3c92b..5ac283abf45 100644
--- a/chromium/ui/shell_dialogs/select_file_dialog_android.h
+++ b/chromium/ui/shell_dialogs/select_file_dialog_android.h
@@ -17,7 +17,7 @@ namespace ui {
class SelectFileDialogImpl : public SelectFileDialog {
public:
static SelectFileDialogImpl* Create(Listener* listener,
- SelectFilePolicy* policy);
+ std::unique_ptr<SelectFilePolicy> policy);
void OnFileSelected(JNIEnv* env,
const base::android::JavaParamRef<jobject>& java_object,
@@ -50,13 +50,12 @@ class SelectFileDialogImpl : public SelectFileDialog {
gfx::NativeWindow owning_window,
void* params) override;
- static bool RegisterSelectFileDialog(JNIEnv* env);
-
protected:
~SelectFileDialogImpl() override;
private:
- SelectFileDialogImpl(Listener* listener, SelectFilePolicy* policy);
+ SelectFileDialogImpl(Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy);
bool HasMultipleFileTypeChoicesImpl() override;
diff --git a/chromium/ui/shell_dialogs/select_file_dialog_factory.h b/chromium/ui/shell_dialogs/select_file_dialog_factory.h
index cb12e28be87..567f50de40b 100644
--- a/chromium/ui/shell_dialogs/select_file_dialog_factory.h
+++ b/chromium/ui/shell_dialogs/select_file_dialog_factory.h
@@ -9,6 +9,7 @@
#include "ui/shell_dialogs/shell_dialogs_export.h"
namespace ui {
+
class SelectFilePolicy;
// Some chrome components want to create their own SelectFileDialog objects
@@ -20,8 +21,9 @@ class SHELL_DIALOGS_EXPORT SelectFileDialogFactory {
public:
virtual ~SelectFileDialogFactory();
- virtual SelectFileDialog* Create(ui::SelectFileDialog::Listener* listener,
- ui::SelectFilePolicy* policy) = 0;
+ virtual SelectFileDialog* Create(
+ ui::SelectFileDialog::Listener* listener,
+ std::unique_ptr<ui::SelectFilePolicy> policy) = 0;
};
} // namespace ui
diff --git a/chromium/ui/shell_dialogs/select_file_dialog_fuchsia.cc b/chromium/ui/shell_dialogs/select_file_dialog_fuchsia.cc
new file mode 100644
index 00000000000..ff3e29eeea3
--- /dev/null
+++ b/chromium/ui/shell_dialogs/select_file_dialog_fuchsia.cc
@@ -0,0 +1,19 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/shell_dialogs/select_file_dialog.h"
+
+#include "base/logging.h"
+
+namespace ui {
+
+SelectFileDialog* CreateSelectFileDialog(
+ SelectFileDialog::Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy) {
+ // TODO(fuchsia): Port once we have UI, see https://crbug.com/746674.
+ NOTREACHED();
+ return nullptr;
+}
+
+} // namespace ui
diff --git a/chromium/ui/shell_dialogs/select_file_dialog_mac.h b/chromium/ui/shell_dialogs/select_file_dialog_mac.h
index b3765ef4224..472e7e0392b 100644
--- a/chromium/ui/shell_dialogs/select_file_dialog_mac.h
+++ b/chromium/ui/shell_dialogs/select_file_dialog_mac.h
@@ -30,7 +30,8 @@ class SelectFileDialogMacTest;
// Exported for unit tests.
class SHELL_DIALOGS_EXPORT SelectFileDialogImpl : public ui::SelectFileDialog {
public:
- SelectFileDialogImpl(Listener* listener, ui::SelectFilePolicy* policy);
+ SelectFileDialogImpl(Listener* listener,
+ std::unique_ptr<ui::SelectFilePolicy> policy);
// BaseShellDialog implementation.
bool IsRunning(gfx::NativeWindow parent_window) const override;
diff --git a/chromium/ui/shell_dialogs/select_file_dialog_mac.mm b/chromium/ui/shell_dialogs/select_file_dialog_mac.mm
index d944e479b15..e408e2158c9 100644
--- a/chromium/ui/shell_dialogs/select_file_dialog_mac.mm
+++ b/chromium/ui/shell_dialogs/select_file_dialog_mac.mm
@@ -20,6 +20,7 @@
#include "base/threading/thread_restrictions.h"
#import "ui/base/cocoa/nib_loading.h"
#include "ui/base/l10n/l10n_util_mac.h"
+#include "ui/shell_dialogs/select_file_policy.h"
#include "ui/strings/grit/ui_strings.h"
namespace {
@@ -87,12 +88,12 @@ NSString* GetDescriptionFromExtension(const base::FilePath::StringType& ext) {
namespace ui {
-SelectFileDialogImpl::SelectFileDialogImpl(Listener* listener,
- ui::SelectFilePolicy* policy)
- : SelectFileDialog(listener, policy),
- bridge_([[SelectFileDialogBridge alloc]
- initWithSelectFileDialogImpl:this]) {
-}
+SelectFileDialogImpl::SelectFileDialogImpl(
+ Listener* listener,
+ std::unique_ptr<ui::SelectFilePolicy> policy)
+ : SelectFileDialog(listener, std::move(policy)),
+ bridge_(
+ [[SelectFileDialogBridge alloc] initWithSelectFileDialogImpl:this]) {}
bool SelectFileDialogImpl::IsRunning(gfx::NativeWindow parent_window) const {
return parents_.find(parent_window) != parents_.end();
@@ -366,9 +367,10 @@ bool SelectFileDialogImpl::HasMultipleFileTypeChoicesImpl() {
return hasMultipleFileTypeChoices_;
}
-SelectFileDialog* CreateSelectFileDialog(SelectFileDialog::Listener* listener,
- SelectFilePolicy* policy) {
- return new SelectFileDialogImpl(listener, policy);
+SelectFileDialog* CreateSelectFileDialog(
+ SelectFileDialog::Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy) {
+ return new SelectFileDialogImpl(listener, std::move(policy));
}
} // namespace ui
diff --git a/chromium/ui/shell_dialogs/select_file_dialog_win.cc b/chromium/ui/shell_dialogs/select_file_dialog_win.cc
index 411b8bd5b4e..a6f07f070e1 100644
--- a/chromium/ui/shell_dialogs/select_file_dialog_win.cc
+++ b/chromium/ui/shell_dialogs/select_file_dialog_win.cc
@@ -31,6 +31,7 @@
#include "ui/base/win/open_file_name_win.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/shell_dialogs/base_shell_dialog_win.h"
+#include "ui/shell_dialogs/select_file_policy.h"
#include "ui/strings/grit/ui_strings.h"
namespace {
@@ -163,7 +164,7 @@ class SelectFileDialogImpl : public ui::SelectFileDialog,
public:
SelectFileDialogImpl(
Listener* listener,
- ui::SelectFilePolicy* policy,
+ std::unique_ptr<ui::SelectFilePolicy> policy,
const base::Callback<bool(OPENFILENAME*)>& get_open_file_name_impl,
const base::Callback<bool(OPENFILENAME*)>& get_save_file_name_impl);
@@ -306,15 +307,14 @@ class SelectFileDialogImpl : public ui::SelectFileDialog,
SelectFileDialogImpl::SelectFileDialogImpl(
Listener* listener,
- ui::SelectFilePolicy* policy,
+ std::unique_ptr<ui::SelectFilePolicy> policy,
const base::Callback<bool(OPENFILENAME*)>& get_open_file_name_impl,
const base::Callback<bool(OPENFILENAME*)>& get_save_file_name_impl)
- : SelectFileDialog(listener, policy),
+ : SelectFileDialog(listener, std::move(policy)),
BaseShellDialogImpl(),
has_multiple_file_type_choices_(false),
get_open_file_name_impl_(get_open_file_name_impl),
- get_save_file_name_impl_(get_save_file_name_impl) {
-}
+ get_save_file_name_impl_(get_save_file_name_impl) {}
SelectFileDialogImpl::~SelectFileDialogImpl() {
}
@@ -701,17 +701,18 @@ std::wstring AppendExtensionIfNeeded(
SelectFileDialog* CreateWinSelectFileDialog(
SelectFileDialog::Listener* listener,
- SelectFilePolicy* policy,
+ std::unique_ptr<SelectFilePolicy> policy,
const base::Callback<bool(OPENFILENAME* ofn)>& get_open_file_name_impl,
const base::Callback<bool(OPENFILENAME* ofn)>& get_save_file_name_impl) {
- return new SelectFileDialogImpl(
- listener, policy, get_open_file_name_impl, get_save_file_name_impl);
+ return new SelectFileDialogImpl(listener, std::move(policy),
+ get_open_file_name_impl,
+ get_save_file_name_impl);
}
-SelectFileDialog* CreateSelectFileDialog(SelectFileDialog::Listener* listener,
- SelectFilePolicy* policy) {
- return CreateWinSelectFileDialog(listener,
- policy,
+SelectFileDialog* CreateSelectFileDialog(
+ SelectFileDialog::Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy) {
+ return CreateWinSelectFileDialog(listener, std::move(policy),
base::Bind(&CallBuiltinGetOpenFileName),
base::Bind(&CallBuiltinGetSaveFileName));
}
diff --git a/chromium/ui/shell_dialogs/select_file_dialog_win.h b/chromium/ui/shell_dialogs/select_file_dialog_win.h
index e066c65f1d3..22ef919a919 100644
--- a/chromium/ui/shell_dialogs/select_file_dialog_win.h
+++ b/chromium/ui/shell_dialogs/select_file_dialog_win.h
@@ -14,6 +14,7 @@
#include "ui/shell_dialogs/shell_dialogs_export.h"
namespace ui {
+
class SelectFilePolicy;
// Implementation detail exported for unit tests.
@@ -24,7 +25,7 @@ SHELL_DIALOGS_EXPORT std::wstring AppendExtensionIfNeeded(
SHELL_DIALOGS_EXPORT SelectFileDialog* CreateWinSelectFileDialog(
SelectFileDialog::Listener* listener,
- SelectFilePolicy* policy,
+ std::unique_ptr<SelectFilePolicy> policy,
const base::Callback<bool(OPENFILENAME* ofn)>& get_open_file_name_impl,
const base::Callback<bool(OPENFILENAME* ofn)>& get_save_file_name_impl);
diff --git a/chromium/ui/shell_dialogs/select_file_policy.cc b/chromium/ui/shell_dialogs/select_file_policy.cc
index 7e0f5861147..548e408e52f 100644
--- a/chromium/ui/shell_dialogs/select_file_policy.cc
+++ b/chromium/ui/shell_dialogs/select_file_policy.cc
@@ -6,6 +6,6 @@
namespace ui {
-SelectFilePolicy::~SelectFilePolicy() {}
+SelectFilePolicy::~SelectFilePolicy() = default;
} // namespace ui
diff --git a/chromium/ui/shell_dialogs/shell_dialog_linux.cc b/chromium/ui/shell_dialogs/shell_dialog_linux.cc
index 685369c2baa..046c430dd46 100644
--- a/chromium/ui/shell_dialogs/shell_dialog_linux.cc
+++ b/chromium/ui/shell_dialogs/shell_dialog_linux.cc
@@ -4,6 +4,8 @@
#include "ui/shell_dialogs/shell_dialog_linux.h"
+#include "ui/shell_dialogs/select_file_policy.h"
+
namespace {
ui::ShellDialogLinux* g_shell_dialog_linux = nullptr;
@@ -20,12 +22,13 @@ const ShellDialogLinux* ShellDialogLinux::instance() {
return g_shell_dialog_linux;
}
-SelectFileDialog* CreateSelectFileDialog(SelectFileDialog::Listener* listener,
- SelectFilePolicy* policy) {
+SelectFileDialog* CreateSelectFileDialog(
+ SelectFileDialog::Listener* listener,
+ std::unique_ptr<SelectFilePolicy> policy) {
#if defined(USE_AURA) && !defined(OS_CHROMEOS)
const ui::ShellDialogLinux* shell_dialogs = ui::ShellDialogLinux::instance();
if (shell_dialogs)
- return shell_dialogs->CreateSelectFileDialog(listener, policy);
+ return shell_dialogs->CreateSelectFileDialog(listener, std::move(policy));
#endif
NOTIMPLEMENTED();
return nullptr;
diff --git a/chromium/ui/shell_dialogs/shell_dialog_linux.h b/chromium/ui/shell_dialogs/shell_dialog_linux.h
index 1dad34d15b5..be0ffd0f69c 100644
--- a/chromium/ui/shell_dialogs/shell_dialog_linux.h
+++ b/chromium/ui/shell_dialogs/shell_dialog_linux.h
@@ -31,7 +31,7 @@ class SHELL_DIALOGS_EXPORT ShellDialogLinux {
// Returns a native file selection dialog.
virtual SelectFileDialog* CreateSelectFileDialog(
SelectFileDialog::Listener* listener,
- SelectFilePolicy* policy) const = 0;
+ std::unique_ptr<SelectFilePolicy> policy) const = 0;
};
} // namespace ui