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

Side by Side Diff: Source/core/accessibility/AXObject.h

Issue 713933002: Create Source/modules/accessibility/ and move most of core/accessibility/* into it (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 1 month 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
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Nuanti Ltd.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
15 * its contributors may be used to endorse or promote products derived
16 * from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30 #ifndef AXObject_h
31 #define AXObject_h
32
33 #include "core/editing/VisiblePosition.h"
34 #include "platform/geometry/FloatQuad.h"
35 #include "platform/geometry/LayoutRect.h"
36 #include "wtf/Forward.h"
37 #include "wtf/RefPtr.h"
38 #include "wtf/Vector.h"
39
40 namespace blink {
41
42 class AXObject;
43 class AXObjectCacheImpl;
44 class Element;
45 class FrameView;
46 class IntPoint;
47 class Node;
48 class RenderObject;
49 class ScrollableArea;
50 class Widget;
51
52 typedef unsigned AXID;
53
54 enum AccessibilityRole {
55 AlertDialogRole = 1,
56 AlertRole,
57 AnnotationRole,
58 ApplicationRole,
59 ArticleRole,
60 BannerRole,
61 BlockquoteRole,
62 BrowserRole,
63 BusyIndicatorRole,
64 ButtonRole,
65 CanvasRole,
66 CellRole,
67 CheckBoxRole,
68 ColorWellRole,
69 ColumnHeaderRole,
70 ColumnRole,
71 ComboBoxRole,
72 ComplementaryRole,
73 ContentInfoRole,
74 DateRole,
75 DateTimeRole,
76 DefinitionRole,
77 DescriptionListDetailRole,
78 DescriptionListRole,
79 DescriptionListTermRole,
80 DetailsRole,
81 DialogRole,
82 DirectoryRole,
83 DisclosureTriangleRole,
84 DivRole,
85 DocumentRole,
86 DrawerRole,
87 EditableTextRole,
88 EmbeddedObjectRole,
89 FigcaptionRole,
90 FigureRole,
91 FooterRole,
92 FormRole,
93 GridRole,
94 GroupRole,
95 GrowAreaRole,
96 HeadingRole,
97 HelpTagRole,
98 HorizontalRuleRole,
99 IframeRole,
100 IgnoredRole,
101 ImageMapLinkRole,
102 ImageMapRole,
103 ImageRole,
104 IncrementorRole,
105 InlineTextBoxRole,
106 LabelRole,
107 LegendRole,
108 LinkRole,
109 ListBoxOptionRole,
110 ListBoxRole,
111 ListItemRole,
112 ListMarkerRole,
113 ListRole,
114 LogRole,
115 MainRole,
116 MarqueeRole,
117 MathElementRole,
118 MathRole,
119 MatteRole,
120 MenuBarRole,
121 MenuButtonRole,
122 MenuItemRole,
123 MenuItemCheckBoxRole,
124 MenuItemRadioRole,
125 MenuListOptionRole,
126 MenuListPopupRole,
127 MenuRole,
128 MeterRole,
129 NavigationRole,
130 NoneRole,
131 NoteRole,
132 OutlineRole,
133 ParagraphRole,
134 PopUpButtonRole,
135 PreRole,
136 PresentationalRole,
137 ProgressIndicatorRole,
138 RadioButtonRole,
139 RadioGroupRole,
140 RegionRole,
141 RootWebAreaRole,
142 RowHeaderRole,
143 RowRole,
144 RubyRole,
145 RulerMarkerRole,
146 RulerRole,
147 SVGRootRole,
148 ScrollAreaRole,
149 ScrollBarRole,
150 SeamlessWebAreaRole,
151 SearchRole,
152 SheetRole,
153 SliderRole,
154 SliderThumbRole,
155 SpinButtonPartRole,
156 SpinButtonRole,
157 SplitGroupRole,
158 SplitterRole,
159 StaticTextRole,
160 StatusRole,
161 SystemWideRole,
162 TabGroupRole,
163 TabListRole,
164 TabPanelRole,
165 TabRole,
166 TableHeaderContainerRole,
167 TableRole,
168 TextAreaRole,
169 TextFieldRole,
170 TimeRole,
171 TimerRole,
172 ToggleButtonRole,
173 ToolbarRole,
174 TreeGridRole,
175 TreeItemRole,
176 TreeRole,
177 UnknownRole,
178 UserInterfaceTooltipRole,
179 ValueIndicatorRole,
180 WebAreaRole,
181 WindowRole,
182 };
183
184 enum AccessibilityTextSource {
185 AlternativeText,
186 ChildrenText,
187 SummaryText,
188 HelpText,
189 VisibleText,
190 TitleTagText,
191 PlaceholderText,
192 LabelByElementText,
193 };
194
195 enum AccessibilityState {
196 AXBusyState,
197 AXCheckedState,
198 AXEnabledState,
199 AXExpandedState,
200 AXFocusableState,
201 AXFocusedState,
202 AXHaspopupState,
203 AXHoveredState,
204 AXIndeterminateState,
205 AXInvisibleState,
206 AXLinkedState,
207 AXMultiselectableState,
208 AXOffscreenState,
209 AXPressedState,
210 AXProtectedState,
211 AXReadonlyState,
212 AXRequiredState,
213 AXSelectableState,
214 AXSelectedState,
215 AXVerticalState,
216 AXVisitedState
217 };
218
219 struct AccessibilityText {
220 String text;
221 AccessibilityTextSource textSource;
222 RefPtr<AXObject> textElement;
223
224 AccessibilityText(const String& t, const AccessibilityTextSource& s)
225 : text(t)
226 , textSource(s)
227 { }
228
229 AccessibilityText(const String& t, const AccessibilityTextSource& s, const R efPtr<AXObject> element)
230 : text(t)
231 , textSource(s)
232 , textElement(element)
233 { }
234 };
235
236 enum AccessibilityOrientation {
237 AccessibilityOrientationVertical,
238 AccessibilityOrientationHorizontal,
239 };
240
241 enum AXObjectInclusion {
242 IncludeObject,
243 IgnoreObject,
244 DefaultBehavior,
245 };
246
247 enum AccessibilityButtonState {
248 ButtonStateOff = 0,
249 ButtonStateOn,
250 ButtonStateMixed,
251 };
252
253 enum AccessibilityTextDirection {
254 AccessibilityTextDirectionLeftToRight,
255 AccessibilityTextDirectionRightToLeft,
256 AccessibilityTextDirectionTopToBottom,
257 AccessibilityTextDirectionBottomToTop
258 };
259
260 enum AccessibilityExpanded {
261 ExpandedUndefined = 0,
262 ExpandedCollapsed,
263 ExpandedExpanded,
264 };
265
266 class AXObject : public RefCounted<AXObject> {
267 public:
268 typedef Vector<RefPtr<AXObject> > AccessibilityChildrenVector;
269
270 struct PlainTextRange {
271
272 unsigned start;
273 unsigned length;
274
275 PlainTextRange()
276 : start(0)
277 , length(0)
278 { }
279
280 PlainTextRange(unsigned s, unsigned l)
281 : start(s)
282 , length(l)
283 { }
284
285 bool isNull() const { return !start && !length; }
286 };
287
288 protected:
289 AXObject();
290
291 public:
292 virtual ~AXObject();
293
294 // After constructing an AXObject, it must be given a
295 // unique ID, then added to AXObjectCacheImpl, and finally init() must
296 // be called last.
297 void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }
298 virtual void init() { }
299
300 // When the corresponding WebCore object that this AXObject
301 // wraps is deleted, it must be detached.
302 virtual void detach();
303 virtual bool isDetached() const;
304
305 // If the parent of this object is known, this can be faster than using comp uteParent().
306 virtual void setParent(AXObject* parent) { m_parent = parent; }
307
308 // The AXObjectCacheImpl that owns this object, and its unique ID within thi s cache.
309 AXObjectCacheImpl* axObjectCache() const;
310 AXID axObjectID() const { return m_id; }
311
312 // Determine subclass type.
313 virtual bool isAXNodeObject() const { return false; }
314 virtual bool isAXRenderObject() const { return false; }
315 virtual bool isAXScrollbar() const { return false; }
316 virtual bool isAXScrollView() const { return false; }
317 virtual bool isAXSVGRoot() const { return false; }
318
319 // Check object role or purpose.
320 virtual AccessibilityRole roleValue() const { return m_role; }
321 bool isARIATextControl() const;
322 virtual bool isARIATreeGridRow() const { return false; }
323 virtual bool isAXTable() const { return false; }
324 virtual bool isAnchor() const { return false; }
325 virtual bool isAttachment() const { return false; }
326 bool isButton() const;
327 bool isCanvas() const { return roleValue() == CanvasRole; }
328 bool isCheckbox() const { return roleValue() == CheckBoxRole; }
329 bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
330 bool isColorWell() const { return roleValue() == ColorWellRole; }
331 bool isComboBox() const { return roleValue() == ComboBoxRole; }
332 virtual bool isControl() const { return false; }
333 virtual bool isDataTable() const { return false; }
334 virtual bool isEmbeddedObject() const { return false; }
335 virtual bool isFieldset() const { return false; }
336 virtual bool isFileUploadButton() const { return false; }
337 virtual bool isHeading() const { return false; }
338 virtual bool isImage() const { return false; }
339 virtual bool isImageMapLink() const { return false; }
340 virtual bool isInputImage() const { return false; }
341 bool isLandmarkRelated() const;
342 virtual bool isLink() const { return false; }
343 virtual bool isList() const { return false; }
344 bool isListItem() const { return roleValue() == ListItemRole; }
345 virtual bool isListBoxOption() const { return false; }
346 virtual bool isMenu() const { return false; }
347 virtual bool isMenuButton() const { return false; }
348 virtual bool isMenuList() const { return false; }
349 virtual bool isMenuListOption() const { return false; }
350 virtual bool isMenuListPopup() const { return false; }
351 bool isMenuRelated() const;
352 virtual bool isMockObject() const { return false; }
353 virtual bool isNativeSpinButton() const { return false; }
354 virtual bool isNativeTextControl() const { return false; } // input or texta rea
355 virtual bool isNonNativeTextControl() const { return false; } // contentedit able or role=textbox
356 virtual bool isPasswordField() const { return false; }
357 virtual bool isPasswordFieldAndShouldHideValue() const;
358 virtual bool isProgressIndicator() const { return false; }
359 bool isRadioButton() const { return roleValue() == RadioButtonRole; }
360 bool isScrollbar() const { return roleValue() == ScrollBarRole; }
361 virtual bool isSlider() const { return false; }
362 virtual bool isSpinButton() const { return roleValue() == SpinButtonRole; }
363 virtual bool isSpinButtonPart() const { return false; }
364 bool isTabItem() const { return roleValue() == TabRole; }
365 virtual bool isTableCell() const { return false; }
366 virtual bool isTableRow() const { return false; }
367 virtual bool isTableCol() const { return false; }
368 bool isTextControl() const;
369 bool isTree() const { return roleValue() == TreeRole; }
370 bool isTreeItem() const { return roleValue() == TreeItemRole; }
371 bool isWebArea() const { return roleValue() == WebAreaRole; }
372
373 // Check object state.
374 virtual bool isChecked() const { return false; }
375 virtual bool isClickable() const;
376 virtual bool isCollapsed() const { return false; }
377 virtual bool isEnabled() const { return false; }
378 virtual AccessibilityExpanded isExpanded() const { return ExpandedUndefined; }
379 virtual bool isFocused() const { return false; }
380 virtual bool isHovered() const { return false; }
381 virtual bool isIndeterminate() const { return false; }
382 virtual bool isLinked() const { return false; }
383 virtual bool isLoaded() const { return false; }
384 virtual bool isMultiSelectable() const { return false; }
385 virtual bool isOffScreen() const { return false; }
386 virtual bool isPressed() const { return false; }
387 virtual bool isReadOnly() const { return false; }
388 virtual bool isRequired() const { return false; }
389 virtual bool isSelected() const { return false; }
390 virtual bool isSelectedOptionActive() const { return false; }
391 virtual bool isVisible() const { return true; }
392 virtual bool isVisited() const { return false; }
393
394 // Check whether certain properties can be modified.
395 virtual bool canSetFocusAttribute() const { return false; }
396 virtual bool canSetValueAttribute() const { return false; }
397 virtual bool canSetSelectedAttribute() const { return false; }
398
399 // Whether objects are ignored, i.e. not included in the tree.
400 bool accessibilityIsIgnored() const;
401 bool accessibilityIsIgnoredByDefault() const;
402 AXObjectInclusion accessibilityPlatformIncludesObject() const;
403 virtual AXObjectInclusion defaultObjectInclusion() const;
404 bool isInertOrAriaHidden() const;
405 bool lastKnownIsIgnoredValue();
406 void setLastKnownIsIgnoredValue(bool);
407
408 // Properties of static elements.
409 virtual const AtomicString& accessKey() const { return nullAtom; }
410 virtual bool canvasHasFallbackContent() const { return false; }
411 virtual bool exposesTitleUIElement() const { return true; }
412 virtual int headingLevel() const { return 0; }
413 // 1-based, to match the aria-level spec.
414 virtual unsigned hierarchicalLevel() const { return 0; }
415 virtual AccessibilityOrientation orientation() const;
416 virtual String text() const { return String(); }
417 virtual int textLength() const { return 0; }
418 virtual AXObject* titleUIElement() const { return 0; }
419 virtual KURL url() const { return KURL(); }
420
421 // For an inline text box.
422 virtual AccessibilityTextDirection textDirection() const { return Accessibil ityTextDirectionLeftToRight; }
423 // The integer horizontal pixel offset of each character in the string; nega tive values for RTL.
424 virtual void textCharacterOffsets(Vector<int>&) const { }
425 // The start and end character offset of each word in the inline text box.
426 virtual void wordBoundaries(Vector<PlainTextRange>& words) const { }
427
428 // Properties of interactive elements.
429 virtual String actionVerb() const;
430 virtual AccessibilityButtonState checkboxOrRadioValue() const;
431 virtual void colorValue(int& r, int& g, int& b) const { r = 0; g = 0; b = 0; }
432 virtual String valueDescription() const { return String(); }
433 virtual float valueForRange() const { return 0.0f; }
434 virtual float maxValueForRange() const { return 0.0f; }
435 virtual float minValueForRange() const { return 0.0f; }
436 virtual String stringValue() const { return String(); }
437 virtual const AtomicString& textInputType() const { return nullAtom; }
438
439 // ARIA attributes.
440 virtual AXObject* activeDescendant() const { return 0; }
441 virtual String ariaDescribedByAttribute() const { return String(); }
442 virtual void ariaFlowToElements(AccessibilityChildrenVector&) const { }
443 virtual void ariaControlsElements(AccessibilityChildrenVector&) const { }
444 virtual void ariaDescribedbyElements(AccessibilityChildrenVector& describedb y) const { };
445 virtual void ariaLabelledbyElements(AccessibilityChildrenVector& labelledby) const { };
446 virtual void ariaOwnsElements(AccessibilityChildrenVector& owns) const { };
447 virtual bool ariaHasPopup() const { return false; }
448 bool ariaIsMultiline() const;
449 virtual String ariaLabeledByAttribute() const { return String(); }
450 bool ariaPressedIsPresent() const;
451 virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
452 virtual bool ariaRoleHasPresentationalChildren() const { return false; }
453 virtual bool isARIAGrabbed() { return false; }
454 virtual bool isPresentationalChildOfAriaRole() const { return false; }
455 virtual bool shouldFocusActiveDescendant() const { return false; }
456 bool supportsARIAAttributes() const;
457 virtual bool supportsARIADragging() const { return false; }
458 virtual bool supportsARIADropping() const { return false; }
459 virtual bool supportsARIAFlowTo() const { return false; }
460 virtual bool supportsARIAOwns() const { return false; }
461 bool supportsRangeValue() const;
462
463 // ARIA trees.
464 // Used by an ARIA tree to get all its rows.
465 void ariaTreeRows(AccessibilityChildrenVector&);
466
467 // ARIA live-region features.
468 bool isLiveRegion() const;
469 const AXObject* liveRegionRoot() const;
470 virtual const AtomicString& liveRegionStatus() const { return nullAtom; }
471 virtual const AtomicString& liveRegionRelevant() const { return nullAtom; }
472 virtual bool liveRegionAtomic() const { return false; }
473 virtual bool liveRegionBusy() const { return false; }
474
475 const AtomicString& containerLiveRegionStatus() const;
476 const AtomicString& containerLiveRegionRelevant() const;
477 bool containerLiveRegionAtomic() const;
478 bool containerLiveRegionBusy() const;
479
480 // Accessibility Text.
481 virtual String textUnderElement() const { return String(); }
482
483 // Accessibility Text - (To be deprecated).
484 virtual String accessibilityDescription() const { return String(); }
485 virtual String title() const { return String(); }
486 virtual String helpText() const { return String(); }
487
488 // Location and click point in frame-relative coordinates.
489 virtual LayoutRect elementRect() const { return m_explicitElementRect; }
490 void setElementRect(LayoutRect r) { m_explicitElementRect = r; }
491 virtual void markCachedElementRectDirty() const;
492 virtual IntPoint clickPoint();
493
494 // Hit testing.
495 // Called on the root AX object to return the deepest available element.
496 virtual AXObject* accessibilityHitTest(const IntPoint&) const { return 0; }
497 // Called on the AX object after the render tree determines which is the rig ht AXRenderObject.
498 virtual AXObject* elementAccessibilityHitTest(const IntPoint&) const;
499
500 // High-level accessibility tree access. Other modules should only use these functions.
501 const AccessibilityChildrenVector& children();
502 AXObject* parentObject() const;
503 AXObject* parentObjectIfExists() const;
504 virtual AXObject* computeParent() const = 0;
505 virtual AXObject* computeParentIfExists() const { return 0; }
506 AXObject* cachedParentObject() const { return m_parent; }
507 AXObject* parentObjectUnignored() const;
508
509 // Low-level accessibility tree exploration, only for use within the accessi bility module.
510 virtual AXObject* firstChild() const { return 0; }
511 virtual AXObject* nextSibling() const { return 0; }
512 static AXObject* firstAccessibleObjectFromNode(const Node*);
513 virtual void addChildren() { }
514 virtual bool canHaveChildren() const { return true; }
515 bool hasChildren() const { return m_haveChildren; }
516 virtual void updateChildrenIfNecessary();
517 virtual bool needsToUpdateChildren() const { return false; }
518 virtual void setNeedsToUpdateChildren() { }
519 virtual void clearChildren();
520 virtual void detachFromParent() { m_parent = 0; }
521 virtual AXObject* observableObject() const { return 0; }
522 virtual AXObject* scrollBar(AccessibilityOrientation) { return 0; }
523
524 // Properties of the object's owning document or page.
525 virtual double estimatedLoadingProgress() const { return 0; }
526 AXObject* focusedUIElement() const;
527
528 // DOM and Render tree access.
529 virtual Node* node() const { return 0; }
530 virtual RenderObject* renderer() const { return 0; }
531 virtual Document* document() const;
532 virtual FrameView* documentFrameView() const;
533 virtual Element* anchorElement() const { return 0; }
534 virtual Element* actionElement() const { return 0; }
535 virtual Widget* widgetForAttachmentView() const { return 0; }
536 String language() const;
537 bool hasAttribute(const QualifiedName&) const;
538 const AtomicString& getAttribute(const QualifiedName&) const;
539
540 // Selected text.
541 virtual PlainTextRange selectedTextRange() const { return PlainTextRange(); }
542
543 // Modify or take an action on an object.
544 virtual void increment() { }
545 virtual void decrement() { }
546 bool performDefaultAction() const { return press(); }
547 virtual bool press() const;
548 // Make this object visible by scrolling as many nested scrollable views as needed.
549 void scrollToMakeVisible() const;
550 // Same, but if the whole object can't be made visible, try for this subrect , in local coordinates.
551 void scrollToMakeVisibleWithSubFocus(const IntRect&) const;
552 // Scroll this object to a given point in global coordinates of the top-leve l window.
553 void scrollToGlobalPoint(const IntPoint&) const;
554 virtual void setFocused(bool) { }
555 virtual void setSelected(bool) { }
556 void setSelectedText(const String&) { }
557 virtual void setSelectedTextRange(const PlainTextRange&) { }
558 virtual void setValue(const String&) { }
559 virtual void setValue(float) { }
560
561 // Notifications that this object may have changed.
562 virtual void childrenChanged() { }
563 virtual void handleActiveDescendantChanged() { }
564 virtual void handleAriaExpandedChanged() { }
565 void notifyIfIgnoredValueChanged();
566 virtual void selectionChanged();
567 virtual void textChanged() { }
568 virtual void updateAccessibilityRole() { }
569
570 // Text metrics. Most of these should be deprecated, needs major cleanup.
571 virtual VisiblePosition visiblePositionForIndex(int) const { return VisibleP osition(); }
572 int lineForPosition(const VisiblePosition&) const;
573 virtual int index(const VisiblePosition&) const { return -1; }
574 virtual void lineBreaks(Vector<int>&) const { }
575
576 // Static helper functions.
577 static bool isARIAControl(AccessibilityRole);
578 static bool isARIAInput(AccessibilityRole);
579 static AccessibilityRole ariaRoleToWebCoreRole(const String&);
580 static IntRect boundingBoxForQuads(RenderObject*, const Vector<FloatQuad>&);
581
582 protected:
583 AXID m_id;
584 AccessibilityChildrenVector m_children;
585 mutable bool m_haveChildren;
586 AccessibilityRole m_role;
587 AXObjectInclusion m_lastKnownIsIgnoredValue;
588 LayoutRect m_explicitElementRect;
589
590 virtual bool computeAccessibilityIsIgnored() const { return true; }
591
592 // If this object itself scrolls, return its ScrollableArea.
593 virtual ScrollableArea* getScrollableAreaIfScrollable() const { return 0; }
594 virtual void scrollTo(const IntPoint&) const { }
595
596 AccessibilityRole buttonRoleType() const;
597
598 bool allowsTextRanges() const { return isTextControl(); }
599 unsigned getLengthForTextRange() const { return text().length(); }
600
601 bool m_detached;
602
603 mutable AXObject* m_parent;
604
605 // The following cached attribute values (the ones starting with m_cached*)
606 // are only valid if m_lastModificationCount matches AXObjectCacheImpl::modi ficationCount().
607 mutable int m_lastModificationCount;
608 mutable bool m_cachedIsIgnored;
609 mutable const AXObject* m_cachedLiveRegionRoot;
610
611 // Updates the cached attribute values. This may be recursive, so to prevent deadlocks,
612 // functions called here may only search up the tree (ancestors), not down.
613 void updateCachedAttributeValuesIfNeeded() const;
614 };
615
616 #define DEFINE_AX_OBJECT_TYPE_CASTS(thisType, predicate) \
617 DEFINE_TYPE_CASTS(thisType, AXObject, object, object->predicate, object.pred icate)
618
619 } // namespace blink
620
621 #endif // AXObject_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698