diff options
Diffstat (limited to 'Source/WebCore/accessibility/AXObjectCache.h')
-rw-r--r-- | Source/WebCore/accessibility/AXObjectCache.h | 309 |
1 files changed, 260 insertions, 49 deletions
diff --git a/Source/WebCore/accessibility/AXObjectCache.h b/Source/WebCore/accessibility/AXObjectCache.h index cf5fd5795..4f2bc6d9c 100644 --- a/Source/WebCore/accessibility/AXObjectCache.h +++ b/Source/WebCore/accessibility/AXObjectCache.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. + * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010, 2011, 2015 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -10,10 +10,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -23,15 +23,18 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef AXObjectCache_h -#define AXObjectCache_h +#pragma once +#include "AXTextStateChangeIntent.h" #include "AccessibilityObject.h" +#include "Range.h" #include "Timer.h" +#include "VisibleUnits.h" #include <limits.h> #include <wtf/Forward.h> #include <wtf/HashMap.h> #include <wtf/HashSet.h> +#include <wtf/ListHashSet.h> #include <wtf/RefPtr.h> namespace WebCore { @@ -40,6 +43,7 @@ class Document; class HTMLAreaElement; class Node; class Page; +class RenderBlock; class RenderObject; class ScrollView; class VisiblePosition; @@ -49,9 +53,35 @@ struct TextMarkerData { AXID axID; Node* node; int offset; + int characterStartIndex; + int characterOffset; + bool ignored; EAffinity affinity; }; +struct CharacterOffset { + Node* node; + int startIndex; + int offset; + int remainingOffset; + + CharacterOffset(Node* n = nullptr, int startIndex = 0, int offset = 0, int remaining = 0) + : node(n) + , startIndex(startIndex) + , offset(offset) + , remainingOffset(remaining) + { } + + int remaining() const { return remainingOffset; } + bool isNull() const { return !node; } + bool isEqual(CharacterOffset& other) const + { + if (isNull() || other.isNull()) + return false; + return node == other.node && startIndex == other.startIndex && offset == other.offset; + } +}; + class AXComputedObjectAttributeCache { public: AccessibilityObjectInclusion getIgnored(AXID) const; @@ -67,6 +97,32 @@ private: HashMap<AXID, CachedAXObjectAttributes> m_idMapping; }; +struct VisiblePositionIndex { + int value = -1; + RefPtr<ContainerNode> scope; +}; + +struct VisiblePositionIndexRange { + VisiblePositionIndex startIndex; + VisiblePositionIndex endIndex; + bool isNull() const { return startIndex.value == -1 || endIndex.value == -1; } +}; + +class AccessibilityReplacedText { +public: + AccessibilityReplacedText() { } + AccessibilityReplacedText(const VisibleSelection&); + void postTextStateChangeNotification(AXObjectCache*, AXTextEditType, const String&, const VisibleSelection&); + const VisiblePositionIndexRange& replacedRange() { return m_replacedRange; } +protected: + String m_replacedText; + VisiblePositionIndexRange m_replacedRange; +}; + +#if !PLATFORM(COCOA) +enum AXTextChange { AXTextInserted, AXTextDeleted, AXTextAttributesChanged }; +#endif + enum PostTarget { TargetElement, TargetObservableParent }; enum PostType { PostSynchronously, PostAsynchronously }; @@ -77,12 +133,12 @@ public: explicit AXObjectCache(Document&); ~AXObjectCache(); - static AccessibilityObject* focusedUIElementForPage(const Page*); + WEBCORE_EXPORT static AccessibilityObject* focusedUIElementForPage(const Page*); // Returns the root object for the entire document. - AccessibilityObject* rootObject(); + WEBCORE_EXPORT AccessibilityObject* rootObject(); // Returns the root object for a specific frame. - AccessibilityObject* rootObjectForFrame(Frame*); + WEBCORE_EXPORT AccessibilityObject* rootObjectForFrame(Frame*); // For AX objects with elements that back them. AccessibilityObject* getOrCreate(RenderObject*); @@ -104,7 +160,7 @@ public: void detachWrapper(AccessibilityObject*, AccessibilityDetachmentType); void attachWrapper(AccessibilityObject*); - void childrenChanged(Node*); + void childrenChanged(Node*, Node* newChild = nullptr); void childrenChanged(RenderObject*, RenderObject* newChild = nullptr); void childrenChanged(AccessibilityObject*); void checkedStateChanged(Node*); @@ -122,16 +178,19 @@ public: void handleScrolledToAnchor(const Node* anchorNode); void handleAriaExpandedChange(Node*); void handleScrollbarUpdate(ScrollView*); + + void handleAriaModalChange(Node*); + Node* ariaModalNode(); void handleAttributeChanged(const QualifiedName& attrName, Element*); void recomputeIsIgnored(RenderObject* renderer); #if HAVE(ACCESSIBILITY) - static void enableAccessibility(); - static void disableAccessibility(); + WEBCORE_EXPORT static void enableAccessibility(); + WEBCORE_EXPORT static void disableAccessibility(); // Enhanced user interface accessibility can be toggled by the assistive technology. - static void setEnhancedUserInterfaceAccessibility(bool flag) { gAccessibilityEnhancedUserInterfaceEnabled = flag; } + WEBCORE_EXPORT static void setEnhancedUserInterfaceAccessibility(bool flag); static bool accessibilityEnabled() { return gAccessibilityEnabled; } static bool accessibilityEnhancedUserInterfaceEnabled() { return gAccessibilityEnhancedUserInterfaceEnabled; } @@ -146,7 +205,6 @@ public: void removeAXID(AccessibilityObject*); bool isIDinUse(AXID id) const { return m_idsInUse.contains(id); } - Element* rootAXEditableElement(Node*); const Element* rootAXEditableElement(const Node*); bool nodeIsTextControl(const Node*); @@ -155,7 +213,49 @@ public: // Text marker utilities. void textMarkerDataForVisiblePosition(TextMarkerData&, const VisiblePosition&); + void textMarkerDataForCharacterOffset(TextMarkerData&, const CharacterOffset&); + void textMarkerDataForNextCharacterOffset(TextMarkerData&, const CharacterOffset&); + void textMarkerDataForPreviousCharacterOffset(TextMarkerData&, const CharacterOffset&); VisiblePosition visiblePositionForTextMarkerData(TextMarkerData&); + CharacterOffset characterOffsetForTextMarkerData(TextMarkerData&); + // Use ignoreNextNodeStart/ignorePreviousNodeEnd to determine the behavior when we are at node boundary. + CharacterOffset nextCharacterOffset(const CharacterOffset&, bool ignoreNextNodeStart = true); + CharacterOffset previousCharacterOffset(const CharacterOffset&, bool ignorePreviousNodeEnd = true); + void startOrEndTextMarkerDataForRange(TextMarkerData&, RefPtr<Range>, bool); + CharacterOffset startOrEndCharacterOffsetForRange(RefPtr<Range>, bool); + AccessibilityObject* accessibilityObjectForTextMarkerData(TextMarkerData&); + RefPtr<Range> rangeForUnorderedCharacterOffsets(const CharacterOffset&, const CharacterOffset&); + static RefPtr<Range> rangeForNodeContents(Node*); + static int lengthForRange(Range*); + + // Word boundary + CharacterOffset nextWordEndCharacterOffset(const CharacterOffset&); + CharacterOffset previousWordStartCharacterOffset(const CharacterOffset&); + RefPtr<Range> leftWordRange(const CharacterOffset&); + RefPtr<Range> rightWordRange(const CharacterOffset&); + + // Paragraph + RefPtr<Range> paragraphForCharacterOffset(const CharacterOffset&); + CharacterOffset nextParagraphEndCharacterOffset(const CharacterOffset&); + CharacterOffset previousParagraphStartCharacterOffset(const CharacterOffset&); + + // Sentence + RefPtr<Range> sentenceForCharacterOffset(const CharacterOffset&); + CharacterOffset nextSentenceEndCharacterOffset(const CharacterOffset&); + CharacterOffset previousSentenceStartCharacterOffset(const CharacterOffset&); + + // Bounds + CharacterOffset characterOffsetForPoint(const IntPoint&, AccessibilityObject*); + IntRect absoluteCaretBoundsForCharacterOffset(const CharacterOffset&); + CharacterOffset characterOffsetForBounds(const IntRect&, bool); + + // Lines + CharacterOffset endCharacterOffsetOfLine(const CharacterOffset&); + CharacterOffset startCharacterOffsetOfLine(const CharacterOffset&); + + // Index + CharacterOffset characterOffsetForIndex(int, const AccessibilityObject*); + int indexForCharacterOffset(const CharacterOffset&, AccessibilityObject*); enum AXNotification { AXActiveDescendantChanged, @@ -165,10 +265,12 @@ public: AXFocusedUIElementChanged, AXLayoutComplete, AXLoadComplete, + AXNewDocumentLoadComplete, AXSelectedChildrenChanged, AXSelectedTextChanged, AXValueChanged, AXScrolledToAnchor, + AXLiveRegionCreated, AXLiveRegionChanged, AXMenuListItemSelected, AXMenuListValueChanged, @@ -177,6 +279,7 @@ public: AXRowCountChanged, AXRowCollapsed, AXRowExpanded, + AXExpandedChanged, AXInvalidStatusChanged, AXTextChanged, AXAriaAttributeChanged, @@ -187,12 +290,19 @@ public: void postNotification(Node*, AXNotification, PostTarget = TargetElement, PostType = PostAsynchronously); void postNotification(AccessibilityObject*, Document*, AXNotification, PostTarget = TargetElement, PostType = PostAsynchronously); - enum AXTextChange { - AXTextInserted, - AXTextDeleted, - }; +#ifndef NDEBUG + void showIntent(const AXTextStateChangeIntent&); +#endif - void nodeTextChangeNotification(Node*, AXTextChange, unsigned offset, const String&); + void setTextSelectionIntent(const AXTextStateChangeIntent&); + void setIsSynchronizingSelection(bool); + + void postTextStateChangeNotification(Node*, AXTextEditType, const String&, const VisiblePosition&); + void postTextReplacementNotification(Node*, AXTextEditType deletionType, const String& deletedText, AXTextEditType insertionType, const String& insertedText, const VisiblePosition&); + void postTextStateChangeNotification(Node*, const AXTextStateChangeIntent&, const VisibleSelection&); + void postTextStateChangeNotification(const Position&, const AXTextStateChangeIntent&, const VisibleSelection&); + void postLiveRegionChangeNotification(AccessibilityObject*); + void focusAriaModalNode(); enum AXLoadingEvent { AXLoadingStarted, @@ -211,12 +321,26 @@ public: AXComputedObjectAttributeCache* computedObjectAttributeCache() { return m_computedObjectAttributeCache.get(); } Document& document() const { return m_document; } - + +#if PLATFORM(MAC) + static void setShouldRepostNotificationsForTests(bool value); +#endif + void recomputeDeferredIsIgnored(RenderBlock& renderer); + void performDeferredIsIgnoredChange(); + protected: void postPlatformNotification(AccessibilityObject*, AXNotification); void platformHandleFocusedUIElementChanged(Node* oldFocusedNode, Node* newFocusedNode); - void nodeTextChangePlatformNotification(AccessibilityObject*, AXTextChange, unsigned offset, const String&); +#if PLATFORM(COCOA) + void postTextStateChangePlatformNotification(AccessibilityObject*, const AXTextStateChangeIntent&, const VisibleSelection&); + void postTextStateChangePlatformNotification(AccessibilityObject*, AXTextEditType, const String&, const VisiblePosition&); + void postTextReplacementPlatformNotification(AccessibilityObject*, AXTextEditType, const String&, AXTextEditType, const String&, const VisiblePosition&); +#else + static AXTextChange textChangeForEditType(AXTextEditType); + void nodeTextChangePlatformNotification(AccessibilityObject*, AXTextChange, unsigned, const String&); +#endif + void frameLoadingEventPlatformNotification(AccessibilityObject*, AXLoadingEvent); void textChanged(AccessibilityObject*); void labelChanged(Element*); @@ -225,8 +349,57 @@ protected: void setNodeInUse(Node* n) { m_textMarkerNodes.add(n); } void removeNodeForUse(Node* n) { m_textMarkerNodes.remove(n); } bool isNodeInUse(Node* n) { return m_textMarkerNodes.contains(n); } + + // CharacterOffset functions. + enum TraverseOption { TraverseOptionDefault = 1 << 0, TraverseOptionToNodeEnd = 1 << 1, TraverseOptionIncludeStart = 1 << 2, TraverseOptionValidateOffset = 1 << 3 }; + Node* nextNode(Node*) const; + Node* previousNode(Node*) const; + CharacterOffset traverseToOffsetInRange(RefPtr<Range>, int, TraverseOption = TraverseOptionDefault, bool stayWithinRange = false); + VisiblePosition visiblePositionFromCharacterOffset(const CharacterOffset&); + CharacterOffset characterOffsetFromVisiblePosition(const VisiblePosition&); + void setTextMarkerDataWithCharacterOffset(TextMarkerData&, const CharacterOffset&); + UChar32 characterAfter(const CharacterOffset&); + UChar32 characterBefore(const CharacterOffset&); + CharacterOffset characterOffsetForNodeAndOffset(Node&, int, TraverseOption = TraverseOptionDefault); + CharacterOffset previousBoundary(const CharacterOffset&, BoundarySearchFunction); + CharacterOffset nextBoundary(const CharacterOffset&, BoundarySearchFunction); + CharacterOffset startCharacterOffsetOfWord(const CharacterOffset&, EWordSide = RightWordIfOnBoundary); + CharacterOffset endCharacterOffsetOfWord(const CharacterOffset&, EWordSide = RightWordIfOnBoundary); + CharacterOffset startCharacterOffsetOfParagraph(const CharacterOffset&, EditingBoundaryCrossingRule = CannotCrossEditingBoundary); + CharacterOffset endCharacterOffsetOfParagraph(const CharacterOffset&, EditingBoundaryCrossingRule = CannotCrossEditingBoundary); + CharacterOffset startCharacterOffsetOfSentence(const CharacterOffset&); + CharacterOffset endCharacterOffsetOfSentence(const CharacterOffset&); + CharacterOffset characterOffsetForPoint(const IntPoint&); + LayoutRect localCaretRectForCharacterOffset(RenderObject*&, const CharacterOffset&); + bool shouldSkipBoundary(const CharacterOffset&, const CharacterOffset&); private: + AccessibilityObject* rootWebArea(); + + static AccessibilityObject* focusedImageMapUIElement(HTMLAreaElement*); + + AXID getAXID(AccessibilityObject*); + + void notificationPostTimerFired(); + + void liveRegionChangedNotificationPostTimerFired(); + + void focusAriaModalNodeTimerFired(); + + void postTextStateChangeNotification(AccessibilityObject*, const AXTextStateChangeIntent&, const VisibleSelection&); + + bool enqueuePasswordValueChangeNotification(AccessibilityObject*); + void passwordNotificationPostTimerFired(); + + void handleMenuOpened(Node*); + void handleLiveRegionCreated(Node*); + void handleMenuItemSelected(Node*); + + // aria-modal related + void findAriaModalNodes(); + void updateCurrentAriaModalNode(); + bool isNodeVisible(Node*) const; + Document& m_document; HashMap<AXID, RefPtr<AccessibilityObject>> m_objects; HashMap<RenderObject*, AXID> m_renderObjectMapping; @@ -234,20 +407,28 @@ private: HashMap<Node*, AXID> m_nodeObjectMapping; HashSet<Node*> m_textMarkerNodes; std::unique_ptr<AXComputedObjectAttributeCache> m_computedObjectAttributeCache; - static bool gAccessibilityEnabled; - static bool gAccessibilityEnhancedUserInterfaceEnabled; - + WEBCORE_EXPORT static bool gAccessibilityEnabled; + WEBCORE_EXPORT static bool gAccessibilityEnhancedUserInterfaceEnabled; + HashSet<AXID> m_idsInUse; - - Timer<AXObjectCache> m_notificationPostTimer; + + Timer m_notificationPostTimer; Vector<std::pair<RefPtr<AccessibilityObject>, AXNotification>> m_notificationsToPost; - void notificationPostTimerFired(Timer<AXObjectCache>&); - void handleMenuOpened(Node*); - void handleMenuItemSelected(Node*); + + Timer m_passwordNotificationPostTimer; + + ListHashSet<RefPtr<AccessibilityObject>> m_passwordNotificationsToPost; - static AccessibilityObject* focusedImageMapUIElement(HTMLAreaElement*); + Timer m_liveRegionChangedPostTimer; + ListHashSet<RefPtr<AccessibilityObject>> m_liveRegionObjectsSet; - AXID getAXID(AccessibilityObject*); + Timer m_focusAriaModalNodeTimer; + Node* m_currentAriaModalNode; + ListHashSet<Node*> m_ariaModalNodesSet; + + AXTextStateChangeIntent m_textSelectionIntent; + bool m_isSynchronizingSelection { false }; + ListHashSet<RenderBlock*> m_deferredIsIgnoredChangeList; }; class AXAttributeCacheEnabler @@ -255,40 +436,44 @@ class AXAttributeCacheEnabler public: explicit AXAttributeCacheEnabler(AXObjectCache *cache); ~AXAttributeCacheEnabler(); - + +#if HAVE(ACCESSIBILITY) private: AXObjectCache* m_cache; +#endif }; - + bool nodeHasRole(Node*, const String& role); // This will let you know if aria-hidden was explicitly set to false. bool isNodeAriaVisible(Node*); #if !HAVE(ACCESSIBILITY) inline AccessibilityObjectInclusion AXComputedObjectAttributeCache::getIgnored(AXID) const { return DefaultBehavior; } +inline AccessibilityReplacedText::AccessibilityReplacedText(const VisibleSelection&) { } +inline void AccessibilityReplacedText::postTextStateChangeNotification(AXObjectCache*, AXTextEditType, const String&, const VisibleSelection&) { } inline void AXComputedObjectAttributeCache::setIgnored(AXID, AccessibilityObjectInclusion) { } -inline AXObjectCache::AXObjectCache(Document& document) : m_document(document), m_notificationPostTimer(this, (Timer<AXObjectCache>::TimerFiredFunction) nullptr) { } +inline AXObjectCache::AXObjectCache(Document& document) : m_document(document), m_notificationPostTimer(*this, &AXObjectCache::notificationPostTimerFired), m_passwordNotificationPostTimer(*this, &AXObjectCache::passwordNotificationPostTimerFired), m_liveRegionChangedPostTimer(*this, &AXObjectCache::liveRegionChangedNotificationPostTimerFired), m_focusAriaModalNodeTimer(*this, &AXObjectCache::focusAriaModalNodeTimerFired) { } inline AXObjectCache::~AXObjectCache() { } -inline AccessibilityObject* AXObjectCache::focusedUIElementForPage(const Page*) { return 0; } -inline AccessibilityObject* AXObjectCache::get(RenderObject*) { return 0; } -inline AccessibilityObject* AXObjectCache::get(Node*) { return 0; } -inline AccessibilityObject* AXObjectCache::get(Widget*) { return 0; } -inline AccessibilityObject* AXObjectCache::getOrCreate(AccessibilityRole) { return 0; } -inline AccessibilityObject* AXObjectCache::getOrCreate(RenderObject*) { return 0; } -inline AccessibilityObject* AXObjectCache::getOrCreate(Node*) { return 0; } -inline AccessibilityObject* AXObjectCache::getOrCreate(Widget*) { return 0; } -inline AccessibilityObject* AXObjectCache::rootObject() { return 0; } -inline AccessibilityObject* AXObjectCache::rootObjectForFrame(Frame*) { return 0; } -inline Element* AXObjectCache::rootAXEditableElement(Node*) { return 0; } +inline AccessibilityObject* AXObjectCache::focusedUIElementForPage(const Page*) { return nullptr; } +inline AccessibilityObject* AXObjectCache::get(RenderObject*) { return nullptr; } +inline AccessibilityObject* AXObjectCache::get(Node*) { return nullptr; } +inline AccessibilityObject* AXObjectCache::get(Widget*) { return nullptr; } +inline AccessibilityObject* AXObjectCache::getOrCreate(AccessibilityRole) { return nullptr; } +inline AccessibilityObject* AXObjectCache::getOrCreate(RenderObject*) { return nullptr; } +inline AccessibilityObject* AXObjectCache::getOrCreate(Node*) { return nullptr; } +inline AccessibilityObject* AXObjectCache::getOrCreate(Widget*) { return nullptr; } +inline AccessibilityObject* AXObjectCache::rootObject() { return nullptr; } +inline AccessibilityObject* AXObjectCache::rootObjectForFrame(Frame*) { return nullptr; } inline bool nodeHasRole(Node*, const String&) { return false; } inline void AXObjectCache::startCachingComputedObjectAttributesUntilTreeMutates() { } inline void AXObjectCache::stopCachingComputedObjectAttributes() { } inline bool isNodeAriaVisible(Node*) { return true; } -inline const Element* AXObjectCache::rootAXEditableElement(const Node*) { return 0; } +inline const Element* AXObjectCache::rootAXEditableElement(const Node*) { return nullptr; } +inline Node* AXObjectCache::ariaModalNode() { return nullptr; } inline void AXObjectCache::attachWrapper(AccessibilityObject*) { } inline void AXObjectCache::checkedStateChanged(Node*) { } inline void AXObjectCache::childrenChanged(RenderObject*, RenderObject*) { } -inline void AXObjectCache::childrenChanged(Node*) { } +inline void AXObjectCache::childrenChanged(Node*, Node*) { } inline void AXObjectCache::childrenChanged(AccessibilityObject*) { } inline void AXObjectCache::textChanged(RenderObject*) { } inline void AXObjectCache::textChanged(Node*) { } @@ -300,25 +485,51 @@ inline void AXObjectCache::frameLoadingEventPlatformNotification(AccessibilityOb inline void AXObjectCache::handleActiveDescendantChanged(Node*) { } inline void AXObjectCache::handleAriaExpandedChange(Node*) { } inline void AXObjectCache::handleAriaRoleChanged(Node*) { } +inline void AXObjectCache::handleAriaModalChange(Node*) { } inline void AXObjectCache::handleFocusedUIElementChanged(Node*, Node*) { } inline void AXObjectCache::handleScrollbarUpdate(ScrollView*) { } inline void AXObjectCache::handleAttributeChanged(const QualifiedName&, Element*) { } inline void AXObjectCache::recomputeIsIgnored(RenderObject*) { } +inline void AXObjectCache::recomputeDeferredIsIgnored(RenderBlock&) { } +inline void AXObjectCache::performDeferredIsIgnoredChange() { } inline void AXObjectCache::handleScrolledToAnchor(const Node*) { } -inline void AXObjectCache::nodeTextChangeNotification(Node*, AXTextChange, unsigned, const String&) { } -inline void AXObjectCache::nodeTextChangePlatformNotification(AccessibilityObject*, AXTextChange, unsigned, const String&) { } +inline void AXObjectCache::postTextStateChangeNotification(Node*, const AXTextStateChangeIntent&, const VisibleSelection&) { } +inline void AXObjectCache::postTextStateChangeNotification(Node*, AXTextEditType, const String&, const VisiblePosition&) { } +inline void AXObjectCache::postTextReplacementNotification(Node*, AXTextEditType, const String&, AXTextEditType, const String&, const VisiblePosition&) { } inline void AXObjectCache::postNotification(AccessibilityObject*, Document*, AXNotification, PostTarget, PostType) { } inline void AXObjectCache::postNotification(RenderObject*, AXNotification, PostTarget, PostType) { } inline void AXObjectCache::postNotification(Node*, AXNotification, PostTarget, PostType) { } inline void AXObjectCache::postPlatformNotification(AccessibilityObject*, AXNotification) { } +inline void AXObjectCache::postLiveRegionChangeNotification(AccessibilityObject*) { } +inline void AXObjectCache::focusAriaModalNode() { } +inline RefPtr<Range> AXObjectCache::rangeForNodeContents(Node*) { return nullptr; } inline void AXObjectCache::remove(AXID) { } inline void AXObjectCache::remove(RenderObject*) { } inline void AXObjectCache::remove(Node*) { } inline void AXObjectCache::remove(Widget*) { } inline void AXObjectCache::selectedChildrenChanged(RenderObject*) { } inline void AXObjectCache::selectedChildrenChanged(Node*) { } +inline void AXObjectCache::setIsSynchronizingSelection(bool) { } +inline void AXObjectCache::setTextSelectionIntent(const AXTextStateChangeIntent&) { } +inline RefPtr<Range> AXObjectCache::rangeForUnorderedCharacterOffsets(const CharacterOffset&, const CharacterOffset&) { return nullptr; } +inline IntRect AXObjectCache::absoluteCaretBoundsForCharacterOffset(const CharacterOffset&) { return IntRect(); } +inline CharacterOffset AXObjectCache::characterOffsetForIndex(int, const AccessibilityObject*) { return CharacterOffset(); } +inline CharacterOffset AXObjectCache::startOrEndCharacterOffsetForRange(RefPtr<Range>, bool) { return CharacterOffset(); } +inline CharacterOffset AXObjectCache::endCharacterOffsetOfLine(const CharacterOffset&) { return CharacterOffset(); } +inline CharacterOffset AXObjectCache::nextCharacterOffset(const CharacterOffset&, bool) { return CharacterOffset(); } +inline CharacterOffset AXObjectCache::previousCharacterOffset(const CharacterOffset&, bool) { return CharacterOffset(); } +#if PLATFORM(COCOA) +inline void AXObjectCache::postTextStateChangePlatformNotification(AccessibilityObject*, const AXTextStateChangeIntent&, const VisibleSelection&) { } +inline void AXObjectCache::postTextStateChangePlatformNotification(AccessibilityObject*, AXTextEditType, const String&, const VisiblePosition&) { } +inline void AXObjectCache::postTextReplacementPlatformNotification(AccessibilityObject*, AXTextEditType, const String&, AXTextEditType, const String&, const VisiblePosition&) { } +#else +inline AXTextChange AXObjectCache::textChangeForEditType(AXTextEditType) { return AXTextInserted; } +inline void AXObjectCache::nodeTextChangePlatformNotification(AccessibilityObject*, AXTextChange, unsigned, const String&) { } #endif -} +inline AXAttributeCacheEnabler::AXAttributeCacheEnabler(AXObjectCache*) { } +inline AXAttributeCacheEnabler::~AXAttributeCacheEnabler() { } #endif + +} // namespace WebCore |