diff options
Diffstat (limited to 'chromium/ui/shell_dialogs')
-rw-r--r-- | chromium/ui/shell_dialogs/BUILD.gn | 6 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_dialog.cc | 27 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_dialog.h | 23 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_dialog_android.cc | 26 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_dialog_android.h | 7 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_dialog_factory.h | 6 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_dialog_fuchsia.cc | 19 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_dialog_mac.h | 3 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_dialog_mac.mm | 20 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_dialog_win.cc | 25 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_dialog_win.h | 3 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/select_file_policy.cc | 2 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/shell_dialog_linux.cc | 9 | ||||
-rw-r--r-- | chromium/ui/shell_dialogs/shell_dialog_linux.h | 2 |
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 |