This puts events in the queue instead of the event tree, and then fires them
based on the queue. Some tests need to be adjusted to make sure they check
constraints on event order correctly.
Since we will fire events in the correct order we can use the index of the
event target at the time the event is fired. This protects from weird cases
where the target is inserted, and then children before the target are removed.
r=davidb
This ensures that if creating the sub tree creates events to fire they will go
before the show event for the root of the tree. It is fine to fire show events
for the subtree before the root because they will just get coalesced away
anyway. However it is important that any hide events come before the hidden
subtree appears in the new tree.
Mutation events are kept in a queue before firing. The queue is only
coalesced when necessary, at present this is when queueing a hide event, or
just before firing all the events. It may be possible to do without the
former, but that is left as future work. The state of what types of events an
accessible is a target of is stored in the accessible. Combining that with a
map from accessible and type pairs to events we can quickly remove unnecessary
events from the queue when we need to coalesce.
This puts events in the queue instead of the event tree, and then fires them
based on the queue. Some tests need to be adjusted to make sure they check
constraints on event order correctly.
Since we will fire events in the correct order we can use the index of the
event target at the time the event is fired. This protects from weird cases
where the target is inserted, and then children before the target are removed.
r=davidb
This ensures that if creating the sub tree creates events to fire they will go
before the show event for the root of the tree. It is fine to fire show events
for the subtree before the root because they will just get coalesced away
anyway. However it is important that any hide events come before the hidden
subtree appears in the new tree.
Mutation events are kept in a queue before firing. The queue is only
coalesced when necessary, at present this is when queueing a hide event, or
just before firing all the events. It may be possible to do without the
former, but that is left as future work. The state of what types of events an
accessible is a target of is stored in the accessible. Combining that with a
map from accessible and type pairs to events we can quickly remove unnecessary
events from the queue when we need to coalesce.
This patch removes support for mozapp iframes, leaving support for
mozbrowser iframes intact. Some of the code has been rewritten in order
to phrase things in terms of mozbrowser only, as opposed to mozbrowser
or app. In some places, code that was only useful with apps has been
completely removed, so that the APIs consumed can also be removed. In
some places where the notion of appId was bleeding out of this API, now
we use NO_APP_ID. Other notions of appId which were restricted to this
API have been removed.
We will use the new type for the generated IPDL message handler
prototype to make sure correct error handling method is called.
MozReview-Commit-ID: AzVbApxFGZ0
The only difference between it and eCoalesceReorder is that for
eCoalesceReorder we assert the target is one of a outer doc, application
accessible or xul tree. However we never put events that have
eCoalesceMutationTextChange as there event rule in the queue, so there is no
reason for separate event rules, and we can remove eCoalesceMutationTextChange
and check that queued eCoalesceReorder events are in fact reorder events.
This patch removes support for mozapp iframes, leaving support for
mozbrowser iframes intact. Some of the code has been rewritten in order
to phrase things in terms of mozbrowser only, as opposed to mozbrowser
or app. In some places, code that was only useful with apps has been
completely removed, so that the APIs consumed can also be removed. In
some places where the notion of appId was bleeding out of this API, now
we use NO_APP_ID. Other notions of appId which were restricted to this
API have been removed.
There are cases where we want to test for several events, and while several
may have a correct ordering some of the events can be fired in different
orders WRT some but not all other events. The only purpose of the
orderChecker is to force that all preceeding checkers succeed before allowing
any following checkers to match.