Commit Graph

687 Commits

Author SHA1 Message Date
Masayuki Nakano
cfe1c85adb Bug 1536353 - part 2: Merge PresShell::EventHandler::PrepareToDispatchEvent() and PresShell::EventHandler::PrepareToDispatchContextMenuEvent() r=smaug
`PresShell::EventHandler::PrepareToDispatchEvent()` checked whether the
given event is a trusted event or an untrusted event, but
`PresShell::EventHandler::PrepareToDispatchOntextMenuEvent()` didn't so.
However, now, both of them don't need to check it.  Therefore, we can merge
them.

Differential Revision: https://phabricator.services.mozilla.com/D24132
2019-03-26 10:04:43 +00:00
Masayuki Nakano
caaff50a34 Bug 1536353 - part 1: Make PresShell::EventHandler stop checking WidgetEvent::IsTrusted() at runtime in release channel r=smaug
`PresShell::EventHandler` shouldn't be used to dispatch untrusted event.
However, it checks whether the given event is trusted or untrusted somewhere
and that makes the code harder to understand.  So, it should check each event
only with `MOZ_ASSERT()` or `MOZ_DIAGNOSTIC_ASSERT()` instead.  Then,
developers can trust the event is always a trusted event.

Differential Revision: https://phabricator.services.mozilla.com/D24131
2019-03-26 10:02:06 +00:00
Botond Ballo
a76969f2b8 Bug 1531535 - Add visual smooth scroll support to nsIPresShell. r=kats
This patch renames nsIPresShell::SetPendingVisualScrollUpdate() to
ScrollToVisual(), and adds an instant vs. smooth option.

SetPendingVisualScrollUpdate() still exists, as a helper for the instant case.

Differential Revision: https://phabricator.services.mozilla.com/D24553
2019-03-23 20:23:35 +00:00
Botond Ballo
0bdd20c2ec Bug 1536157 - Schedule a paint when setting a pending visual scroll update. r=kats
Differential Revision: https://phabricator.services.mozilla.com/D23901
2019-03-21 23:44:09 +00:00
Oana Pop Rus
aef897a7cc Backed out 2 changesets (bug 1536353) for failing in 1397711.html on a CLOSED TREE
Backed out changeset 6ef59933242a (bug 1536353)
Backed out changeset 64a815f04641 (bug 1536353)
2019-03-22 05:29:03 +02:00
Masayuki Nakano
f426afa88e Bug 1536353 - part 2: Merge PresShell::EventHandler::PrepareToDispatchEvent() and PresShell::EventHandler::PrepareToDispatchContextMenuEvent() r=smaug
`PresShell::EventHandler::PrepareToDispatchEvent()` checked whether the
given event is a trusted event or an untrusted event, but
`PresShell::EventHandler::PrepareToDispatchOntextMenuEvent()` didn't so.
However, now, both of them don't need to check it.  Therefore, we can merge
them.

Differential Revision: https://phabricator.services.mozilla.com/D24132
2019-03-20 14:03:21 +00:00
Masayuki Nakano
d9d3184f73 Bug 1536353 - part 1: Make PresShell::EventHandler stop checking WidgetEvent::IsTrusted() at runtime in release channel r=smaug
`PresShell::EventHandler` shouldn't be used to dispatch untrusted event.
However, it checks whether the given event is trusted or untrusted somewhere
and that makes the code harder to understand.  So, it should check each event
only with `MOZ_ASSERT()` or `MOZ_DIAGNOSTIC_ASSERT()` instead.  Then,
developers can trust the event is always a trusted event.

Differential Revision: https://phabricator.services.mozilla.com/D24131
2019-03-20 13:58:55 +00:00
Masayuki Nakano
701a9c32e5 Bug 1536351 - Make PresShell::EventHandler::HandleEvent() push current event info as nullptr before calling HandleEventWithCurrentEventInfo() r=smaug
Oddly, when there is no frame and the handling event does not require a frame,
`PresShell::EventHandler::HandleEvent()` just clears
`mPresShell->mCurrentEventFrame` with nullptr before calling
`HandleEventWithCurrentEventInfo()`.  This means that if event handler is
nested, old `mPresShell->mCurrentEventContent` is reused and
`mPresShell->mCurrentEventFrame` is forgotten.  Therefore, it should push
nullptr as current event info instead.

