Changeset 255167 in webkit
- Timestamp:
- Jan 27, 2020, 1:31:01 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 1 added
- 24 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r255165 r255167 1 2020-01-27 Andres Gonzalez <andresg_22@apple.com> 2 3 Crash in AXIsolatedObject destruction. 4 https://bugs.webkit.org/show_bug.cgi?id=206828 5 6 Reviewed by Chris Fleizach. 7 8 - The previous AXCoreObject::detach method became detachRemoteParts, 9 since this method detaches all references to and from other objects. 10 - The new AXCoreObject::detach method performs three distinctive 11 operations: 12 1. Detaches the platform wrapper. 13 2. Detaches all remote references to and from other objects. 14 3. Sets the object ID to InvalidAXID. 15 - The detachPlatformWrapper method allows for platform-specific 16 customizations. 17 - Added accessibility/isolatedtree/mac/AXIsolatedobject.mm. 18 19 * PlatformMac.cmake: 20 * SourcesCocoa.txt: 21 * WebCore.xcodeproj/project.pbxproj: 22 * accessibility/AXObjectCache.cpp: 23 (WebCore::AXObjectCache::~AXObjectCache): 24 (WebCore::AXObjectCache::remove): 25 * accessibility/AXObjectCache.h: 26 * accessibility/AccessibilityNodeObject.cpp: 27 (WebCore::AccessibilityNodeObject::detachRemoteParts): 28 (WebCore::AccessibilityNodeObject::detach): Became detachRemoteParts. 29 * accessibility/AccessibilityNodeObject.h: 30 * accessibility/AccessibilityObject.cpp: 31 (WebCore::AccessibilityObject::detachRemoteParts): 32 (WebCore::AccessibilityObject::detach): Became detachRemoteParts. 33 * accessibility/AccessibilityObject.h: 34 * accessibility/AccessibilityObjectInterface.h: 35 (WebCore::AXCoreObject::detachWrapper): 36 (WebCore::AXCoreObject::detach): 37 * accessibility/AccessibilityRenderObject.cpp: 38 (WebCore::AccessibilityRenderObject::detachRemoteParts): 39 (WebCore::AccessibilityRenderObject::detach): Became detachRemoteParts. 40 * accessibility/AccessibilityRenderObject.h: 41 * accessibility/AccessibilityScrollView.cpp: 42 (WebCore::AccessibilityScrollView::detachRemoteParts): 43 (WebCore::AccessibilityScrollView::detach): Became detachRemoteParts. 44 * accessibility/AccessibilityScrollView.h: 45 * accessibility/atk/AccessibilityObjectAtk.cpp: 46 (WebCore::AccessibilityObject::detachPlatformWrapper): 47 * accessibility/ios/AXObjectCacheIOS.mm: 48 (WebCore::AXObjectCache::detachWrapper): Deleted, no longer used in COCOA platforms. 49 * accessibility/ios/AccessibilityObjectIOS.mm: 50 (WebCore::AccessibilityObject::detachPlatformWrapper): 51 * accessibility/isolatedtree/AXIsolatedObject.cpp: 52 (WebCore::AXIsolatedObject::detachRemoteParts): 53 (WebCore::AXIsolatedObject::detach): Became detachRemoteParts. 54 (WebCore::AXIsolatedObject::disconnect): Replaced with AXCoreObject::detach. 55 * accessibility/isolatedtree/AXIsolatedObject.h: 56 * accessibility/isolatedtree/AXIsolatedTree.cpp: 57 (WebCore::AXIsolatedTree::removeTreeForPageID): 58 (WebCore::AXIsolatedTree::applyPendingChanges): 59 * accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm: 60 (WebCore::AXIsolatedObject::detachPlatformWrapper): 61 * accessibility/mac/AXObjectCacheMac.mm: 62 (WebCore::AXObjectCache::detachWrapper): Deleted, no longer used in COCOA platforms. 63 * accessibility/mac/AccessibilityObjectMac.mm: 64 (WebCore::AccessibilityObject::detachPlatformWrapper): 65 * accessibility/win/AccessibilityObjectWin.cpp: 66 (WebCore::AccessibilityObject::detachPlatformWrapper): 67 1 68 2020-01-27 Ryan Haddad <ryanhaddad@apple.com> 2 69 -
trunk/Source/WebCore/PlatformMac.cmake
r254878 r255167 78 78 "${WEBCORE_DIR}/Modules/webauthn/apdu" 79 79 "${WEBCORE_DIR}/Modules/webgpu/WHLSL/Metal" 80 "${WEBCORE_DIR}/accessibility/isolatedtree/mac" 80 81 "${WEBCORE_DIR}/accessibility/mac" 81 82 "${WEBCORE_DIR}/bridge/objc" … … 150 151 Modules/webaudio/MediaStreamAudioSourceCocoa.cpp 151 152 153 accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm 152 154 accessibility/mac/AXObjectCacheMac.mm 153 155 accessibility/mac/AccessibilityObjectMac.mm -
trunk/Source/WebCore/SourcesCocoa.txt
r254878 r255167 32 32 accessibility/ios/WebAccessibilityObjectWrapperIOS.mm 33 33 34 accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm 34 35 accessibility/mac/AXObjectCacheMac.mm 35 36 accessibility/mac/AccessibilityObjectBase.mm -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r255158 r255167 13529 13529 BEF29EEA1715DD0900C4B4C9 /* VideoTrackPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoTrackPrivate.h; sourceTree = "<group>"; }; 13530 13530 C046E1AB1208A9FE00BA2CF7 /* LocalizedStrings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalizedStrings.cpp; sourceTree = "<group>"; }; 13531 C078376023DF253E00C9C5C8 /* AXIsolatedObjectMac.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = AXIsolatedObjectMac.mm; path = mac/AXIsolatedObjectMac.mm; sourceTree = "<group>"; }; 13531 13532 C0F2A43F13869A280066C534 /* preprocessor.pm */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; name = preprocessor.pm; path = scripts/preprocessor.pm; sourceTree = "<group>"; }; 13532 13533 C105DA610F3AA68F001DD44F /* TextEncodingDetectorICU.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextEncodingDetectorICU.cpp; sourceTree = "<group>"; }; … … 17851 17852 isa = PBXGroup; 17852 17853 children = ( 17854 C078375F23DF246200C9C5C8 /* mac */, 17853 17855 29AE213421ABA48A00869283 /* AXIsolatedObject.cpp */, 17854 17856 29AE213321ABA48A00869283 /* AXIsolatedObject.h */, … … 26150 26152 tabWidth = 4; 26151 26153 usesTabs = 0; 26154 }; 26155 C078375F23DF246200C9C5C8 /* mac */ = { 26156 isa = PBXGroup; 26157 children = ( 26158 C078376023DF253E00C9C5C8 /* AXIsolatedObjectMac.mm */, 26159 ); 26160 name = mac; 26161 sourceTree = "<group>"; 26152 26162 }; 26153 26163 C210E90D21B4BCA400B7F83D /* WHLSL */ = { -
trunk/Source/WebCore/accessibility/AXObjectCache.cpp
r255044 r255167 240 240 #endif 241 241 242 for (const auto& object : m_objects.values()) { 243 detachWrapper(object.get(), AccessibilityDetachmentType::CacheDestroyed); 242 for (const auto& object : m_objects.values()) 244 243 object->detach(AccessibilityDetachmentType::CacheDestroyed); 245 object->setObjectID(0);246 }247 244 } 248 245 … … 854 851 return; 855 852 856 detachWrapper(object.get(), AccessibilityDetachmentType::ElementDestroyed); 857 object->detach(AccessibilityDetachmentType::ElementDestroyed, this); 858 object->setObjectID(0); 853 object->detach(AccessibilityDetachmentType::ElementDestroyed); 859 854 860 855 m_idsInUse.remove(axID); -
trunk/Source/WebCore/accessibility/AXObjectCache.h
r255044 r255167 172 172 void remove(AXID); 173 173 174 #if !PLATFORM(COCOA) 174 175 void detachWrapper(AXCoreObject*, AccessibilityDetachmentType); 176 #endif 175 177 private: 176 178 using DOMObjectVariant = Variant<std::nullptr_t, RenderObject*, Node*, Widget*>; … … 556 558 inline void AXObjectCache::deferSelectedChildrenChangedIfNeeded(Element&) { } 557 559 inline void AXObjectCache::deferTextReplacementNotificationForTextControl(HTMLTextFormControlElement&, const String&) { } 560 #if !PLATFORM(COCOA) 558 561 inline void AXObjectCache::detachWrapper(AXCoreObject*, AccessibilityDetachmentType) { } 562 #endif 559 563 inline void AXObjectCache::focusModalNodeTimerFired() { } 560 564 inline void AXObjectCache::performCacheUpdateTimerFired() { } -
trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp
r254514 r255167 107 107 } 108 108 109 void AccessibilityNodeObject::detach (AccessibilityDetachmentType detachmentType, AXObjectCache* cache)109 void AccessibilityNodeObject::detachRemoteParts(AccessibilityDetachmentType detachmentType) 110 110 { 111 111 // AccessibilityObject calls clearChildren. 112 AccessibilityObject::detach (detachmentType, cache);112 AccessibilityObject::detachRemoteParts(detachmentType); 113 113 m_node = nullptr; 114 114 } -
trunk/Source/WebCore/accessibility/AccessibilityNodeObject.h
r251798 r255167 133 133 AccessibilityObject* parentObjectIfExists() const override; 134 134 135 void detach(AccessibilityDetachmentType, AXObjectCache*) override;136 135 void childrenChanged() override; 137 136 void updateAccessibilityRole() override; … … 144 143 protected: 145 144 explicit AccessibilityNodeObject(Node*); 145 void detachRemoteParts(AccessibilityDetachmentType) override; 146 146 147 147 AccessibilityRole m_ariaRole { AccessibilityRole::Unknown }; -
trunk/Source/WebCore/accessibility/AccessibilityObject.cpp
r254782 r255167 97 97 } 98 98 99 void AccessibilityObject::detach (AccessibilityDetachmentType detachmentType, AXObjectCache* cache)99 void AccessibilityObject::detachRemoteParts(AccessibilityDetachmentType detachmentType) 100 100 { 101 101 // Menu close events need to notify the platform. No element is used in the notification because it's a destruction event. 102 if (detachmentType == AccessibilityDetachmentType::ElementDestroyed && roleValue() == AccessibilityRole::Menu && cache) 103 cache->postNotification(nullptr, &cache->document(), AXObjectCache::AXMenuClosed); 104 102 if (detachmentType == AccessibilityDetachmentType::ElementDestroyed && roleValue() == AccessibilityRole::Menu) { 103 if (auto* cache = axObjectCache()) 104 cache->postNotification(nullptr, &cache->document(), AXObjectCache::AXMenuClosed); 105 } 106 105 107 // Clear any children and call detachFromParent on them so that 106 108 // no children are left with dangling pointers to their parent. 107 109 clearChildren(); 108 109 #if ENABLE(ACCESSIBILITY)110 setWrapper(nullptr);111 #endif112 110 } 113 111 -
trunk/Source/WebCore/accessibility/AccessibilityObject.h
r255080 r255167 97 97 98 98 class AccessibilityObject : public AXCoreObject { 99 protected:100 AccessibilityObject() = default;101 102 99 public: 103 100 virtual ~AccessibilityObject(); … … 109 106 void init() override { } 110 107 111 // When the corresponding WebCore object that this AccessibilityObject112 // wraps is deleted, it must be detached.113 void detach(AccessibilityDetachmentType, AXObjectCache* = nullptr) override;114 108 bool isDetached() const override; 115 109 … … 737 731 738 732 protected: 733 AccessibilityObject() = default; 734 void detachRemoteParts(AccessibilityDetachmentType) override; 735 void detachPlatformWrapper(AccessibilityDetachmentType) override; 736 739 737 AXID m_id { 0 }; 740 738 AccessibilityChildrenVector m_children; -
trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h
r255080 r255167 478 478 // When the corresponding WebCore object that this accessible object 479 479 // represents is deleted, it must be detached. 480 v irtual void detach(AccessibilityDetachmentType, AXObjectCache* = nullptr) = 0;480 void detach(AccessibilityDetachmentType); 481 481 virtual bool isDetached() const = 0; 482 482 … … 1079 1079 AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); } 1080 1080 void setWrapper(AccessibilityObjectWrapper* wrapper) { m_wrapper = wrapper; } 1081 void detachWrapper(AccessibilityDetachmentType); 1081 1082 #else 1082 1083 AccessibilityObjectWrapper* wrapper() const { return nullptr; } 1083 1084 void setWrapper(AccessibilityObjectWrapper*) { } 1085 void detachWrapper(AccessibilityDetachmentType) { } 1084 1086 #endif 1085 1087 … … 1130 1132 virtual String documentURI() const = 0; 1131 1133 virtual String documentEncoding() const = 0; 1132 protected: 1134 private: 1135 // Detaches this object from the objects it references and it is referenced by. 1136 virtual void detachRemoteParts(AccessibilityDetachmentType) = 0; 1137 1133 1138 #if PLATFORM(COCOA) 1134 1139 RetainPtr<WebAccessibilityObjectWrapper> m_wrapper; … … 1138 1143 GRefPtr<WebKitAccessible> m_wrapper; 1139 1144 #endif 1140 }; 1145 virtual void detachPlatformWrapper(AccessibilityDetachmentType) = 0; 1146 }; 1147 1148 inline void AXCoreObject::detach(AccessibilityDetachmentType detachmentType) 1149 { 1150 detachWrapper(detachmentType); 1151 detachRemoteParts(detachmentType); 1152 setObjectID(InvalidAXID); 1153 } 1154 1155 inline void AXCoreObject::detachWrapper(AccessibilityDetachmentType detachmentType) 1156 { 1157 detachPlatformWrapper(detachmentType); 1158 m_wrapper = nullptr; 1159 } 1141 1160 1142 1161 namespace Accessibility { -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
r254557 r255167 134 134 } 135 135 136 void AccessibilityRenderObject::detach (AccessibilityDetachmentType detachmentType, AXObjectCache* cache)137 { 138 AccessibilityNodeObject::detach (detachmentType, cache);136 void AccessibilityRenderObject::detachRemoteParts(AccessibilityDetachmentType detachmentType) 137 { 138 AccessibilityNodeObject::detachRemoteParts(detachmentType); 139 139 140 140 detachRemoteSVGRoot(); -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h
r253261 r255167 150 150 void setSelectedRows(AccessibilityChildrenVector&) override; 151 151 AccessibilityOrientation orientation() const override; 152 153 void detach(AccessibilityDetachmentType, AXObjectCache*) override; 152 154 153 void textChanged() override; 155 154 void addChildren() override; … … 204 203 protected: 205 204 explicit AccessibilityRenderObject(RenderObject*); 205 void detachRemoteParts(AccessibilityDetachmentType) override; 206 206 ScrollableArea* getScrollableAreaIfScrollable() const override; 207 207 void scrollTo(const IntPoint&) const override; -
trunk/Source/WebCore/accessibility/AccessibilityScrollView.cpp
r251798 r255167 49 49 } 50 50 51 void AccessibilityScrollView::detach (AccessibilityDetachmentType detachmentType, AXObjectCache* cache)52 { 53 AccessibilityObject::detach (detachmentType, cache);51 void AccessibilityScrollView::detachRemoteParts(AccessibilityDetachmentType detachmentType) 52 { 53 AccessibilityObject::detachRemoteParts(detachmentType); 54 54 m_scrollView = nullptr; 55 55 } -
trunk/Source/WebCore/accessibility/AccessibilityScrollView.h
r251798 r255167 41 41 42 42 virtual ~AccessibilityScrollView(); 43 void detach(AccessibilityDetachmentType, AXObjectCache*) override;44 43 45 44 AccessibilityObject* webAreaObject() const; … … 47 46 private: 48 47 explicit AccessibilityScrollView(ScrollView*); 49 48 void detachRemoteParts(AccessibilityDetachmentType) override; 49 50 50 ScrollableArea* getScrollableAreaIfScrollable() const override; 51 51 void scrollTo(const IntPoint&) const override; -
trunk/Source/WebCore/accessibility/atk/AccessibilityObjectAtk.cpp
r247367 r255167 22 22 #include "AccessibilityObject.h" 23 23 24 #include "AXObjectCache.h" 24 25 #include "HTMLSpanElement.h" 25 26 #include "RenderBlock.h" … … 35 36 namespace WebCore { 36 37 38 void AccessibilityObject::detachPlatformWrapper(AccessibilityDetachmentType detachmentType) 39 { 40 if (auto* cache = axObjectCache()) 41 cache->detachWrapper(this, detachmentType); 42 } 43 37 44 bool AccessibilityObject::accessibilityIgnoreAttachment() const 38 45 { -
trunk/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm
r254566 r255167 37 37 namespace WebCore { 38 38 39 void AXObjectCache::detachWrapper(AXCoreObject* obj, AccessibilityDetachmentType)40 {41 [obj->wrapper() detach];42 obj->setWrapper(nullptr);43 }44 45 39 void AXObjectCache::attachWrapper(AXCoreObject* obj) 46 40 { -
trunk/Source/WebCore/accessibility/ios/AccessibilityObjectIOS.mm
r251798 r255167 38 38 namespace WebCore { 39 39 40 void AccessibilityObject::detachPlatformWrapper(AccessibilityDetachmentType) 41 { 42 [wrapper() detach]; 43 } 44 40 45 void AccessibilityObject::detachFromParent() 41 46 { -
trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
r255095 r255167 408 408 } 409 409 410 void AXIsolatedObject::detach (AccessibilityDetachmentType, AXObjectCache*)411 { 412 ASSERT(isMainThread() );410 void AXIsolatedObject::detachRemoteParts(AccessibilityDetachmentType detachmentType) 411 { 412 ASSERT(isMainThread() ? detachmentType == AccessibilityDetachmentType::CacheDestroyed : detachmentType != AccessibilityDetachmentType::CacheDestroyed); 413 413 for (const auto& childID : m_childrenIDs) 414 414 tree()->nodeForID(childID)->detachFromParent(); … … 426 426 { 427 427 m_parent = InvalidAXID; 428 }429 430 void AXIsolatedObject::disconnect()431 {432 ASSERT(isMainThread());433 tree()->axObjectCache()->detachWrapper(this, AccessibilityDetachmentType::ElementDestroyed);434 detach(AccessibilityDetachmentType::ElementDestroyed);435 setObjectID(InvalidAXID);436 428 } 437 429 -
trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
r255080 r255167 55 55 void init() override { } 56 56 57 void detach(AccessibilityDetachmentType, AXObjectCache* = nullptr) override;58 57 bool isDetached() const override; 59 void disconnect();60 58 61 59 void setTreeIdentifier(AXIsolatedTreeID); … … 64 62 65 63 private: 64 void detachRemoteParts(AccessibilityDetachmentType) override; 65 void detachPlatformWrapper(AccessibilityDetachmentType) override; 66 66 67 67 AXID parent() const { return m_parent; } -
trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
r254766 r255167 98 98 for (const auto& axID : tree->m_readerThreadNodeMap.keys()) { 99 99 if (auto object = tree->nodeForID(axID)) 100 object->d isconnect();100 object->detach(AccessibilityDetachmentType::CacheDestroyed); 101 101 } 102 102 tree->m_readerThreadNodeMap.clear(); … … 165 165 RELEASE_ASSERT(!isMainThread()); 166 166 LockHolder locker { m_changeLogLock }; 167 Vector<Ref<AXIsolatedObject>> appendCopy;168 std::swap(appendCopy, m_pendingAppends);169 Vector<AXID> removeCopy({ WTFMove(m_pendingRemovals) });170 locker.unlockEarly();171 167 172 168 // We don't clear the pending IDs beacause if the next round of updates does not modify them, then they stay the same … … 174 170 m_focusedNodeID = m_pendingFocusedNodeID; 175 171 176 for (auto& item : appendCopy)172 for (auto& item : m_pendingAppends) 177 173 m_readerThreadNodeMap.add(item->objectID(), WTFMove(item)); 178 174 179 for (auto item : removeCopy) {175 for (auto& item : m_pendingRemovals) { 180 176 if (auto object = nodeForID(item)) 181 object->d isconnect();177 object->detach(AccessibilityDetachmentType::ElementDestroyed); 182 178 m_readerThreadNodeMap.remove(item); 183 179 } -
trunk/Source/WebCore/accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm
r255166 r255167 1 1 /* 2 * Copyright (C) 20 08 Apple Inc. All Rights Reserved.2 * Copyright (C) 2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 21 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 24 */ 25 25 26 #i nclude"config.h"27 #i nclude "AccessibilityObject.h"26 #import "config.h" 27 #import "AXIsolatedObject.h" 28 28 29 #if ENABLE(ACCESSIBILITY) 29 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE) && PLATFORM(MAC) 30 31 #import "WebAccessibilityObjectWrapperMac.h" 30 32 31 33 namespace WebCore { 32 34 33 bool AccessibilityObject::accessibilityIgnoreAttachment() const 35 void AXIsolatedObject::detachPlatformWrapper(AccessibilityDetachmentType) 34 36 { 35 return false;37 [wrapper() detach]; 36 38 } 37 39 38 AccessibilityObjectInclusion AccessibilityObject::accessibilityPlatformIncludesObject() const 39 { 40 if (isMenuListPopup() || isMenuListOption()) 41 return AccessibilityObjectInclusion::IncludeObject; 40 } // WebCore 42 41 43 return AccessibilityObjectInclusion::DefaultBehavior; 44 } 45 46 } // namespace WebCore 47 48 #endif // ENABLE(ACCESSIBILITY) 42 #endif // ENABLE(ACCESSIBILITY_ISOLATED_TREE) && PLATFORM(MAC) -
trunk/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm
r255044 r255167 233 233 namespace WebCore { 234 234 235 void AXObjectCache::detachWrapper(AXCoreObject* obj, AccessibilityDetachmentType)236 {237 [obj->wrapper() detach];238 obj->setWrapper(nullptr);239 }240 241 235 void AXObjectCache::attachWrapper(AXCoreObject* obj) 242 236 { -
trunk/Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm
r254158 r255167 41 41 42 42 namespace WebCore { 43 44 void AccessibilityObject::detachPlatformWrapper(AccessibilityDetachmentType) 45 { 46 [wrapper() detach]; 47 } 43 48 44 49 void AccessibilityObject::detachFromParent() -
trunk/Source/WebCore/accessibility/win/AccessibilityObjectWin.cpp
r247367 r255167 29 29 #if ENABLE(ACCESSIBILITY) 30 30 31 #include "AXObjectCache.h" 32 31 33 namespace WebCore { 34 35 void AccessibilityObject::detachPlatformWrapper(AccessibilityDetachmentType detachmentType) 36 { 37 if (auto* cache = axObjectCache()) 38 cache->detachWrapper(this, detachmentType); 39 } 32 40 33 41 bool AccessibilityObject::accessibilityIgnoreAttachment() const
Note:
See TracChangeset
for help on using the changeset viewer.