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

Side by Side Diff: Source/core/accessibility/AXObjectCache.cpp

Issue 23819007: Have Node::document() return a reference instead of a pointer (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase on master Created 7 years, 3 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 /* 1 /*
2 * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 { 124 {
125 // Find the corresponding accessibility object for the HTMLAreaElement. This should be 125 // Find the corresponding accessibility object for the HTMLAreaElement. This should be
126 // in the list of children for its corresponding image. 126 // in the list of children for its corresponding image.
127 if (!areaElement) 127 if (!areaElement)
128 return 0; 128 return 0;
129 129
130 HTMLImageElement* imageElement = areaElement->imageElement(); 130 HTMLImageElement* imageElement = areaElement->imageElement();
131 if (!imageElement) 131 if (!imageElement)
132 return 0; 132 return 0;
133 133
134 AccessibilityObject* axRenderImage = areaElement->document()->axObjectCache( )->getOrCreate(imageElement); 134 AccessibilityObject* axRenderImage = areaElement->document().axObjectCache() ->getOrCreate(imageElement);
135 if (!axRenderImage) 135 if (!axRenderImage)
136 return 0; 136 return 0;
137 137
138 AccessibilityObject::AccessibilityChildrenVector imageChildren = axRenderIma ge->children(); 138 AccessibilityObject::AccessibilityChildrenVector imageChildren = axRenderIma ge->children();
139 unsigned count = imageChildren.size(); 139 unsigned count = imageChildren.size();
140 for (unsigned k = 0; k < count; ++k) { 140 for (unsigned k = 0; k < count; ++k) {
141 AccessibilityObject* child = imageChildren[k].get(); 141 AccessibilityObject* child = imageChildren[k].get();
142 if (!child->isImageMapLink()) 142 if (!child->isImageMapLink())
143 continue; 143 continue;
144 144
(...skipping 11 matching lines...) Expand all
156 156
157 // get the focused node in the page 157 // get the focused node in the page
158 Document* focusedDocument = page->focusController().focusedOrMainFrame()->do cument(); 158 Document* focusedDocument = page->focusController().focusedOrMainFrame()->do cument();
159 Node* focusedNode = focusedDocument->focusedElement(); 159 Node* focusedNode = focusedDocument->focusedElement();
160 if (!focusedNode) 160 if (!focusedNode)
161 focusedNode = focusedDocument; 161 focusedNode = focusedDocument;
162 162
163 if (isHTMLAreaElement(focusedNode)) 163 if (isHTMLAreaElement(focusedNode))
164 return focusedImageMapUIElement(toHTMLAreaElement(focusedNode)); 164 return focusedImageMapUIElement(toHTMLAreaElement(focusedNode));
165 165
166 AccessibilityObject* obj = focusedNode->document()->axObjectCache()->getOrCr eate(focusedNode); 166 AccessibilityObject* obj = focusedNode->document().axObjectCache()->getOrCre ate(focusedNode);
167 if (!obj) 167 if (!obj)
168 return 0; 168 return 0;
169 169
170 if (obj->shouldFocusActiveDescendant()) { 170 if (obj->shouldFocusActiveDescendant()) {
171 if (AccessibilityObject* descendant = obj->activeDescendant()) 171 if (AccessibilityObject* descendant = obj->activeDescendant())
172 obj = descendant; 172 obj = descendant;
173 } 173 }
174 174
175 // the HTML element, for example, is focusable but has an AX object that is ignored 175 // the HTML element, for example, is focusable but has an AX object that is ignored
176 if (obj->accessibilityIsIgnored()) 176 if (obj->accessibilityIsIgnored())
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 // because a render update may be in progress and creating an AX object can re-trigger a layout 657 // because a render update may be in progress and creating an AX object can re-trigger a layout
658 RefPtr<AccessibilityObject> object = get(renderer); 658 RefPtr<AccessibilityObject> object = get(renderer);
659 while (!object && renderer) { 659 while (!object && renderer) {
660 renderer = renderer->parent(); 660 renderer = renderer->parent();
661 object = get(renderer); 661 object = get(renderer);
662 } 662 }
663 663
664 if (!renderer) 664 if (!renderer)
665 return; 665 return;
666 666
667 postNotification(object.get(), renderer->document(), notification, postToEle ment, postType); 667 postNotification(object.get(), &renderer->document(), notification, postToEl ement, postType);
668 } 668 }
669 669
670 void AXObjectCache::postNotification(Node* node, AXNotification notification, bo ol postToElement, PostType postType) 670 void AXObjectCache::postNotification(Node* node, AXNotification notification, bo ol postToElement, PostType postType)
671 { 671 {
672 if (!node) 672 if (!node)
673 return; 673 return;
674 674
675 stopCachingComputedObjectAttributes(); 675 stopCachingComputedObjectAttributes();
676 676
677 // Get an accessibility object that already exists. One should not be create d here 677 // Get an accessibility object that already exists. One should not be create d here
678 // because a render update may be in progress and creating an AX object can re-trigger a layout 678 // because a render update may be in progress and creating an AX object can re-trigger a layout
679 RefPtr<AccessibilityObject> object = get(node); 679 RefPtr<AccessibilityObject> object = get(node);
680 while (!object && node) { 680 while (!object && node) {
681 node = node->parentNode(); 681 node = node->parentNode();
682 object = get(node); 682 object = get(node);
683 } 683 }
684 684
685 if (!node) 685 if (!node)
686 return; 686 return;
687 687
688 postNotification(object.get(), node->document(), notification, postToElement , postType); 688 postNotification(object.get(), &node->document(), notification, postToElemen t, postType);
689 } 689 }
690 690
691 void AXObjectCache::postNotification(AccessibilityObject* object, Document* docu ment, AXNotification notification, bool postToElement, PostType postType) 691 void AXObjectCache::postNotification(AccessibilityObject* object, Document* docu ment, AXNotification notification, bool postToElement, PostType postType)
692 { 692 {
693 stopCachingComputedObjectAttributes(); 693 stopCachingComputedObjectAttributes();
694 694
695 if (object && !postToElement) 695 if (object && !postToElement)
696 object = object->observableObject(); 696 object = object->observableObject();
697 697
698 if (!object && document) 698 if (!object && document)
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 // FIXME: Accessability should make it clear these are DOM-compliant offsets or store Position objects. 825 // FIXME: Accessability should make it clear these are DOM-compliant offsets or store Position objects.
826 VisiblePosition visiblePos = VisiblePosition(createLegacyEditingPosition(tex tMarkerData.node, textMarkerData.offset), textMarkerData.affinity); 826 VisiblePosition visiblePos = VisiblePosition(createLegacyEditingPosition(tex tMarkerData.node, textMarkerData.offset), textMarkerData.affinity);
827 Position deepPos = visiblePos.deepEquivalent(); 827 Position deepPos = visiblePos.deepEquivalent();
828 if (deepPos.isNull()) 828 if (deepPos.isNull())
829 return VisiblePosition(); 829 return VisiblePosition();
830 830
831 RenderObject* renderer = deepPos.deprecatedNode()->renderer(); 831 RenderObject* renderer = deepPos.deprecatedNode()->renderer();
832 if (!renderer) 832 if (!renderer)
833 return VisiblePosition(); 833 return VisiblePosition();
834 834
835 AXObjectCache* cache = renderer->document()->axObjectCache(); 835 AXObjectCache* cache = renderer->document().axObjectCache();
836 if (!cache->isIDinUse(textMarkerData.axID)) 836 if (!cache->isIDinUse(textMarkerData.axID))
837 return VisiblePosition(); 837 return VisiblePosition();
838 838
839 if (deepPos.deprecatedNode() != textMarkerData.node || deepPos.deprecatedEdi tingOffset() != textMarkerData.offset) 839 if (deepPos.deprecatedNode() != textMarkerData.node || deepPos.deprecatedEdi tingOffset() != textMarkerData.offset)
840 return VisiblePosition(); 840 return VisiblePosition();
841 841
842 return visiblePos; 842 return visiblePos;
843 } 843 }
844 844
845 void AXObjectCache::textMarkerDataForVisiblePosition(TextMarkerData& textMarkerD ata, const VisiblePosition& visiblePos) 845 void AXObjectCache::textMarkerDataForVisiblePosition(TextMarkerData& textMarkerD ata, const VisiblePosition& visiblePos)
846 { 846 {
847 // This memory must be bzero'd so instances of TextMarkerData can be tested for byte-equivalence. 847 // This memory must be bzero'd so instances of TextMarkerData can be tested for byte-equivalence.
848 // This also allows callers to check for failure by looking at textMarkerDat a upon return. 848 // This also allows callers to check for failure by looking at textMarkerDat a upon return.
849 memset(&textMarkerData, 0, sizeof(TextMarkerData)); 849 memset(&textMarkerData, 0, sizeof(TextMarkerData));
850 850
851 if (visiblePos.isNull()) 851 if (visiblePos.isNull())
852 return; 852 return;
853 853
854 Position deepPos = visiblePos.deepEquivalent(); 854 Position deepPos = visiblePos.deepEquivalent();
855 Node* domNode = deepPos.deprecatedNode(); 855 Node* domNode = deepPos.deprecatedNode();
856 ASSERT(domNode); 856 ASSERT(domNode);
857 if (!domNode) 857 if (!domNode)
858 return; 858 return;
859 859
860 if (domNode->hasTagName(inputTag) && toHTMLInputElement(domNode)->isPassword Field()) 860 if (domNode->hasTagName(inputTag) && toHTMLInputElement(domNode)->isPassword Field())
861 return; 861 return;
862 862
863 // find or create an accessibility object for this node 863 // find or create an accessibility object for this node
864 AXObjectCache* cache = domNode->document()->axObjectCache(); 864 AXObjectCache* cache = domNode->document().axObjectCache();
865 RefPtr<AccessibilityObject> obj = cache->getOrCreate(domNode); 865 RefPtr<AccessibilityObject> obj = cache->getOrCreate(domNode);
866 866
867 textMarkerData.axID = obj.get()->axObjectID(); 867 textMarkerData.axID = obj.get()->axObjectID();
868 textMarkerData.node = domNode; 868 textMarkerData.node = domNode;
869 textMarkerData.offset = deepPos.deprecatedEditingOffset(); 869 textMarkerData.offset = deepPos.deprecatedEditingOffset();
870 textMarkerData.affinity = visiblePos.affinity(); 870 textMarkerData.affinity = visiblePos.affinity();
871 871
872 cache->setNodeInUse(domNode); 872 cache->setNodeInUse(domNode);
873 } 873 }
874 874
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 } 942 }
943 943
944 client.postAccessibilityNotification(obj, notification); 944 client.postAccessibilityNotification(obj, notification);
945 } 945 }
946 946
947 void AXObjectCache::handleFocusedUIElementChanged(Node*, Node* newFocusedNode) 947 void AXObjectCache::handleFocusedUIElementChanged(Node*, Node* newFocusedNode)
948 { 948 {
949 if (!newFocusedNode) 949 if (!newFocusedNode)
950 return; 950 return;
951 951
952 Page* page = newFocusedNode->document()->page(); 952 Page* page = newFocusedNode->document().page();
953 if (!page) 953 if (!page)
954 return; 954 return;
955 955
956 AccessibilityObject* focusedObject = focusedUIElementForPage(page); 956 AccessibilityObject* focusedObject = focusedUIElementForPage(page);
957 if (!focusedObject) 957 if (!focusedObject)
958 return; 958 return;
959 959
960 postPlatformNotification(focusedObject, AXFocusedUIElementChanged); 960 postPlatformNotification(focusedObject, AXFocusedUIElementChanged);
961 } 961 }
962 962
963 void AXObjectCache::handleScrolledToAnchor(const Node* anchorNode) 963 void AXObjectCache::handleScrolledToAnchor(const Node* anchorNode)
964 { 964 {
965 // The anchor node may not be accessible. Post the notification for the 965 // The anchor node may not be accessible. Post the notification for the
966 // first accessible object. 966 // first accessible object.
967 postPlatformNotification(AccessibilityObject::firstAccessibleObjectFromNode( anchorNode), AXScrolledToAnchor); 967 postPlatformNotification(AccessibilityObject::firstAccessibleObjectFromNode( anchorNode), AXScrolledToAnchor);
968 } 968 }
969 969
970 } // namespace WebCore 970 } // namespace WebCore
971 971
972 #endif // HAVE(ACCESSIBILITY) 972 #endif // HAVE(ACCESSIBILITY)
OLDNEW
« no previous file with comments | « Source/bindings/v8/custom/V8InjectedScriptHostCustom.cpp ('k') | Source/core/accessibility/AccessibilityARIAGrid.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698