Differential Revision: https://phabricator.services.mozilla.com/D24130
2019-03-20 14:05:31 +00:00
Henri Sivonen
a76ad45ba7 Bug 1524242 - Capture TabParent of out-of-process iframe when creating TextComposition. r=masayuki
Depends on D23641

Differential Revision: https://phabricator.services.mozilla.com/D20981
2019-03-19 13:37:20 +00:00
Brad Werth
faf9669c04 Bug 1501665 Part 8: Allow MVM::RequestReflow to adjust resolution, and do so when destroying the MVM. r=botond
Currently the MobileViewportManager leaves somethings permanently changed
even after it is destroyed: it may have changed the resolution of
the Document, and it may have set a fixed size for the visual viewport.
Both of these changes need to be un-done to return to normal display of
the Document.

Differential Revision: https://phabricator.services.mozilla.com/D17999
2019-03-18 14:58:31 +00:00
Brad Werth
2290c45286 Bug 1501665 Part 7: Add a new function to allow visual viewport size to be un-set. r=smaug
Once nsIPresShell::SetVisualViewportSize is called, we currently have
no way to restore the default viewport sizing behavior. This corrects that.
We need the default behavior to get correctly-placed scrollbars when
turning off meta viewport handling in Responsive Design Mode panes.

Differential Revision: https://phabricator.services.mozilla.com/D20593
2019-03-18 14:58:07 +00:00
Brad Werth
964f58635d Bug 1501665 Part 4: Use the new function as a replacement for APZAllowZooming. r=botond
Differential Revision: https://phabricator.services.mozilla.com/D19239
2019-03-18 14:56:55 +00:00
shindli
281680d4f1 Backed out 13 changesets (bug 1501665) for failing a11y tests in accessible/tests/mochitest/relations/test_tabbrowser.xul CLOSED TREE
Backed out changeset 2fa518cb0dfc (bug 1501665)
Backed out changeset afaf26d7df42 (bug 1501665)
Backed out changeset 5bdf0ad9dc66 (bug 1501665)
Backed out changeset 520dd24a73fc (bug 1501665)
Backed out changeset 3542bf2b89dd (bug 1501665)
Backed out changeset 088dc24eabc7 (bug 1501665)
Backed out changeset 178210eb72ba (bug 1501665)
Backed out changeset 9eebe767ef20 (bug 1501665)
Backed out changeset 6a84e97d0e62 (bug 1501665)
Backed out changeset cf42ea4e8443 (bug 1501665)
Backed out changeset 731d7ee06d86 (bug 1501665)
Backed out changeset 8e0afe4a041a (bug 1501665)
Backed out changeset be1026de486b (bug 1501665)
2019-03-18 18:08:58 +02:00
Brad Werth
fe2d3f7c86 Bug 1501665 Part 8: Allow MVM::RequestReflow to adjust resolution, and do so when destroying the MVM. r=botond
Currently the MobileViewportManager leaves somethings permanently changed
even after it is destroyed: it may have changed the resolution of
the Document, and it may have set a fixed size for the visual viewport.
Both of these changes need to be un-done to return to normal display of
the Document.

Differential Revision: https://phabricator.services.mozilla.com/D17999
2019-03-18 14:58:31 +00:00
Brad Werth
72f3188073 Bug 1501665 Part 7: Add a new function to allow visual viewport size to be un-set. r=smaug
Once nsIPresShell::SetVisualViewportSize is called, we currently have
no way to restore the default viewport sizing behavior. This corrects that.
We need the default behavior to get correctly-placed scrollbars when
turning off meta viewport handling in Responsive Design Mode panes.

