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

Side by Side Diff: content/shell/renderer/test_runner/web_ax_object_proxy.cc

Issue 469803003: Ensure there's no layout pending before accessing WebAXObject from TestRunner. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "content/shell/renderer/test_runner/web_ax_object_proxy.h" 5 #include "content/shell/renderer/test_runner/web_ax_object_proxy.h"
6 6
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "gin/handle.h" 8 #include "gin/handle.h"
9 #include "third_party/WebKit/public/platform/WebPoint.h" 9 #include "third_party/WebKit/public/platform/WebPoint.h"
10 #include "third_party/WebKit/public/platform/WebRect.h" 10 #include "third_party/WebKit/public/platform/WebRect.h"
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 .SetMethod("wordStart", &WebAXObjectProxy::WordStart) 549 .SetMethod("wordStart", &WebAXObjectProxy::WordStart)
550 .SetMethod("wordEnd", &WebAXObjectProxy::WordEnd) 550 .SetMethod("wordEnd", &WebAXObjectProxy::WordEnd)
551 // TODO(hajimehoshi): This is for backward compatibility. Remove them. 551 // TODO(hajimehoshi): This is for backward compatibility. Remove them.
552 .SetMethod("addNotificationListener", 552 .SetMethod("addNotificationListener",
553 &WebAXObjectProxy::SetNotificationListener) 553 &WebAXObjectProxy::SetNotificationListener)
554 .SetMethod("removeNotificationListener", 554 .SetMethod("removeNotificationListener",
555 &WebAXObjectProxy::UnsetNotificationListener); 555 &WebAXObjectProxy::UnsetNotificationListener);
556 } 556 }
557 557
558 v8::Handle<v8::Object> WebAXObjectProxy::GetChildAtIndex(unsigned index) { 558 v8::Handle<v8::Object> WebAXObjectProxy::GetChildAtIndex(unsigned index) {
559 return factory_->GetOrCreate(accessibility_object().childAt(index)); 559 return factory_->GetOrCreate(accessibility_object_.childAt(index));
560 } 560 }
561 561
562 bool WebAXObjectProxy::IsRoot() const { 562 bool WebAXObjectProxy::IsRoot() const {
563 return false; 563 return false;
564 } 564 }
565 565
566 bool WebAXObjectProxy::IsEqualToObject(const blink::WebAXObject& other) { 566 bool WebAXObjectProxy::IsEqualToObject(const blink::WebAXObject& other) {
567 return accessibility_object().equals(other); 567 return accessibility_object_.equals(other);
568 } 568 }
569 569
570 void WebAXObjectProxy::NotificationReceived( 570 void WebAXObjectProxy::NotificationReceived(
571 blink::WebFrame* frame, 571 blink::WebFrame* frame,
572 const std::string& notification_name) { 572 const std::string& notification_name) {
573 if (notification_callback_.IsEmpty()) 573 if (notification_callback_.IsEmpty())
574 return; 574 return;
575 575
576 v8::Handle<v8::Context> context = frame->mainWorldScriptContext(); 576 v8::Handle<v8::Context> context = frame->mainWorldScriptContext();
577 if (context.IsEmpty()) 577 if (context.IsEmpty())
(...skipping 11 matching lines...) Expand all
589 context->Global(), 589 context->Global(),
590 arraysize(argv), 590 arraysize(argv),
591 argv); 591 argv);
592 } 592 }
593 593
594 void WebAXObjectProxy::Reset() { 594 void WebAXObjectProxy::Reset() {
595 notification_callback_.Reset(); 595 notification_callback_.Reset();
596 } 596 }
597 597
598 std::string WebAXObjectProxy::Role() { 598 std::string WebAXObjectProxy::Role() {
599 return GetRole(accessibility_object()); 599 accessibility_object_.updateLayoutAndCheckValidity();
600 return GetRole(accessibility_object_);
600 } 601 }
601 602
602 std::string WebAXObjectProxy::Title() { 603 std::string WebAXObjectProxy::Title() {
603 return GetTitle(accessibility_object()); 604 accessibility_object_.updateLayoutAndCheckValidity();
605 return GetTitle(accessibility_object_);
604 } 606 }
605 607
606 std::string WebAXObjectProxy::Description() { 608 std::string WebAXObjectProxy::Description() {
607 return GetDescription(accessibility_object()); 609 accessibility_object_.updateLayoutAndCheckValidity();
610 return GetDescription(accessibility_object_);
608 } 611 }
609 612
610 std::string WebAXObjectProxy::HelpText() { 613 std::string WebAXObjectProxy::HelpText() {
611 return GetHelpText(accessibility_object()); 614 accessibility_object_.updateLayoutAndCheckValidity();
615 return GetHelpText(accessibility_object_);
612 } 616 }
613 617
614 std::string WebAXObjectProxy::StringValue() { 618 std::string WebAXObjectProxy::StringValue() {
615 return GetStringValue(accessibility_object()); 619 accessibility_object_.updateLayoutAndCheckValidity();
620 return GetStringValue(accessibility_object_);
616 } 621 }
617 622
618 int WebAXObjectProxy::X() { 623 int WebAXObjectProxy::X() {
619 accessibility_object_.updateBackingStoreAndCheckValidity(); 624 accessibility_object_.updateLayoutAndCheckValidity();
620 return accessibility_object().boundingBoxRect().x; 625 return accessibility_object_.boundingBoxRect().x;
621 } 626 }
622 627
623 int WebAXObjectProxy::Y() { 628 int WebAXObjectProxy::Y() {
624 accessibility_object_.updateBackingStoreAndCheckValidity(); 629 accessibility_object_.updateLayoutAndCheckValidity();
625 return accessibility_object().boundingBoxRect().y; 630 return accessibility_object_.boundingBoxRect().y;
626 } 631 }
627 632
628 int WebAXObjectProxy::Width() { 633 int WebAXObjectProxy::Width() {
629 accessibility_object_.updateBackingStoreAndCheckValidity(); 634 accessibility_object_.updateLayoutAndCheckValidity();
630 return accessibility_object().boundingBoxRect().width; 635 return accessibility_object_.boundingBoxRect().width;
631 } 636 }
632 637
633 int WebAXObjectProxy::Height() { 638 int WebAXObjectProxy::Height() {
634 accessibility_object_.updateBackingStoreAndCheckValidity(); 639 accessibility_object_.updateLayoutAndCheckValidity();
635 return accessibility_object().boundingBoxRect().height; 640 return accessibility_object_.boundingBoxRect().height;
636 } 641 }
637 642
638 int WebAXObjectProxy::IntValue() { 643 int WebAXObjectProxy::IntValue() {
639 if (accessibility_object().supportsRangeValue()) 644 accessibility_object_.updateLayoutAndCheckValidity();
640 return accessibility_object().valueForRange(); 645 if (accessibility_object_.supportsRangeValue())
641 else if (accessibility_object().role() == blink::WebAXRoleHeading) 646 return accessibility_object_.valueForRange();
642 return accessibility_object().headingLevel(); 647 else if (accessibility_object_.role() == blink::WebAXRoleHeading)
648 return accessibility_object_.headingLevel();
643 else 649 else
644 return atoi(accessibility_object().stringValue().utf8().data()); 650 return atoi(accessibility_object_.stringValue().utf8().data());
645 } 651 }
646 652
647 int WebAXObjectProxy::MinValue() { 653 int WebAXObjectProxy::MinValue() {
648 return accessibility_object().minValueForRange(); 654 accessibility_object_.updateLayoutAndCheckValidity();
655 return accessibility_object_.minValueForRange();
649 } 656 }
650 657
651 int WebAXObjectProxy::MaxValue() { 658 int WebAXObjectProxy::MaxValue() {
652 return accessibility_object().maxValueForRange(); 659 accessibility_object_.updateLayoutAndCheckValidity();
660 return accessibility_object_.maxValueForRange();
653 } 661 }
654 662
655 std::string WebAXObjectProxy::ValueDescription() { 663 std::string WebAXObjectProxy::ValueDescription() {
656 return GetValueDescription(accessibility_object()); 664 accessibility_object_.updateLayoutAndCheckValidity();
665 return GetValueDescription(accessibility_object_);
657 } 666 }
658 667
659 int WebAXObjectProxy::ChildrenCount() { 668 int WebAXObjectProxy::ChildrenCount() {
669 accessibility_object_.updateLayoutAndCheckValidity();
660 int count = 1; // Root object always has only one child, the WebView. 670 int count = 1; // Root object always has only one child, the WebView.
661 if (!IsRoot()) 671 if (!IsRoot())
662 count = accessibility_object().childCount(); 672 count = accessibility_object_.childCount();
663 return count; 673 return count;
664 } 674 }
665 675
666 int WebAXObjectProxy::InsertionPointLineNumber() { 676 int WebAXObjectProxy::InsertionPointLineNumber() {
667 if (!accessibility_object().isFocused()) 677 accessibility_object_.updateLayoutAndCheckValidity();
678 if (!accessibility_object_.isFocused())
668 return -1; 679 return -1;
669 return accessibility_object().selectionEndLineNumber(); 680 return accessibility_object_.selectionEndLineNumber();
670 } 681 }
671 682
672 std::string WebAXObjectProxy::SelectedTextRange() { 683 std::string WebAXObjectProxy::SelectedTextRange() {
673 unsigned selection_start = accessibility_object().selectionStart(); 684 accessibility_object_.updateLayoutAndCheckValidity();
674 unsigned selection_end = accessibility_object().selectionEnd(); 685 unsigned selection_start = accessibility_object_.selectionStart();
686 unsigned selection_end = accessibility_object_.selectionEnd();
675 return base::StringPrintf("{%d, %d}", 687 return base::StringPrintf("{%d, %d}",
676 selection_start, selection_end - selection_start); 688 selection_start, selection_end - selection_start);
677 } 689 }
678 690
679 bool WebAXObjectProxy::IsEnabled() { 691 bool WebAXObjectProxy::IsEnabled() {
680 return accessibility_object().isEnabled(); 692 accessibility_object_.updateLayoutAndCheckValidity();
693 return accessibility_object_.isEnabled();
681 } 694 }
682 695
683 bool WebAXObjectProxy::IsRequired() { 696 bool WebAXObjectProxy::IsRequired() {
684 return accessibility_object().isRequired(); 697 accessibility_object_.updateLayoutAndCheckValidity();
698 return accessibility_object_.isRequired();
685 } 699 }
686 700
687 bool WebAXObjectProxy::IsFocused() { 701 bool WebAXObjectProxy::IsFocused() {
688 return accessibility_object().isFocused(); 702 accessibility_object_.updateLayoutAndCheckValidity();
703 return accessibility_object_.isFocused();
689 } 704 }
690 705
691 bool WebAXObjectProxy::IsFocusable() { 706 bool WebAXObjectProxy::IsFocusable() {
692 return accessibility_object().canSetFocusAttribute(); 707 accessibility_object_.updateLayoutAndCheckValidity();
708 return accessibility_object_.canSetFocusAttribute();
693 } 709 }
694 710
695 bool WebAXObjectProxy::IsSelected() { 711 bool WebAXObjectProxy::IsSelected() {
696 return accessibility_object().isSelected(); 712 accessibility_object_.updateLayoutAndCheckValidity();
713 return accessibility_object_.isSelected();
697 } 714 }
698 715
699 bool WebAXObjectProxy::IsSelectable() { 716 bool WebAXObjectProxy::IsSelectable() {
700 return accessibility_object().canSetSelectedAttribute(); 717 accessibility_object_.updateLayoutAndCheckValidity();
718 return accessibility_object_.canSetSelectedAttribute();
701 } 719 }
702 720
703 bool WebAXObjectProxy::IsMultiSelectable() { 721 bool WebAXObjectProxy::IsMultiSelectable() {
704 return accessibility_object().isMultiSelectable(); 722 accessibility_object_.updateLayoutAndCheckValidity();
723 return accessibility_object_.isMultiSelectable();
705 } 724 }
706 725
707 bool WebAXObjectProxy::IsSelectedOptionActive() { 726 bool WebAXObjectProxy::IsSelectedOptionActive() {
708 return accessibility_object().isSelectedOptionActive(); 727 accessibility_object_.updateLayoutAndCheckValidity();
728 return accessibility_object_.isSelectedOptionActive();
709 } 729 }
710 730
711 bool WebAXObjectProxy::IsExpanded() { 731 bool WebAXObjectProxy::IsExpanded() {
712 return !accessibility_object().isCollapsed(); 732 accessibility_object_.updateLayoutAndCheckValidity();
733 return !accessibility_object_.isCollapsed();
713 } 734 }
714 735
715 bool WebAXObjectProxy::IsChecked() { 736 bool WebAXObjectProxy::IsChecked() {
716 return accessibility_object().isChecked(); 737 accessibility_object_.updateLayoutAndCheckValidity();
738 return accessibility_object_.isChecked();
717 } 739 }
718 740
719 bool WebAXObjectProxy::IsVisible() { 741 bool WebAXObjectProxy::IsVisible() {
720 return accessibility_object().isVisible(); 742 accessibility_object_.updateLayoutAndCheckValidity();
743 return accessibility_object_.isVisible();
721 } 744 }
722 745
723 bool WebAXObjectProxy::IsOffScreen() { 746 bool WebAXObjectProxy::IsOffScreen() {
724 return accessibility_object().isOffScreen(); 747 accessibility_object_.updateLayoutAndCheckValidity();
748 return accessibility_object_.isOffScreen();
725 } 749 }
726 750
727 bool WebAXObjectProxy::IsCollapsed() { 751 bool WebAXObjectProxy::IsCollapsed() {
728 return accessibility_object().isCollapsed(); 752 accessibility_object_.updateLayoutAndCheckValidity();
753 return accessibility_object_.isCollapsed();
729 } 754 }
730 755
731 bool WebAXObjectProxy::HasPopup() { 756 bool WebAXObjectProxy::HasPopup() {
732 return accessibility_object().ariaHasPopup(); 757 accessibility_object_.updateLayoutAndCheckValidity();
758 return accessibility_object_.ariaHasPopup();
733 } 759 }
734 760
735 bool WebAXObjectProxy::IsValid() { 761 bool WebAXObjectProxy::IsValid() {
736 return !accessibility_object().isDetached(); 762 accessibility_object_.updateLayoutAndCheckValidity();
763 return !accessibility_object_.isDetached();
737 } 764 }
738 765
739 bool WebAXObjectProxy::IsReadOnly() { 766 bool WebAXObjectProxy::IsReadOnly() {
740 return accessibility_object().isReadOnly(); 767 accessibility_object_.updateLayoutAndCheckValidity();
768 return accessibility_object_.isReadOnly();
741 } 769 }
742 770
743 std::string WebAXObjectProxy::Orientation() { 771 std::string WebAXObjectProxy::Orientation() {
744 return GetOrientation(accessibility_object()); 772 accessibility_object_.updateLayoutAndCheckValidity();
773 return GetOrientation(accessibility_object_);
745 } 774 }
746 775
747 int WebAXObjectProxy::ClickPointX() { 776 int WebAXObjectProxy::ClickPointX() {
748 return accessibility_object().clickPoint().x; 777 accessibility_object_.updateLayoutAndCheckValidity();
778 return accessibility_object_.clickPoint().x;
749 } 779 }
750 780
751 int WebAXObjectProxy::ClickPointY() { 781 int WebAXObjectProxy::ClickPointY() {
752 return accessibility_object().clickPoint().y; 782 accessibility_object_.updateLayoutAndCheckValidity();
783 return accessibility_object_.clickPoint().y;
753 } 784 }
754 785
755 int32_t WebAXObjectProxy::RowCount() { 786 int32_t WebAXObjectProxy::RowCount() {
756 return static_cast<int32_t>(accessibility_object().rowCount()); 787 accessibility_object_.updateLayoutAndCheckValidity();
788 return static_cast<int32_t>(accessibility_object_.rowCount());
757 } 789 }
758 790
759 int32_t WebAXObjectProxy::ColumnCount() { 791 int32_t WebAXObjectProxy::ColumnCount() {
760 return static_cast<int32_t>(accessibility_object().columnCount()); 792 accessibility_object_.updateLayoutAndCheckValidity();
793 return static_cast<int32_t>(accessibility_object_.columnCount());
761 } 794 }
762 795
763 bool WebAXObjectProxy::IsClickable() { 796 bool WebAXObjectProxy::IsClickable() {
764 return accessibility_object().isClickable(); 797 accessibility_object_.updateLayoutAndCheckValidity();
798 return accessibility_object_.isClickable();
765 } 799 }
766 800
767 std::string WebAXObjectProxy::AllAttributes() { 801 std::string WebAXObjectProxy::AllAttributes() {
768 return GetAttributes(accessibility_object()); 802 accessibility_object_.updateLayoutAndCheckValidity();
803 return GetAttributes(accessibility_object_);
769 } 804 }
770 805
771 std::string WebAXObjectProxy::AttributesOfChildren() { 806 std::string WebAXObjectProxy::AttributesOfChildren() {
807 accessibility_object_.updateLayoutAndCheckValidity();
772 AttributesCollector collector; 808 AttributesCollector collector;
773 unsigned size = accessibility_object().childCount(); 809 unsigned size = accessibility_object_.childCount();
774 for (unsigned i = 0; i < size; ++i) 810 for (unsigned i = 0; i < size; ++i)
775 collector.CollectAttributes(accessibility_object().childAt(i)); 811 collector.CollectAttributes(accessibility_object_.childAt(i));
776 return collector.attributes(); 812 return collector.attributes();
777 } 813 }
778 814
779 int WebAXObjectProxy::LineForIndex(int index) { 815 int WebAXObjectProxy::LineForIndex(int index) {
816 accessibility_object_.updateLayoutAndCheckValidity();
780 blink::WebVector<int> line_breaks; 817 blink::WebVector<int> line_breaks;
781 accessibility_object().lineBreaks(line_breaks); 818 accessibility_object_.lineBreaks(line_breaks);
782 int line = 0; 819 int line = 0;
783 int vector_size = static_cast<int>(line_breaks.size()); 820 int vector_size = static_cast<int>(line_breaks.size());
784 while (line < vector_size && line_breaks[line] <= index) 821 while (line < vector_size && line_breaks[line] <= index)
785 line++; 822 line++;
786 return line; 823 return line;
787 } 824 }
788 825
789 std::string WebAXObjectProxy::BoundsForRange(int start, int end) { 826 std::string WebAXObjectProxy::BoundsForRange(int start, int end) {
790 if (accessibility_object().role() != blink::WebAXRoleStaticText) 827 accessibility_object_.updateLayoutAndCheckValidity();
828 if (accessibility_object_.role() != blink::WebAXRoleStaticText)
791 return std::string(); 829 return std::string();
792 830
793 if (!accessibility_object_.updateBackingStoreAndCheckValidity()) 831 if (!accessibility_object_.updateLayoutAndCheckValidity())
794 return std::string(); 832 return std::string();
795 833
796 int len = end - start; 834 int len = end - start;
797 835
798 // Get the bounds for each character and union them into one large rectangle. 836 // Get the bounds for each character and union them into one large rectangle.
799 // This is just for testing so it doesn't need to be efficient. 837 // This is just for testing so it doesn't need to be efficient.
800 blink::WebRect bounds = BoundsForCharacter(accessibility_object(), start); 838 blink::WebRect bounds = BoundsForCharacter(accessibility_object_, start);
801 for (int i = 1; i < len; i++) { 839 for (int i = 1; i < len; i++) {
802 blink::WebRect next = BoundsForCharacter(accessibility_object(), start + i); 840 blink::WebRect next = BoundsForCharacter(accessibility_object_, start + i);
803 int right = std::max(bounds.x + bounds.width, next.x + next.width); 841 int right = std::max(bounds.x + bounds.width, next.x + next.width);
804 int bottom = std::max(bounds.y + bounds.height, next.y + next.height); 842 int bottom = std::max(bounds.y + bounds.height, next.y + next.height);
805 bounds.x = std::min(bounds.x, next.x); 843 bounds.x = std::min(bounds.x, next.x);
806 bounds.y = std::min(bounds.y, next.y); 844 bounds.y = std::min(bounds.y, next.y);
807 bounds.width = right - bounds.x; 845 bounds.width = right - bounds.x;
808 bounds.height = bottom - bounds.y; 846 bounds.height = bottom - bounds.y;
809 } 847 }
810 848
811 return base::StringPrintf("{x: %d, y: %d, width: %d, height: %d}", 849 return base::StringPrintf("{x: %d, y: %d, width: %d, height: %d}",
812 bounds.x, bounds.y, bounds.width, bounds.height); 850 bounds.x, bounds.y, bounds.width, bounds.height);
813 } 851 }
814 852
815 v8::Handle<v8::Object> WebAXObjectProxy::ChildAtIndex(int index) { 853 v8::Handle<v8::Object> WebAXObjectProxy::ChildAtIndex(int index) {
854 accessibility_object_.updateLayoutAndCheckValidity();
816 return GetChildAtIndex(index); 855 return GetChildAtIndex(index);
817 } 856 }
818 857
819 v8::Handle<v8::Object> WebAXObjectProxy::ElementAtPoint(int x, int y) { 858 v8::Handle<v8::Object> WebAXObjectProxy::ElementAtPoint(int x, int y) {
859 accessibility_object_.updateLayoutAndCheckValidity();
820 blink::WebPoint point(x, y); 860 blink::WebPoint point(x, y);
821 blink::WebAXObject obj = accessibility_object().hitTest(point); 861 blink::WebAXObject obj = accessibility_object_.hitTest(point);
822 if (obj.isNull()) 862 if (obj.isNull())
823 return v8::Handle<v8::Object>(); 863 return v8::Handle<v8::Object>();
824 864
825 return factory_->GetOrCreate(obj); 865 return factory_->GetOrCreate(obj);
826 } 866 }
827 867
828 v8::Handle<v8::Object> WebAXObjectProxy::TableHeader() { 868 v8::Handle<v8::Object> WebAXObjectProxy::TableHeader() {
829 blink::WebAXObject obj = accessibility_object().headerContainerObject(); 869 accessibility_object_.updateLayoutAndCheckValidity();
870 blink::WebAXObject obj = accessibility_object_.headerContainerObject();
830 if (obj.isNull()) 871 if (obj.isNull())
831 return v8::Handle<v8::Object>(); 872 return v8::Handle<v8::Object>();
832 873
833 return factory_->GetOrCreate(obj); 874 return factory_->GetOrCreate(obj);
834 } 875 }
835 876
836 std::string WebAXObjectProxy::RowIndexRange() { 877 std::string WebAXObjectProxy::RowIndexRange() {
837 unsigned row_index = accessibility_object().cellRowIndex(); 878 accessibility_object_.updateLayoutAndCheckValidity();
838 unsigned row_span = accessibility_object().cellRowSpan(); 879 unsigned row_index = accessibility_object_.cellRowIndex();
880 unsigned row_span = accessibility_object_.cellRowSpan();
839 return base::StringPrintf("{%d, %d}", row_index, row_span); 881 return base::StringPrintf("{%d, %d}", row_index, row_span);
840 } 882 }
841 883
842 std::string WebAXObjectProxy::ColumnIndexRange() { 884 std::string WebAXObjectProxy::ColumnIndexRange() {
843 unsigned column_index = accessibility_object().cellColumnIndex(); 885 accessibility_object_.updateLayoutAndCheckValidity();
844 unsigned column_span = accessibility_object().cellColumnSpan(); 886 unsigned column_index = accessibility_object_.cellColumnIndex();
887 unsigned column_span = accessibility_object_.cellColumnSpan();
845 return base::StringPrintf("{%d, %d}", column_index, column_span); 888 return base::StringPrintf("{%d, %d}", column_index, column_span);
846 } 889 }
847 890
848 v8::Handle<v8::Object> WebAXObjectProxy::CellForColumnAndRow( 891 v8::Handle<v8::Object> WebAXObjectProxy::CellForColumnAndRow(
849 int column, int row) { 892 int column, int row) {
893 accessibility_object_.updateLayoutAndCheckValidity();
850 blink::WebAXObject obj = 894 blink::WebAXObject obj =
851 accessibility_object().cellForColumnAndRow(column, row); 895 accessibility_object_.cellForColumnAndRow(column, row);
852 if (obj.isNull()) 896 if (obj.isNull())
853 return v8::Handle<v8::Object>(); 897 return v8::Handle<v8::Object>();
854 898
855 return factory_->GetOrCreate(obj); 899 return factory_->GetOrCreate(obj);
856 } 900 }
857 901
858 v8::Handle<v8::Object> WebAXObjectProxy::TitleUIElement() { 902 v8::Handle<v8::Object> WebAXObjectProxy::TitleUIElement() {
859 blink::WebAXObject obj = accessibility_object().titleUIElement(); 903 accessibility_object_.updateLayoutAndCheckValidity();
904 blink::WebAXObject obj = accessibility_object_.titleUIElement();
860 if (obj.isNull()) 905 if (obj.isNull())
861 return v8::Handle<v8::Object>(); 906 return v8::Handle<v8::Object>();
862 907
863 return factory_->GetOrCreate(obj); 908 return factory_->GetOrCreate(obj);
864 } 909 }
865 910
866 void WebAXObjectProxy::SetSelectedTextRange(int selection_start, 911 void WebAXObjectProxy::SetSelectedTextRange(int selection_start,
867 int length) { 912 int length) {
868 accessibility_object().setSelectedTextRange(selection_start, 913 accessibility_object_.updateLayoutAndCheckValidity();
914 accessibility_object_.setSelectedTextRange(selection_start,
869 selection_start + length); 915 selection_start + length);
870 } 916 }
871 917
872 bool WebAXObjectProxy::IsAttributeSettable(const std::string& attribute) { 918 bool WebAXObjectProxy::IsAttributeSettable(const std::string& attribute) {
919 accessibility_object_.updateLayoutAndCheckValidity();
873 bool settable = false; 920 bool settable = false;
874 if (attribute == "AXValue") 921 if (attribute == "AXValue")
875 settable = accessibility_object().canSetValueAttribute(); 922 settable = accessibility_object_.canSetValueAttribute();
876 return settable; 923 return settable;
877 } 924 }
878 925
879 bool WebAXObjectProxy::IsPressActionSupported() { 926 bool WebAXObjectProxy::IsPressActionSupported() {
880 return accessibility_object().canPress(); 927 accessibility_object_.updateLayoutAndCheckValidity();
928 return accessibility_object_.canPress();
881 } 929 }
882 930
883 bool WebAXObjectProxy::IsIncrementActionSupported() { 931 bool WebAXObjectProxy::IsIncrementActionSupported() {
884 return accessibility_object().canIncrement(); 932 accessibility_object_.updateLayoutAndCheckValidity();
933 return accessibility_object_.canIncrement();
885 } 934 }
886 935
887 bool WebAXObjectProxy::IsDecrementActionSupported() { 936 bool WebAXObjectProxy::IsDecrementActionSupported() {
888 return accessibility_object().canDecrement(); 937 accessibility_object_.updateLayoutAndCheckValidity();
938 return accessibility_object_.canDecrement();
889 } 939 }
890 940
891 v8::Handle<v8::Object> WebAXObjectProxy::ParentElement() { 941 v8::Handle<v8::Object> WebAXObjectProxy::ParentElement() {
892 blink::WebAXObject parent_object = accessibility_object().parentObject(); 942 accessibility_object_.updateLayoutAndCheckValidity();
943 blink::WebAXObject parent_object = accessibility_object_.parentObject();
893 while (parent_object.accessibilityIsIgnored()) 944 while (parent_object.accessibilityIsIgnored())
894 parent_object = parent_object.parentObject(); 945 parent_object = parent_object.parentObject();
895 return factory_->GetOrCreate(parent_object); 946 return factory_->GetOrCreate(parent_object);
896 } 947 }
897 948
898 void WebAXObjectProxy::Increment() { 949 void WebAXObjectProxy::Increment() {
899 accessibility_object().increment(); 950 accessibility_object_.updateLayoutAndCheckValidity();
951 accessibility_object_.increment();
900 } 952 }
901 953
902 void WebAXObjectProxy::Decrement() { 954 void WebAXObjectProxy::Decrement() {
903 accessibility_object().decrement(); 955 accessibility_object_.updateLayoutAndCheckValidity();
956 accessibility_object_.decrement();
904 } 957 }
905 958
906 void WebAXObjectProxy::ShowMenu() { 959 void WebAXObjectProxy::ShowMenu() {
907 } 960 }
908 961
909 void WebAXObjectProxy::Press() { 962 void WebAXObjectProxy::Press() {
910 accessibility_object().press(); 963 accessibility_object_.updateLayoutAndCheckValidity();
964 accessibility_object_.press();
911 } 965 }
912 966
913 bool WebAXObjectProxy::IsEqual(v8::Handle<v8::Object> proxy) { 967 bool WebAXObjectProxy::IsEqual(v8::Handle<v8::Object> proxy) {
914 WebAXObjectProxy* unwrapped_proxy = NULL; 968 WebAXObjectProxy* unwrapped_proxy = NULL;
915 if (!gin::ConvertFromV8(blink::mainThreadIsolate(), proxy, &unwrapped_proxy)) 969 if (!gin::ConvertFromV8(blink::mainThreadIsolate(), proxy, &unwrapped_proxy))
916 return false; 970 return false;
917 return unwrapped_proxy->IsEqualToObject(accessibility_object_); 971 return unwrapped_proxy->IsEqualToObject(accessibility_object_);
918 } 972 }
919 973
920 void WebAXObjectProxy::SetNotificationListener( 974 void WebAXObjectProxy::SetNotificationListener(
921 v8::Handle<v8::Function> callback) { 975 v8::Handle<v8::Function> callback) {
922 v8::Isolate* isolate = blink::mainThreadIsolate(); 976 v8::Isolate* isolate = blink::mainThreadIsolate();
923 notification_callback_.Reset(isolate, callback); 977 notification_callback_.Reset(isolate, callback);
924 } 978 }
925 979
926 void WebAXObjectProxy::UnsetNotificationListener() { 980 void WebAXObjectProxy::UnsetNotificationListener() {
927 notification_callback_.Reset(); 981 notification_callback_.Reset();
928 } 982 }
929 983
930 void WebAXObjectProxy::TakeFocus() { 984 void WebAXObjectProxy::TakeFocus() {
931 accessibility_object().setFocused(true); 985 accessibility_object_.updateLayoutAndCheckValidity();
986 accessibility_object_.setFocused(true);
932 } 987 }
933 988
934 void WebAXObjectProxy::ScrollToMakeVisible() { 989 void WebAXObjectProxy::ScrollToMakeVisible() {
935 accessibility_object().scrollToMakeVisible(); 990 accessibility_object_.updateLayoutAndCheckValidity();
991 accessibility_object_.scrollToMakeVisible();
936 } 992 }
937 993
938 void WebAXObjectProxy::ScrollToMakeVisibleWithSubFocus(int x, int y, 994 void WebAXObjectProxy::ScrollToMakeVisibleWithSubFocus(int x, int y,
939 int width, int height) { 995 int width, int height) {
940 accessibility_object().scrollToMakeVisibleWithSubFocus( 996 accessibility_object_.updateLayoutAndCheckValidity();
997 accessibility_object_.scrollToMakeVisibleWithSubFocus(
941 blink::WebRect(x, y, width, height)); 998 blink::WebRect(x, y, width, height));
942 } 999 }
943 1000
944 void WebAXObjectProxy::ScrollToGlobalPoint(int x, int y) { 1001 void WebAXObjectProxy::ScrollToGlobalPoint(int x, int y) {
945 accessibility_object().scrollToGlobalPoint(blink::WebPoint(x, y)); 1002 accessibility_object_.updateLayoutAndCheckValidity();
1003 accessibility_object_.scrollToGlobalPoint(blink::WebPoint(x, y));
946 } 1004 }
947 1005
948 int WebAXObjectProxy::WordStart(int character_index) { 1006 int WebAXObjectProxy::WordStart(int character_index) {
949 if (accessibility_object().role() != blink::WebAXRoleStaticText) 1007 accessibility_object_.updateLayoutAndCheckValidity();
1008 if (accessibility_object_.role() != blink::WebAXRoleStaticText)
950 return -1; 1009 return -1;
951 1010
952 int word_start, word_end; 1011 int word_start, word_end;
953 GetBoundariesForOneWord(accessibility_object(), character_index, 1012 GetBoundariesForOneWord(accessibility_object_, character_index,
954 word_start, word_end); 1013 word_start, word_end);
955 return word_start; 1014 return word_start;
956 } 1015 }
957 1016
958 int WebAXObjectProxy::WordEnd(int character_index) { 1017 int WebAXObjectProxy::WordEnd(int character_index) {
959 if (accessibility_object().role() != blink::WebAXRoleStaticText) 1018 accessibility_object_.updateLayoutAndCheckValidity();
1019 if (accessibility_object_.role() != blink::WebAXRoleStaticText)
960 return -1; 1020 return -1;
961 1021
962 int word_start, word_end; 1022 int word_start, word_end;
963 GetBoundariesForOneWord(accessibility_object(), character_index, 1023 GetBoundariesForOneWord(accessibility_object_, character_index,
964 word_start, word_end); 1024 word_start, word_end);
965 return word_end; 1025 return word_end;
966 } 1026 }
967 1027
968 RootWebAXObjectProxy::RootWebAXObjectProxy( 1028 RootWebAXObjectProxy::RootWebAXObjectProxy(
969 const blink::WebAXObject &object, Factory *factory) 1029 const blink::WebAXObject &object, Factory *factory)
970 : WebAXObjectProxy(object, factory) { 1030 : WebAXObjectProxy(object, factory) {
971 } 1031 }
972 1032
973 v8::Handle<v8::Object> RootWebAXObjectProxy::GetChildAtIndex(unsigned index) { 1033 v8::Handle<v8::Object> RootWebAXObjectProxy::GetChildAtIndex(unsigned index) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 v8::Handle<v8::Value> value_handle = gin::CreateHandle( 1097 v8::Handle<v8::Value> value_handle = gin::CreateHandle(
1038 isolate, new RootWebAXObjectProxy(object, this)).ToV8(); 1098 isolate, new RootWebAXObjectProxy(object, this)).ToV8();
1039 if (value_handle.IsEmpty()) 1099 if (value_handle.IsEmpty())
1040 return v8::Handle<v8::Object>(); 1100 return v8::Handle<v8::Object>();
1041 v8::Handle<v8::Object> handle = value_handle->ToObject(); 1101 v8::Handle<v8::Object> handle = value_handle->ToObject();
1042 elements_.Append(handle); 1102 elements_.Append(handle);
1043 return handle; 1103 return handle;
1044 } 1104 }
1045 1105
1046 } // namespace content 1106 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698