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

Side by Side Diff: chrome/browser/ui/views/first_run_bubble_unittest.cc

Issue 2875513003: cleanup: make WidgetClosingObserver as test support (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « no previous file | chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc » ('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 "chrome/browser/ui/views/first_run_bubble.h" 5 #include "chrome/browser/ui/views/first_run_bubble.h"
6
6 #include "base/macros.h" 7 #include "base/macros.h"
7 #include "chrome/browser/search_engines/template_url_service_factory.h" 8 #include "chrome/browser/search_engines/template_url_service_factory.h"
8 #include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" 9 #include "chrome/browser/ui/views/harmony/chrome_layout_provider.h"
9 #include "chrome/test/base/testing_profile.h" 10 #include "chrome/test/base/testing_profile.h"
10 #include "components/search_engines/template_url.h" 11 #include "components/search_engines/template_url.h"
11 #include "components/search_engines/template_url_service.h" 12 #include "components/search_engines/template_url_service.h"
12 #include "content/public/test/test_browser_thread.h" 13 #include "content/public/test/test_browser_thread.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
14 #include "ui/aura/window.h" 15 #include "ui/aura/window.h"
15 #include "ui/aura/window_tree_host.h" 16 #include "ui/aura/window_tree_host.h"
16 #include "ui/events/event.h" 17 #include "ui/events/event.h"
17 #include "ui/events/event_sink.h" 18 #include "ui/events/event_sink.h"
18 #include "ui/events/event_utils.h" 19 #include "ui/events/event_utils.h"
19 #include "ui/views/test/views_test_base.h" 20 #include "ui/views/test/views_test_base.h"
21 #include "ui/views/test/widget_test.h"
20 #include "ui/views/view.h" 22 #include "ui/views/view.h"
21 #include "ui/views/widget/widget.h" 23 #include "ui/views/widget/widget.h"
22 24
23 // Provides functionality to observe the widget passed in the constructor for 25 class FirstRunBubbleTest : public views::ViewsTestBase {
24 // the widget closing event.
25 class WidgetClosingObserver : public views::WidgetObserver {
26 public:
27 explicit WidgetClosingObserver(views::Widget* widget)
28 : widget_(widget),
29 widget_destroyed_(false) {
30 widget_->AddObserver(this);
31 }
32
33 ~WidgetClosingObserver() override {
34 if (widget_)
35 widget_->RemoveObserver(this);
36 }
37
38 void OnWidgetClosing(views::Widget* widget) override {
39 DCHECK(widget == widget_);
40 widget_->RemoveObserver(this);
41 widget_destroyed_ = true;
42 widget_ = nullptr;
43 }
44
45 bool widget_destroyed() const {
46 return widget_destroyed_;
47 }
48
49 private:
50 views::Widget* widget_;
51 bool widget_destroyed_;
52
53 DISALLOW_COPY_AND_ASSIGN(WidgetClosingObserver);
54 };
55
56 class FirstRunBubbleTest : public views::ViewsTestBase,
57 views::WidgetObserver {
58 public: 26 public:
59 FirstRunBubbleTest(); 27 FirstRunBubbleTest();
60 ~FirstRunBubbleTest() override; 28 ~FirstRunBubbleTest() override;
61 29
62 // Overrides from views::ViewsTestBase: 30 // Overrides from views::ViewsTestBase:
63 void SetUp() override; 31 void SetUp() override;
64 32
65 void CreateAndCloseBubbleOnEventTest(ui::Event* event); 33 void CreateAndCloseBubbleOnEventTest(ui::Event* event);
66 34
67 protected: 35 protected:
(...skipping 23 matching lines...) Expand all
91 TemplateURLService* turl_model = 59 TemplateURLService* turl_model =
92 TemplateURLServiceFactory::GetForProfile(profile()); 60 TemplateURLServiceFactory::GetForProfile(profile());
93 turl_model->Load(); 61 turl_model->Load();
94 } 62 }
95 63
96 void FirstRunBubbleTest::CreateAndCloseBubbleOnEventTest(ui::Event* event) { 64 void FirstRunBubbleTest::CreateAndCloseBubbleOnEventTest(ui::Event* event) {
97 // Create the anchor and parent widgets. 65 // Create the anchor and parent widgets.
98 views::Widget::InitParams params = 66 views::Widget::InitParams params =
99 CreateParams(views::Widget::InitParams::TYPE_WINDOW); 67 CreateParams(views::Widget::InitParams::TYPE_WINDOW);
100 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 68 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
101 std::unique_ptr<views::Widget> anchor_widget(new views::Widget); 69 views::Widget anchor_widget;
102 anchor_widget->Init(params); 70 anchor_widget.Init(params);
103 anchor_widget->SetBounds(gfx::Rect(10, 10, 500, 500)); 71 anchor_widget.SetBounds(gfx::Rect(10, 10, 500, 500));
104 anchor_widget->Show(); 72 anchor_widget.Show();
105 73
106 FirstRunBubble* delegate = 74 FirstRunBubble* delegate =
107 FirstRunBubble::ShowBubble(NULL, anchor_widget->GetContentsView()); 75 FirstRunBubble::ShowBubble(nullptr, anchor_widget.GetContentsView());
108 EXPECT_TRUE(delegate != NULL); 76 EXPECT_TRUE(delegate);
109 77
110 anchor_widget->GetContentsView()->RequestFocus(); 78 anchor_widget.GetContentsView()->RequestFocus();
111 79
112 std::unique_ptr<WidgetClosingObserver> widget_observer( 80 views::test::WidgetClosingObserver widget_observer(delegate->GetWidget());
113 new WidgetClosingObserver(delegate->GetWidget()));
114 81
115 ui::EventDispatchDetails details = anchor_widget->GetNativeWindow() 82 ui::EventDispatchDetails details = anchor_widget.GetNativeWindow()
116 ->GetHost() 83 ->GetHost()
117 ->event_sink() 84 ->event_sink()
118 ->OnEventFromSource(event); 85 ->OnEventFromSource(event);
119 EXPECT_FALSE(details.dispatcher_destroyed); 86 EXPECT_FALSE(details.dispatcher_destroyed);
120 87
121 EXPECT_TRUE(widget_observer->widget_destroyed()); 88 EXPECT_TRUE(widget_observer.widget_closed());
122 } 89 }
123 90
124 TEST_F(FirstRunBubbleTest, CreateAndClose) { 91 TEST_F(FirstRunBubbleTest, CreateAndClose) {
125 // Create the anchor and parent widgets. 92 // Create the anchor and parent widgets.
126 views::Widget::InitParams params = 93 views::Widget::InitParams params =
127 CreateParams(views::Widget::InitParams::TYPE_WINDOW); 94 CreateParams(views::Widget::InitParams::TYPE_WINDOW);
128 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 95 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
129 std::unique_ptr<views::Widget> anchor_widget(new views::Widget); 96 views::Widget anchor_widget;
130 anchor_widget->Init(params); 97 anchor_widget.Init(params);
131 anchor_widget->Show(); 98 anchor_widget.Show();
132 99
133 FirstRunBubble* delegate = 100 FirstRunBubble* delegate =
134 FirstRunBubble::ShowBubble(NULL, anchor_widget->GetContentsView()); 101 FirstRunBubble::ShowBubble(nullptr, anchor_widget.GetContentsView());
135 EXPECT_TRUE(delegate != NULL); 102 EXPECT_TRUE(delegate);
136 delegate->GetWidget()->CloseNow(); 103 delegate->GetWidget()->CloseNow();
137 } 104 }
138 105
139 // Tests that the first run bubble is closed when keyboard events are 106 // Tests that the first run bubble is closed when keyboard events are
140 // dispatched to the anchor widget. 107 // dispatched to the anchor widget.
141 TEST_F(FirstRunBubbleTest, CloseBubbleOnKeyEvent) { 108 TEST_F(FirstRunBubbleTest, CloseBubbleOnKeyEvent) {
142 ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_ESCAPE, ui::EF_NONE); 109 ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_ESCAPE, ui::EF_NONE);
143 CreateAndCloseBubbleOnEventTest(&key_event); 110 CreateAndCloseBubbleOnEventTest(&key_event);
144 } 111 }
145 112
146 TEST_F(FirstRunBubbleTest, CloseBubbleOnMouseDownEvent) { 113 TEST_F(FirstRunBubbleTest, CloseBubbleOnMouseDownEvent) {
147 gfx::Point pt(110, 210); 114 gfx::Point pt(110, 210);
148 ui::MouseEvent mouse_down( 115 ui::MouseEvent mouse_down(
149 ui::ET_MOUSE_PRESSED, pt, pt, ui::EventTimeForNow(), 116 ui::ET_MOUSE_PRESSED, pt, pt, ui::EventTimeForNow(),
150 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); 117 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON);
151 CreateAndCloseBubbleOnEventTest(&mouse_down); 118 CreateAndCloseBubbleOnEventTest(&mouse_down);
152 } 119 }
153 120
154 TEST_F(FirstRunBubbleTest, CloseBubbleOnTouchDownEvent) { 121 TEST_F(FirstRunBubbleTest, CloseBubbleOnTouchDownEvent) {
155 ui::TouchEvent touch_down( 122 ui::TouchEvent touch_down(
156 ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), ui::EventTimeForNow(), 123 ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), ui::EventTimeForNow(),
157 ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0)); 124 ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0));
158 CreateAndCloseBubbleOnEventTest(&touch_down); 125 CreateAndCloseBubbleOnEventTest(&touch_down);
159 } 126 }
160 127
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698