Bug 1199755 - Correctly fetch remote children of non-proxy mozAccessibles, r=tbsaunde

This commit is contained in:
Lorien Hu 2015-10-13 21:29:09 +03:00
Родитель 1bb190d317
Коммит 6259455408
2 изменённых файлов: 34 добавлений и 1 удалений

Просмотреть файл

@ -8,6 +8,7 @@
#include "Platform.h"
#include "ProxyAccessible.h"
#include "DocAccessibleParent.h"
#include "mozTableAccessible.h"
#include "nsAppShell.h"
@ -54,11 +55,29 @@ ProxyCreated(ProxyAccessible* aProxy, uint32_t)
uintptr_t accWrap = reinterpret_cast<uintptr_t>(aProxy) | IS_PROXY;
mozAccessible* mozWrapper = [[type alloc] initWithAccessible:accWrap];
aProxy->SetWrapper(reinterpret_cast<uintptr_t>(mozWrapper));
// Invalidate children of native parent if parent is in parent process
if (aProxy->IsDoc() && aProxy->AsDoc()->IsTopLevel()) {
Accessible* outerDoc = aProxy->OuterDocOfRemoteBrowser();
if (outerDoc) {
mozAccessible* nativeParent = GetNativeFromGeckoAccessible(outerDoc);
[nativeParent invalidateChildren];
}
}
}
void
ProxyDestroyed(ProxyAccessible* aProxy)
{
// Invalidate native parent's children if parent is in parent process
if (aProxy->IsDoc() && aProxy->AsDoc()->IsTopLevel()) {
Accessible* outerDoc = aProxy->OuterDocOfRemoteBrowser();
if (outerDoc) {
mozAccessible* nativeParent = GetNativeFromGeckoAccessible(outerDoc);
[nativeParent invalidateChildren];
}
}
mozAccessible* wrapper = GetNativeFromProxy(aProxy);
[wrapper expire];
[wrapper release];

Просмотреть файл

@ -19,6 +19,7 @@
#include "TableAccessible.h"
#include "TableCellAccessible.h"
#include "mozilla/a11y/PDocAccessible.h"
#include "OuterDocAccessible.h"
#include "mozilla/Services.h"
#include "nsRect.h"
@ -645,7 +646,7 @@ ConvertToNSArray(nsTArray<ProxyAccessible*>& aArray)
Accessible* outerDoc = proxy->OuterDocOfRemoteBrowser();
nativeParent = outerDoc ?
GetNativeFromGeckoAccessible(outerDoc->RootAccessible()) : nil;
GetNativeFromGeckoAccessible(outerDoc) : nil;
} else {
return nil;
}
@ -687,6 +688,19 @@ ConvertToNSArray(nsTArray<ProxyAccessible*>& aArray)
nsAutoTArray<Accessible*, 10> childrenArray;
accWrap->GetUnignoredChildren(&childrenArray);
mChildren = ConvertToNSArray(childrenArray);
OuterDocAccessible* docOwner = accWrap->AsOuterDoc();
if (docOwner) {
ProxyAccessible* proxyDoc = docOwner->RemoteChildDoc();
if (proxyDoc) {
mozAccessible* nativeRemoteChild = GetNativeFromProxy(proxyDoc);
if (nativeRemoteChild) {
[mChildren insertObject:nativeRemoteChild atIndex:0];
} else {
NSLog (@"%@ found a child remote doc missing a native\n", self);
}
}
}
} else if (ProxyAccessible* proxy = [self getProxyAccessible]) {
nsAutoTArray<ProxyAccessible*, 10> childrenArray;
GetProxyUnignoredChildren(proxy, &childrenArray);