Index: ui/shell_dialogs/select_file_dialog_win.cc |
diff --git a/ui/shell_dialogs/select_file_dialog_win.cc b/ui/shell_dialogs/select_file_dialog_win.cc |
index 5bdbb2dabd4012d128a42a3454fddf28eccc2165..e3613cdc12cb51e7f3bcbfc01258d42e80e3f82f 100644 |
--- a/ui/shell_dialogs/select_file_dialog_win.cc |
+++ b/ui/shell_dialogs/select_file_dialog_win.cc |
@@ -4,8 +4,6 @@ |
#include "ui/shell_dialogs/select_file_dialog_win.h" |
-#include <windows.h> |
-#include <commdlg.h> |
#include <shlobj.h> |
#include <algorithm> |
@@ -38,6 +36,10 @@ |
namespace { |
+ bool CallBuiltinGetOpenFileName(OPENFILENAME* ofn) { |
sky
2014/07/31 20:47:46
nit: don't indent this (same as 44 below).
erikwright (departed)
2014/08/01 13:53:15
Done.
|
+ return GetOpenFileName(ofn) == TRUE; |
+ } |
+ |
// Given |extension|, if it's not empty, then remove the leading dot. |
std::wstring GetExtensionWithoutLeadingDot(const std::wstring& extension) { |
DCHECK(extension.empty() || extension[0] == L'.'); |
@@ -45,25 +47,6 @@ std::wstring GetExtensionWithoutLeadingDot(const std::wstring& extension) { |
} |
// Diverts to a metro-specific implementation as appropriate. |
-bool CallGetOpenFileName(OPENFILENAME* ofn) { |
- HMODULE metro_module = base::win::GetMetroModule(); |
- if (metro_module != NULL) { |
- typedef BOOL (*MetroGetOpenFileName)(OPENFILENAME*); |
- MetroGetOpenFileName metro_get_open_file_name = |
- reinterpret_cast<MetroGetOpenFileName>( |
- ::GetProcAddress(metro_module, "MetroGetOpenFileName")); |
- if (metro_get_open_file_name == NULL) { |
- NOTREACHED(); |
- return false; |
- } |
- |
- return metro_get_open_file_name(ofn) == TRUE; |
- } else { |
- return GetOpenFileName(ofn) == TRUE; |
- } |
-} |
- |
-// Diverts to a metro-specific implementation as appropriate. |
bool CallGetSaveFileName(OPENFILENAME* ofn) { |
HMODULE metro_module = base::win::GetMetroModule(); |
if (metro_module != NULL) { |
@@ -410,8 +393,10 @@ bool SaveFileAs(HWND owner, |
class SelectFileDialogImpl : public ui::SelectFileDialog, |
public ui::BaseShellDialogImpl { |
public: |
- explicit SelectFileDialogImpl(Listener* listener, |
- ui::SelectFilePolicy* policy); |
+ SelectFileDialogImpl( |
+ Listener* listener, |
+ ui::SelectFilePolicy* policy, |
+ const base::Callback<bool(OPENFILENAME*)>& get_open_file_name_impl); |
// BaseShellDialog implementation: |
virtual bool IsRunning(gfx::NativeWindow owning_window) const OVERRIDE; |
@@ -520,15 +505,19 @@ class SelectFileDialogImpl : public ui::SelectFileDialog, |
base::string16 GetFilterForFileTypes(const FileTypeInfo* file_types); |
bool has_multiple_file_type_choices_; |
+ base::Callback<bool(OPENFILENAME*)> get_open_file_name_impl_; |
DISALLOW_COPY_AND_ASSIGN(SelectFileDialogImpl); |
}; |
-SelectFileDialogImpl::SelectFileDialogImpl(Listener* listener, |
- ui::SelectFilePolicy* policy) |
+SelectFileDialogImpl::SelectFileDialogImpl( |
+ Listener* listener, |
+ ui::SelectFilePolicy* policy, |
+ const base::Callback<bool(OPENFILENAME*)>& get_open_file_name_impl) |
: SelectFileDialog(listener, policy), |
BaseShellDialogImpl(), |
- has_multiple_file_type_choices_(false) { |
+ has_multiple_file_type_choices_(false), |
+ get_open_file_name_impl_(get_open_file_name_impl) { |
} |
SelectFileDialogImpl::~SelectFileDialogImpl() { |
@@ -786,7 +775,8 @@ bool SelectFileDialogImpl::RunOpenFileDialog( |
if (!filter.empty()) |
ofn.Get()->lpstrFilter = filter.c_str(); |
- bool success = CallGetOpenFileName(ofn.Get()); |
+ |
+ bool success = get_open_file_name_impl_.Run(ofn.Get()); |
DisableOwner(owner); |
if (success) |
*path = ofn.GetSingleResult(); |
@@ -811,8 +801,9 @@ bool SelectFileDialogImpl::RunOpenMultiFileDialog( |
base::FilePath directory; |
std::vector<base::FilePath> filenames; |
- if (CallGetOpenFileName(ofn.Get())) |
+ if (get_open_file_name_impl_.Run(ofn.Get())) |
ofn.GetResult(&directory, &filenames); |
+ |
DisableOwner(owner); |
for (std::vector<base::FilePath>::iterator it = filenames.begin(); |
@@ -894,8 +885,16 @@ std::wstring AppendExtensionIfNeeded( |
SelectFileDialog* CreateWinSelectFileDialog( |
SelectFileDialog::Listener* listener, |
+ SelectFilePolicy* policy, |
+ const base::Callback<bool(OPENFILENAME* ofn)>& get_open_file_name_impl) { |
+ return new SelectFileDialogImpl(listener, policy, get_open_file_name_impl); |
+} |
+ |
+SelectFileDialog* CreateDefaultWinSelectFileDialog( |
+ SelectFileDialog::Listener* listener, |
SelectFilePolicy* policy) { |
- return new SelectFileDialogImpl(listener, policy); |
+ return CreateWinSelectFileDialog( |
+ listener, policy, base::Bind(&CallBuiltinGetOpenFileName)); |
} |
} // namespace ui |