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

Side by Side Diff: content/browser/accessibility/browser_accessibility_win_unittest.cc

Issue 224803005: Refactor BrowserAccessibility to prepare for AXNode (re-land) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Win fix Created 6 years, 8 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 | Annotate | Revision Log
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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/strings/utf_string_conversions.h" 6 #include "base/strings/utf_string_conversions.h"
7 #include "base/win/scoped_bstr.h" 7 #include "base/win/scoped_bstr.h"
8 #include "base/win/scoped_comptr.h" 8 #include "base/win/scoped_comptr.h"
9 #include "base/win/scoped_variant.h" 9 #include "base/win/scoped_variant.h"
10 #include "content/browser/accessibility/browser_accessibility_manager.h" 10 #include "content/browser/accessibility/browser_accessibility_manager.h"
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 scoped_ptr<BrowserAccessibilityManager> manager( 611 scoped_ptr<BrowserAccessibilityManager> manager(
612 new BrowserAccessibilityManagerWin( 612 new BrowserAccessibilityManagerWin(
613 accessible_hwnd.get(), 613 accessible_hwnd.get(),
614 NULL, 614 NULL,
615 BrowserAccessibilityManagerWin::GetEmptyDocument(), 615 BrowserAccessibilityManagerWin::GetEmptyDocument(),
616 NULL, 616 NULL,
617 new CountedBrowserAccessibilityFactory())); 617 new CountedBrowserAccessibilityFactory()));
618 618
619 // Verify the root is as we expect by default. 619 // Verify the root is as we expect by default.
620 BrowserAccessibility* root = manager->GetRoot(); 620 BrowserAccessibility* root = manager->GetRoot();
621 EXPECT_EQ(0, root->renderer_id()); 621 EXPECT_EQ(0, root->GetId());
622 EXPECT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, root->role()); 622 EXPECT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, root->GetRole());
623 EXPECT_EQ(busy_state | readonly_state | enabled_state, root->state()); 623 EXPECT_EQ(busy_state | readonly_state | enabled_state, root->GetState());
624 624
625 // Tree with a child textfield. 625 // Tree with a child textfield.
626 ui::AXNodeData tree1_1; 626 ui::AXNodeData tree1_1;
627 tree1_1.id = 1; 627 tree1_1.id = 1;
628 tree1_1.role = ui::AX_ROLE_ROOT_WEB_AREA; 628 tree1_1.role = ui::AX_ROLE_ROOT_WEB_AREA;
629 tree1_1.child_ids.push_back(2); 629 tree1_1.child_ids.push_back(2);
630 630
631 ui::AXNodeData tree1_2; 631 ui::AXNodeData tree1_2;
632 tree1_2.id = 2; 632 tree1_2.id = 2;
633 tree1_2.role = ui::AX_ROLE_TEXT_FIELD; 633 tree1_2.role = ui::AX_ROLE_TEXT_FIELD;
634 634
635 // Process a load complete. 635 // Process a load complete.
636 std::vector<AccessibilityHostMsg_EventParams> params; 636 std::vector<AccessibilityHostMsg_EventParams> params;
637 params.push_back(AccessibilityHostMsg_EventParams()); 637 params.push_back(AccessibilityHostMsg_EventParams());
638 AccessibilityHostMsg_EventParams* msg = &params[0]; 638 AccessibilityHostMsg_EventParams* msg = &params[0];
639 msg->event_type = ui::AX_EVENT_LOAD_COMPLETE; 639 msg->event_type = ui::AX_EVENT_LOAD_COMPLETE;
640 msg->update.nodes.push_back(tree1_1); 640 msg->update.nodes.push_back(tree1_1);
641 msg->update.nodes.push_back(tree1_2); 641 msg->update.nodes.push_back(tree1_2);
642 msg->id = tree1_1.id; 642 msg->id = tree1_1.id;
643 manager->OnAccessibilityEvents(params); 643 manager->OnAccessibilityEvents(params);
644 644
645 // Save for later comparison. 645 // Save for later comparison.
646 BrowserAccessibility* acc1_2 = manager->GetFromRendererID(2); 646 BrowserAccessibility* acc1_2 = manager->GetFromRendererID(2);
647 647
648 // Verify the root has changed. 648 // Verify the root has changed.
649 EXPECT_NE(root, manager->GetRoot()); 649 EXPECT_NE(root, manager->GetRoot());
650 650
651 // And the proper child remains. 651 // And the proper child remains.
652 EXPECT_EQ(ui::AX_ROLE_TEXT_FIELD, acc1_2->role()); 652 EXPECT_EQ(ui::AX_ROLE_TEXT_FIELD, acc1_2->GetRole());
653 EXPECT_EQ(2, acc1_2->renderer_id()); 653 EXPECT_EQ(2, acc1_2->GetId());
654 654
655 // Tree with a child button. 655 // Tree with a child button.
656 ui::AXNodeData tree2_1; 656 ui::AXNodeData tree2_1;
657 tree2_1.id = 1; 657 tree2_1.id = 1;
658 tree2_1.role = ui::AX_ROLE_ROOT_WEB_AREA; 658 tree2_1.role = ui::AX_ROLE_ROOT_WEB_AREA;
659 tree2_1.child_ids.push_back(3); 659 tree2_1.child_ids.push_back(3);
660 660
661 ui::AXNodeData tree2_2; 661 ui::AXNodeData tree2_2;
662 tree2_2.id = 3; 662 tree2_2.id = 3;
663 tree2_2.role = ui::AX_ROLE_BUTTON; 663 tree2_2.role = ui::AX_ROLE_BUTTON;
664 664
665 msg->update.nodes.clear(); 665 msg->update.nodes.clear();
666 msg->update.nodes.push_back(tree2_1); 666 msg->update.nodes.push_back(tree2_1);
667 msg->update.nodes.push_back(tree2_2); 667 msg->update.nodes.push_back(tree2_2);
668 msg->id = tree2_1.id; 668 msg->id = tree2_1.id;
669 669
670 // Fire another load complete. 670 // Fire another load complete.
671 manager->OnAccessibilityEvents(params); 671 manager->OnAccessibilityEvents(params);
672 672
673 BrowserAccessibility* acc2_2 = manager->GetFromRendererID(3); 673 BrowserAccessibility* acc2_2 = manager->GetFromRendererID(3);
674 674
675 // Verify the root has changed. 675 // Verify the root has changed.
676 EXPECT_NE(root, manager->GetRoot()); 676 EXPECT_NE(root, manager->GetRoot());
677 677
678 // And the new child exists. 678 // And the new child exists.
679 EXPECT_EQ(ui::AX_ROLE_BUTTON, acc2_2->role()); 679 EXPECT_EQ(ui::AX_ROLE_BUTTON, acc2_2->GetRole());
680 EXPECT_EQ(3, acc2_2->renderer_id()); 680 EXPECT_EQ(3, acc2_2->GetId());
681 681
682 // Ensure we properly cleaned up. 682 // Ensure we properly cleaned up.
683 manager.reset(); 683 manager.reset();
684 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances()); 684 ASSERT_EQ(0, CountedBrowserAccessibility::num_instances());
685 } 685 }
686 686
687 TEST(BrowserAccessibilityManagerWinTest, TestAccessibleHWND) { 687 TEST(BrowserAccessibilityManagerWinTest, TestAccessibleHWND) {
688 HWND desktop_hwnd = GetDesktopWindow(); 688 HWND desktop_hwnd = GetDesktopWindow();
689 base::win::ScopedComPtr<IAccessible> desktop_hwnd_iaccessible; 689 base::win::ScopedComPtr<IAccessible> desktop_hwnd_iaccessible;
690 ASSERT_EQ(S_OK, AccessibleObjectFromWindow( 690 ASSERT_EQ(S_OK, AccessibleObjectFromWindow(
691 desktop_hwnd, OBJID_CLIENT, 691 desktop_hwnd, OBJID_CLIENT,
692 IID_IAccessible, 692 IID_IAccessible,
693 reinterpret_cast<void**>(desktop_hwnd_iaccessible.Receive()))); 693 reinterpret_cast<void**>(desktop_hwnd_iaccessible.Receive())));
694 694
695 scoped_ptr<content::LegacyRenderWidgetHostHWND> accessible_hwnd( 695 scoped_ptr<content::LegacyRenderWidgetHostHWND> accessible_hwnd(
696 content::LegacyRenderWidgetHostHWND::Create(GetDesktopWindow())); 696 content::LegacyRenderWidgetHostHWND::Create(GetDesktopWindow()));
697 697
698 scoped_ptr<BrowserAccessibilityManagerWin> manager( 698 scoped_ptr<BrowserAccessibilityManagerWin> manager(
699 new BrowserAccessibilityManagerWin( 699 new BrowserAccessibilityManagerWin(
700 accessible_hwnd.get(), 700 accessible_hwnd.get(),
701 desktop_hwnd_iaccessible, 701 desktop_hwnd_iaccessible,
702 BrowserAccessibilityManagerWin::GetEmptyDocument(), 702 BrowserAccessibilityManagerWin::GetEmptyDocument(),
703 NULL)); 703 NULL));
704 ASSERT_EQ(desktop_hwnd, manager->parent_hwnd()); 704 ASSERT_EQ(desktop_hwnd, manager->parent_hwnd());
705 705
706 // Enabling screen reader support and calling MaybeCallNotifyWinEvent 706 // Enabling screen reader support and calling MaybeCallNotifyWinEvent
707 // should trigger creating the AccessibleHWND, and we should now get a 707 // should trigger creating the AccessibleHWND, and we should now get a
708 // new parent_hwnd with the right window class to fool older screen 708 // new GetParent()hwnd with the right window class to fool older screen
709 // readers. 709 // readers.
710 BrowserAccessibilityStateImpl::GetInstance()->OnScreenReaderDetected(); 710 BrowserAccessibilityStateImpl::GetInstance()->OnScreenReaderDetected();
711 manager->MaybeCallNotifyWinEvent(0, 0); 711 manager->MaybeCallNotifyWinEvent(0, 0);
712 HWND new_parent_hwnd = manager->parent_hwnd(); 712 HWND new_parent_hwnd = manager->parent_hwnd();
713 ASSERT_NE(desktop_hwnd, new_parent_hwnd); 713 ASSERT_NE(desktop_hwnd, new_parent_hwnd);
714 WCHAR hwnd_class_name[256]; 714 WCHAR hwnd_class_name[256];
715 ASSERT_NE(0, GetClassName(new_parent_hwnd, hwnd_class_name, 256)); 715 ASSERT_NE(0, GetClassName(new_parent_hwnd, hwnd_class_name, 256));
716 ASSERT_STREQ(L"Chrome_RenderWidgetHostHWND", hwnd_class_name); 716 ASSERT_STREQ(L"Chrome_RenderWidgetHostHWND", hwnd_class_name);
717 717
718 // Destroy the hwnd explicitly; that should trigger clearing parent_hwnd(). 718 // Destroy the hwnd explicitly; that should trigger clearing GetParent()hwnd() .
719 DestroyWindow(new_parent_hwnd); 719 DestroyWindow(new_parent_hwnd);
720 ASSERT_EQ(NULL, manager->parent_hwnd()); 720 ASSERT_EQ(NULL, manager->parent_hwnd());
721 721
722 // Now create it again. 722 // Now create it again.
723 accessible_hwnd = content::LegacyRenderWidgetHostHWND::Create( 723 accessible_hwnd = content::LegacyRenderWidgetHostHWND::Create(
724 GetDesktopWindow()); 724 GetDesktopWindow());
725 manager.reset( 725 manager.reset(
726 new BrowserAccessibilityManagerWin( 726 new BrowserAccessibilityManagerWin(
727 accessible_hwnd.get(), 727 accessible_hwnd.get(),
728 desktop_hwnd_iaccessible, 728 desktop_hwnd_iaccessible,
729 BrowserAccessibilityManagerWin::GetEmptyDocument(), 729 BrowserAccessibilityManagerWin::GetEmptyDocument(),
730 NULL)); 730 NULL));
731 manager->MaybeCallNotifyWinEvent(0, 0); 731 manager->MaybeCallNotifyWinEvent(0, 0);
732 new_parent_hwnd = manager->parent_hwnd(); 732 new_parent_hwnd = manager->parent_hwnd();
733 ASSERT_FALSE(NULL == new_parent_hwnd); 733 ASSERT_FALSE(NULL == new_parent_hwnd);
734 734
735 // This time, destroy the manager first, make sure the AccessibleHWND doesn't 735 // This time, destroy the manager first, make sure the AccessibleHWND doesn't
736 // crash on destruction (to be caught by SyzyASAN or other tools). 736 // crash on destruction (to be caught by SyzyASAN or other tools).
737 manager.reset(NULL); 737 manager.reset(NULL);
738 } 738 }
739 739
740 } // namespace content 740 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698