OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <atlbase.h> | 5 #include <atlbase.h> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "base/win/scoped_comptr.h" | 10 #include "base/win/scoped_comptr.h" |
11 #include "chrome/browser/automation/ui_controls.h" | 11 #include "chrome/browser/automation/ui_controls.h" |
12 #include "chrome/browser/ui/browser.h" | 12 #include "chrome/browser/ui/browser.h" |
13 #include "chrome/browser/ui/browser_window.h" | 13 #include "chrome/browser/ui/browser_window.h" |
14 #include "chrome/common/url_constants.h" | 14 #include "chrome/common/url_constants.h" |
15 #include "chrome/test/base/in_process_browser_test.h" | 15 #include "chrome/test/base/in_process_browser_test.h" |
16 #include "chrome/test/base/ui_test_utils.h" | 16 #include "chrome/test/base/ui_test_utils.h" |
17 #include "content/browser/renderer_host/render_view_host.h" | 17 #include "content/browser/renderer_host/render_view_host.h" |
18 #include "content/browser/renderer_host/render_widget_host_view_win.h" | 18 #include "content/browser/renderer_host/render_widget_host_view_win.h" |
19 #include "content/browser/tab_contents/tab_contents.h" | 19 #include "content/browser/tab_contents/tab_contents.h" |
| 20 #include "content/public/browser/notification_service.h" |
20 #include "content/public/browser/notification_types.h" | 21 #include "content/public/browser/notification_types.h" |
21 #include "third_party/iaccessible2/ia2_api_all.h" | 22 #include "third_party/iaccessible2/ia2_api_all.h" |
22 #include "third_party/isimpledom/ISimpleDOMNode.h" | 23 #include "third_party/isimpledom/ISimpleDOMNode.h" |
23 | 24 |
24 using std::auto_ptr; | 25 using std::auto_ptr; |
25 using std::vector; | 26 using std::vector; |
26 using std::wstring; | 27 using std::wstring; |
27 | 28 |
28 namespace { | 29 namespace { |
29 | 30 |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 child_accessible.Attach(GetAccessibleFromResultVariant(parent, child)); | 323 child_accessible.Attach(GetAccessibleFromResultVariant(parent, child)); |
323 ASSERT_TRUE(child_accessible.get()); | 324 ASSERT_TRUE(child_accessible.get()); |
324 (*child_checker)->CheckAccessible(child_accessible); | 325 (*child_checker)->CheckAccessible(child_accessible); |
325 } | 326 } |
326 } | 327 } |
327 | 328 |
328 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 329 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
329 TestRendererAccessibilityTree) { | 330 TestRendererAccessibilityTree) { |
330 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( | 331 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( |
331 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 332 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
332 NotificationService::AllSources()); | 333 content::NotificationService::AllSources()); |
333 | 334 |
334 // The initial accessible returned should have state STATE_SYSTEM_BUSY while | 335 // The initial accessible returned should have state STATE_SYSTEM_BUSY while |
335 // the accessibility tree is being requested from the renderer. | 336 // the accessibility tree is being requested from the renderer. |
336 AccessibleChecker document1_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 337 AccessibleChecker document1_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
337 document1_checker.SetExpectedState( | 338 document1_checker.SetExpectedState( |
338 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED | | 339 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED | |
339 STATE_SYSTEM_BUSY); | 340 STATE_SYSTEM_BUSY); |
340 document1_checker.CheckAccessible(GetRendererAccessible()); | 341 document1_checker.CheckAccessible(GetRendererAccessible()); |
341 | 342 |
342 // Wait for the initial accessibility tree to load. Busy state should clear. | 343 // Wait for the initial accessibility tree to load. Busy state should clear. |
343 tree_updated_observer1.Wait(); | 344 tree_updated_observer1.Wait(); |
344 document1_checker.SetExpectedState( | 345 document1_checker.SetExpectedState( |
345 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); | 346 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); |
346 document1_checker.CheckAccessible(GetRendererAccessible()); | 347 document1_checker.CheckAccessible(GetRendererAccessible()); |
347 | 348 |
348 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( | 349 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( |
349 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 350 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
350 NotificationService::AllSources()); | 351 content::NotificationService::AllSources()); |
351 GURL tree_url( | 352 GURL tree_url( |
352 "data:text/html,<html><head><title>Accessibility Win Test</title></head>" | 353 "data:text/html,<html><head><title>Accessibility Win Test</title></head>" |
353 "<body><input type='button' value='push' /><input type='checkbox' />" | 354 "<body><input type='button' value='push' /><input type='checkbox' />" |
354 "</body></html>"); | 355 "</body></html>"); |
355 browser()->OpenURL( | 356 browser()->OpenURL( |
356 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); | 357 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); |
357 tree_updated_observer2.Wait(); | 358 tree_updated_observer2.Wait(); |
358 | 359 |
359 // Check the browser's copy of the renderer accessibility tree. | 360 // Check the browser's copy of the renderer accessibility tree. |
360 AccessibleChecker button_checker(L"push", ROLE_SYSTEM_PUSHBUTTON, L"push"); | 361 AccessibleChecker button_checker(L"push", ROLE_SYSTEM_PUSHBUTTON, L"push"); |
(...skipping 23 matching lines...) Expand all Loading... |
384 // the page navagation. | 385 // the page navagation. |
385 CComBSTR name; | 386 CComBSTR name; |
386 hr = document_accessible->get_accName(CreateI4Variant(CHILDID_SELF), &name); | 387 hr = document_accessible->get_accName(CreateI4Variant(CHILDID_SELF), &name); |
387 ASSERT_EQ(E_FAIL, hr); | 388 ASSERT_EQ(E_FAIL, hr); |
388 } | 389 } |
389 | 390 |
390 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 391 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
391 TestNotificationActiveDescendantChanged) { | 392 TestNotificationActiveDescendantChanged) { |
392 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( | 393 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( |
393 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 394 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
394 NotificationService::AllSources()); | 395 content::NotificationService::AllSources()); |
395 GURL tree_url("data:text/html,<ul tabindex='-1' role='radiogroup'><li id='li'" | 396 GURL tree_url("data:text/html,<ul tabindex='-1' role='radiogroup'><li id='li'" |
396 ">li</li></ul>"); | 397 ">li</li></ul>"); |
397 browser()->OpenURL( | 398 browser()->OpenURL( |
398 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); | 399 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); |
399 GetRendererAccessible(); | 400 GetRendererAccessible(); |
400 tree_updated_observer1.Wait(); | 401 tree_updated_observer1.Wait(); |
401 | 402 |
402 // Check the browser's copy of the renderer accessibility tree. | 403 // Check the browser's copy of the renderer accessibility tree. |
403 AccessibleChecker list_marker_checker(L"", ROLE_SYSTEM_TEXT, L"\x2022"); | 404 AccessibleChecker list_marker_checker(L"", ROLE_SYSTEM_TEXT, L"\x2022"); |
404 AccessibleChecker static_text_checker(L"li", ROLE_SYSTEM_TEXT, L""); | 405 AccessibleChecker static_text_checker(L"li", ROLE_SYSTEM_TEXT, L""); |
405 AccessibleChecker list_item_checker(L"", ROLE_SYSTEM_LISTITEM, L""); | 406 AccessibleChecker list_item_checker(L"", ROLE_SYSTEM_LISTITEM, L""); |
406 list_item_checker.SetExpectedState( | 407 list_item_checker.SetExpectedState( |
407 STATE_SYSTEM_READONLY); | 408 STATE_SYSTEM_READONLY); |
408 AccessibleChecker radio_group_checker(L"", ROLE_SYSTEM_GROUPING, L""); | 409 AccessibleChecker radio_group_checker(L"", ROLE_SYSTEM_GROUPING, L""); |
409 radio_group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); | 410 radio_group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); |
410 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 411 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
411 list_item_checker.AppendExpectedChild(&list_marker_checker); | 412 list_item_checker.AppendExpectedChild(&list_marker_checker); |
412 list_item_checker.AppendExpectedChild(&static_text_checker); | 413 list_item_checker.AppendExpectedChild(&static_text_checker); |
413 radio_group_checker.AppendExpectedChild(&list_item_checker); | 414 radio_group_checker.AppendExpectedChild(&list_item_checker); |
414 document_checker.AppendExpectedChild(&radio_group_checker); | 415 document_checker.AppendExpectedChild(&radio_group_checker); |
415 document_checker.CheckAccessible(GetRendererAccessible()); | 416 document_checker.CheckAccessible(GetRendererAccessible()); |
416 | 417 |
417 // Set focus to the radio group. | 418 // Set focus to the radio group. |
418 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( | 419 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( |
419 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 420 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
420 NotificationService::AllSources()); | 421 content::NotificationService::AllSources()); |
421 ExecuteScript(L"document.body.children[0].focus()"); | 422 ExecuteScript(L"document.body.children[0].focus()"); |
422 tree_updated_observer2.Wait(); | 423 tree_updated_observer2.Wait(); |
423 | 424 |
424 // Check that the accessibility tree of the browser has been updated. | 425 // Check that the accessibility tree of the browser has been updated. |
425 radio_group_checker.SetExpectedState( | 426 radio_group_checker.SetExpectedState( |
426 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); | 427 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); |
427 document_checker.CheckAccessible(GetRendererAccessible()); | 428 document_checker.CheckAccessible(GetRendererAccessible()); |
428 | 429 |
429 // Set the active descendant of the radio group | 430 // Set the active descendant of the radio group |
430 ui_test_utils::WindowedNotificationObserver tree_updated_observer3( | 431 ui_test_utils::WindowedNotificationObserver tree_updated_observer3( |
431 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 432 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
432 NotificationService::AllSources()); | 433 content::NotificationService::AllSources()); |
433 ExecuteScript( | 434 ExecuteScript( |
434 L"document.body.children[0].setAttribute('aria-activedescendant', 'li')"); | 435 L"document.body.children[0].setAttribute('aria-activedescendant', 'li')"); |
435 tree_updated_observer3.Wait(); | 436 tree_updated_observer3.Wait(); |
436 | 437 |
437 // Check that the accessibility tree of the browser has been updated. | 438 // Check that the accessibility tree of the browser has been updated. |
438 list_item_checker.SetExpectedState( | 439 list_item_checker.SetExpectedState( |
439 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); | 440 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); |
440 radio_group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); | 441 radio_group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); |
441 document_checker.CheckAccessible(GetRendererAccessible()); | 442 document_checker.CheckAccessible(GetRendererAccessible()); |
442 } | 443 } |
443 | 444 |
444 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 445 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
445 TestNotificationCheckedStateChanged) { | 446 TestNotificationCheckedStateChanged) { |
446 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( | 447 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( |
447 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 448 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
448 NotificationService::AllSources()); | 449 content::NotificationService::AllSources()); |
449 GURL tree_url("data:text/html,<body><input type='checkbox' /></body>"); | 450 GURL tree_url("data:text/html,<body><input type='checkbox' /></body>"); |
450 browser()->OpenURL( | 451 browser()->OpenURL( |
451 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); | 452 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); |
452 GetRendererAccessible(); | 453 GetRendererAccessible(); |
453 tree_updated_observer1.Wait(); | 454 tree_updated_observer1.Wait(); |
454 | 455 |
455 // Check the browser's copy of the renderer accessibility tree. | 456 // Check the browser's copy of the renderer accessibility tree. |
456 AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L""); | 457 AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L""); |
457 checkbox_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); | 458 checkbox_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); |
458 AccessibleChecker body_checker(L"", L"body", L""); | 459 AccessibleChecker body_checker(L"", L"body", L""); |
459 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 460 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
460 body_checker.AppendExpectedChild(&checkbox_checker); | 461 body_checker.AppendExpectedChild(&checkbox_checker); |
461 document_checker.AppendExpectedChild(&body_checker); | 462 document_checker.AppendExpectedChild(&body_checker); |
462 document_checker.CheckAccessible(GetRendererAccessible()); | 463 document_checker.CheckAccessible(GetRendererAccessible()); |
463 | 464 |
464 // Check the checkbox. | 465 // Check the checkbox. |
465 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( | 466 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( |
466 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 467 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
467 NotificationService::AllSources()); | 468 content::NotificationService::AllSources()); |
468 ExecuteScript(L"document.body.children[0].checked=true"); | 469 ExecuteScript(L"document.body.children[0].checked=true"); |
469 tree_updated_observer2.Wait(); | 470 tree_updated_observer2.Wait(); |
470 | 471 |
471 // Check that the accessibility tree of the browser has been updated. | 472 // Check that the accessibility tree of the browser has been updated. |
472 checkbox_checker.SetExpectedState( | 473 checkbox_checker.SetExpectedState( |
473 STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE); | 474 STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE); |
474 document_checker.CheckAccessible(GetRendererAccessible()); | 475 document_checker.CheckAccessible(GetRendererAccessible()); |
475 } | 476 } |
476 | 477 |
477 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 478 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
478 TestNotificationChildrenChanged) { | 479 TestNotificationChildrenChanged) { |
479 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( | 480 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( |
480 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 481 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
481 NotificationService::AllSources()); | 482 content::NotificationService::AllSources()); |
482 // The role attribute causes the node to be in the accessibility tree. | 483 // The role attribute causes the node to be in the accessibility tree. |
483 GURL tree_url( | 484 GURL tree_url( |
484 "data:text/html,<body role=group></body>"); | 485 "data:text/html,<body role=group></body>"); |
485 browser()->OpenURL( | 486 browser()->OpenURL( |
486 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); | 487 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); |
487 GetRendererAccessible(); | 488 GetRendererAccessible(); |
488 tree_updated_observer1.Wait(); | 489 tree_updated_observer1.Wait(); |
489 | 490 |
490 // Check the browser's copy of the renderer accessibility tree. | 491 // Check the browser's copy of the renderer accessibility tree. |
491 AccessibleChecker body_checker(L"", L"body", L""); | 492 AccessibleChecker body_checker(L"", L"body", L""); |
492 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 493 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
493 document_checker.AppendExpectedChild(&body_checker); | 494 document_checker.AppendExpectedChild(&body_checker); |
494 document_checker.CheckAccessible(GetRendererAccessible()); | 495 document_checker.CheckAccessible(GetRendererAccessible()); |
495 | 496 |
496 // Change the children of the document body. | 497 // Change the children of the document body. |
497 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( | 498 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( |
498 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 499 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
499 NotificationService::AllSources()); | 500 content::NotificationService::AllSources()); |
500 ExecuteScript(L"document.body.innerHTML='<b>new text</b>'"); | 501 ExecuteScript(L"document.body.innerHTML='<b>new text</b>'"); |
501 tree_updated_observer2.Wait(); | 502 tree_updated_observer2.Wait(); |
502 | 503 |
503 // Check that the accessibility tree of the browser has been updated. | 504 // Check that the accessibility tree of the browser has been updated. |
504 AccessibleChecker text_checker(L"new text", ROLE_SYSTEM_TEXT, L""); | 505 AccessibleChecker text_checker(L"new text", ROLE_SYSTEM_TEXT, L""); |
505 body_checker.AppendExpectedChild(&text_checker); | 506 body_checker.AppendExpectedChild(&text_checker); |
506 document_checker.CheckAccessible(GetRendererAccessible()); | 507 document_checker.CheckAccessible(GetRendererAccessible()); |
507 } | 508 } |
508 | 509 |
509 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 510 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
510 TestNotificationChildrenChanged2) { | 511 TestNotificationChildrenChanged2) { |
511 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( | 512 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( |
512 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 513 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
513 NotificationService::AllSources()); | 514 content::NotificationService::AllSources()); |
514 // The role attribute causes the node to be in the accessibility tree. | 515 // The role attribute causes the node to be in the accessibility tree. |
515 GURL tree_url( | 516 GURL tree_url( |
516 "data:text/html,<div role=group style='visibility: hidden'>text" | 517 "data:text/html,<div role=group style='visibility: hidden'>text" |
517 "</div>"); | 518 "</div>"); |
518 browser()->OpenURL( | 519 browser()->OpenURL( |
519 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); | 520 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); |
520 GetRendererAccessible(); | 521 GetRendererAccessible(); |
521 tree_updated_observer1.Wait(); | 522 tree_updated_observer1.Wait(); |
522 | 523 |
523 // Check the accessible tree of the browser. | 524 // Check the accessible tree of the browser. |
524 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 525 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
525 document_checker.CheckAccessible(GetRendererAccessible()); | 526 document_checker.CheckAccessible(GetRendererAccessible()); |
526 | 527 |
527 // Change the children of the document body. | 528 // Change the children of the document body. |
528 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( | 529 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( |
529 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 530 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
530 NotificationService::AllSources()); | 531 content::NotificationService::AllSources()); |
531 ExecuteScript(L"document.body.children[0].style.visibility='visible'"); | 532 ExecuteScript(L"document.body.children[0].style.visibility='visible'"); |
532 tree_updated_observer2.Wait(); | 533 tree_updated_observer2.Wait(); |
533 | 534 |
534 // Check that the accessibility tree of the browser has been updated. | 535 // Check that the accessibility tree of the browser has been updated. |
535 AccessibleChecker static_text_checker(L"text", ROLE_SYSTEM_TEXT, L""); | 536 AccessibleChecker static_text_checker(L"text", ROLE_SYSTEM_TEXT, L""); |
536 AccessibleChecker div_checker(L"", L"div", L""); | 537 AccessibleChecker div_checker(L"", L"div", L""); |
537 document_checker.AppendExpectedChild(&div_checker); | 538 document_checker.AppendExpectedChild(&div_checker); |
538 div_checker.AppendExpectedChild(&static_text_checker); | 539 div_checker.AppendExpectedChild(&static_text_checker); |
539 document_checker.CheckAccessible(GetRendererAccessible()); | 540 document_checker.CheckAccessible(GetRendererAccessible()); |
540 } | 541 } |
541 | 542 |
542 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 543 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
543 TestNotificationFocusChanged) { | 544 TestNotificationFocusChanged) { |
544 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( | 545 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( |
545 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 546 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
546 NotificationService::AllSources()); | 547 content::NotificationService::AllSources()); |
547 // The role attribute causes the node to be in the accessibility tree. | 548 // The role attribute causes the node to be in the accessibility tree. |
548 GURL tree_url( | 549 GURL tree_url( |
549 "data:text/html,<div role=group tabindex='-1'></div>"); | 550 "data:text/html,<div role=group tabindex='-1'></div>"); |
550 browser()->OpenURL( | 551 browser()->OpenURL( |
551 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); | 552 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); |
552 GetRendererAccessible(); | 553 GetRendererAccessible(); |
553 tree_updated_observer1.Wait(); | 554 tree_updated_observer1.Wait(); |
554 | 555 |
555 // Check the browser's copy of the renderer accessibility tree. | 556 // Check the browser's copy of the renderer accessibility tree. |
556 AccessibleChecker div_checker(L"", L"div", L""); | 557 AccessibleChecker div_checker(L"", L"div", L""); |
557 div_checker.SetExpectedState( | 558 div_checker.SetExpectedState( |
558 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_OFFSCREEN | STATE_SYSTEM_READONLY); | 559 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_OFFSCREEN | STATE_SYSTEM_READONLY); |
559 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 560 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
560 document_checker.AppendExpectedChild(&div_checker); | 561 document_checker.AppendExpectedChild(&div_checker); |
561 document_checker.CheckAccessible(GetRendererAccessible()); | 562 document_checker.CheckAccessible(GetRendererAccessible()); |
562 | 563 |
563 // Focus the div in the document | 564 // Focus the div in the document |
564 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( | 565 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( |
565 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 566 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
566 NotificationService::AllSources()); | 567 content::NotificationService::AllSources()); |
567 ExecuteScript(L"document.body.children[0].focus()"); | 568 ExecuteScript(L"document.body.children[0].focus()"); |
568 tree_updated_observer2.Wait(); | 569 tree_updated_observer2.Wait(); |
569 | 570 |
570 // Check that the accessibility tree of the browser has been updated. | 571 // Check that the accessibility tree of the browser has been updated. |
571 div_checker.SetExpectedState( | 572 div_checker.SetExpectedState( |
572 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); | 573 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); |
573 document_checker.CheckAccessible(GetRendererAccessible()); | 574 document_checker.CheckAccessible(GetRendererAccessible()); |
574 | 575 |
575 // Focus the document accessible. This will un-focus the current node. | 576 // Focus the document accessible. This will un-focus the current node. |
576 ui_test_utils::WindowedNotificationObserver tree_updated_observer3( | 577 ui_test_utils::WindowedNotificationObserver tree_updated_observer3( |
577 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 578 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
578 NotificationService::AllSources()); | 579 content::NotificationService::AllSources()); |
579 base::win::ScopedComPtr<IAccessible> document_accessible( | 580 base::win::ScopedComPtr<IAccessible> document_accessible( |
580 GetRendererAccessible()); | 581 GetRendererAccessible()); |
581 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); | 582 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); |
582 HRESULT hr = document_accessible->accSelect( | 583 HRESULT hr = document_accessible->accSelect( |
583 SELFLAG_TAKEFOCUS, CreateI4Variant(CHILDID_SELF)); | 584 SELFLAG_TAKEFOCUS, CreateI4Variant(CHILDID_SELF)); |
584 ASSERT_EQ(S_OK, hr); | 585 ASSERT_EQ(S_OK, hr); |
585 tree_updated_observer3.Wait(); | 586 tree_updated_observer3.Wait(); |
586 | 587 |
587 // Check that the accessibility tree of the browser has been updated. | 588 // Check that the accessibility tree of the browser has been updated. |
588 div_checker.SetExpectedState( | 589 div_checker.SetExpectedState( |
589 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); | 590 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); |
590 document_checker.CheckAccessible(GetRendererAccessible()); | 591 document_checker.CheckAccessible(GetRendererAccessible()); |
591 } | 592 } |
592 | 593 |
593 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 594 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
594 TestNotificationValueChanged) { | 595 TestNotificationValueChanged) { |
595 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( | 596 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( |
596 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 597 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
597 NotificationService::AllSources()); | 598 content::NotificationService::AllSources()); |
598 GURL tree_url("data:text/html,<body><input type='text' value='old value'/>" | 599 GURL tree_url("data:text/html,<body><input type='text' value='old value'/>" |
599 "</body>"); | 600 "</body>"); |
600 browser()->OpenURL( | 601 browser()->OpenURL( |
601 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); | 602 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); |
602 GetRendererAccessible(); | 603 GetRendererAccessible(); |
603 tree_updated_observer1.Wait(); | 604 tree_updated_observer1.Wait(); |
604 | 605 |
605 // Check the browser's copy of the renderer accessibility tree. | 606 // Check the browser's copy of the renderer accessibility tree. |
606 | 607 |
607 AccessibleChecker text_field_checker(L"", ROLE_SYSTEM_TEXT, L"old value"); | 608 AccessibleChecker text_field_checker(L"", ROLE_SYSTEM_TEXT, L"old value"); |
608 text_field_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); | 609 text_field_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); |
609 AccessibleChecker body_checker(L"", L"body", L""); | 610 AccessibleChecker body_checker(L"", L"body", L""); |
610 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 611 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
611 body_checker.AppendExpectedChild(&text_field_checker); | 612 body_checker.AppendExpectedChild(&text_field_checker); |
612 document_checker.AppendExpectedChild(&body_checker); | 613 document_checker.AppendExpectedChild(&body_checker); |
613 document_checker.CheckAccessible(GetRendererAccessible()); | 614 document_checker.CheckAccessible(GetRendererAccessible()); |
614 | 615 |
615 // Set the value of the text control | 616 // Set the value of the text control |
616 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( | 617 ui_test_utils::WindowedNotificationObserver tree_updated_observer2( |
617 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 618 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
618 NotificationService::AllSources()); | 619 content::NotificationService::AllSources()); |
619 ExecuteScript(L"document.body.children[0].value='new value'"); | 620 ExecuteScript(L"document.body.children[0].value='new value'"); |
620 tree_updated_observer2.Wait(); | 621 tree_updated_observer2.Wait(); |
621 | 622 |
622 // Check that the accessibility tree of the browser has been updated. | 623 // Check that the accessibility tree of the browser has been updated. |
623 text_field_checker.SetExpectedValue(L"new value"); | 624 text_field_checker.SetExpectedValue(L"new value"); |
624 document_checker.CheckAccessible(GetRendererAccessible()); | 625 document_checker.CheckAccessible(GetRendererAccessible()); |
625 } | 626 } |
626 | 627 |
627 // This test verifies that the web content's accessibility tree is a | 628 // This test verifies that the web content's accessibility tree is a |
628 // descendant of the main browser window's accessibility tree, so that | 629 // descendant of the main browser window's accessibility tree, so that |
629 // tools like AccExplorer32 or AccProbe can be used to examine Chrome's | 630 // tools like AccExplorer32 or AccProbe can be used to examine Chrome's |
630 // accessibility support. | 631 // accessibility support. |
631 // | 632 // |
632 // If you made a change and this test now fails, check that the NativeViewHost | 633 // If you made a change and this test now fails, check that the NativeViewHost |
633 // that wraps the tab contents returns the IAccessible implementation | 634 // that wraps the tab contents returns the IAccessible implementation |
634 // provided by RenderWidgetHostViewWin in GetNativeViewAccessible(). | 635 // provided by RenderWidgetHostViewWin in GetNativeViewAccessible(). |
635 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 636 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
636 ContainsRendererAccessibilityTree) { | 637 ContainsRendererAccessibilityTree) { |
637 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( | 638 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( |
638 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 639 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
639 NotificationService::AllSources()); | 640 content::NotificationService::AllSources()); |
640 GURL tree_url("data:text/html,<html><head><title>MyDocument</title></head>" | 641 GURL tree_url("data:text/html,<html><head><title>MyDocument</title></head>" |
641 "<body>Content</body></html>"); | 642 "<body>Content</body></html>"); |
642 browser()->OpenURL( | 643 browser()->OpenURL( |
643 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); | 644 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); |
644 GetRendererAccessible(); | 645 GetRendererAccessible(); |
645 tree_updated_observer1.Wait(); | 646 tree_updated_observer1.Wait(); |
646 | 647 |
647 // Get the accessibility object for the browser window. | 648 // Get the accessibility object for the browser window. |
648 HWND browser_hwnd = browser()->window()->GetNativeHandle(); | 649 HWND browser_hwnd = browser()->window()->GetNativeHandle(); |
649 base::win::ScopedComPtr<IAccessible> browser_accessible; | 650 base::win::ScopedComPtr<IAccessible> browser_accessible; |
650 HRESULT hr = AccessibleObjectFromWindow( | 651 HRESULT hr = AccessibleObjectFromWindow( |
651 browser_hwnd, | 652 browser_hwnd, |
652 OBJID_WINDOW, | 653 OBJID_WINDOW, |
653 IID_IAccessible, | 654 IID_IAccessible, |
654 reinterpret_cast<void**>(browser_accessible.Receive())); | 655 reinterpret_cast<void**>(browser_accessible.Receive())); |
655 ASSERT_EQ(S_OK, hr); | 656 ASSERT_EQ(S_OK, hr); |
656 | 657 |
657 bool found = false; | 658 bool found = false; |
658 RecursiveFindNodeInAccessibilityTree( | 659 RecursiveFindNodeInAccessibilityTree( |
659 browser_accessible.get(), ROLE_SYSTEM_DOCUMENT, L"MyDocument", 0, &found); | 660 browser_accessible.get(), ROLE_SYSTEM_DOCUMENT, L"MyDocument", 0, &found); |
660 ASSERT_EQ(found, true); | 661 ASSERT_EQ(found, true); |
661 } | 662 } |
662 | 663 |
663 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 664 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
664 SupportsISimpleDOM) { | 665 SupportsISimpleDOM) { |
665 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( | 666 ui_test_utils::WindowedNotificationObserver tree_updated_observer1( |
666 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 667 content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
667 NotificationService::AllSources()); | 668 content::NotificationService::AllSources()); |
668 GURL tree_url("data:text/html,<body><input type='checkbox' /></body>"); | 669 GURL tree_url("data:text/html,<body><input type='checkbox' /></body>"); |
669 browser()->OpenURL( | 670 browser()->OpenURL( |
670 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); | 671 tree_url, GURL(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED); |
671 GetRendererAccessible(); | 672 GetRendererAccessible(); |
672 tree_updated_observer1.Wait(); | 673 tree_updated_observer1.Wait(); |
673 | 674 |
674 // Get the IAccessible object for the document. | 675 // Get the IAccessible object for the document. |
675 base::win::ScopedComPtr<IAccessible> document_accessible( | 676 base::win::ScopedComPtr<IAccessible> document_accessible( |
676 GetRendererAccessible()); | 677 GetRendererAccessible()); |
677 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); | 678 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 ASSERT_EQ(S_OK, hr); | 721 ASSERT_EQ(S_OK, hr); |
721 hr = checkbox_isimpledomnode->get_nodeInfo( | 722 hr = checkbox_isimpledomnode->get_nodeInfo( |
722 &node_name, &name_space_id, &node_value, &num_children, &unique_id, | 723 &node_name, &name_space_id, &node_value, &num_children, &unique_id, |
723 &node_type); | 724 &node_type); |
724 ASSERT_EQ(S_OK, hr); | 725 ASSERT_EQ(S_OK, hr); |
725 EXPECT_STREQ(L"input", wstring(node_name, SysStringLen(node_name)).c_str()); | 726 EXPECT_STREQ(L"input", wstring(node_name, SysStringLen(node_name)).c_str()); |
726 EXPECT_EQ(NODETYPE_ELEMENT, node_type); | 727 EXPECT_EQ(NODETYPE_ELEMENT, node_type); |
727 EXPECT_EQ(0, num_children); | 728 EXPECT_EQ(0, num_children); |
728 } | 729 } |
729 } // namespace. | 730 } // namespace. |
OLD | NEW |