Differential Revision: https://phabricator.services.mozilla.com/D20593
2019-03-18 14:58:07 +00:00
Brad Werth
ea91c570d1 Bug 1501665 Part 4: Use the new function as a replacement for APZAllowZooming. r=botond
Differential Revision: https://phabricator.services.mozilla.com/D19239
2019-03-18 14:56:55 +00:00
Emilio Cobos Álvarez
cf0e6ff153 Bug 1533963 - Use a single RestyleHint representation. r=heycam
Differential Revision: https://phabricator.services.mozilla.com/D22828
2019-03-14 11:47:50 +00:00
Masayuki Nakano
96eca3517c Bug 1466208 - part 45: Rename aFrame of HandleEvent() to aFrameForPresShell r=smaug
Now, other methods taking `aFrame` of `HandleEvent()` names the argument as
`aFrameForPresShell`.  So, `HandleEvent()`'s `aFrame` should also be renamed.

This patch renames it and adds MOZ_CAN_RUN_SCRIPT and comment to
`nsIPresShell::HandleEvent()`.

This is the final patch for bug 1466208.

Differential Revision: https://phabricator.services.mozilla.com/D22463
2019-03-13 10:32:36 +00:00
Boris Zbarsky
a38bd056da Bug 1506439 part 2. Stop creating a useless nsCOMPtr in DispatchInputEvent. r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D23068
2019-03-13 02:34:48 +00:00
Boris Zbarsky
e91bb859f9 Bug 1534370 part 1. Annotate doCommandWithParams as MOZ_CAN_RUN_SCRIPT. r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D23036
2019-03-13 00:43:48 +00:00
Boris Zbarsky
b1439a9772 Bug 1534608. MOZ_CAN_RUN_SCRIPT should disallow non-stack refptr arguments. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D23217
2019-03-13 00:30:11 +00:00
Masayuki Nakano
d9ee2decb6 Bug 1466208 - part 44: Rename PresShell::EventHandler::HandleEventInternal() to HandleEventWithCurrentEventInfo() r=smaug
In my understanding, `PresShell::EventHandler::HandleEvent()` may redirect
the event to another class or PresShell first.  Otherwise, it computes
event target and sets current event info of mPresShell to it.  Then, calls
`HandleEventInternal()` to dispatch the event.  Then, `HandleEventInternal()`
may handle the event before dispatch, and/or prepare to dispatch, then,
finally dispatches the event and finalize the state of mPresShell and the
event.  Therefore, `HandleEventInternal()` actually handles the event, but
the word, "internal" is not explicitly explain its different points from
`HandleEvent()`.  Therefore, I think that `HandleEventWithCurrentEventInfo()`
is better name since `HandleEvent()` considers the current event info.

