summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views
diff options
context:
space:
mode:
authornkostylev@google.com <nkostylev@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-13 06:42:38 +0000
committernkostylev@google.com <nkostylev@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-13 06:42:38 +0000
commitc04ec03c76f5d6f86605103d98f1608b59c8cc7f (patch)
tree84313233f04fd533f80d94886c2c6a550e055cdb /chrome/browser/views
parent1229f0b556f09ee6997684d5e6f799cf15228bb4 (diff)
downloadchromium_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.h2
-rw-r--r--chrome/browser/views/frame/browser_view.cc2
-rw-r--r--chrome/browser/views/html_dialog_view.cc4
-rw-r--r--chrome/browser/views/select_file_dialog.cc41
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,