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

Unified Diff: Source/modules/accessibility/AXObjectCacheImpl.cpp

Issue 1072273006: Oilpan: Prepare moving AXObject to heap (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 6 months 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 side-by-side diff with in-line comments
Download patch
Index: Source/modules/accessibility/AXObjectCacheImpl.cpp
diff --git a/Source/modules/accessibility/AXObjectCacheImpl.cpp b/Source/modules/accessibility/AXObjectCacheImpl.cpp
index a9ce94309716e1ca7885c5466cef259a06ab5d20..edfc21ac3f2bbf3cf701848de4f14d82d4a351b0 100644
--- a/Source/modules/accessibility/AXObjectCacheImpl.cpp
+++ b/Source/modules/accessibility/AXObjectCacheImpl.cpp
@@ -90,7 +90,7 @@ PassOwnPtrWillBeRawPtr<AXObjectCache> AXObjectCacheImpl::create(Document& docume
}
AXObjectCacheImpl::AXObjectCacheImpl(Document& document)
- : m_document(document)
+ : m_document(&document)
, m_modificationCount(0)
#if ENABLE(ASSERT)
, m_hasBeenDisposed(false)
@@ -108,9 +108,8 @@ void AXObjectCacheImpl::dispose()
{
m_notificationPostTimer.stop();
- HashMap<AXID, RefPtr<AXObject>>::iterator end = m_objects.end();
- for (HashMap<AXID, RefPtr<AXObject>>::iterator it = m_objects.begin(); it != end; ++it) {
- AXObject* obj = (*it).value.get();
+ for (auto& entry : m_objects) {
haraken 2015/06/09 02:25:45 (This is a question not related to this CL.) Sigb
+ AXObject* obj = entry.value.get();
obj->detach();
removeAXID(obj);
}
@@ -122,7 +121,7 @@ void AXObjectCacheImpl::dispose()
AXObject* AXObjectCacheImpl::root()
{
- return getOrCreate(&m_document);
+ return getOrCreate(m_document);
}
AXObject* AXObjectCacheImpl::focusedImageMapUIElement(HTMLAreaElement* areaElement)
@@ -278,7 +277,7 @@ bool nodeHasRole(Node* node, const String& role)
return equalIgnoringCase(toElement(node)->getAttribute(roleAttr), role);
}
-PassRefPtr<AXObject> AXObjectCacheImpl::createFromRenderer(LayoutObject* layoutObject)
+PassRefPtrWillBeRawPtr<AXObject> AXObjectCacheImpl::createFromRenderer(LayoutObject* layoutObject)
{
// FIXME: How could layoutObject->node() ever not be an Element?
Node* node = layoutObject->node();
@@ -334,7 +333,7 @@ PassRefPtr<AXObject> AXObjectCacheImpl::createFromRenderer(LayoutObject* layoutO
return AXLayoutObject::create(layoutObject, this);
}
-PassRefPtr<AXObject> AXObjectCacheImpl::createFromNode(Node* node)
+PassRefPtrWillBeRawPtr<AXObject> AXObjectCacheImpl::createFromNode(Node* node)
{
if (isMenuListOption(node))
return AXMenuListOption::create(toHTMLOptionElement(node), this);
@@ -342,7 +341,7 @@ PassRefPtr<AXObject> AXObjectCacheImpl::createFromNode(Node* node)
return AXNodeObject::create(node, this);
}
-PassRefPtr<AXObject> AXObjectCacheImpl::createFromInlineTextBox(AbstractInlineTextBox* inlineTextBox)
+PassRefPtrWillBeRawPtr<AXObject> AXObjectCacheImpl::createFromInlineTextBox(AbstractInlineTextBox* inlineTextBox)
{
return AXInlineTextBox::create(inlineTextBox, this);
}
@@ -355,7 +354,7 @@ AXObject* AXObjectCacheImpl::getOrCreate(Widget* widget)
if (AXObject* obj = get(widget))
return obj;
- RefPtr<AXObject> newObj = nullptr;
+ RefPtrWillBeRawPtr<AXObject> newObj = nullptr;
if (widget->isFrameView()) {
FrameView* frameView = toFrameView(widget);
@@ -401,7 +400,7 @@ AXObject* AXObjectCacheImpl::getOrCreate(Node* node)
if (isHTMLHeadElement(node))
return 0;
- RefPtr<AXObject> newObj = createFromNode(node);
+ RefPtrWillBeRawPtr<AXObject> newObj = createFromNode(node);
// Will crash later if we have two objects for the same node.
ASSERT(!get(node));
@@ -427,7 +426,7 @@ AXObject* AXObjectCacheImpl::getOrCreate(LayoutObject* layoutObject)
if (AXObject* obj = get(layoutObject))
return obj;
- RefPtr<AXObject> newObj = createFromRenderer(layoutObject);
+ RefPtrWillBeRawPtr<AXObject> newObj = createFromRenderer(layoutObject);
// Will crash later if we have two objects for the same layoutObject.
ASSERT(!get(layoutObject));
@@ -450,7 +449,7 @@ AXObject* AXObjectCacheImpl::getOrCreate(AbstractInlineTextBox* inlineTextBox)
if (AXObject* obj = get(inlineTextBox))
return obj;
- RefPtr<AXObject> newObj = createFromInlineTextBox(inlineTextBox);
+ RefPtrWillBeRawPtr<AXObject> newObj = createFromInlineTextBox(inlineTextBox);
// Will crash later if we have two objects for the same inlineTextBox.
ASSERT(!get(inlineTextBox));
@@ -470,12 +469,12 @@ AXObject* AXObjectCacheImpl::rootObject()
if (!accessibilityEnabled())
return 0;
- return getOrCreate(m_document.view());
+ return getOrCreate(m_document->view());
}
AXObject* AXObjectCacheImpl::getOrCreate(AccessibilityRole role)
{
- RefPtr<AXObject> obj = nullptr;
+ RefPtrWillBeRawPtr<AXObject> obj = nullptr;
// will be filled in...
switch (role) {
@@ -577,27 +576,22 @@ void AXObjectCacheImpl::remove(AbstractInlineTextBox* inlineTextBox)
if (!inlineTextBox)
return;
+#if ENABLE(OILPAN)
+ remove(m_inlineTextBoxObjectMapping.get(inlineTextBox));
dmazzoni 2015/06/08 15:25:49 What's wrong with the code to remove by AXID? I do
keishi 2015/06/09 05:51:19 Sorry, this was left over from my previous patch.
+#else
AXID axID = m_inlineTextBoxObjectMapping.get(inlineTextBox);
remove(axID);
+#endif
m_inlineTextBoxObjectMapping.remove(inlineTextBox);
}
-// FIXME: Oilpan: Use a weak hashmap for this instead.
+
void AXObjectCacheImpl::clearWeakMembers(Visitor* visitor)
{
- Vector<Node*> deadNodes;
- for (HashMap<Node*, AXID>::iterator it = m_nodeObjectMapping.begin(); it != m_nodeObjectMapping.end(); ++it) {
- if (!Heap::isHeapObjectAlive(it->key))
- deadNodes.append(it->key);
- }
- for (unsigned i = 0; i < deadNodes.size(); ++i)
- remove(deadNodes[i]);
-
Vector<Widget*> deadWidgets;
- for (HashMap<Widget*, AXID>::iterator it = m_widgetObjectMapping.begin();
- it != m_widgetObjectMapping.end(); ++it) {
- if (!Heap::isHeapObjectAlive(it->key))
- deadWidgets.append(it->key);
+ for (auto& entry : m_widgetObjectMapping) {
haraken 2015/06/09 02:25:45 Why do we still need the weak processing for m_wid
keishi 2015/06/09 05:51:19 Done. I thought I needed this but I I think I was
+ if (!Heap::isHeapObjectAlive(entry.key))
+ deadWidgets.append(entry.key);
}
for (unsigned i = 0; i < deadWidgets.size(); ++i)
remove(deadWidgets[i]);
@@ -713,7 +707,7 @@ void AXObjectCacheImpl::childrenChanged(AXObject* obj)
void AXObjectCacheImpl::notificationPostTimerFired(Timer<AXObjectCacheImpl>*)
{
- RefPtrWillBeRawPtr<Document> protectorForCacheOwner(m_document);
+ RefPtrWillBeRawPtr<Document> protectorForCacheOwner(m_document.get());
dmazzoni 2015/06/08 15:25:49 Can we just delete this line of code in oilpan? Th
haraken 2015/06/09 02:25:45 You're right. We had a similar discussion before
m_notificationPostTimer.stop();
@@ -1113,7 +1107,7 @@ void AXObjectCacheImpl::inlineTextBoxesUpdated(LayoutObject* layoutObject)
Settings* AXObjectCacheImpl::settings()
{
- return m_document.settings();
+ return m_document->settings();
}
bool AXObjectCacheImpl::accessibilityEnabled()
@@ -1233,7 +1227,7 @@ void AXObjectCacheImpl::handleFocusedUIElementChanged(Node*, Node* newFocusedNod
void AXObjectCacheImpl::handleInitialFocus()
{
- postNotification(&m_document, AXObjectCache::AXFocusedUIElementChanged);
+ postNotification(m_document, AXObjectCache::AXFocusedUIElementChanged);
}
void AXObjectCacheImpl::handleEditableTextContentChanged(Node* node)
@@ -1367,6 +1361,14 @@ void AXObjectCacheImpl::setCanvasObjectBounds(Element* element, const LayoutRect
DEFINE_TRACE(AXObjectCacheImpl)
{
+#if ENABLE(OILPAN)
+ visitor->trace(m_document);
+ visitor->trace(m_objects);
+ visitor->trace(m_widgetObjectMapping);
+ visitor->trace(m_nodeObjectMapping);
dmazzoni 2015/06/08 15:25:49 Why not m_inlineTextBoxObjectMapping here too?
haraken 2015/06/09 02:25:45 It is not on the oilpan's heap, so don't need to t
+ visitor->trace(m_notificationsToPost);
+ visitor->trace(m_textMarkerNodes);
+#endif
visitor->template registerWeakMembers<AXObjectCacheImpl, &AXObjectCacheImpl::clearWeakMembers>(this);
AXObjectCache::trace(visitor);
}

Powered by Google App Engine
This is Rietveld 408576698