summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-16 21:49:19 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-16 21:49:19 +0000
commit1d75cbe4106d9bfd4a3176b07fb15c0fb6ff0ab0 (patch)
tree8d481c82503469763a8c7e14a9c94f951118a3a3 /chrome
parent5d87c05ce71478dbed0be7e1e3ceb20d51252cb5 (diff)
downloadchromium_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.cc5
-rwxr-xr-xchrome/browser/chromeos/status_area_view.cc6
-rwxr-xr-xchrome/browser/chromeos/status_area_view.h9
-rwxr-xr-xchrome/browser/gtk/browser_window_gtk.cc2
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();