diff options
author | nkostylev@google.com <nkostylev@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-13 06:42:38 +0000 |
---|---|---|
committer | nkostylev@google.com <nkostylev@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-13 06:42:38 +0000 |
commit | c04ec03c76f5d6f86605103d98f1608b59c8cc7f (patch) | |
tree | 84313233f04fd533f80d94886c2c6a550e055cdb /chrome/browser/views | |
parent | 1229f0b556f09ee6997684d5e6f799cf15228bb4 (diff) | |
download | chromium_src-c04ec03c76f5d6f86605103d98f1608b59c8cc7f.zip chromium_src-c04ec03c76f5d6f86605103d98f1608b59c8cc7f.tar.gz chromium_src-c04ec03c76f5d6f86605103d98f1608b59c8cc7f.tar.bz2 |
Fix crash when opening "Select certificate file" in OOBE.
Pass default profile and correct top window in OOBE.
BUG=http://crosbug.com/2978
TEST=On welcome screen select encrypted 802.1X network and open "select certificate" dialog. It should open withot crash.
Review URL: http://codereview.chromium.org/2053001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47125 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views')
-rw-r--r-- | chrome/browser/views/browser_dialogs.h | 2 | ||||
-rw-r--r-- | chrome/browser/views/frame/browser_view.cc | 2 | ||||
-rw-r--r-- | chrome/browser/views/html_dialog_view.cc | 4 | ||||
-rw-r--r-- | chrome/browser/views/select_file_dialog.cc | 41 |
4 files changed, 41 insertions, 8 deletions
diff --git a/chrome/browser/views/browser_dialogs.h b/chrome/browser/views/browser_dialogs.h index 6997a0a..31604c5 100644 --- a/chrome/browser/views/browser_dialogs.h +++ b/chrome/browser/views/browser_dialogs.h @@ -72,7 +72,7 @@ void ShowAboutChromeView(gfx::NativeWindow parent, Profile* profile); // Shows an HTML dialog. See HtmlDialogView. -void ShowHtmlDialogView(gfx::NativeWindow parent, Browser* browser, +void ShowHtmlDialogView(gfx::NativeWindow parent, Profile* profile, HtmlDialogUIDelegate* delegate); // Creates and returns a find bar for the given browser window. See FindBarWin. diff --git a/chrome/browser/views/frame/browser_view.cc b/chrome/browser/views/frame/browser_view.cc index db95498..59f013c 100644 --- a/chrome/browser/views/frame/browser_view.cc +++ b/chrome/browser/views/frame/browser_view.cc @@ -1067,7 +1067,7 @@ void BrowserView::ShowHTMLDialog(HtmlDialogUIDelegate* delegate, // Default to using our window as the parent if the argument is not specified. gfx::NativeWindow parent = parent_window ? parent_window : GetNativeHandle(); - browser::ShowHtmlDialogView(parent, browser_.get(), delegate); + browser::ShowHtmlDialogView(parent, browser_.get()->profile(), delegate); } void BrowserView::ShowCreateShortcutsDialog(TabContents* tab_contents) { diff --git a/chrome/browser/views/html_dialog_view.cc b/chrome/browser/views/html_dialog_view.cc index ccf1423..68a2c80 100644 --- a/chrome/browser/views/html_dialog_view.cc +++ b/chrome/browser/views/html_dialog_view.cc @@ -14,10 +14,10 @@ namespace browser { // Declared in browser_dialogs.h so that others don't need to depend on our .h. -void ShowHtmlDialogView(gfx::NativeWindow parent, Browser* browser, +void ShowHtmlDialogView(gfx::NativeWindow parent, Profile* profile, HtmlDialogUIDelegate* delegate) { HtmlDialogView* html_view = - new HtmlDialogView(browser->profile(), delegate); + new HtmlDialogView(profile, delegate); views::Window::CreateChromeWindow(parent, gfx::Rect(), html_view); html_view->InitDialog(); html_view->window()->Show(); diff --git a/chrome/browser/views/select_file_dialog.cc b/chrome/browser/views/select_file_dialog.cc index c50c1c1..c8cd839 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, |