summaryrefslogtreecommitdiffstats
path: root/ui/views/widget
diff options
context:
space:
mode:
authorxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-17 20:11:37 +0000
committerxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-17 20:11:37 +0000
commit94394dc91c469fe2f851769784e4f2d81e0c9573 (patch)
treeffe5124429535488b7befb9cb767021732255e17 /ui/views/widget
parentc2d1a7f1d4e06928da3b9d7ef57cd72b3272cf99 (diff)
downloadchromium_src-94394dc91c469fe2f851769784e4f2d81e0c9573.zip
chromium_src-94394dc91c469fe2f851769784e4f2d81e0c9573.tar.gz
chromium_src-94394dc91c469fe2f851769784e4f2d81e0c9573.tar.bz2
aura: Fix a crash caused by wrong ownership used for widget.
- Fix the wrong ownerhsip used in CandidateWindowController::Impl::CreateView; - Add a DCHECK to Widget dtor so that we catch similar cases in the future; BUG=110905 TEST=Verify crash in issue 110905 no longer happens. Review URL: http://codereview.chromium.org/9415019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122563 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/views/widget')
-rw-r--r--ui/views/widget/widget.cc9
-rw-r--r--ui/views/widget/widget.h3
2 files changed, 11 insertions, 1 deletions
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index fc76d58..4ccf36d 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -173,6 +173,7 @@ Widget::Widget()
focus_on_creation_(true),
is_top_level_(false),
native_widget_initialized_(false),
+ native_widget_destroyed_(false),
is_mouse_button_pressed_(false),
last_mouse_event_was_move_(false) {
}
@@ -184,8 +185,13 @@ Widget::~Widget() {
}
DestroyRootView();
- if (ownership_ == InitParams::WIDGET_OWNS_NATIVE_WIDGET)
+ if (ownership_ == InitParams::WIDGET_OWNS_NATIVE_WIDGET) {
delete native_widget_;
+ } else {
+ DCHECK(native_widget_destroyed_)
+ << "Destroying a widget with a live native widget. "
+ << "Widget probably should use WIDGET_OWNS_NATIVE_WIDGET ownership.";
+ }
}
// static
@@ -951,6 +957,7 @@ void Widget::OnNativeWidgetDestroying() {
void Widget::OnNativeWidgetDestroyed() {
widget_delegate_->DeleteDelegate();
widget_delegate_ = NULL;
+ native_widget_destroyed_ = true;
}
gfx::Size Widget::GetMinimumSize() {
diff --git a/ui/views/widget/widget.h b/ui/views/widget/widget.h
index 9932ae9..319655e 100644
--- a/ui/views/widget/widget.h
+++ b/ui/views/widget/widget.h
@@ -749,6 +749,9 @@ class VIEWS_EXPORT Widget : public internal::NativeWidgetDelegate,
// Tracks whether native widget has been initialized.
bool native_widget_initialized_;
+ // Whether native widget has been destroyed.
+ bool native_widget_destroyed_;
+
// TODO(beng): Remove NativeWidgetGtk's dependence on these:
// If true, the mouse is currently down.
bool is_mouse_button_pressed_;