Differential Revision: https://phabricator.services.mozilla.com/D22462
2019-03-12 04:25:13 +00:00
Olli Pettay
a88b2dccc3 Bug 1265104, paint dnd'ed content also when it is under non-displayed content (display: contents or ShadowRoot), r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D23050
2019-03-11 22:47:12 +00:00
Masayuki Nakano
9c84d36e5f Bug 1466208 - part 43: Create PresShell::EventHandler::FinalizeHandlingEvent() r=smaug
Finally, we should move the last switch statement in `HandleEventInternal()`
to the new method.  Then, `HandleEventInternal() does nothing complicated
things by itself.

Differential Revision: https://phabricator.services.mozilla.com/D22461
2019-03-11 01:52:40 +00:00
Boris Zbarsky
48b837c6d9 Bug 1533617 part 1. Improve MOZ_CAN_RUN_SCRIPT annotations around synth mouse events. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D22835
2019-03-11 14:58:04 +00:00
Masayuki Nakano
d706137e93 Bug 1466208 - part 42: Clean up PresShell::EventHandler::DispatchEvent() with using early-return style r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D22460
2019-03-11 01:52:17 +00:00
Masayuki Nakano
8601e961d9 Bug 1466208 - part 41: Create PresShell::EventHandler::DispatchEvent() r=smaug
This is the part which actually handles the event.  The new method should
notify EventStateManager of dispatching event before and after that, and
actually dispatch the event into the DOM.

Differential Revision: https://phabricator.services.mozilla.com/D22459
2019-03-09 23:39:16 +00:00
Masayuki Nakano
57fe47241e Bug 1466208 - part 40: Create PresShell::EventHandler::PrepareToDispatchEvent() r=smaug
For making `PresShell::EventHandler::HandleEventInternal()` easier to read,
move the large switch statement for preparation into the new method.

Differential Revision: https://phabricator.services.mozilla.com/D21341
2019-03-09 23:38:38 +00:00
Masayuki Nakano
99c653c3dd Bug 1466208 - part 39: Create PresShell::EventHandler::MaybeHandleKeyboardEventBeforeDispatch() r=smaug
`PresShell::EventHandler::HandleEventInternal()` may handle `Escape` key before
dispatching it in some cases.  This requires too many lines for somebody who
investigate the method for the other events.  Therefore, this patch moves it
into the new method.

Additionally, this patch creates `WidgetKeyboardEvent::CanTreatAsUserInput()`
and `WidgetKeyboardEvent::ShouldInteractionTimeRecorded()` because we should
manage similar checks in one place (we already have
`WidgetKeyboardEvent::CanUserGestureActivateTarget()`).  Finally, their
conditions are not enough for what the comment wants to do there since they do
not check some modifier keys.  Therefore, this patch makes them check all
possible modifier keys too.

Differential Revision: https://phabricator.services.mozilla.com/D21340
2019-03-08 12:46:17 +00:00
Masayuki Nakano
240b9cdf9e Bug 1466208 - part 38: Create PresShell::EventHandler::PrepareToDispatchContextMenuEvent() r=smaug
The first switch statement of `PresShell::EventHandler::HandleEventInternal()`
has 2 jobs:
- Prepare something for specific event type.
- Record the preparation time of some types of events to telemetry.

This intermixed code is not easy to understand and somebody may add new
preparation after recording them.  So, even though the preparation time
becomes worse a couple of nanoseconds, we should split those jobs.

The patch moves the latter job into the new method.

Differential Revision: https://phabricator.services.mozilla.com/D21339
2019-03-08 23:41:30 +00:00
Masayuki Nakano
c113c3badf Bug 1466208 - part 37: Move trusted eMouseMove event preparation into the previous switch-case block r=smaug
Oddly, there are two trusted eMouseMove preparation code in
`PresShell::EventHandler::HandleEventInternal()`.  One is in the `switch`
statement which is used only when `aEvent` is trusted.  The other is after
`TouchManager::PreHandleEvent()` is called and after
`AutoHandlingUserInputStatePusher` is created.  However, both of them do
nothing if the event is `eMouseMove`.  Therefore, we can move the latter
into the former.

Differential Revision: https://phabricator.services.mozilla.com/D21338
2019-03-08 23:37:34 +00:00
Masayuki Nakano
f37936c9e1 Bug 1466208 - part 36: Create PresShell::EventHandler::PrepareToDispatchContextMenuEvent() r=smaug
If `Shift` state of `eContextMenu` event is active, we make it not fired on
web content.  Additionally, if it's not time to open context menu, we shouldn't
dispatch it into the DOM.  The new method prepare and check them.

Differential Revision: https://phabricator.services.mozilla.com/D21337
2019-02-28 10:33:52 +00:00
Masayuki Nakano
3b090b24cd Bug 1466208 - part 35: Reduce one indent level in PresShell::EventHandler::HandleEventInternal() r=smaug
If `aEvent` requires frame but there is no event target,
`PresShell::EventHandler::HandleEventInternal()` just records the response
time.  So, we can reduce one indent level in the big method.

Note that I'm not sure recording the response time in such case because
the *good* values may make the average and median better.  But this is
out of scope of bug 1466208.

Differential Revision: https://phabricator.services.mozilla.com/D21336
2019-03-07 06:30:36 +00:00
Masayuki Nakano
865b72babc Bug 1466208 - part 34: Create a helper class, PresShell::EventHandler::HandlingTimeAccumulator() r=smaug
`PresShell::EventHandler::HandleEventInternal()` needs to accumulate event
handling time per each event type.  The handling start time needs to be
recorded before sending EventStateManager.  Therefore, this patch makes the
helper class which is a stack class, records current time at construction
and calls `Telemetry::AccumulateTimeDelta()` at destruction automatically.

Differential Revision: https://phabricator.services.mozilla.com/D21335
2019-03-07 06:30:08 +00:00
Masayuki Nakano
67736234c6 Bug 1466208 - part 33: Create PresShell::EventHandler::RecordEventHandlingResponsePerformance() r=smaug
`PresShell::EventHandler::HandleEventInternal()` recodes event handling
response performance with telemetry after it dispatches the event.  We can move
it into new method simply.

Differential Revision: https://phabricator.services.mozilla.com/D21334
2019-03-06 06:03:54 +00:00
Emilio Cobos Álvarez
7f72635b8f Bug 1530193 - Refactor preference stylesheet prefs to not require a pres context. r=jwatt
We really only have two sets of prefs, one for chrome-like documents
(stuff in chrome docshells + chrome-origin images), and one for the rest.

Differential Revision: https://phabricator.services.mozilla.com/D20946
2019-03-06 21:34:30 +00:00
Masayuki Nakano
0065f1a394 Bug 1466208 - part 32: Create PresShell::EventHandler::HandleEventAtFocusedContent() and PresShell::EventHandler::HandleEventWithFrameForPresShell() r=smaug
The remaining part of `PresShell::EventHandler::HandleEvent()` does:
1. Handles the event at focused content.
2. Handles the event with given frame which is a frame for `mPresShell`.

For making them clearer, this patch moves them into new methods.

Differential Revision: https://phabricator.services.mozilla.com/D21197
2019-03-06 06:03:31 +00:00
Masayuki Nakano
e9b0723427 Bug 1466208 - part 31: Create a PresShell::EventHandler::MaybeHandleEventWithAnotherPresShell() overload r=smaug
If focused element is in another document,
`PresShell::EventHandler::HandleEvent()` needs to retarget the event to another
`PresShell`.  This patch moves the case into new overload method,
`MaybeHandleEventWithAnotherPresShell()`.

Additionally, removes `PresShell::HandleRetargetedEvent()` and makes
`EventHandler::HandleRetargetedEvent()` non-public because the new method
is the only user of them.

Differential Revision: https://phabricator.services.mozilla.com/D21196
2019-03-05 06:09:02 +00:00
Masayuki Nakano
7825cddcc5 Bug 1466208 - part 30: Create PresShell::EventHandler::AutoCurrentEventInfoSetter class r=smaug
With splitting `HandleEvent()` a lot, it becomes more difficult to keep
managing each set of calling `PushCurrentEventInfo()` and
`PopCurrentEventInfo()`.  So, `EventHandler` should have a helper class
to push and pop current event info into/from the stack.

Differential Revision: https://phabricator.services.mozilla.com/D21198
2019-03-04 06:12:22 +00:00
Masayuki Nakano
835bbb4600 Bug 1466208 - part 29: Create PresShell::EventHandler::ComputeFocusedEventTargetElement() r=smaug
Most remaining code in `PresShell::EventHandler::HandleEvent()` is what computes
event target of the event which should be handled on focused content.  This
patch moves the part to the new method.

Additionally, moves `nsIPresShell::gKeyDownTarget` to
`EventHandler::sLastKeyDownEventTargetElement` and make it use `StaticRefPtr`.

Finally, for using `Element*` instead of `nsIContent*`, changes the result type
of `Document::GetUnfocusedKeyEventTarget()` to `Element*`.

Differential Revision: https://phabricator.services.mozilla.com/D21195
2019-03-04 06:11:41 +00:00
Emilio Cobos Álvarez
86dd6e7306 Bug 1530177 - Downgrade an assertion to a diagnostic assert since it exposes pre-existing bugs. r=dholbert
nsIconChannel (for moz-icon:// images) is unsound, see bug 1438939.

nsMenuPopupFrame::Init is also unsound on mac, looks like...

I'll try to get them fixed on trunk, but it's not worth crashing release for
this IMO, given it's pre-existing. The assert in PresShell::~PresShell hopefully
avoids exploitable issues.

Differential Revision: https://phabricator.services.mozilla.com/D20945
2019-02-28 23:37:44 +00:00
Masayuki Nakano
bcff70af05 Bug 1466208 - part 28: Make PresShell::EventHandler::HandleEvent() handle non-using-coordinates events without frame before with frame case r=smaug
When the event is not handled with coordinates and there is no frame for
`mPresShell`, `PresShell::EventHandler::HandleEvent()` handles the events
simpler than the case there is a frame.  Therefore, this patch moves the
`else` block of `if (aFrame)` and reduce the indent of `if (aFrame)` case.

Differential Revision: https://phabricator.services.mozilla.com/D21194
2019-03-02 20:35:21 +00:00
Masayuki Nakano
2dfb01e3bf Bug 1466208 - part 27: Create PresShell::EventHandler::HandleEventUsingCoordinates() r=smaug
Now, the block in HandleEvent(), which handles event using coordinates is
less than 200 lines.  Perhaps, this is good amount to be split to a method.

This patch just moves the block to a new method.

Differential Revision: https://phabricator.services.mozilla.com/D21193
2019-03-02 00:03:01 +00:00
Masayuki Nakano
07f97326da Bug 1466208 - part 26: Create PresShell::EventHandler::EventTargetData::UpdateTouchEventTarget() r=smaug
After dispatching pointer events, `PresShell::EventHandler::HandleEvent()`
updates event target only when the event is a touch event.  We should do it in
a new method of `EventTargetData`.

Although I don't know why this is done in
`PresShell::EventHandler::DispatchPrecedingPointerEvent()`.

Differential Revision: https://phabricator.services.mozilla.com/D21192
2019-03-02 00:02:10 +00:00
Masayuki Nakano
3d087b7981 Bug 1466208 - part 25: Create PresShell::EventHandler::DispatchPrecedingPointerEvent() r=smaug
Now, we can move the block dispatching preceding pointer event to separated
method.  Then, we can hide the complicated retarget process after dispatching
a pointer event from HandleEvent().

Differential Revision: https://phabricator.services.mozilla.com/D21191
2019-03-01 02:02:31 +00:00
Gurzau Raul
9923548177 Merge inbound to mozilla-central. a=merge 2019-03-01 15:01:31 +02:00
Masayuki Nakano
a2305bc28d Bug 1466208 - part 24: Move overrideClickTarget into EventTargetData r=smaug
Currently, PresShell::EventHandler::HandleEvent() sets `overrideClickTarget`
only when Pointer Events is enabled and there is pointer capturing content,
and this is computed while dispatching a pointer event.

So, if we move it into EventTargetData, we can move the pointer event
dispatching block into a separated method and caller can receive it with
an EventTargetData instance which is anyway necessary to receive new
target frame after dispatching a pointer event.

Differential Revision: https://phabricator.services.mozilla.com/D21190
2019-03-01 01:58:02 +00:00
Masayuki Nakano
1678f563d8 Bug 1466208 - part 23: Create PresShell::EventHandler::ComputeEventTargetFrameAndPresShellAtEventPoint() r=smaug
We cannot move each block into separated methods while computing EventTargetData
because we need to check capturing contents, etc.  Therefore, only each block
should be moved to separated methods for now.

This moves a block which computes event target from point of the event.  If
this can be moved to EventTargetData, it might be easier to understand, but
its helper method GetFrameToHandleNonTouchEvent() requires to access members
of EventHandler.  Therefore, we need to treat EventTargetData as an out param
of the new method.

Differential Revision: https://phabricator.services.mozilla.com/D21189
2019-02-27 13:59:30 +00:00
Timothy Nikkel
a505533daa Bug 1505871. C++ code to get component transfer filter data into webrender. r=jrmuizel
Have to use a pointer/size pair to transfer the value list to rust.

We use a "filter holder" that contains an nsTArray that owns the values.
2019-02-26 00:16:36 -06:00
Timothy Nikkel
5b83f0ab2b Backed out changeset 2bf33f573505 2019-02-25 22:48:35 -06:00