Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
[GTK][a11y] Web process crashes in some sites having SVG images
https://bugs.webkit.org/show_bug.cgi?id=234737 Reviewed by Adrian Perez de Castro. Source/WebCore: Unfortunately the changes in r287388 are not enough, it can still happen that root hasn't been set to the SVGImage page when the wrappers are created. So, we can't actually create the wrappers with a reference to the root object as we did in r286767. In most of the cases wrappers use the root just to get AccessibilityAtspi, which is not a singleton, but it's created and owned by the web process singleton at startup, so it can be accessed globaly. This patch makes AccessibilityAtspi a singleton to get the global instance without having to keep a reference in the root object. * accessibility/AccessibilityRenderObject.cpp: (WebCore::AccessibilityRenderObject::remoteSVGRootElement const): Move the code to set the root in SVGImage page before the remote svg wrapper is created. * accessibility/atspi/AXObjectCacheAtspi.cpp: (WebCore::AXObjectCache::attachWrapper): Just pass the page root object to the wrapper constructor, that now receives a pointer that might be nullptr. * accessibility/atspi/AccessibilityAtspi.cpp: (WebCore::AccessibilityAtspi::AccessibilityAtspi): Just create the WorkQueue. (WebCore::AccessibilityAtspi::singleton): Return a reference to the global instance. (WebCore::AccessibilityAtspi::connect): Connect to the given dbus address. (WebCore::AccessibilityAtspi::applicationReference const): This allows wrappers to get the application reference without having to check if m_root is nullptr or not. (WebCore::AccessibilityAtspi::parentChanged): Use AccessibilityObjectAtspi::isTreeRegistered() (WebCore::AccessibilityAtspi::childrenChanged): Ditto. * accessibility/atspi/AccessibilityAtspi.h: * accessibility/atspi/AccessibilityObjectAtspi.cpp: (WebCore::AccessibilityObjectAtspi::create): Receive a AccessibilityRootAtspi pointer instead of reference. (WebCore::AccessibilityObjectAtspi::AccessibilityObjectAtspi): Ditto. (WebCore::AccessibilityObjectAtspi::cacheDestroyed): Only call AccessibilityRootAtspi::childRemoved if parent is the root object. (WebCore::AccessibilityObjectAtspi::elementDestroyed): Null check m_root and use AccessibilityAtspi::singleton(). (WebCore::AccessibilityObjectAtspi::root): Get the root if already set or try to get it from the page. (WebCore::AccessibilityObjectAtspi::isTreeRegistered const): Return try if root has been set and its tree has been registered. (WebCore::AccessibilityObjectAtspi::registerObject): Use AccessibilityObjectAtspi::root(). (WebCore::AccessibilityObjectAtspi::reference): Use AccessibilityAtspi::singleton(). (WebCore::AccessibilityObjectAtspi::hyperlinkReference): Ditto. (WebCore::AccessibilityObjectAtspi::setParent): Return early also if root hasn't been set yet. (WebCore::AccessibilityObjectAtspi::parentReference const): Use AccessibilityAtspi::singleton(). (WebCore::AccessibilityObjectAtspi::serialize const): Ditto. (WebCore::AccessibilityObjectAtspi::childAdded): Ditto. (WebCore::AccessibilityObjectAtspi::childRemoved): Ditto. (WebCore::AccessibilityObjectAtspi::stateChanged): Ditto. (WebCore::AccessibilityObjectAtspi::loadEvent): Ditto. * accessibility/atspi/AccessibilityObjectAtspi.h: * accessibility/atspi/AccessibilityObjectComponentAtspi.cpp: * accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp: * accessibility/atspi/AccessibilityObjectHypertextAtspi.cpp: * accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp: (WebCore::AccessibilityObjectAtspi::selectionChanged): Ditto. * accessibility/atspi/AccessibilityObjectTableAtspi.cpp: * accessibility/atspi/AccessibilityObjectTableCellAtspi.cpp: * accessibility/atspi/AccessibilityObjectTextAtspi.cpp: (WebCore::AccessibilityObjectAtspi::textInserted): Ditto. (WebCore::AccessibilityObjectAtspi::textDeleted): Ditto. (WebCore::AccessibilityObjectAtspi::selectionChanged): Ditto. (WebCore::AccessibilityObjectAtspi::textAttributesChanged): Ditto. * accessibility/atspi/AccessibilityObjectValueAtspi.cpp: (WebCore::AccessibilityObjectAtspi::valueChanged): Ditto. * accessibility/atspi/AccessibilityRootAtspi.cpp: (WebCore::AccessibilityRootAtspi::create): Remove AccessibilityAtspi parameter. (WebCore::AccessibilityRootAtspi::AccessibilityRootAtspi): Ditto. (WebCore::AccessibilityRootAtspi::registerObject): Use AccessibilityAtspi::singleton(). (WebCore::AccessibilityRootAtspi::unregisterObject): Ditto (WebCore::AccessibilityRootAtspi::embedded): Ditto. (WebCore::AccessibilityRootAtspi::applicationReference const): Ditto. (WebCore::AccessibilityRootAtspi::reference const): Ditto. (WebCore::AccessibilityRootAtspi::childAdded): Ditto. (WebCore::AccessibilityRootAtspi::childRemoved): Ditto. (WebCore::AccessibilityRootAtspi::serialize const): Ditto. * accessibility/atspi/AccessibilityRootAtspi.h: Source/WebKit: Use AccessibilityAtspi::singleton(). * WebProcess/WebPage/gtk/WebPageGtk.cpp: (WebKit::WebPage::platformInitialize): * WebProcess/WebProcess.h: (WebKit::WebProcess::accessibilityAtspi const): Deleted. * WebProcess/glib/WebProcessGLib.cpp: (WebKit::WebProcess::platformInitializeWebProcess): Tools: Use AccessibilityAtspi::singleton(). * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp: (WTR::AccessibilityController::axRunLoop): * WebKitTestRunner/InjectedBundle/atspi/AccessibilityNotificationHandler.cpp: (WTR::AccessibilityNotificationHandler::AccessibilityNotificationHandler): (WTR::AccessibilityNotificationHandler::~AccessibilityNotificationHandler): Canonical link: https://commits.webkit.org/245920@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@287876 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- Loading branch information