Bug 1483911 - Defer scrolling events until after ipc doc construction. r=Jamie

This commit is contained in:
Eitan Isaacson 2018-08-20 15:51:00 +03:00
parent e4f79e2a19
commit 57a25953a0
2 changed files with 53 additions and 0 deletions

View file

@ -273,6 +273,26 @@ DocAccessibleChild::SendRoleChangedEvent(const a11y::role& aRole)
return true; return true;
} }
bool
DocAccessibleChild::SendScrollingEvent(const uint64_t& aID,
const uint64_t& aType,
const uint32_t& aScrollX,
const uint32_t& aScrollY,
const uint32_t& aMaxScrollX,
const uint32_t& aMaxScrollY)
{
if (IsConstructedInParentProcess()) {
return PDocAccessibleChild::SendScrollingEvent(aID, aType,
aScrollX, aScrollY,
aMaxScrollX, aMaxScrollY);
}
PushDeferredEvent(MakeUnique<SerializedScrolling>(this, aID, aType,
aScrollX, aScrollY,
aMaxScrollX, aMaxScrollY));
return true;
}
bool bool
DocAccessibleChild::ConstructChildDocInParentProcess( DocAccessibleChild::ConstructChildDocInParentProcess(
DocAccessibleChild* aNewChildDoc, DocAccessibleChild* aNewChildDoc,

View file

@ -58,6 +58,10 @@ public:
bool SendSelectionEvent(const uint64_t& aID, const uint64_t& aWidgetID, bool SendSelectionEvent(const uint64_t& aID, const uint64_t& aWidgetID,
const uint32_t& aType); const uint32_t& aType);
bool SendRoleChangedEvent(const a11y::role& aRole); bool SendRoleChangedEvent(const a11y::role& aRole);
bool SendScrollingEvent(const uint64_t& aID, const uint64_t& aType,
const uint32_t& aScrollX, const uint32_t& aScrollY,
const uint32_t& aMaxScrollX,
const uint32_t& aMaxScrollY);
bool ConstructChildDocInParentProcess(DocAccessibleChild* aNewChildDoc, bool ConstructChildDocInParentProcess(DocAccessibleChild* aNewChildDoc,
uint64_t aUniqueID, uint32_t aMsaaID); uint64_t aUniqueID, uint32_t aMsaaID);
@ -269,6 +273,35 @@ private:
a11y::role mRole; a11y::role mRole;
}; };
struct SerializedScrolling final : public DeferredEvent
{
explicit SerializedScrolling(DocAccessibleChild* aTarget,
uint64_t aID, uint64_t aType,
uint32_t aScrollX, uint32_t aScrollY,
uint32_t aMaxScrollX, uint32_t aMaxScrollY)
: DeferredEvent(aTarget)
, mID(aID)
, mType(aType)
, mScrollX(aScrollX)
, mScrollY(aScrollY)
, mMaxScrollX(aMaxScrollX)
, mMaxScrollY(aMaxScrollY)
{}
void Dispatch(DocAccessibleChild* aIPCDoc) override
{
Unused << aIPCDoc->SendScrollingEvent(mID, mType, mScrollX, mScrollY,
mMaxScrollX, mMaxScrollY);
}
uint64_t mID;
uint64_t mType;
uint32_t mScrollX;
uint32_t mScrollY;
uint32_t mMaxScrollX;
uint32_t mMaxScrollY;
};
struct SerializedEvent final : public DeferredEvent struct SerializedEvent final : public DeferredEvent
{ {
SerializedEvent(DocAccessibleChild* aTarget, uint64_t aID, uint32_t aType) SerializedEvent(DocAccessibleChild* aTarget, uint64_t aID, uint32_t aType)