| OLD | NEW |
| 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 Loading... |
| 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 |
| OLD | NEW |