OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/views/controls/menu/menu_controller.h" | 5 #include "ui/views/controls/menu/menu_controller.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 | 169 |
170 private: | 170 private: |
171 int outstanding_touches_; | 171 int outstanding_touches_; |
172 DISALLOW_COPY_AND_ASSIGN(TestEventHandler); | 172 DISALLOW_COPY_AND_ASSIGN(TestEventHandler); |
173 }; | 173 }; |
174 | 174 |
175 // A wrapper around MenuMessageLoop that can be used to track whether a message | 175 // A wrapper around MenuMessageLoop that can be used to track whether a message |
176 // loop is running or not. | 176 // loop is running or not. |
177 class TestMenuMessageLoop : public MenuMessageLoop { | 177 class TestMenuMessageLoop : public MenuMessageLoop { |
178 public: | 178 public: |
179 explicit TestMenuMessageLoop(scoped_ptr<MenuMessageLoop> original); | 179 explicit TestMenuMessageLoop(std::unique_ptr<MenuMessageLoop> original); |
180 ~TestMenuMessageLoop() override; | 180 ~TestMenuMessageLoop() override; |
181 | 181 |
182 bool is_running() const { return is_running_; } | 182 bool is_running() const { return is_running_; } |
183 | 183 |
184 private: | 184 private: |
185 // MenuMessageLoop: | 185 // MenuMessageLoop: |
186 void Run(MenuController* controller, | 186 void Run(MenuController* controller, |
187 Widget* owner, | 187 Widget* owner, |
188 bool nested_menu) override; | 188 bool nested_menu) override; |
189 void QuitNow() override; | 189 void QuitNow() override; |
190 void ClearOwner() override; | 190 void ClearOwner() override; |
191 | 191 |
192 scoped_ptr<MenuMessageLoop> original_; | 192 std::unique_ptr<MenuMessageLoop> original_; |
193 bool is_running_; | 193 bool is_running_; |
194 | 194 |
195 DISALLOW_COPY_AND_ASSIGN(TestMenuMessageLoop); | 195 DISALLOW_COPY_AND_ASSIGN(TestMenuMessageLoop); |
196 }; | 196 }; |
197 | 197 |
198 TestMenuMessageLoop::TestMenuMessageLoop(scoped_ptr<MenuMessageLoop> original) | 198 TestMenuMessageLoop::TestMenuMessageLoop( |
| 199 std::unique_ptr<MenuMessageLoop> original) |
199 : original_(std::move(original)) { | 200 : original_(std::move(original)) { |
200 DCHECK(original_); | 201 DCHECK(original_); |
201 } | 202 } |
202 | 203 |
203 TestMenuMessageLoop::~TestMenuMessageLoop() {} | 204 TestMenuMessageLoop::~TestMenuMessageLoop() {} |
204 | 205 |
205 void TestMenuMessageLoop::Run(MenuController* controller, | 206 void TestMenuMessageLoop::Run(MenuController* controller, |
206 Widget* owner, | 207 Widget* owner, |
207 bool nested_menu) { | 208 bool nested_menu) { |
208 is_running_ = true; | 209 is_running_ = true; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 event_generator_->PressKey(key_code, 0); | 263 event_generator_->PressKey(key_code, 0); |
263 } | 264 } |
264 | 265 |
265 #if defined(OS_LINUX) && defined(USE_X11) | 266 #if defined(OS_LINUX) && defined(USE_X11) |
266 void TestEventTargeter() { | 267 void TestEventTargeter() { |
267 { | 268 { |
268 // With the |ui::NullEventTargeter| instantiated and assigned we expect | 269 // With the |ui::NullEventTargeter| instantiated and assigned we expect |
269 // the menu to not handle the key event. | 270 // the menu to not handle the key event. |
270 aura::ScopedWindowTargeter scoped_targeter( | 271 aura::ScopedWindowTargeter scoped_targeter( |
271 owner()->GetNativeWindow()->GetRootWindow(), | 272 owner()->GetNativeWindow()->GetRootWindow(), |
272 scoped_ptr<ui::EventTargeter>(new ui::NullEventTargeter)); | 273 std::unique_ptr<ui::EventTargeter>(new ui::NullEventTargeter)); |
273 event_generator_->PressKey(ui::VKEY_ESCAPE, 0); | 274 event_generator_->PressKey(ui::VKEY_ESCAPE, 0); |
274 EXPECT_EQ(MenuController::EXIT_NONE, menu_exit_type()); | 275 EXPECT_EQ(MenuController::EXIT_NONE, menu_exit_type()); |
275 } | 276 } |
276 // Now that the targeter has been destroyed, expect to exit the menu | 277 // Now that the targeter has been destroyed, expect to exit the menu |
277 // normally when hitting escape. | 278 // normally when hitting escape. |
278 event_generator_->PressKey(ui::VKEY_ESCAPE, 0); | 279 event_generator_->PressKey(ui::VKEY_ESCAPE, 0); |
279 EXPECT_EQ(MenuController::EXIT_OUTERMOST, menu_exit_type()); | 280 EXPECT_EQ(MenuController::EXIT_OUTERMOST, menu_exit_type()); |
280 } | 281 } |
281 #endif // defined(OS_LINUX) && defined(USE_X11) | 282 #endif // defined(OS_LINUX) && defined(USE_X11) |
282 | 283 |
283 void TestAsynchronousNestedExitAll() { | 284 void TestAsynchronousNestedExitAll() { |
284 ASSERT_TRUE(test_message_loop_->is_running()); | 285 ASSERT_TRUE(test_message_loop_->is_running()); |
285 | 286 |
286 scoped_ptr<TestMenuControllerDelegate> nested_delegate( | 287 std::unique_ptr<TestMenuControllerDelegate> nested_delegate( |
287 new TestMenuControllerDelegate()); | 288 new TestMenuControllerDelegate()); |
288 | 289 |
289 menu_controller()->AddNestedDelegate(nested_delegate.get()); | 290 menu_controller()->AddNestedDelegate(nested_delegate.get()); |
290 menu_controller()->SetAsyncRun(true); | 291 menu_controller()->SetAsyncRun(true); |
291 | 292 |
292 int mouse_event_flags = 0; | 293 int mouse_event_flags = 0; |
293 MenuItemView* run_result = menu_controller()->Run( | 294 MenuItemView* run_result = menu_controller()->Run( |
294 owner(), nullptr, menu_item(), gfx::Rect(), MENU_ANCHOR_TOPLEFT, false, | 295 owner(), nullptr, menu_item(), gfx::Rect(), MENU_ANCHOR_TOPLEFT, false, |
295 false, &mouse_event_flags); | 296 false, &mouse_event_flags); |
296 EXPECT_EQ(run_result, nullptr); | 297 EXPECT_EQ(run_result, nullptr); |
297 | 298 |
298 // Exit all menus and check that the parent menu's message loop is | 299 // Exit all menus and check that the parent menu's message loop is |
299 // terminated. | 300 // terminated. |
300 menu_controller()->Cancel(MenuController::EXIT_ALL); | 301 menu_controller()->Cancel(MenuController::EXIT_ALL); |
301 EXPECT_EQ(MenuController::EXIT_ALL, menu_controller()->exit_type()); | 302 EXPECT_EQ(MenuController::EXIT_ALL, menu_controller()->exit_type()); |
302 EXPECT_FALSE(test_message_loop_->is_running()); | 303 EXPECT_FALSE(test_message_loop_->is_running()); |
303 } | 304 } |
304 | 305 |
305 void TestAsynchronousNestedExitOutermost() { | 306 void TestAsynchronousNestedExitOutermost() { |
306 ASSERT_TRUE(test_message_loop_->is_running()); | 307 ASSERT_TRUE(test_message_loop_->is_running()); |
307 | 308 |
308 scoped_ptr<TestMenuControllerDelegate> nested_delegate( | 309 std::unique_ptr<TestMenuControllerDelegate> nested_delegate( |
309 new TestMenuControllerDelegate()); | 310 new TestMenuControllerDelegate()); |
310 | 311 |
311 menu_controller()->AddNestedDelegate(nested_delegate.get()); | 312 menu_controller()->AddNestedDelegate(nested_delegate.get()); |
312 menu_controller()->SetAsyncRun(true); | 313 menu_controller()->SetAsyncRun(true); |
313 | 314 |
314 int mouse_event_flags = 0; | 315 int mouse_event_flags = 0; |
315 MenuItemView* run_result = menu_controller()->Run( | 316 MenuItemView* run_result = menu_controller()->Run( |
316 owner(), nullptr, menu_item(), gfx::Rect(), MENU_ANCHOR_TOPLEFT, false, | 317 owner(), nullptr, menu_item(), gfx::Rect(), MENU_ANCHOR_TOPLEFT, false, |
317 false, &mouse_event_flags); | 318 false, &mouse_event_flags); |
318 EXPECT_EQ(run_result, nullptr); | 319 EXPECT_EQ(run_result, nullptr); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 } | 410 } |
410 | 411 |
411 // Note that coordinates of events passed to MenuController must be in that of | 412 // Note that coordinates of events passed to MenuController must be in that of |
412 // the MenuScrollViewContainer. | 413 // the MenuScrollViewContainer. |
413 void ProcessMouseMoved(SubmenuView* source, const ui::MouseEvent& event) { | 414 void ProcessMouseMoved(SubmenuView* source, const ui::MouseEvent& event) { |
414 menu_controller_->OnMouseMoved(source, event); | 415 menu_controller_->OnMouseMoved(source, event); |
415 } | 416 } |
416 | 417 |
417 void RunMenu() { | 418 void RunMenu() { |
418 #if defined(USE_AURA) | 419 #if defined(USE_AURA) |
419 scoped_ptr<MenuKeyEventHandler> key_event_handler(new MenuKeyEventHandler); | 420 std::unique_ptr<MenuKeyEventHandler> key_event_handler( |
| 421 new MenuKeyEventHandler); |
420 #endif | 422 #endif |
421 | 423 |
422 menu_controller_->message_loop_depth_++; | 424 menu_controller_->message_loop_depth_++; |
423 menu_controller_->RunMessageLoop(false); | 425 menu_controller_->RunMessageLoop(false); |
424 menu_controller_->message_loop_depth_--; | 426 menu_controller_->message_loop_depth_--; |
425 } | 427 } |
426 | 428 |
427 void Accept(MenuItemView* item, int event_flags) { | 429 void Accept(MenuItemView* item, int event_flags) { |
428 menu_controller_->Accept(item, event_flags); | 430 menu_controller_->Accept(item, event_flags); |
429 } | 431 } |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 menu_controller_delegate_.reset(new TestMenuControllerDelegate); | 516 menu_controller_delegate_.reset(new TestMenuControllerDelegate); |
515 menu_controller_ = | 517 menu_controller_ = |
516 new MenuController(true, menu_controller_delegate_.get()); | 518 new MenuController(true, menu_controller_delegate_.get()); |
517 menu_controller_->owner_ = owner_.get(); | 519 menu_controller_->owner_ = owner_.get(); |
518 menu_controller_->showing_ = true; | 520 menu_controller_->showing_ = true; |
519 menu_controller_->SetSelection( | 521 menu_controller_->SetSelection( |
520 menu_item_.get(), MenuController::SELECTION_UPDATE_IMMEDIATELY); | 522 menu_item_.get(), MenuController::SELECTION_UPDATE_IMMEDIATELY); |
521 menu_item_->SetController(menu_controller_); | 523 menu_item_->SetController(menu_controller_); |
522 } | 524 } |
523 | 525 |
524 scoped_ptr<Widget> owner_; | 526 std::unique_ptr<Widget> owner_; |
525 scoped_ptr<ui::test::EventGenerator> event_generator_; | 527 std::unique_ptr<ui::test::EventGenerator> event_generator_; |
526 scoped_ptr<TestMenuItemViewShown> menu_item_; | 528 std::unique_ptr<TestMenuItemViewShown> menu_item_; |
527 scoped_ptr<TestMenuControllerDelegate> menu_controller_delegate_; | 529 std::unique_ptr<TestMenuControllerDelegate> menu_controller_delegate_; |
528 scoped_ptr<MenuDelegate> menu_delegate_; | 530 std::unique_ptr<MenuDelegate> menu_delegate_; |
529 MenuController* menu_controller_; | 531 MenuController* menu_controller_; |
530 TestMenuMessageLoop* test_message_loop_; | 532 TestMenuMessageLoop* test_message_loop_; |
531 | 533 |
532 DISALLOW_COPY_AND_ASSIGN(MenuControllerTest); | 534 DISALLOW_COPY_AND_ASSIGN(MenuControllerTest); |
533 }; | 535 }; |
534 | 536 |
535 #if defined(OS_LINUX) && defined(USE_X11) | 537 #if defined(OS_LINUX) && defined(USE_X11) |
536 // Tests that an event targeter which blocks events will be honored by the menu | 538 // Tests that an event targeter which blocks events will be honored by the menu |
537 // event dispatcher. | 539 // event dispatcher. |
538 TEST_F(MenuControllerTest, EventTargeter) { | 540 TEST_F(MenuControllerTest, EventTargeter) { |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
951 EXPECT_EQ(internal::MenuControllerDelegate::NOTIFY_DELEGATE, | 953 EXPECT_EQ(internal::MenuControllerDelegate::NOTIFY_DELEGATE, |
952 delegate->on_menu_closed_notify_type()); | 954 delegate->on_menu_closed_notify_type()); |
953 EXPECT_EQ(MenuController::EXIT_ALL, controller->exit_type()); | 955 EXPECT_EQ(MenuController::EXIT_ALL, controller->exit_type()); |
954 } | 956 } |
955 | 957 |
956 // Tests that an asynchrnous menu nested within a synchronous menu restores the | 958 // Tests that an asynchrnous menu nested within a synchronous menu restores the |
957 // previous MenuControllerDelegate and synchronous settings. | 959 // previous MenuControllerDelegate and synchronous settings. |
958 TEST_F(MenuControllerTest, AsynchronousNestedDelegate) { | 960 TEST_F(MenuControllerTest, AsynchronousNestedDelegate) { |
959 MenuController* controller = menu_controller(); | 961 MenuController* controller = menu_controller(); |
960 TestMenuControllerDelegate* delegate = menu_controller_delegate(); | 962 TestMenuControllerDelegate* delegate = menu_controller_delegate(); |
961 scoped_ptr<TestMenuControllerDelegate> nested_delegate( | 963 std::unique_ptr<TestMenuControllerDelegate> nested_delegate( |
962 new TestMenuControllerDelegate()); | 964 new TestMenuControllerDelegate()); |
963 | 965 |
964 ASSERT_FALSE(IsAsyncRun()); | 966 ASSERT_FALSE(IsAsyncRun()); |
965 controller->AddNestedDelegate(nested_delegate.get()); | 967 controller->AddNestedDelegate(nested_delegate.get()); |
966 controller->SetAsyncRun(true); | 968 controller->SetAsyncRun(true); |
967 | 969 |
968 EXPECT_TRUE(IsAsyncRun()); | 970 EXPECT_TRUE(IsAsyncRun()); |
969 EXPECT_EQ(nested_delegate.get(), GetCurrentDelegate()); | 971 EXPECT_EQ(nested_delegate.get(), GetCurrentDelegate()); |
970 | 972 |
971 int mouse_event_flags = 0; | 973 int mouse_event_flags = 0; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1027 EXPECT_EQ(internal::MenuControllerDelegate::NOTIFY_DELEGATE, | 1029 EXPECT_EQ(internal::MenuControllerDelegate::NOTIFY_DELEGATE, |
1028 controller_delegate->on_menu_closed_notify_type()); | 1030 controller_delegate->on_menu_closed_notify_type()); |
1029 EXPECT_EQ(MenuController::EXIT_ALL, controller->exit_type()); | 1031 EXPECT_EQ(MenuController::EXIT_ALL, controller->exit_type()); |
1030 } | 1032 } |
1031 | 1033 |
1032 // Tets that an asynchronous menu nested within an asynchronous menu closes both | 1034 // Tets that an asynchronous menu nested within an asynchronous menu closes both |
1033 // menus, and notifies both delegates. | 1035 // menus, and notifies both delegates. |
1034 TEST_F(MenuControllerTest, DoubleAsynchronousNested) { | 1036 TEST_F(MenuControllerTest, DoubleAsynchronousNested) { |
1035 MenuController* controller = menu_controller(); | 1037 MenuController* controller = menu_controller(); |
1036 TestMenuControllerDelegate* delegate = menu_controller_delegate(); | 1038 TestMenuControllerDelegate* delegate = menu_controller_delegate(); |
1037 scoped_ptr<TestMenuControllerDelegate> nested_delegate( | 1039 std::unique_ptr<TestMenuControllerDelegate> nested_delegate( |
1038 new TestMenuControllerDelegate()); | 1040 new TestMenuControllerDelegate()); |
1039 | 1041 |
1040 ASSERT_FALSE(IsAsyncRun()); | 1042 ASSERT_FALSE(IsAsyncRun()); |
1041 // Sets the run created in SetUp | 1043 // Sets the run created in SetUp |
1042 controller->SetAsyncRun(true); | 1044 controller->SetAsyncRun(true); |
1043 | 1045 |
1044 // Nested run | 1046 // Nested run |
1045 controller->AddNestedDelegate(nested_delegate.get()); | 1047 controller->AddNestedDelegate(nested_delegate.get()); |
1046 controller->SetAsyncRun(true); | 1048 controller->SetAsyncRun(true); |
1047 int mouse_event_flags = 0; | 1049 int mouse_event_flags = 0; |
1048 MenuItemView* run_result = | 1050 MenuItemView* run_result = |
1049 controller->Run(owner(), nullptr, menu_item(), gfx::Rect(), | 1051 controller->Run(owner(), nullptr, menu_item(), gfx::Rect(), |
1050 MENU_ANCHOR_TOPLEFT, false, false, &mouse_event_flags); | 1052 MENU_ANCHOR_TOPLEFT, false, false, &mouse_event_flags); |
1051 EXPECT_EQ(run_result, nullptr); | 1053 EXPECT_EQ(run_result, nullptr); |
1052 | 1054 |
1053 controller->CancelAll(); | 1055 controller->CancelAll(); |
1054 EXPECT_EQ(1, delegate->on_menu_closed_called()); | 1056 EXPECT_EQ(1, delegate->on_menu_closed_called()); |
1055 EXPECT_EQ(1, nested_delegate->on_menu_closed_called()); | 1057 EXPECT_EQ(1, nested_delegate->on_menu_closed_called()); |
1056 } | 1058 } |
1057 | 1059 |
1058 // Tests that an asynchronous menu nested within a synchronous menu does not | 1060 // Tests that an asynchronous menu nested within a synchronous menu does not |
1059 // crash when trying to repost events that occur outside of the bounds of the | 1061 // crash when trying to repost events that occur outside of the bounds of the |
1060 // menu. Instead a proper shutdown should occur. | 1062 // menu. Instead a proper shutdown should occur. |
1061 TEST_F(MenuControllerTest, AsynchronousRepostEvent) { | 1063 TEST_F(MenuControllerTest, AsynchronousRepostEvent) { |
1062 MenuController* controller = menu_controller(); | 1064 MenuController* controller = menu_controller(); |
1063 TestMenuControllerDelegate* delegate = menu_controller_delegate(); | 1065 TestMenuControllerDelegate* delegate = menu_controller_delegate(); |
1064 scoped_ptr<TestMenuControllerDelegate> nested_delegate( | 1066 std::unique_ptr<TestMenuControllerDelegate> nested_delegate( |
1065 new TestMenuControllerDelegate()); | 1067 new TestMenuControllerDelegate()); |
1066 | 1068 |
1067 ASSERT_FALSE(IsAsyncRun()); | 1069 ASSERT_FALSE(IsAsyncRun()); |
1068 | 1070 |
1069 controller->AddNestedDelegate(nested_delegate.get()); | 1071 controller->AddNestedDelegate(nested_delegate.get()); |
1070 controller->SetAsyncRun(true); | 1072 controller->SetAsyncRun(true); |
1071 | 1073 |
1072 EXPECT_TRUE(IsAsyncRun()); | 1074 EXPECT_TRUE(IsAsyncRun()); |
1073 EXPECT_EQ(nested_delegate.get(), GetCurrentDelegate()); | 1075 EXPECT_EQ(nested_delegate.get(), GetCurrentDelegate()); |
1074 | 1076 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1153 base::Bind(&MenuControllerTest::TestAsynchronousNestedExitOutermost, | 1155 base::Bind(&MenuControllerTest::TestAsynchronousNestedExitOutermost, |
1154 base::Unretained(this))); | 1156 base::Unretained(this))); |
1155 | 1157 |
1156 RunMenu(); | 1158 RunMenu(); |
1157 } | 1159 } |
1158 | 1160 |
1159 // Tests that having the MenuController deleted during RepostEvent does not | 1161 // Tests that having the MenuController deleted during RepostEvent does not |
1160 // cause a crash. ASAN bots should not detect use-after-free in MenuController. | 1162 // cause a crash. ASAN bots should not detect use-after-free in MenuController. |
1161 TEST_F(MenuControllerTest, AsynchronousRepostEventDeletesController) { | 1163 TEST_F(MenuControllerTest, AsynchronousRepostEventDeletesController) { |
1162 MenuController* controller = menu_controller(); | 1164 MenuController* controller = menu_controller(); |
1163 scoped_ptr<TestMenuControllerDelegate> nested_delegate( | 1165 std::unique_ptr<TestMenuControllerDelegate> nested_delegate( |
1164 new TestMenuControllerDelegate()); | 1166 new TestMenuControllerDelegate()); |
1165 | 1167 |
1166 ASSERT_FALSE(IsAsyncRun()); | 1168 ASSERT_FALSE(IsAsyncRun()); |
1167 | 1169 |
1168 controller->AddNestedDelegate(nested_delegate.get()); | 1170 controller->AddNestedDelegate(nested_delegate.get()); |
1169 controller->SetAsyncRun(true); | 1171 controller->SetAsyncRun(true); |
1170 | 1172 |
1171 EXPECT_TRUE(IsAsyncRun()); | 1173 EXPECT_TRUE(IsAsyncRun()); |
1172 EXPECT_EQ(nested_delegate.get(), GetCurrentDelegate()); | 1174 EXPECT_EQ(nested_delegate.get(), GetCurrentDelegate()); |
1173 | 1175 |
(...skipping 22 matching lines...) Expand all Loading... |
1196 | 1198 |
1197 // Close to remove observers before test TearDown | 1199 // Close to remove observers before test TearDown |
1198 sub_menu->Close(); | 1200 sub_menu->Close(); |
1199 EXPECT_EQ(1, nested_delegate->on_menu_closed_called()); | 1201 EXPECT_EQ(1, nested_delegate->on_menu_closed_called()); |
1200 } | 1202 } |
1201 | 1203 |
1202 // Tests that having the MenuController deleted during OnGestureEvent does not | 1204 // Tests that having the MenuController deleted during OnGestureEvent does not |
1203 // cause a crash. ASAN bots should not detect use-after-free in MenuController. | 1205 // cause a crash. ASAN bots should not detect use-after-free in MenuController. |
1204 TEST_F(MenuControllerTest, AsynchronousGestureDeletesController) { | 1206 TEST_F(MenuControllerTest, AsynchronousGestureDeletesController) { |
1205 MenuController* controller = menu_controller(); | 1207 MenuController* controller = menu_controller(); |
1206 scoped_ptr<TestMenuControllerDelegate> nested_delegate( | 1208 std::unique_ptr<TestMenuControllerDelegate> nested_delegate( |
1207 new TestMenuControllerDelegate()); | 1209 new TestMenuControllerDelegate()); |
1208 ASSERT_FALSE(IsAsyncRun()); | 1210 ASSERT_FALSE(IsAsyncRun()); |
1209 | 1211 |
1210 controller->AddNestedDelegate(nested_delegate.get()); | 1212 controller->AddNestedDelegate(nested_delegate.get()); |
1211 controller->SetAsyncRun(true); | 1213 controller->SetAsyncRun(true); |
1212 | 1214 |
1213 EXPECT_TRUE(IsAsyncRun()); | 1215 EXPECT_TRUE(IsAsyncRun()); |
1214 EXPECT_EQ(nested_delegate.get(), GetCurrentDelegate()); | 1216 EXPECT_EQ(nested_delegate.get(), GetCurrentDelegate()); |
1215 | 1217 |
1216 MenuItemView* item = menu_item(); | 1218 MenuItemView* item = menu_item(); |
(...skipping 16 matching lines...) Expand all Loading... |
1233 DestroyMenuControllerOnMenuClosed(nested_delegate.get()); | 1235 DestroyMenuControllerOnMenuClosed(nested_delegate.get()); |
1234 controller->OnGestureEvent(sub_menu, &event); | 1236 controller->OnGestureEvent(sub_menu, &event); |
1235 | 1237 |
1236 // Close to remove observers before test TearDown | 1238 // Close to remove observers before test TearDown |
1237 sub_menu->Close(); | 1239 sub_menu->Close(); |
1238 EXPECT_EQ(1, nested_delegate->on_menu_closed_called()); | 1240 EXPECT_EQ(1, nested_delegate->on_menu_closed_called()); |
1239 } | 1241 } |
1240 | 1242 |
1241 } // namespace test | 1243 } // namespace test |
1242 } // namespace views | 1244 } // namespace views |
OLD | NEW |