summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-27 20:14:10 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-27 20:14:10 +0000
commit6cbf718e873eca34359cae7c220c408385fbc0b1 (patch)
tree9b0aea1c65804e351fd98368dfdd02a90cdd296d /chrome
parent00ad5cd4580cb8184a641d771a113abb0ab7ef4c (diff)
downloadchromium_src-6cbf718e873eca34359cae7c220c408385fbc0b1.zip
chromium_src-6cbf718e873eca34359cae7c220c408385fbc0b1.tar.gz
chromium_src-6cbf718e873eca34359cae7c220c408385fbc0b1.tar.bz2
Fixes unintialized read in networkmenu. Menu's constructor calls into
the delegate, making using 'this' in the member intializer list for creating a menu problematic. I've changed it to a scoped_ptr and created as needed. BUG=none TEST=none Review URL: http://codereview.chromium.org/552187 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37298 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/chromeos/clock_menu_button.cc10
-rw-r--r--chrome/browser/chromeos/clock_menu_button.h5
2 files changed, 10 insertions, 5 deletions
diff --git a/chrome/browser/chromeos/clock_menu_button.cc b/chrome/browser/chromeos/clock_menu_button.cc
index 98af0b4..745fe24 100644
--- a/chrome/browser/chromeos/clock_menu_button.cc
+++ b/chrome/browser/chromeos/clock_menu_button.cc
@@ -26,7 +26,6 @@ const int kTimerSlopSeconds = 1;
ClockMenuButton::ClockMenuButton(Browser* browser)
: MenuButton(NULL, std::wstring(), this, false),
- clock_menu_(this),
browser_(browser) {
set_border(NULL);
SetFont(ResourceBundle::GetSharedInstance().GetFont(
@@ -141,9 +140,12 @@ void ClockMenuButton::ActivatedAt(int index) {
// ClockMenuButton, views::ViewMenuDelegate implementation:
void ClockMenuButton::RunMenu(views::View* source, const gfx::Point& pt) {
- clock_menu_.Rebuild();
- clock_menu_.UpdateStates();
- clock_menu_.RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
+ if (!clock_menu_.get())
+ clock_menu_.reset(new views::Menu2(this));
+ else
+ clock_menu_->Rebuild();
+ clock_menu_->UpdateStates();
+ clock_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
}
} // namespace chromeos
diff --git a/chrome/browser/chromeos/clock_menu_button.h b/chrome/browser/chromeos/clock_menu_button.h
index a720302..b3d0543 100644
--- a/chrome/browser/chromeos/clock_menu_button.h
+++ b/chrome/browser/chromeos/clock_menu_button.h
@@ -5,6 +5,7 @@
#ifndef CHROME_BROWSER_CHROMEOS_CLOCK_MENU_BUTTON_H_
#define CHROME_BROWSER_CHROMEOS_CLOCK_MENU_BUTTON_H_
+#include "base/scoped_ptr.h"
#include "base/timer.h"
#include "chrome/common/notification_observer.h"
#include "chrome/common/pref_member.h"
@@ -67,7 +68,9 @@ class ClockMenuButton : public views::MenuButton,
StringPrefMember timezone_;
// The clock menu.
- views::Menu2 clock_menu_;
+ // NOTE: we use a scoped_ptr here as menu calls into 'this' from the
+ // constructor.
+ scoped_ptr<views::Menu2> clock_menu_;
// The browser object. Can be NULL if the button is on the login manager
// screen.