diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-16 21:49:19 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-16 21:49:19 +0000 |
commit | 1d75cbe4106d9bfd4a3176b07fb15c0fb6ff0ab0 (patch) | |
tree | 8d481c82503469763a8c7e14a9c94f951118a3a3 /chrome | |
parent | 5d87c05ce71478dbed0be7e1e3ceb20d51252cb5 (diff) | |
download | chromium_src-1d75cbe4106d9bfd4a3176b07fb15c0fb6ff0ab0.zip chromium_src-1d75cbe4106d9bfd4a3176b07fb15c0fb6ff0ab0.tar.gz chromium_src-1d75cbe4106d9bfd4a3176b07fb15c0fb6ff0ab0.tar.bz2 |
Fixes crash in toolkit_views. The problem with the current code is
that it assumed browser->window() was non-null, but with toolkit_views
this ends up being called before window has been assigned.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/290002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29333 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/chromeos/browser_extender.cc | 5 | ||||
-rwxr-xr-x | chrome/browser/chromeos/status_area_view.cc | 6 | ||||
-rwxr-xr-x | chrome/browser/chromeos/status_area_view.h | 9 | ||||
-rwxr-xr-x | chrome/browser/gtk/browser_window_gtk.cc | 2 |
4 files changed, 17 insertions, 5 deletions
diff --git a/chrome/browser/chromeos/browser_extender.cc b/chrome/browser/chromeos/browser_extender.cc index f6041c0..250713b 100644 --- a/chrome/browser/chromeos/browser_extender.cc +++ b/chrome/browser/chromeos/browser_extender.cc @@ -15,6 +15,7 @@ #include "grit/generated_resources.h" #include "grit/theme_resources.h" #include "views/controls/button/image_button.h" +#include "views/window/window.h" BrowserExtender::BrowserExtender(BrowserView* browser_view) : browser_view_(browser_view), @@ -33,7 +34,9 @@ void BrowserExtender::Init() { main_menu_->SetImage(views::CustomButton::BS_PUSHED, image); browser_view_->AddChildView(main_menu_); - status_area_ = new StatusAreaView(browser_view_->browser()); + status_area_ = new StatusAreaView( + browser_view_->browser(), + browser_view_->GetWindow()->GetNativeWindow()); browser_view_->AddChildView(status_area_); status_area_->Init(); diff --git a/chrome/browser/chromeos/status_area_view.cc b/chrome/browser/chromeos/status_area_view.cc index 4a1ac70..6bb377a5 100755 --- a/chrome/browser/chromeos/status_area_view.cc +++ b/chrome/browser/chromeos/status_area_view.cc @@ -114,8 +114,10 @@ class OptionsMenuModel : public views::SimpleMenuModel, StatusAreaView::OpenTabsMode StatusAreaView::open_tabs_mode_ = StatusAreaView::OPEN_TABS_ON_LEFT; -StatusAreaView::StatusAreaView(Browser* browser) +StatusAreaView::StatusAreaView(Browser* browser, + gfx::NativeWindow window) : browser_(browser), + window_(window), clock_view_(NULL), network_view_(NULL), battery_view_(NULL), @@ -130,7 +132,7 @@ void StatusAreaView::Init() { AddChildView(clock_view_); // Network. - network_view_ = new NetworkMenuButton(browser_->window()->GetNativeHandle()); + network_view_ = new NetworkMenuButton(window_); AddChildView(network_view_); // Battery. diff --git a/chrome/browser/chromeos/status_area_view.h b/chrome/browser/chromeos/status_area_view.h index 8fbd5f5..071b99b 100755 --- a/chrome/browser/chromeos/status_area_view.h +++ b/chrome/browser/chromeos/status_area_view.h @@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_CHROMEOS_STATUS_AREA_VIEW_H_ #define CHROME_BROWSER_CHROMEOS_STATUS_AREA_VIEW_H_ +#include "app/gfx/native_widget_types.h" #include "base/basictypes.h" #include "views/controls/menu/simple_menu_model.h" #include "views/controls/menu/view_menu_delegate.h" @@ -31,7 +32,9 @@ class StatusAreaView : public views::View, OPEN_TABS_ON_RIGHT }; - explicit StatusAreaView(Browser* browser); + // NOTE: this takes the handle to the window as browser->window() may not + // have been assigned yet. + StatusAreaView(Browser* browser, gfx::NativeWindow window); virtual ~StatusAreaView() {} void Init(); @@ -60,6 +63,10 @@ class StatusAreaView : public views::View, // The browser window that owns us. Browser* browser_; + // Browser's NativeWindow. See description above constructor as to why this + // is cached. + gfx::NativeWindow window_; + ClockMenuButton* clock_view_; NetworkMenuButton* network_view_; PowerMenuButton* battery_view_; diff --git a/chrome/browser/gtk/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc index 98fe31c..8bb1540 100755 --- a/chrome/browser/gtk/browser_window_gtk.cc +++ b/chrome/browser/gtk/browser_window_gtk.cc @@ -1780,7 +1780,7 @@ void BrowserWindowGtk::InitWidgets() { status_widget->set_delete_on_destroy(true); status_widget->Init(NULL, gfx::Rect(0, 0, 100, 30)); gtk_widget_reparent(status_widget->GetNativeView(), status_container); - status_area_ = new StatusAreaView(browser()); + status_area_ = new StatusAreaView(browser(), GetNativeHandle()); status_widget->SetContentsView(status_area_); status_area_->Init(); |