Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(164)

Side by Side Diff: ash/wm/frame_painter_unittest.cc

Issue 11194015: Fix crash bugs of FramePainter. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ash/wm/frame_painter.cc ('k') | ash/wm/window_properties.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/wm/frame_painter.h" 5 #include "ash/wm/frame_painter.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ash/shell_window_ids.h" 8 #include "ash/shell_window_ids.h"
9 #include "ash/test/ash_test_base.h" 9 #include "ash/test/ash_test_base.h"
10 #include "ash/wm/property_util.h" 10 #include "ash/wm/property_util.h"
11 #include "ash/wm/window_properties.h"
11 #include "ash/wm/window_util.h" 12 #include "ash/wm/window_util.h"
12 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
13 #include "grit/ash_resources.h" 14 #include "grit/ash_resources.h"
14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
15 #include "ui/aura/root_window.h" 16 #include "ui/aura/root_window.h"
16 #include "ui/aura/window_observer.h" 17 #include "ui/aura/window_observer.h"
17 #include "ui/base/hit_test.h" 18 #include "ui/base/hit_test.h"
18 #include "ui/gfx/screen.h" 19 #include "ui/gfx/screen.h"
19 #include "ui/views/controls/button/image_button.h" 20 #include "ui/views/controls/button/image_button.h"
20 #include "ui/views/widget/widget.h" 21 #include "ui/views/widget/widget.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 scoped_ptr<FramePainter> painter(new FramePainter); 117 scoped_ptr<FramePainter> painter(new FramePainter);
117 ASSERT_TRUE(FramePainter::instances_); 118 ASSERT_TRUE(FramePainter::instances_);
118 EXPECT_EQ(1u, FramePainter::instances_->size()); 119 EXPECT_EQ(1u, FramePainter::instances_->size());
119 120
120 // Destroying that painter leaves a valid pointer but no instances. 121 // Destroying that painter leaves a valid pointer but no instances.
121 painter.reset(); 122 painter.reset();
122 ASSERT_TRUE(FramePainter::instances_); 123 ASSERT_TRUE(FramePainter::instances_);
123 EXPECT_EQ(0u, FramePainter::instances_->size()); 124 EXPECT_EQ(0u, FramePainter::instances_->size());
124 } 125 }
125 126
127 TEST_F(FramePainterTest, CreateAndDeleteSingleWindow) {
128 // Ensure that creating/deleting a window works well and doesn't cause
129 // crashes. See crbug.com/155634
130 aura::RootWindow* root = Shell::GetActiveRootWindow();
131
132 scoped_ptr<Widget> widget(CreateTestWidget());
133 scoped_ptr<FramePainter> painter(new FramePainter);
134 ImageButton size(NULL);
135 ImageButton close(NULL);
136 painter->Init(
137 widget.get(), NULL, &size, &close, FramePainter::SIZE_BUTTON_MAXIMIZES);
138 widget->Show();
139
140 // We only have one window, so it should use a solo header.
141 EXPECT_TRUE(painter->UseSoloWindowHeader());
142 EXPECT_EQ(painter.get(),
143 root->GetProperty(internal::kSoloWindowFramePainterKey));
144
145 // Close the window.
146 widget.reset();
147 EXPECT_EQ(NULL, root->GetProperty(internal::kSoloWindowFramePainterKey));
148
149 // Recreate another window again.
150 painter.reset(new FramePainter);
151 widget.reset(CreateTestWidget());
152
153 painter->Init(
154 widget.get(), NULL, &size, &close, FramePainter::SIZE_BUTTON_MAXIMIZES);
155 widget->Show();
156 EXPECT_TRUE(painter->UseSoloWindowHeader());
157 EXPECT_EQ(painter.get(),
158 root->GetProperty(internal::kSoloWindowFramePainterKey));
159 }
160
126 TEST_F(FramePainterTest, UseSoloWindowHeader) { 161 TEST_F(FramePainterTest, UseSoloWindowHeader) {
127 // Create a widget and a painter for it. 162 // Create a widget and a painter for it.
128 scoped_ptr<Widget> w1(CreateTestWidget()); 163 scoped_ptr<Widget> w1(CreateTestWidget());
129 FramePainter p1; 164 FramePainter p1;
130 ImageButton size1(NULL); 165 ImageButton size1(NULL);
131 ImageButton close1(NULL); 166 ImageButton close1(NULL);
132 p1.Init(w1.get(), NULL, &size1, &close1, FramePainter::SIZE_BUTTON_MAXIMIZES); 167 p1.Init(w1.get(), NULL, &size1, &close1, FramePainter::SIZE_BUTTON_MAXIMIZES);
133 w1->Show(); 168 w1->Show();
134 169
135 // We only have one window, so it should use a solo header. 170 // We only have one window, so it should use a solo header.
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 EXPECT_EQ(HTRIGHT, 389 EXPECT_EQ(HTRIGHT,
355 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2, 390 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2,
356 screen.height() / 2))); 391 screen.height() / 2)));
357 // A hit into the middle lower area should generate right - not bottom&right. 392 // A hit into the middle lower area should generate right - not bottom&right.
358 EXPECT_EQ(HTRIGHT, 393 EXPECT_EQ(HTRIGHT,
359 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2, 394 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2,
360 screen.height() - 1))); 395 screen.height() - 1)));
361 } 396 }
362 397
363 } // namespace ash 398 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/frame_painter.cc ('k') | ash/wm/window_properties.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698