Chromium Code Reviews| 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "chrome/browser/accessibility/accessibility_extension_api.h" | 10 #include "chrome/browser/accessibility/accessibility_extension_api.h" |
| 11 #include "chrome/browser/accessibility/accessibility_extension_api_constants.h" | |
| 11 #include "chrome/browser/ui/views/accessibility/accessibility_event_router_views .h" | 12 #include "chrome/browser/ui/views/accessibility/accessibility_event_router_views .h" |
| 12 #include "chrome/test/base/testing_profile.h" | 13 #include "chrome/test/base/testing_profile.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "ui/base/accessibility/accessibility_types.h" | |
| 14 #include "ui/base/accessibility/accessible_view_state.h" | 16 #include "ui/base/accessibility/accessible_view_state.h" |
| 15 #include "ui/views/controls/button/label_button.h" | 17 #include "ui/views/controls/button/label_button.h" |
| 16 #include "ui/views/controls/label.h" | 18 #include "ui/views/controls/label.h" |
| 17 #include "ui/views/layout/grid_layout.h" | 19 #include "ui/views/layout/grid_layout.h" |
| 18 #include "ui/views/test/test_views_delegate.h" | 20 #include "ui/views/test/test_views_delegate.h" |
| 19 #include "ui/views/widget/native_widget.h" | 21 #include "ui/views/widget/native_widget.h" |
| 20 #include "ui/views/widget/root_view.h" | 22 #include "ui/views/widget/root_view.h" |
| 21 #include "ui/views/widget/widget.h" | 23 #include "ui/views/widget/widget.h" |
| 22 #include "ui/views/widget/widget_delegate.h" | 24 #include "ui/views/widget/widget_delegate.h" |
| 23 | 25 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 96 | 98 |
| 97 private: | 99 private: |
| 98 string16 name_; | 100 string16 name_; |
| 99 ui::AccessibilityTypes::Role role_; | 101 ui::AccessibilityTypes::Role role_; |
| 100 DISALLOW_COPY_AND_ASSIGN(ViewWithNameAndRole); | 102 DISALLOW_COPY_AND_ASSIGN(ViewWithNameAndRole); |
| 101 }; | 103 }; |
| 102 | 104 |
| 103 class AccessibilityEventRouterViewsTest | 105 class AccessibilityEventRouterViewsTest |
| 104 : public testing::Test { | 106 : public testing::Test { |
| 105 public: | 107 public: |
| 106 AccessibilityEventRouterViewsTest() : focus_event_count_(0) { | 108 AccessibilityEventRouterViewsTest() : control_event_count_(0) { |
| 107 } | 109 } |
| 108 | 110 |
| 109 virtual void SetUp() { | 111 virtual void SetUp() { |
| 110 #if defined(OS_WIN) | 112 #if defined(OS_WIN) |
| 111 ole_initializer_.reset(new ui::ScopedOleInitializer()); | 113 ole_initializer_.reset(new ui::ScopedOleInitializer()); |
| 112 #endif | 114 #endif |
| 113 views::ViewsDelegate::views_delegate = new AccessibilityViewsDelegate(); | 115 views::ViewsDelegate::views_delegate = new AccessibilityViewsDelegate(); |
| 114 #if defined(USE_AURA) | 116 #if defined(USE_AURA) |
| 115 aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_)); | 117 aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_)); |
| 116 aura_test_helper_->SetUp(); | 118 aura_test_helper_->SetUp(); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 151 | 153 |
| 152 return widget; | 154 return widget; |
| 153 } | 155 } |
| 154 | 156 |
| 155 void EnableAccessibilityAndListenToFocusNotifications() { | 157 void EnableAccessibilityAndListenToFocusNotifications() { |
| 156 // Switch on accessibility event notifications. | 158 // Switch on accessibility event notifications. |
| 157 ExtensionAccessibilityEventRouter* accessibility_event_router = | 159 ExtensionAccessibilityEventRouter* accessibility_event_router = |
| 158 ExtensionAccessibilityEventRouter::GetInstance(); | 160 ExtensionAccessibilityEventRouter::GetInstance(); |
| 159 accessibility_event_router->SetAccessibilityEnabled(true); | 161 accessibility_event_router->SetAccessibilityEnabled(true); |
| 160 accessibility_event_router->SetControlEventCallbackForTesting(base::Bind( | 162 accessibility_event_router->SetControlEventCallbackForTesting(base::Bind( |
| 161 &AccessibilityEventRouterViewsTest::OnFocusEvent, | 163 &AccessibilityEventRouterViewsTest::OnControlEvent, |
| 162 base::Unretained(this))); | 164 base::Unretained(this))); |
| 163 } | 165 } |
| 164 | 166 |
| 165 void ClearCallback() { | 167 void ClearCallback() { |
| 166 ExtensionAccessibilityEventRouter* accessibility_event_router = | 168 ExtensionAccessibilityEventRouter* accessibility_event_router = |
| 167 ExtensionAccessibilityEventRouter::GetInstance(); | 169 ExtensionAccessibilityEventRouter::GetInstance(); |
| 168 accessibility_event_router->ClearControlEventCallback(); | 170 accessibility_event_router->ClearControlEventCallback(); |
| 169 } | 171 } |
| 170 | 172 |
| 171 protected: | 173 protected: |
| 172 // Handle Focus event. | 174 // Handle Focus event. |
| 173 virtual void OnFocusEvent(ui::AccessibilityTypes::Event event, | 175 virtual void OnControlEvent(ui::AccessibilityTypes::Event event, |
| 174 const AccessibilityControlInfo* info) { | 176 const AccessibilityControlInfo* info) { |
| 175 focus_event_count_++; | 177 control_event_count_++; |
| 178 last_control_type_ = info->type(); | |
| 176 last_control_name_ = info->name(); | 179 last_control_name_ = info->name(); |
| 177 last_control_context_ = info->context(); | 180 last_control_context_ = info->context(); |
| 178 } | 181 } |
| 179 | 182 |
| 180 base::MessageLoopForUI message_loop_; | 183 base::MessageLoopForUI message_loop_; |
| 181 int focus_event_count_; | 184 int control_event_count_; |
| 185 std::string last_control_type_; | |
| 182 std::string last_control_name_; | 186 std::string last_control_name_; |
| 183 std::string last_control_context_; | 187 std::string last_control_context_; |
| 184 TestingProfile profile_; | 188 TestingProfile profile_; |
| 185 #if defined(OS_WIN) | 189 #if defined(OS_WIN) |
| 186 scoped_ptr<ui::ScopedOleInitializer> ole_initializer_; | 190 scoped_ptr<ui::ScopedOleInitializer> ole_initializer_; |
| 187 #endif | 191 #endif |
| 188 #if defined(USE_AURA) | 192 #if defined(USE_AURA) |
| 189 scoped_ptr<aura::test::AuraTestHelper> aura_test_helper_; | 193 scoped_ptr<aura::test::AuraTestHelper> aura_test_helper_; |
| 190 #endif | 194 #endif |
| 191 }; | 195 }; |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 220 // callback. | 224 // callback. |
| 221 button1->RequestFocus(); | 225 button1->RequestFocus(); |
| 222 base::MessageLoop::current()->RunUntilIdle(); | 226 base::MessageLoop::current()->RunUntilIdle(); |
| 223 | 227 |
| 224 // Change the accessible name of button3. | 228 // Change the accessible name of button3. |
| 225 button3->SetAccessibleName(ASCIIToUTF16(kButton3NewASCII)); | 229 button3->SetAccessibleName(ASCIIToUTF16(kButton3NewASCII)); |
| 226 | 230 |
| 227 // Advance focus to the next button and test that we got the | 231 // Advance focus to the next button and test that we got the |
| 228 // expected notification with the name of button 2. | 232 // expected notification with the name of button 2. |
| 229 views::FocusManager* focus_manager = contents->GetWidget()->GetFocusManager(); | 233 views::FocusManager* focus_manager = contents->GetWidget()->GetFocusManager(); |
| 230 focus_event_count_ = 0; | 234 control_event_count_ = 0; |
| 231 focus_manager->AdvanceFocus(false); | 235 focus_manager->AdvanceFocus(false); |
| 232 base::MessageLoop::current()->RunUntilIdle(); | 236 base::MessageLoop::current()->RunUntilIdle(); |
| 233 EXPECT_EQ(1, focus_event_count_); | 237 EXPECT_EQ(1, control_event_count_); |
| 234 EXPECT_EQ(kButton2ASCII, last_control_name_); | 238 EXPECT_EQ(kButton2ASCII, last_control_name_); |
| 235 | 239 |
| 236 // Advance to button 3. Expect the new accessible name we assigned. | 240 // Advance to button 3. Expect the new accessible name we assigned. |
| 237 focus_manager->AdvanceFocus(false); | 241 focus_manager->AdvanceFocus(false); |
| 238 base::MessageLoop::current()->RunUntilIdle(); | 242 base::MessageLoop::current()->RunUntilIdle(); |
| 239 EXPECT_EQ(2, focus_event_count_); | 243 EXPECT_EQ(2, control_event_count_); |
| 240 EXPECT_EQ(kButton3NewASCII, last_control_name_); | 244 EXPECT_EQ(kButton3NewASCII, last_control_name_); |
| 241 | 245 |
| 242 // Advance to button 1 and check the notification. | 246 // Advance to button 1 and check the notification. |
| 243 focus_manager->AdvanceFocus(false); | 247 focus_manager->AdvanceFocus(false); |
| 244 base::MessageLoop::current()->RunUntilIdle(); | 248 base::MessageLoop::current()->RunUntilIdle(); |
| 245 EXPECT_EQ(3, focus_event_count_); | 249 EXPECT_EQ(3, control_event_count_); |
| 246 EXPECT_EQ(kButton1ASCII, last_control_name_); | 250 EXPECT_EQ(kButton1ASCII, last_control_name_); |
| 247 | 251 |
| 248 window->CloseNow(); | 252 window->CloseNow(); |
| 249 } | 253 } |
| 250 | 254 |
| 251 TEST_F(AccessibilityEventRouterViewsTest, TestToolbarContext) { | 255 TEST_F(AccessibilityEventRouterViewsTest, TestToolbarContext) { |
| 252 const char kToolbarNameASCII[] = "MyToolbar"; | 256 const char kToolbarNameASCII[] = "MyToolbar"; |
| 253 const char kButtonNameASCII[] = "MyButton"; | 257 const char kButtonNameASCII[] = "MyButton"; |
| 254 | 258 |
| 255 // Create a toolbar with a button. | 259 // Create a toolbar with a button. |
| 256 views::View* contents = new ViewWithNameAndRole( | 260 views::View* contents = new ViewWithNameAndRole( |
| 257 ASCIIToUTF16(kToolbarNameASCII), | 261 ASCIIToUTF16(kToolbarNameASCII), |
| 258 ui::AccessibilityTypes::ROLE_TOOLBAR); | 262 ui::AccessibilityTypes::ROLE_TOOLBAR); |
| 259 views::LabelButton* button = new views::LabelButton( | 263 views::LabelButton* button = new views::LabelButton( |
| 260 NULL, ASCIIToUTF16(kButtonNameASCII)); | 264 NULL, ASCIIToUTF16(kButtonNameASCII)); |
| 261 button->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); | 265 button->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); |
| 262 contents->AddChildView(button); | 266 contents->AddChildView(button); |
| 263 | 267 |
| 264 // Put the view in a window. | 268 // Put the view in a window. |
| 265 views::Widget* window = CreateWindowWithContents(contents); | 269 views::Widget* window = CreateWindowWithContents(contents); |
| 266 | 270 |
| 267 // Set focus to the button. | 271 // Set focus to the button. |
| 268 focus_event_count_ = 0; | 272 control_event_count_ = 0; |
| 269 button->RequestFocus(); | 273 button->RequestFocus(); |
| 270 | 274 |
| 271 base::MessageLoop::current()->RunUntilIdle(); | 275 base::MessageLoop::current()->RunUntilIdle(); |
| 272 | 276 |
| 273 // Test that we got the event with the expected name and context. | 277 // Test that we got the event with the expected name and context. |
| 274 EXPECT_EQ(kInitialFocusCount, focus_event_count_); | 278 EXPECT_EQ(kInitialFocusCount, control_event_count_); |
| 275 EXPECT_EQ(kButtonNameASCII, last_control_name_); | 279 EXPECT_EQ(kButtonNameASCII, last_control_name_); |
| 276 EXPECT_EQ(kToolbarNameASCII, last_control_context_); | 280 EXPECT_EQ(kToolbarNameASCII, last_control_context_); |
| 277 | 281 |
| 278 window->CloseNow(); | 282 window->CloseNow(); |
| 279 } | 283 } |
| 280 | 284 |
| 281 TEST_F(AccessibilityEventRouterViewsTest, TestAlertContext) { | 285 TEST_F(AccessibilityEventRouterViewsTest, TestAlertContext) { |
| 282 const char kAlertTextASCII[] = "MyAlertText"; | 286 const char kAlertTextASCII[] = "MyAlertText"; |
| 283 const char kButtonNameASCII[] = "MyButton"; | 287 const char kButtonNameASCII[] = "MyButton"; |
| 284 | 288 |
| 285 // Create an alert with static text and a button, similar to an infobar. | 289 // Create an alert with static text and a button, similar to an infobar. |
| 286 views::View* contents = new ViewWithNameAndRole( | 290 views::View* contents = new ViewWithNameAndRole( |
| 287 string16(), | 291 string16(), |
| 288 ui::AccessibilityTypes::ROLE_ALERT); | 292 ui::AccessibilityTypes::ROLE_ALERT); |
| 289 views::Label* label = new views::Label(ASCIIToUTF16(kAlertTextASCII)); | 293 views::Label* label = new views::Label(ASCIIToUTF16(kAlertTextASCII)); |
| 290 contents->AddChildView(label); | 294 contents->AddChildView(label); |
| 291 views::LabelButton* button = new views::LabelButton( | 295 views::LabelButton* button = new views::LabelButton( |
| 292 NULL, ASCIIToUTF16(kButtonNameASCII)); | 296 NULL, ASCIIToUTF16(kButtonNameASCII)); |
| 293 button->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); | 297 button->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); |
| 294 contents->AddChildView(button); | 298 contents->AddChildView(button); |
| 295 | 299 |
| 296 // Put the view in a window. | 300 // Put the view in a window. |
| 297 views::Widget* window = CreateWindowWithContents(contents); | 301 views::Widget* window = CreateWindowWithContents(contents); |
| 298 | 302 |
| 299 // Set focus to the button. | 303 // Set focus to the button. |
| 300 focus_event_count_ = 0; | 304 control_event_count_ = 0; |
| 301 button->RequestFocus(); | 305 button->RequestFocus(); |
| 302 | 306 |
| 303 base::MessageLoop::current()->RunUntilIdle(); | 307 base::MessageLoop::current()->RunUntilIdle(); |
| 304 | 308 |
| 305 // Test that we got the event with the expected name and context. | 309 // Test that we got the event with the expected name and context. |
| 306 EXPECT_EQ(kInitialFocusCount, focus_event_count_); | 310 EXPECT_EQ(kInitialFocusCount, control_event_count_); |
| 307 EXPECT_EQ(kButtonNameASCII, last_control_name_); | 311 EXPECT_EQ(kButtonNameASCII, last_control_name_); |
| 308 EXPECT_EQ(kAlertTextASCII, last_control_context_); | 312 EXPECT_EQ(kAlertTextASCII, last_control_context_); |
| 309 | 313 |
| 310 window->CloseNow(); | 314 window->CloseNow(); |
| 311 } | 315 } |
| 312 | 316 |
| 313 TEST_F(AccessibilityEventRouterViewsTest, StateChangeAfterNotification) { | 317 TEST_F(AccessibilityEventRouterViewsTest, StateChangeAfterNotification) { |
| 314 const char kContentsNameASCII[] = "Contents"; | 318 const char kContentsNameASCII[] = "Contents"; |
| 315 const char kOldNameASCII[] = "OldName"; | 319 const char kOldNameASCII[] = "OldName"; |
| 316 const char kNewNameASCII[] = "NewName"; | 320 const char kNewNameASCII[] = "NewName"; |
| 317 | 321 |
| 318 // Create a toolbar with a button. | 322 // Create a toolbar with a button. |
| 319 views::View* contents = new ViewWithNameAndRole( | 323 views::View* contents = new ViewWithNameAndRole( |
| 320 ASCIIToUTF16(kContentsNameASCII), | 324 ASCIIToUTF16(kContentsNameASCII), |
| 321 ui::AccessibilityTypes::ROLE_CLIENT); | 325 ui::AccessibilityTypes::ROLE_CLIENT); |
| 322 ViewWithNameAndRole* child = new ViewWithNameAndRole( | 326 ViewWithNameAndRole* child = new ViewWithNameAndRole( |
| 323 ASCIIToUTF16(kOldNameASCII), | 327 ASCIIToUTF16(kOldNameASCII), |
| 324 ui::AccessibilityTypes::ROLE_PUSHBUTTON); | 328 ui::AccessibilityTypes::ROLE_PUSHBUTTON); |
| 325 child->set_focusable(true); | 329 child->set_focusable(true); |
| 326 contents->AddChildView(child); | 330 contents->AddChildView(child); |
| 327 | 331 |
| 328 // Put the view in a window. | 332 // Put the view in a window. |
| 329 views::Widget* window = CreateWindowWithContents(contents); | 333 views::Widget* window = CreateWindowWithContents(contents); |
| 330 | 334 |
| 331 // Set focus to the child view. | 335 // Set focus to the child view. |
| 332 focus_event_count_ = 0; | 336 control_event_count_ = 0; |
| 333 child->RequestFocus(); | 337 child->RequestFocus(); |
| 334 | 338 |
| 335 // Change the child's name after the focus notification. | 339 // Change the child's name after the focus notification. |
| 336 child->set_name(ASCIIToUTF16(kNewNameASCII)); | 340 child->set_name(ASCIIToUTF16(kNewNameASCII)); |
| 337 | 341 |
| 338 // We shouldn't get the notification right away. | 342 // We shouldn't get the notification right away. |
| 339 EXPECT_EQ(0, focus_event_count_); | 343 EXPECT_EQ(0, control_event_count_); |
| 340 | 344 |
| 341 // Process anything in the event loop. Now we should get the notification, | 345 // Process anything in the event loop. Now we should get the notification, |
| 342 // and it should give us the new control name, not the old one. | 346 // and it should give us the new control name, not the old one. |
| 343 base::MessageLoop::current()->RunUntilIdle(); | 347 base::MessageLoop::current()->RunUntilIdle(); |
| 344 EXPECT_EQ(kInitialFocusCount, focus_event_count_); | 348 EXPECT_EQ(kInitialFocusCount, control_event_count_); |
| 345 EXPECT_EQ(kNewNameASCII, last_control_name_); | 349 EXPECT_EQ(kNewNameASCII, last_control_name_); |
| 346 | 350 |
| 347 window->CloseNow(); | 351 window->CloseNow(); |
| 348 } | 352 } |
| 349 | 353 |
| 350 TEST_F(AccessibilityEventRouterViewsTest, NotificationOnDeletedObject) { | 354 TEST_F(AccessibilityEventRouterViewsTest, NotificationOnDeletedObject) { |
| 351 const char kContentsNameASCII[] = "Contents"; | 355 const char kContentsNameASCII[] = "Contents"; |
| 352 const char kNameASCII[] = "OldName"; | 356 const char kNameASCII[] = "OldName"; |
| 353 | 357 |
| 354 // Create a toolbar with a button. | 358 // Create a toolbar with a button. |
| 355 views::View* contents = new ViewWithNameAndRole( | 359 views::View* contents = new ViewWithNameAndRole( |
| 356 ASCIIToUTF16(kContentsNameASCII), | 360 ASCIIToUTF16(kContentsNameASCII), |
| 357 ui::AccessibilityTypes::ROLE_CLIENT); | 361 ui::AccessibilityTypes::ROLE_CLIENT); |
| 358 ViewWithNameAndRole* child = new ViewWithNameAndRole( | 362 ViewWithNameAndRole* child = new ViewWithNameAndRole( |
| 359 ASCIIToUTF16(kNameASCII), | 363 ASCIIToUTF16(kNameASCII), |
| 360 ui::AccessibilityTypes::ROLE_PUSHBUTTON); | 364 ui::AccessibilityTypes::ROLE_PUSHBUTTON); |
| 361 child->set_focusable(true); | 365 child->set_focusable(true); |
| 362 contents->AddChildView(child); | 366 contents->AddChildView(child); |
| 363 | 367 |
| 364 // Put the view in a window. | 368 // Put the view in a window. |
| 365 views::Widget* window = CreateWindowWithContents(contents); | 369 views::Widget* window = CreateWindowWithContents(contents); |
| 366 | 370 |
| 367 // Set focus to the child view. | 371 // Set focus to the child view. |
| 368 focus_event_count_ = 0; | 372 control_event_count_ = 0; |
| 369 child->RequestFocus(); | 373 child->RequestFocus(); |
| 370 | 374 |
| 371 // Delete the child! | 375 // Delete the child! |
| 372 delete child; | 376 delete child; |
| 373 | 377 |
| 374 // We shouldn't get the notification right away. | 378 // We shouldn't get the notification right away. |
| 375 EXPECT_EQ(0, focus_event_count_); | 379 EXPECT_EQ(0, control_event_count_); |
| 376 | 380 |
| 377 // Process anything in the event loop. We shouldn't get a notification | 381 // Process anything in the event loop. We shouldn't get a notification |
| 378 // because the view is no longer valid, and this shouldn't crash. | 382 // because the view is no longer valid, and this shouldn't crash. |
| 379 base::MessageLoop::current()->RunUntilIdle(); | 383 base::MessageLoop::current()->RunUntilIdle(); |
| 380 EXPECT_EQ(0, focus_event_count_); | 384 EXPECT_EQ(0, control_event_count_); |
| 381 | 385 |
| 382 window->CloseNow(); | 386 window->CloseNow(); |
| 383 } | 387 } |
| 388 | |
| 389 TEST_F(AccessibilityEventRouterViewsTest, AlertsFromWindowAndControl) { | |
| 390 const char kButtonASCII[] = "Button"; | |
| 391 const char* kTypeAlert = extension_accessibility_api_constants::kTypeAlert; | |
| 392 const char* kTypeWindow = extension_accessibility_api_constants::kTypeWindow; | |
| 393 | |
| 394 // Create a contents view with a button. | |
| 395 views::View* contents = new views::View(); | |
| 396 views::LabelButton* button = new views::LabelButton( | |
| 397 NULL, ASCIIToUTF16(kButtonASCII)); | |
| 398 button->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); | |
| 399 contents->AddChildView(button); | |
| 400 | |
| 401 // Put the view in a window. | |
| 402 views::Widget* window = CreateWindowWithContents(contents); | |
| 403 window->Show(); | |
| 404 window->Activate(); | |
|
sky
2013/11/16 00:28:46
If you're relying on activation then this needs to
dmazzoni
2013/11/16 00:35:14
I think this is okay. This test is really a unit t
| |
| 405 | |
| 406 // Send an alert event from the button and let the event loop run. | |
| 407 control_event_count_ = 0; | |
| 408 button->NotifyAccessibilityEvent(ui::AccessibilityTypes::EVENT_ALERT, true); | |
| 409 base::MessageLoop::current()->RunUntilIdle(); | |
| 410 | |
| 411 EXPECT_EQ(kTypeAlert, last_control_type_); | |
| 412 EXPECT_EQ(1, control_event_count_); | |
| 413 EXPECT_EQ(kButtonASCII, last_control_name_); | |
| 414 | |
| 415 // Send an alert event from the window and let the event loop run. | |
| 416 control_event_count_ = 0; | |
| 417 window->GetRootView()->NotifyAccessibilityEvent( | |
| 418 ui::AccessibilityTypes::EVENT_ALERT, true); | |
| 419 base::MessageLoop::current()->RunUntilIdle(); | |
| 420 | |
| 421 EXPECT_EQ(1, control_event_count_); | |
| 422 EXPECT_EQ(kTypeWindow, last_control_type_); | |
| 423 | |
| 424 window->CloseNow(); | |
| 425 } | |
| OLD | NEW |