Bug 1637474 part 2: Disconnect accSelection IEnumVARIANT and IAccessibleRelation objects when their associated Accessible is shut down. r=MarcoZ

Differential Revision: https://phabricator.services.mozilla.com/D75000
This commit is contained in:
James Teh 2020-05-13 05:55:02 +00:00
parent ca670d92d5
commit 535261ca3d
2 changed files with 3 additions and 0 deletions

View File

@ -104,6 +104,7 @@ ia2Accessible::get_relation(long aRelationIndex,
new ia2AccessibleRelation(relationType, &rel);
if (ia2Relation->HasTargets()) {
if (relIdx == aRelationIndex) {
acc->AssociateCOMObjectForDisconnection(ia2Relation);
ia2Relation.forget(aRelation);
return S_OK;
}
@ -137,6 +138,7 @@ ia2Accessible::get_relations(long aMaxRelations,
RefPtr<ia2AccessibleRelation> ia2Rel =
new ia2AccessibleRelation(relationType, &rel);
if (ia2Rel->HasTargets()) {
acc->AssociateCOMObjectForDisconnection(ia2Rel);
ia2Rel.forget(aRelation + (*aNRelations));
(*aNRelations)++;
}

View File

@ -756,6 +756,7 @@ AccessibleWrap::get_accSelection(VARIANT __RPC_FAR* pvarChildren) {
} else if (count > 1) {
RefPtr<AccessibleEnumerator> pEnum =
new AccessibleEnumerator(selectedItems);
AssociateCOMObjectForDisconnection(pEnum);
pvarChildren->vt =
VT_UNKNOWN; // this must be VT_UNKNOWN for an IEnumVARIANT
NS_ADDREF(pvarChildren->punkVal = pEnum);