forked from mirrors/gecko-dev
Backed out 2 changesets (bug 1818726) for causing failures on browser_caching_relations.js. CLOSED TREE
Backed out changeset 19b59c1f4a3b (bug 1818726) Backed out changeset 0854bd8c6db1 (bug 1818726)
This commit is contained in:
parent
3219af97cc
commit
7ae06781c0
8 changed files with 70 additions and 34 deletions
|
|
@ -492,7 +492,7 @@ void nsAccessibilityService::NotifyOfResolutionChange(
|
|||
RefPtr<AccAttributes> fields = new AccAttributes();
|
||||
fields->SetAttribute(nsGkAtoms::resolution, aResolution);
|
||||
data.AppendElement(mozilla::a11y::CacheData(0, fields));
|
||||
document->IPCDoc()->SendCache(CacheUpdateType::Update, data);
|
||||
document->IPCDoc()->SendCache(CacheUpdateType::Update, data, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -507,7 +507,7 @@ void nsAccessibilityService::NotifyOfDevPixelRatioChange(
|
|||
fields->SetAttribute(nsGkAtoms::_moz_device_pixel_ratio,
|
||||
aAppUnitsPerDevPixel);
|
||||
data.AppendElement(mozilla::a11y::CacheData(0, fields));
|
||||
document->IPCDoc()->SendCache(CacheUpdateType::Update, data);
|
||||
document->IPCDoc()->SendCache(CacheUpdateType::Update, data, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1548,7 +1548,7 @@ void DocAccessible::ProcessQueuedCacheUpdates() {
|
|||
}
|
||||
|
||||
if (data.Length()) {
|
||||
IPCDoc()->SendCache(CacheUpdateType::Update, data);
|
||||
IPCDoc()->SendCache(CacheUpdateType::Update, data, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3143,7 +3143,7 @@ void LocalAccessible::SendCache(uint64_t aCacheDomain,
|
|||
}
|
||||
nsTArray<CacheData> data;
|
||||
data.AppendElement(CacheData(ID(), fields));
|
||||
ipcDoc->SendCache(aUpdateType, data);
|
||||
ipcDoc->SendCache(aUpdateType, data, false);
|
||||
|
||||
if (profiler_thread_is_being_profiled_for_markers()) {
|
||||
nsAutoCString updateTypeStr;
|
||||
|
|
|
|||
|
|
@ -66,28 +66,14 @@ void DocAccessibleChildBase::SerializeTree(nsTArray<LocalAccessible*>& aTree,
|
|||
genericTypes |= eActionable;
|
||||
}
|
||||
|
||||
RefPtr<AccAttributes> fields;
|
||||
// Even though we send moves as a hide and a show, we don't want to
|
||||
// push the cache again for moves.
|
||||
if (StaticPrefs::accessibility_cache_enabled_AtStartup() &&
|
||||
!acc->Document()->IsAccessibleBeingMoved(acc)) {
|
||||
fields =
|
||||
acc->BundleFieldsForCache(CacheDomain::All, CacheUpdateType::Initial);
|
||||
if (fields->Count() == 0) {
|
||||
fields = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(XP_WIN)
|
||||
aData.AppendElement(AccessibleData(
|
||||
id, msaaId, role, childCount, static_cast<AccType>(acc->mType),
|
||||
static_cast<AccGenericType>(genericTypes), acc->mRoleMapEntryIndex,
|
||||
fields));
|
||||
static_cast<AccGenericType>(genericTypes), acc->mRoleMapEntryIndex));
|
||||
#else
|
||||
aData.AppendElement(
|
||||
AccessibleData(id, role, childCount, static_cast<AccType>(acc->mType),
|
||||
static_cast<AccGenericType>(genericTypes),
|
||||
acc->mRoleMapEntryIndex, fields));
|
||||
aData.AppendElement(AccessibleData(
|
||||
id, role, childCount, static_cast<AccType>(acc->mType),
|
||||
static_cast<AccGenericType>(genericTypes), acc->mRoleMapEntryIndex));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
@ -102,12 +88,34 @@ void DocAccessibleChildBase::InsertIntoIpcTree(LocalAccessible* aParent,
|
|||
FlattenTree(aChild, shownTree);
|
||||
ShowEventData data(parentID, aIdxInParent,
|
||||
nsTArray<AccessibleData>(shownTree.Length()),
|
||||
aSuppressShowEvent);
|
||||
aSuppressShowEvent ||
|
||||
StaticPrefs::accessibility_cache_enabled_AtStartup());
|
||||
SerializeTree(shownTree, data.NewTree());
|
||||
if (ipc::ProcessChild::ExpectingShutdown()) {
|
||||
return;
|
||||
}
|
||||
MaybeSendShowEvent(data, false);
|
||||
if (StaticPrefs::accessibility_cache_enabled_AtStartup()) {
|
||||
nsTArray<CacheData> cache(shownTree.Length());
|
||||
for (LocalAccessible* acc : shownTree) {
|
||||
if (mDoc->IsAccessibleBeingMoved(acc)) {
|
||||
// Even though we send moves as a hide and a show, we don't want to
|
||||
// push the cache again for moves.
|
||||
continue;
|
||||
}
|
||||
RefPtr<AccAttributes> fields =
|
||||
acc->BundleFieldsForCache(CacheDomain::All, CacheUpdateType::Initial);
|
||||
if (fields->Count()) {
|
||||
uint64_t id = reinterpret_cast<uint64_t>(acc->UniqueID());
|
||||
cache.AppendElement(CacheData(id, fields));
|
||||
}
|
||||
}
|
||||
// The cache array might be empty if there were only moved Accessibles or if
|
||||
// no Accessibles generated any cache data.
|
||||
if (!cache.IsEmpty()) {
|
||||
Unused << SendCache(CacheUpdateType::Initial, cache, !aSuppressShowEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DocAccessibleChildBase::ShowEvent(AccShowEvent* aShowEvent) {
|
||||
|
|
|
|||
|
|
@ -196,11 +196,6 @@ uint32_t DocAccessibleParent::AddSubtree(
|
|||
mAccessibles.PutEntry(newChild.ID())->mProxy = newProxy;
|
||||
ProxyCreated(newProxy);
|
||||
|
||||
if (RefPtr<AccAttributes> fields = newChild.CacheFields()) {
|
||||
MOZ_ASSERT(StaticPrefs::accessibility_cache_enabled_AtStartup());
|
||||
newProxy->ApplyCache(CacheUpdateType::Initial, fields);
|
||||
}
|
||||
|
||||
#if defined(XP_WIN)
|
||||
if (!StaticPrefs::accessibility_cache_enabled_AtStartup()) {
|
||||
MsaaAccessible::GetFrom(newProxy)->SetID(newChild.MsaaID());
|
||||
|
|
@ -632,7 +627,7 @@ mozilla::ipc::IPCResult DocAccessibleParent::RecvScrollingEvent(
|
|||
|
||||
mozilla::ipc::IPCResult DocAccessibleParent::RecvCache(
|
||||
const mozilla::a11y::CacheUpdateType& aUpdateType,
|
||||
nsTArray<CacheData>&& aData) {
|
||||
nsTArray<CacheData>&& aData, const bool& aDispatchShowEvent) {
|
||||
ACQUIRE_ANDROID_LOCK
|
||||
if (mShutdown) {
|
||||
return IPC_OK();
|
||||
|
|
@ -648,6 +643,35 @@ mozilla::ipc::IPCResult DocAccessibleParent::RecvCache(
|
|||
remote->ApplyCache(aUpdateType, entry.Fields());
|
||||
}
|
||||
|
||||
if (aDispatchShowEvent && !aData.IsEmpty()) {
|
||||
// We might need to dispatch a show event for an initial cache push. We
|
||||
// should never dispatch a show event for a (non-initial) cache update.
|
||||
MOZ_ASSERT(aUpdateType == CacheUpdateType::Initial);
|
||||
RemoteAccessible* target = GetAccessible(aData.ElementAt(0).ID());
|
||||
if (!target) {
|
||||
MOZ_ASSERT_UNREACHABLE("No remote found for initial cache push!");
|
||||
return IPC_OK();
|
||||
}
|
||||
// We never dispatch a show event for the doc itself.
|
||||
MOZ_ASSERT(!target->IsDoc() && target->RemoteParent());
|
||||
|
||||
ProxyShowHideEvent(target, target->RemoteParent(), true, false);
|
||||
|
||||
if (nsCoreUtils::AccEventObserversExist()) {
|
||||
xpcAccessibleGeneric* xpcAcc = GetXPCAccessible(target);
|
||||
xpcAccessibleDocument* doc = GetAccService()->GetXPCDocument(this);
|
||||
nsINode* node = nullptr;
|
||||
RefPtr<xpcAccEvent> event = new xpcAccEvent(
|
||||
nsIAccessibleEvent::EVENT_SHOW, xpcAcc, doc, node, false);
|
||||
nsCoreUtils::DispatchAccEvent(std::move(event));
|
||||
}
|
||||
}
|
||||
|
||||
if (nsCOMPtr<nsIObserverService> obsService =
|
||||
services::GetObserverService()) {
|
||||
obsService->NotifyObservers(nullptr, NS_ACCESSIBLE_CACHE_TOPIC, nullptr);
|
||||
}
|
||||
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ class DocAccessibleParent : public RemoteAccessible,
|
|||
|
||||
virtual mozilla::ipc::IPCResult RecvCache(
|
||||
const mozilla::a11y::CacheUpdateType& aUpdateType,
|
||||
nsTArray<CacheData>&& aData) override;
|
||||
nsTArray<CacheData>&& aData, const bool& aDispatchShowEvent) override;
|
||||
|
||||
virtual mozilla::ipc::IPCResult RecvSelectedAccessiblesChanged(
|
||||
nsTArray<uint64_t>&& aSelectedIDs,
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ struct AccessibleData
|
|||
AccType Type;
|
||||
AccGenericType GenericTypes;
|
||||
uint8_t RoleMapEntryIndex;
|
||||
AccAttributes CacheFields;
|
||||
};
|
||||
|
||||
union OriginDocument
|
||||
|
|
@ -131,8 +130,11 @@ parent:
|
|||
|
||||
/*
|
||||
* Cache The World
|
||||
* aDispatchShowEvent is true when a show event with the first accessible in
|
||||
* the cache list as the target should be dispatched after the cache is
|
||||
* populated. The show event will have a from-user flag value of false.
|
||||
*/
|
||||
async Cache(CacheUpdateType aUpdateType, CacheData[] aData);
|
||||
async Cache(CacheUpdateType aUpdateType, CacheData[] aData, bool aDispatchShowEvent);
|
||||
|
||||
/*
|
||||
* Lists of accessibles that either gained or lost a selected state.
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ struct AccessibleData
|
|||
AccType Type;
|
||||
AccGenericType GenericTypes;
|
||||
uint8_t RoleMapEntryIndex;
|
||||
AccAttributes CacheFields;
|
||||
};
|
||||
|
||||
struct ShowEventData
|
||||
|
|
@ -98,8 +97,11 @@ parent:
|
|||
|
||||
/*
|
||||
* Cache The World
|
||||
* aDispatchShowEvent is true when a show event with the first accessible in
|
||||
* the cache list as the target should be dispatched after the cache is
|
||||
* populated. The show event will have a from-user flag value of false.
|
||||
*/
|
||||
async Cache(CacheUpdateType aUpdateType, CacheData[] aData);
|
||||
async Cache(CacheUpdateType aUpdateType, CacheData[] aData, bool aDispatchShowEvent);
|
||||
|
||||
/*
|
||||
* Lists of accessibles that either gained or lost a selected state.
|
||||
|
|
|
|||
Loading…
Reference in a new issue