WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-206828-20200127121704.patch (text/plain), 31.07 KB, created by
Andres Gonzalez
on 2020-01-27 09:17:06 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Andres Gonzalez
Created:
2020-01-27 09:17:06 PST
Size:
31.07 KB
patch
obsolete
>Subversion Revision: 255121 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 5ec4edd00b018510f6f5c06f0ed36b88b313ed8b..43475491ba4dfcad83df061fc2bc4dfbd015e3a0 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,70 @@ >+2020-01-27 Andres Gonzalez <andresg_22@apple.com> >+ >+ Crash in AXIsolatedObject destruction. >+ https://bugs.webkit.org/show_bug.cgi?id=206828 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ - The previous AXCoreObject::detach method became detachRemoteParts, >+ since this method detaches all references to and from other objects. >+ - The new AXCoreObject::detach method performs three distinctive >+ operations: >+ 1. Detaches the platform wrapper. >+ 2. Detaches all remote references to and from other objects. >+ 3. Sets the object ID to InvalidAXID. >+ - The detachPlatformWrapper method allows for platform-specific >+ customizations. >+ - Added accessibility/isolatedtree/mac/AXIsolatedobject.mm. >+ >+ * PlatformMac.cmake: >+ * SourcesCocoa.txt: >+ * WebCore.xcodeproj/project.pbxproj: >+ * accessibility/AXObjectCache.cpp: >+ (WebCore::AXObjectCache::~AXObjectCache): >+ (WebCore::AXObjectCache::remove): >+ * accessibility/AXObjectCache.h: >+ * accessibility/AccessibilityNodeObject.cpp: >+ (WebCore::AccessibilityNodeObject::detachRemoteParts): >+ (WebCore::AccessibilityNodeObject::detach): Became detachRemoteParts. >+ * accessibility/AccessibilityNodeObject.h: >+ * accessibility/AccessibilityObject.cpp: >+ (WebCore::AccessibilityObject::detachRemoteParts): >+ (WebCore::AccessibilityObject::detach): Became detachRemoteParts. >+ * accessibility/AccessibilityObject.h: >+ * accessibility/AccessibilityObjectInterface.h: >+ (WebCore::AXCoreObject::detachWrapper): >+ (WebCore::AXCoreObject::detach): >+ * accessibility/AccessibilityRenderObject.cpp: >+ (WebCore::AccessibilityRenderObject::detachRemoteParts): >+ (WebCore::AccessibilityRenderObject::detach): Became detachRemoteParts. >+ * accessibility/AccessibilityRenderObject.h: >+ * accessibility/AccessibilityScrollView.cpp: >+ (WebCore::AccessibilityScrollView::detachRemoteParts): >+ (WebCore::AccessibilityScrollView::detach): Became detachRemoteParts. >+ * accessibility/AccessibilityScrollView.h: >+ * accessibility/atk/AccessibilityObjectAtk.cpp: >+ (WebCore::AccessibilityObject::detachPlatformWrapper): >+ * accessibility/ios/AXObjectCacheIOS.mm: >+ (WebCore::AXObjectCache::detachWrapper): Deleted, no longer used in COCOA platforms. >+ * accessibility/ios/AccessibilityObjectIOS.mm: >+ (WebCore::AccessibilityObject::detachPlatformWrapper): >+ * accessibility/isolatedtree/AXIsolatedObject.cpp: >+ (WebCore::AXIsolatedObject::detachRemoteParts): >+ (WebCore::AXIsolatedObject::detach): Became detachRemoteParts. >+ (WebCore::AXIsolatedObject::disconnect): Replaced with AXCoreObject::detach. >+ * accessibility/isolatedtree/AXIsolatedObject.h: >+ * accessibility/isolatedtree/AXIsolatedTree.cpp: >+ (WebCore::AXIsolatedTree::removeTreeForPageID): >+ (WebCore::AXIsolatedTree::applyPendingChanges): >+ * accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm: >+ (WebCore::AXIsolatedObject::detachPlatformWrapper): >+ * accessibility/mac/AXObjectCacheMac.mm: >+ (WebCore::AXObjectCache::detachWrapper): Deleted, no longer used in COCOA platforms. >+ * accessibility/mac/AccessibilityObjectMac.mm: >+ (WebCore::AccessibilityObject::detachPlatformWrapper): >+ * accessibility/win/AccessibilityObjectWin.cpp: >+ (WebCore::AccessibilityObject::detachPlatformWrapper): >+ > 2020-01-25 Per Arne Vollan <pvollan@apple.com> > > [Cocoa] Media mime types map should be created in the UI process >diff --git a/Source/WebCore/PlatformMac.cmake b/Source/WebCore/PlatformMac.cmake >index 993355d3b8ad360f01c05910ad68019abf4cf7c7..aec32067d3e6f2f49d193e0b1a66bb09591160c8 100644 >--- a/Source/WebCore/PlatformMac.cmake >+++ b/Source/WebCore/PlatformMac.cmake >@@ -77,6 +77,7 @@ list(APPEND WebCore_PRIVATE_INCLUDE_DIRECTORIES > "${WEBCORE_DIR}/Modules/remoteplayback" > "${WEBCORE_DIR}/Modules/webauthn/apdu" > "${WEBCORE_DIR}/Modules/webgpu/WHLSL/Metal" >+ "${WEBCORE_DIR}/accessibility/isolatedtree/mac" > "${WEBCORE_DIR}/accessibility/mac" > "${WEBCORE_DIR}/bridge/objc" > "${WEBCORE_DIR}/crypto/mac" >@@ -149,6 +150,7 @@ list(APPEND WebCore_SOURCES > > Modules/webaudio/MediaStreamAudioSourceCocoa.cpp > >+ accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm > accessibility/mac/AXObjectCacheMac.mm > accessibility/mac/AccessibilityObjectMac.mm > accessibility/mac/WebAccessibilityObjectWrapperMac.mm >diff --git a/Source/WebCore/SourcesCocoa.txt b/Source/WebCore/SourcesCocoa.txt >index 106740d349c4156dbef134ef19d654575cdf0c93..4de75df8df0b8f90e5b258157eada4a69d3b5916 100644 >--- a/Source/WebCore/SourcesCocoa.txt >+++ b/Source/WebCore/SourcesCocoa.txt >@@ -31,6 +31,7 @@ accessibility/ios/AccessibilityObjectIOS.mm > accessibility/ios/AXObjectCacheIOS.mm > accessibility/ios/WebAccessibilityObjectWrapperIOS.mm > >+accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm > accessibility/mac/AXObjectCacheMac.mm > accessibility/mac/AccessibilityObjectBase.mm > accessibility/mac/AccessibilityObjectMac.mm >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index 672f1cf7cdc9b7dbb9a601437cbd21e6701130ab..498f278057616dcba4ea561ee316540ad8c44e11 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -13518,6 +13518,7 @@ > BEF29EE91715DD0900C4B4C9 /* AudioTrackPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioTrackPrivate.h; sourceTree = "<group>"; }; > BEF29EEA1715DD0900C4B4C9 /* VideoTrackPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoTrackPrivate.h; sourceTree = "<group>"; }; > C046E1AB1208A9FE00BA2CF7 /* LocalizedStrings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalizedStrings.cpp; sourceTree = "<group>"; }; >+ C078376023DF253E00C9C5C8 /* AXIsolatedObjectMac.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = AXIsolatedObjectMac.mm; path = mac/AXIsolatedObjectMac.mm; sourceTree = "<group>"; }; > C0F2A43F13869A280066C534 /* preprocessor.pm */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; name = preprocessor.pm; path = scripts/preprocessor.pm; sourceTree = "<group>"; }; > C105DA610F3AA68F001DD44F /* TextEncodingDetectorICU.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextEncodingDetectorICU.cpp; sourceTree = "<group>"; }; > C105DA630F3AA6B8001DD44F /* TextEncodingDetector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextEncodingDetector.h; sourceTree = "<group>"; }; >@@ -17837,6 +17838,7 @@ > 29AE212921AB9ECB00869283 /* isolatedtree */ = { > isa = PBXGroup; > children = ( >+ C078375F23DF246200C9C5C8 /* mac */, > 29AE213421ABA48A00869283 /* AXIsolatedObject.cpp */, > 29AE213321ABA48A00869283 /* AXIsolatedObject.h */, > 29AE212C21AB9EEB00869283 /* AXIsolatedTree.cpp */, >@@ -26134,6 +26136,14 @@ > tabWidth = 4; > usesTabs = 0; > }; >+ C078375F23DF246200C9C5C8 /* mac */ = { >+ isa = PBXGroup; >+ children = ( >+ C078376023DF253E00C9C5C8 /* AXIsolatedObjectMac.mm */, >+ ); >+ name = mac; >+ sourceTree = "<group>"; >+ }; > C210E90D21B4BCA400B7F83D /* WHLSL */ = { > isa = PBXGroup; > children = ( >diff --git a/Source/WebCore/accessibility/AXObjectCache.cpp b/Source/WebCore/accessibility/AXObjectCache.cpp >index c746bc131fd4c0469df941f32da16b872c54335b..37dddc6125f5ac3fb37f29dcf0ca1148e61f1a46 100644 >--- a/Source/WebCore/accessibility/AXObjectCache.cpp >+++ b/Source/WebCore/accessibility/AXObjectCache.cpp >@@ -239,11 +239,8 @@ AXObjectCache::~AXObjectCache() > AXIsolatedTree::removeTreeForPageID(*m_pageID); > #endif > >- for (const auto& object : m_objects.values()) { >- detachWrapper(object.get(), AccessibilityDetachmentType::CacheDestroyed); >+ for (const auto& object : m_objects.values()) > object->detach(AccessibilityDetachmentType::CacheDestroyed); >- object->setObjectID(0); >- } > } > > void AXObjectCache::findModalNodes() >@@ -853,9 +850,7 @@ void AXObjectCache::remove(AXID axID) > if (!object) > return; > >- detachWrapper(object.get(), AccessibilityDetachmentType::ElementDestroyed); >- object->detach(AccessibilityDetachmentType::ElementDestroyed, this); >- object->setObjectID(0); >+ object->detach(AccessibilityDetachmentType::ElementDestroyed); > > m_idsInUse.remove(axID); > ASSERT(m_objects.size() >= m_idsInUse.size()); >diff --git a/Source/WebCore/accessibility/AXObjectCache.h b/Source/WebCore/accessibility/AXObjectCache.h >index 213940680f8e342f7e276e14636d6963e19f5c9e..590de52da22b512f7bfa20a5b0931f66f4906266 100644 >--- a/Source/WebCore/accessibility/AXObjectCache.h >+++ b/Source/WebCore/accessibility/AXObjectCache.h >@@ -171,7 +171,9 @@ public: > void remove(Widget*); > void remove(AXID); > >+#if !PLATFORM(COCOA) > void detachWrapper(AXCoreObject*, AccessibilityDetachmentType); >+#endif > private: > using DOMObjectVariant = Variant<std::nullptr_t, RenderObject*, Node*, Widget*>; > void cacheAndInitializeWrapper(AccessibilityObject*, DOMObjectVariant = nullptr); >@@ -555,7 +557,9 @@ inline void AXObjectCache::deferRecomputeIsIgnored(Element*) { } > inline void AXObjectCache::deferTextChangedIfNeeded(Node*) { } > inline void AXObjectCache::deferSelectedChildrenChangedIfNeeded(Element&) { } > inline void AXObjectCache::deferTextReplacementNotificationForTextControl(HTMLTextFormControlElement&, const String&) { } >+#if !PLATFORM(COCOA) > inline void AXObjectCache::detachWrapper(AXCoreObject*, AccessibilityDetachmentType) { } >+#endif > inline void AXObjectCache::focusModalNodeTimerFired() { } > inline void AXObjectCache::performCacheUpdateTimerFired() { } > inline void AXObjectCache::frameLoadingEventNotification(Frame*, AXLoadingEvent) { } >diff --git a/Source/WebCore/accessibility/AccessibilityNodeObject.cpp b/Source/WebCore/accessibility/AccessibilityNodeObject.cpp >index 4dc73ec62ac2bfa1190cea5c120b05977e145109..209eb8e658e0b73418ec2cd00cd80a416fa2933a 100644 >--- a/Source/WebCore/accessibility/AccessibilityNodeObject.cpp >+++ b/Source/WebCore/accessibility/AccessibilityNodeObject.cpp >@@ -106,10 +106,10 @@ Ref<AccessibilityNodeObject> AccessibilityNodeObject::create(Node* node) > return adoptRef(*new AccessibilityNodeObject(node)); > } > >-void AccessibilityNodeObject::detach(AccessibilityDetachmentType detachmentType, AXObjectCache* cache) >+void AccessibilityNodeObject::detachRemoteParts(AccessibilityDetachmentType detachmentType) > { > // AccessibilityObject calls clearChildren. >- AccessibilityObject::detach(detachmentType, cache); >+ AccessibilityObject::detachRemoteParts(detachmentType); > m_node = nullptr; > } > >diff --git a/Source/WebCore/accessibility/AccessibilityNodeObject.h b/Source/WebCore/accessibility/AccessibilityNodeObject.h >index 380d997a54147ec29862ecc14ff304bbe9ae1b63..34702c150189948acc9cfc14df81b4113b6ed656 100644 >--- a/Source/WebCore/accessibility/AccessibilityNodeObject.h >+++ b/Source/WebCore/accessibility/AccessibilityNodeObject.h >@@ -132,7 +132,6 @@ public: > AccessibilityObject* parentObject() const override; > AccessibilityObject* parentObjectIfExists() const override; > >- void detach(AccessibilityDetachmentType, AXObjectCache*) override; > void childrenChanged() override; > void updateAccessibilityRole() override; > >@@ -143,6 +142,7 @@ public: > > protected: > explicit AccessibilityNodeObject(Node*); >+ void detachRemoteParts(AccessibilityDetachmentType) override; > > AccessibilityRole m_ariaRole { AccessibilityRole::Unknown }; > mutable AccessibilityRole m_roleForMSAA { AccessibilityRole::Unknown }; >diff --git a/Source/WebCore/accessibility/AccessibilityObject.cpp b/Source/WebCore/accessibility/AccessibilityObject.cpp >index d803044982e6a3d4bee60ab50877c690c9ae7b35..d2b61ff034667461444c37031c5f3125263642dc 100644 >--- a/Source/WebCore/accessibility/AccessibilityObject.cpp >+++ b/Source/WebCore/accessibility/AccessibilityObject.cpp >@@ -96,19 +96,17 @@ AccessibilityObject::~AccessibilityObject() > ASSERT(isDetached()); > } > >-void AccessibilityObject::detach(AccessibilityDetachmentType detachmentType, AXObjectCache* cache) >+void AccessibilityObject::detachRemoteParts(AccessibilityDetachmentType detachmentType) > { > // Menu close events need to notify the platform. No element is used in the notification because it's a destruction event. >- if (detachmentType == AccessibilityDetachmentType::ElementDestroyed && roleValue() == AccessibilityRole::Menu && cache) >- cache->postNotification(nullptr, &cache->document(), AXObjectCache::AXMenuClosed); >- >+ if (detachmentType == AccessibilityDetachmentType::ElementDestroyed && roleValue() == AccessibilityRole::Menu) { >+ if (auto* cache = axObjectCache()) >+ cache->postNotification(nullptr, &cache->document(), AXObjectCache::AXMenuClosed); >+ } >+ > // Clear any children and call detachFromParent on them so that > // no children are left with dangling pointers to their parent. > clearChildren(); >- >-#if ENABLE(ACCESSIBILITY) >- setWrapper(nullptr); >-#endif > } > > bool AccessibilityObject::isDetached() const >diff --git a/Source/WebCore/accessibility/AccessibilityObject.h b/Source/WebCore/accessibility/AccessibilityObject.h >index f43cdf700939573f58874564816ba0fb8d293b99..f2463e813d708135ffe786fc950d296a1eb7eeca 100644 >--- a/Source/WebCore/accessibility/AccessibilityObject.h >+++ b/Source/WebCore/accessibility/AccessibilityObject.h >@@ -96,9 +96,6 @@ struct AccessibilityText { > bool nodeHasPresentationRole(Node*); > > class AccessibilityObject : public AXCoreObject { >-protected: >- AccessibilityObject() = default; >- > public: > virtual ~AccessibilityObject(); > >@@ -108,9 +105,6 @@ public: > void setObjectID(AXID id) override { m_id = id; } > void init() override { } > >- // When the corresponding WebCore object that this AccessibilityObject >- // wraps is deleted, it must be detached. >- void detach(AccessibilityDetachmentType, AXObjectCache* = nullptr) override; > bool isDetached() const override; > > bool isAccessibilityNodeObject() const override { return false; } >@@ -736,6 +730,10 @@ public: > String documentEncoding() const override; > > protected: >+ AccessibilityObject() = default; >+ void detachRemoteParts(AccessibilityDetachmentType) override; >+ void detachPlatformWrapper(AccessibilityDetachmentType) override; >+ > AXID m_id { 0 }; > AccessibilityChildrenVector m_children; > mutable bool m_haveChildren { false }; >diff --git a/Source/WebCore/accessibility/AccessibilityObjectInterface.h b/Source/WebCore/accessibility/AccessibilityObjectInterface.h >index 2d231bbb5475fc43e5b716bad3228b3745cd15a5..44d295d7c9c4358e95b5b3aee38e8ca6322578b9 100644 >--- a/Source/WebCore/accessibility/AccessibilityObjectInterface.h >+++ b/Source/WebCore/accessibility/AccessibilityObjectInterface.h >@@ -477,7 +477,7 @@ public: > > // When the corresponding WebCore object that this accessible object > // represents is deleted, it must be detached. >- virtual void detach(AccessibilityDetachmentType, AXObjectCache* = nullptr) = 0; >+ void detach(AccessibilityDetachmentType); > virtual bool isDetached() const = 0; > > typedef Vector<RefPtr<AXCoreObject>> AccessibilityChildrenVector; >@@ -1078,9 +1078,11 @@ public: > #if ENABLE(ACCESSIBILITY) > AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); } > void setWrapper(AccessibilityObjectWrapper* wrapper) { m_wrapper = wrapper; } >+ void detachWrapper(AccessibilityDetachmentType); > #else > AccessibilityObjectWrapper* wrapper() const { return nullptr; } > void setWrapper(AccessibilityObjectWrapper*) { } >+ void detachWrapper(AccessibilityDetachmentType) { } > #endif > > virtual void overrideAttachmentParent(AXCoreObject* parent) = 0; >@@ -1129,7 +1131,10 @@ public: > virtual uint64_t sessionID() const = 0; > virtual String documentURI() const = 0; > virtual String documentEncoding() const = 0; >-protected: >+private: >+ // Detaches this object from the objects it references and it is referenced by. >+ virtual void detachRemoteParts(AccessibilityDetachmentType) = 0; >+ > #if PLATFORM(COCOA) > RetainPtr<WebAccessibilityObjectWrapper> m_wrapper; > #elif PLATFORM(WIN) >@@ -1137,8 +1142,22 @@ protected: > #elif USE(ATK) > GRefPtr<WebKitAccessible> m_wrapper; > #endif >+ virtual void detachPlatformWrapper(AccessibilityDetachmentType) = 0; > }; > >+inline void AXCoreObject::detach(AccessibilityDetachmentType detachmentType) >+{ >+ detachWrapper(detachmentType); >+ detachRemoteParts(detachmentType); >+ setObjectID(InvalidAXID); >+} >+ >+inline void AXCoreObject::detachWrapper(AccessibilityDetachmentType detachmentType) >+{ >+ detachPlatformWrapper(detachmentType); >+ m_wrapper = nullptr; >+} >+ > namespace Accessibility { > > template<typename T, typename F> >diff --git a/Source/WebCore/accessibility/AccessibilityRenderObject.cpp b/Source/WebCore/accessibility/AccessibilityRenderObject.cpp >index 514788a3a28c4aecc467f202947617588a89e1e8..9034d693808f32de5d6218177afd92ce5e9646ff 100644 >--- a/Source/WebCore/accessibility/AccessibilityRenderObject.cpp >+++ b/Source/WebCore/accessibility/AccessibilityRenderObject.cpp >@@ -133,9 +133,9 @@ Ref<AccessibilityRenderObject> AccessibilityRenderObject::create(RenderObject* r > return adoptRef(*new AccessibilityRenderObject(renderer)); > } > >-void AccessibilityRenderObject::detach(AccessibilityDetachmentType detachmentType, AXObjectCache* cache) >+void AccessibilityRenderObject::detachRemoteParts(AccessibilityDetachmentType detachmentType) > { >- AccessibilityNodeObject::detach(detachmentType, cache); >+ AccessibilityNodeObject::detachRemoteParts(detachmentType); > > detachRemoteSVGRoot(); > >diff --git a/Source/WebCore/accessibility/AccessibilityRenderObject.h b/Source/WebCore/accessibility/AccessibilityRenderObject.h >index 3f346783e48a95d83b9d33e10dcf3b9d50b89cb0..b202849818b73f91a50ab5c3f1464e2ce8643b68 100644 >--- a/Source/WebCore/accessibility/AccessibilityRenderObject.h >+++ b/Source/WebCore/accessibility/AccessibilityRenderObject.h >@@ -149,8 +149,7 @@ public: > void setValue(const String&) override; > void setSelectedRows(AccessibilityChildrenVector&) override; > AccessibilityOrientation orientation() const override; >- >- void detach(AccessibilityDetachmentType, AXObjectCache*) override; >+ > void textChanged() override; > void addChildren() override; > bool canHaveChildren() const override; >@@ -203,6 +202,7 @@ public: > > protected: > explicit AccessibilityRenderObject(RenderObject*); >+ void detachRemoteParts(AccessibilityDetachmentType) override; > ScrollableArea* getScrollableAreaIfScrollable() const override; > void scrollTo(const IntPoint&) const override; > >diff --git a/Source/WebCore/accessibility/AccessibilityScrollView.cpp b/Source/WebCore/accessibility/AccessibilityScrollView.cpp >index d116eddfd7e6910ba9639cf6cf5b1ba22be4d8fc..ace0113b6f9dd2c9b373eeccd1f49da3ff0bfffa 100644 >--- a/Source/WebCore/accessibility/AccessibilityScrollView.cpp >+++ b/Source/WebCore/accessibility/AccessibilityScrollView.cpp >@@ -48,9 +48,9 @@ AccessibilityScrollView::~AccessibilityScrollView() > ASSERT(isDetached()); > } > >-void AccessibilityScrollView::detach(AccessibilityDetachmentType detachmentType, AXObjectCache* cache) >+void AccessibilityScrollView::detachRemoteParts(AccessibilityDetachmentType detachmentType) > { >- AccessibilityObject::detach(detachmentType, cache); >+ AccessibilityObject::detachRemoteParts(detachmentType); > m_scrollView = nullptr; > } > >diff --git a/Source/WebCore/accessibility/AccessibilityScrollView.h b/Source/WebCore/accessibility/AccessibilityScrollView.h >index 9bfaf155adb232a5663f58cb08c12c133e2c351c..39b3faab511ac1a3bee636e2a25a49c129a50374 100644 >--- a/Source/WebCore/accessibility/AccessibilityScrollView.h >+++ b/Source/WebCore/accessibility/AccessibilityScrollView.h >@@ -40,13 +40,13 @@ public: > ScrollView* scrollView() const { return m_scrollView; } > > virtual ~AccessibilityScrollView(); >- void detach(AccessibilityDetachmentType, AXObjectCache*) override; > > AccessibilityObject* webAreaObject() const; > > private: > explicit AccessibilityScrollView(ScrollView*); >- >+ void detachRemoteParts(AccessibilityDetachmentType) override; >+ > ScrollableArea* getScrollableAreaIfScrollable() const override; > void scrollTo(const IntPoint&) const override; > bool computeAccessibilityIsIgnored() const override; >diff --git a/Source/WebCore/accessibility/atk/AccessibilityObjectAtk.cpp b/Source/WebCore/accessibility/atk/AccessibilityObjectAtk.cpp >index 2640c693565c7e7f4ff78392a6270bd6997dec95..cbc49604c0f20dfd89e6d0949e2209e6eadf67b2 100644 >--- a/Source/WebCore/accessibility/atk/AccessibilityObjectAtk.cpp >+++ b/Source/WebCore/accessibility/atk/AccessibilityObjectAtk.cpp >@@ -21,6 +21,7 @@ > #include "config.h" > #include "AccessibilityObject.h" > >+#include "AXObjectCache.h" > #include "HTMLSpanElement.h" > #include "RenderBlock.h" > #include "RenderInline.h" >@@ -34,6 +35,12 @@ > > namespace WebCore { > >+void AccessibilityObject::detachPlatformWrapper(AccessibilityDetachmentType detachmentType) >+{ >+ if (auto* cache = axObjectCache()) >+ cache->detachWrapper(this, detachmentType); >+} >+ > bool AccessibilityObject::accessibilityIgnoreAttachment() const > { > return false; >diff --git a/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm b/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm >index f11bfa8e0faf99857fc1ae816b667aaee1545be5..cc33a2bce2ed447466235b29914c48f799c2288f 100644 >--- a/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm >+++ b/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm >@@ -36,12 +36,6 @@ > > namespace WebCore { > >-void AXObjectCache::detachWrapper(AXCoreObject* obj, AccessibilityDetachmentType) >-{ >- [obj->wrapper() detach]; >- obj->setWrapper(nullptr); >-} >- > void AXObjectCache::attachWrapper(AXCoreObject* obj) > { > RetainPtr<AccessibilityObjectWrapper> wrapper = adoptNS([[WebAccessibilityObjectWrapper alloc] initWithAccessibilityObject:obj]); >diff --git a/Source/WebCore/accessibility/ios/AccessibilityObjectIOS.mm b/Source/WebCore/accessibility/ios/AccessibilityObjectIOS.mm >index 7e05acfffc9aea7fd24af649d97a7d48a692da7d..09b35344737ade2bafdd52a919e53316edd61768 100644 >--- a/Source/WebCore/accessibility/ios/AccessibilityObjectIOS.mm >+++ b/Source/WebCore/accessibility/ios/AccessibilityObjectIOS.mm >@@ -37,6 +37,11 @@ > > namespace WebCore { > >+void AccessibilityObject::detachPlatformWrapper(AccessibilityDetachmentType) >+{ >+ [wrapper() detach]; >+} >+ > void AccessibilityObject::detachFromParent() > { > } >diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp >index 2a9f366f13f630758993c0451360ceae3e663f78..fd86162cb3383494f67e6c48baa59e183b1f97a6 100644 >--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp >+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp >@@ -407,9 +407,9 @@ void AXIsolatedObject::setParent(AXID parent) > m_parent = parent; > } > >-void AXIsolatedObject::detach(AccessibilityDetachmentType, AXObjectCache*) >+void AXIsolatedObject::detachRemoteParts(AccessibilityDetachmentType detachmentType) > { >- ASSERT(isMainThread()); >+ ASSERT(isMainThread() ? detachmentType == AccessibilityDetachmentType::CacheDestroyed : detachmentType != AccessibilityDetachmentType::CacheDestroyed); > for (const auto& childID : m_childrenIDs) > tree()->nodeForID(childID)->detachFromParent(); > >@@ -427,14 +427,6 @@ void AXIsolatedObject::detachFromParent() > m_parent = InvalidAXID; > } > >-void AXIsolatedObject::disconnect() >-{ >- ASSERT(isMainThread()); >- tree()->axObjectCache()->detachWrapper(this, AccessibilityDetachmentType::ElementDestroyed); >- detach(AccessibilityDetachmentType::ElementDestroyed); >- setObjectID(InvalidAXID); >-} >- > void AXIsolatedObject::setTreeIdentifier(AXIsolatedTreeID treeIdentifier) > { > m_treeIdentifier = treeIdentifier; >diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h >index f89b1e89adb696876b2ff9705a042a6f45acae78..6e50df73a4580c95fcbcd46dd78bc737d4c6d5e8 100644 >--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h >+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h >@@ -54,15 +54,15 @@ public: > AXID objectID() const override { return m_id; } > void init() override { } > >- void detach(AccessibilityDetachmentType, AXObjectCache* = nullptr) override; > bool isDetached() const override; >- void disconnect(); > > void setTreeIdentifier(AXIsolatedTreeID); > void setParent(AXID); > void appendChild(AXID); > > private: >+ void detachRemoteParts(AccessibilityDetachmentType) override; >+ void detachPlatformWrapper(AccessibilityDetachmentType) override; > > AXID parent() const { return m_parent; } > >diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp >index f28a41bb90deae9adc0dcf72a0cdedf370955a55..58e9387d70649abf85151aba2bce6664407b1a1c 100644 >--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp >+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp >@@ -97,7 +97,7 @@ void AXIsolatedTree::removeTreeForPageID(PageIdentifier pageID) > LockHolder treeLocker { tree->m_changeLogLock }; > for (const auto& axID : tree->m_readerThreadNodeMap.keys()) { > if (auto object = tree->nodeForID(axID)) >- object->disconnect(); >+ object->detach(AccessibilityDetachmentType::CacheDestroyed); > } > tree->m_readerThreadNodeMap.clear(); > treeLocker.unlockEarly(); >@@ -164,21 +164,17 @@ void AXIsolatedTree::applyPendingChanges() > { > RELEASE_ASSERT(!isMainThread()); > LockHolder locker { m_changeLogLock }; >- Vector<Ref<AXIsolatedObject>> appendCopy; >- std::swap(appendCopy, m_pendingAppends); >- Vector<AXID> removeCopy({ WTFMove(m_pendingRemovals) }); >- locker.unlockEarly(); > > // We don't clear the pending IDs beacause if the next round of updates does not modify them, then they stay the same > // value without extra bookkeeping. > m_focusedNodeID = m_pendingFocusedNodeID; > >- for (auto& item : appendCopy) >+ for (auto& item : m_pendingAppends) > m_readerThreadNodeMap.add(item->objectID(), WTFMove(item)); > >- for (auto item : removeCopy) { >+ for (auto& item : m_pendingRemovals) { > if (auto object = nodeForID(item)) >- object->disconnect(); >+ object->detach(AccessibilityDetachmentType::ElementDestroyed); > m_readerThreadNodeMap.remove(item); > } > } >diff --git a/Source/WebCore/accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm b/Source/WebCore/accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm >new file mode 100644 >index 0000000000000000000000000000000000000000..61ec288b9913c5f356ebc0527805fade19dd4289 >--- /dev/null >+++ b/Source/WebCore/accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm >@@ -0,0 +1,42 @@ >+/* >+ * Copyright (C) 2020 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * 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 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 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 >+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY >+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#import "config.h" >+#import "AXIsolatedObject.h" >+ >+#if ENABLE(ACCESSIBILITY_ISOLATED_TREE) && PLATFORM(MAC) >+ >+#import "WebAccessibilityObjectWrapperMac.h" >+ >+namespace WebCore { >+ >+void AXIsolatedObject::detachPlatformWrapper(AccessibilityDetachmentType) >+{ >+ [wrapper() detach]; >+} >+ >+} // WebCore >+ >+#endif // ENABLE(ACCESSIBILITY_ISOLATED_TREE) && PLATFORM(MAC) >diff --git a/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm b/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm >index 42c6479cd6295cd99cb1f1e4618323b4c064a78e..aa1f8f4c24e616730d77095df1e7067f63f8666c 100644 >--- a/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm >+++ b/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm >@@ -232,12 +232,6 @@ static AXTextSelectionGranularity platformGranularityForWebCoreGranularity(WebCo > > namespace WebCore { > >-void AXObjectCache::detachWrapper(AXCoreObject* obj, AccessibilityDetachmentType) >-{ >- [obj->wrapper() detach]; >- obj->setWrapper(nullptr); >-} >- > void AXObjectCache::attachWrapper(AXCoreObject* obj) > { > RetainPtr<WebAccessibilityObjectWrapper> wrapper = adoptNS([[WebAccessibilityObjectWrapper alloc] initWithAccessibilityObject:obj]); >diff --git a/Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm b/Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm >index 7f8d47003bcb579be7073014e64708c3592b6767..9e7550c53c269f0ab5ec95de6f98a30d202d34a5 100644 >--- a/Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm >+++ b/Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm >@@ -41,6 +41,11 @@ > > namespace WebCore { > >+void AccessibilityObject::detachPlatformWrapper(AccessibilityDetachmentType) >+{ >+ [wrapper() detach]; >+} >+ > void AccessibilityObject::detachFromParent() > { > if (isAttachment()) >diff --git a/Source/WebCore/accessibility/win/AccessibilityObjectWin.cpp b/Source/WebCore/accessibility/win/AccessibilityObjectWin.cpp >index 4304d3b546baa94abb2932dee696a61ff578cfbf..84a0b244948a9e63f83246f5c2c3e10141b041e7 100644 >--- a/Source/WebCore/accessibility/win/AccessibilityObjectWin.cpp >+++ b/Source/WebCore/accessibility/win/AccessibilityObjectWin.cpp >@@ -28,8 +28,16 @@ > > #if ENABLE(ACCESSIBILITY) > >+#include "AXObjectCache.h" >+ > namespace WebCore { > >+void AccessibilityObject::detachPlatformWrapper(AccessibilityDetachmentType detachmentType) >+{ >+ if (auto* cache = axObjectCache()) >+ cache->detachWrapper(this, detachmentType); >+} >+ > bool AccessibilityObject::accessibilityIgnoreAttachment() const > { > return false;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 206828
:
388866
|
389141