Index: chrome/browser/views/select_file_dialog.cc |
diff --git a/chrome/browser/views/select_file_dialog.cc b/chrome/browser/views/select_file_dialog.cc |
index c50c1c1ffa957ee935221c5f73ab313c6a14f9d9..c8cd8390584f106787f166e134c1e13bbe696b2c 100644 |
--- a/chrome/browser/views/select_file_dialog.cc |
+++ b/chrome/browser/views/select_file_dialog.cc |
@@ -18,12 +18,15 @@ |
#include "chrome/browser/dom_ui/html_dialog_ui.h" |
#include "chrome/browser/shell_dialogs.h" |
#include "chrome/browser/tab_contents/tab_contents.h" |
+#include "chrome/browser/views/browser_dialogs.h" |
#include "chrome/browser/views/html_dialog_view.h" |
#include "chrome/common/url_constants.h" |
#include "grit/generated_resources.h" |
#include "views/window/non_client_view.h" |
#include "views/window/window.h" |
+#include "chrome/browser/profile_manager.h" |
+ |
namespace { |
static const wchar_t* kKeyNamePath = L"path"; |
@@ -52,6 +55,10 @@ class SelectFileDialogImpl : public SelectFileDialog { |
gfx::NativeWindow owning_window, |
void* params); |
+ virtual void set_browser_mode(bool value) { |
+ browser_mode_ = value; |
+ } |
+ |
private: |
virtual ~SelectFileDialogImpl(); |
@@ -130,12 +137,19 @@ class SelectFileDialogImpl : public SelectFileDialog { |
// Notification from FileBrowseDelegate when file browse UI is dismissed. |
void OnDialogClosed(FileBrowseDelegate* delegate, const std::string& json); |
+ // Callback method to open HTML |
+ void OpenHtmlDialog(gfx::NativeWindow owning_window, |
+ FileBrowseDelegate* file_browse_delegate); |
+ |
// The set of all parent windows for which we are currently running dialogs. |
std::set<gfx::NativeWindow> parents_; |
// The set of all FileBrowseDelegate that we are currently running. |
std::set<FileBrowseDelegate*> delegates_; |
+ // True when opening in browser, otherwise in OOBE/login mode. |
+ bool browser_mode_; |
+ |
// The listener to be notified of selection completion. |
Listener* listener_; |
@@ -150,7 +164,8 @@ SelectFileDialog* SelectFileDialog::Create(Listener* listener) { |
} |
SelectFileDialogImpl::SelectFileDialogImpl(Listener* listener) |
- : listener_(listener) { |
+ : browser_mode_(true), |
+ listener_(listener) { |
} |
SelectFileDialogImpl::~SelectFileDialogImpl() { |
@@ -206,9 +221,19 @@ void SelectFileDialogImpl::SelectFile( |
default_extension, owning_window, params); |
delegates_.insert(file_browse_delegate); |
- Browser* browser = BrowserList::GetLastActive(); |
- DCHECK(browser); |
- browser->BrowserShowHtmlDialog(file_browse_delegate, owning_window); |
+ if (browser_mode_) { |
+ Browser* browser = BrowserList::GetLastActive(); |
+ DCHECK(browser); |
+ browser->BrowserShowHtmlDialog(file_browse_delegate, owning_window); |
+ } else { |
+ ChromeThread::PostTask( |
+ ChromeThread::UI, |
+ FROM_HERE, |
+ NewRunnableMethod(this, |
+ &SelectFileDialogImpl::OpenHtmlDialog, |
+ owning_window, |
+ file_browse_delegate)); |
+ } |
} |
void SelectFileDialogImpl::OnDialogClosed(FileBrowseDelegate* delegate, |
@@ -271,6 +296,14 @@ void SelectFileDialogImpl::OnDialogClosed(FileBrowseDelegate* delegate, |
delegates_.erase(delegate); |
} |
+void SelectFileDialogImpl::OpenHtmlDialog( |
+ gfx::NativeWindow owning_window, |
+ FileBrowseDelegate* file_browse_delegate) { |
+ browser::ShowHtmlDialogView(owning_window, |
+ ProfileManager::GetDefaultProfile(), |
+ file_browse_delegate); |
+} |
+ |
SelectFileDialogImpl::FileBrowseDelegate::FileBrowseDelegate( |
SelectFileDialogImpl* owner, |
Type type, |