Commit Graph

192 Commits

Author SHA1 Message Date
David Anderson
5b30fd2693 Handle bounds overflow in consumers of LayerTreeInvalidation. (bug 1345891 part 2, r=mattwoodrow) 2017-08-03 21:22:48 -07:00
Ehsan Akhgari
9764add635 Bug 1386472 - Only register the AccessibleCaretEventHub when the accessible caret is enabled; r=bzbarsky 2017-08-03 23:06:15 -04:00
Ehsan Akhgari
bb799357a7 Bug 1386411 - Part 7: Inline EditorBase::GetSelection(); r=masayuki 2017-08-03 17:06:31 -04:00
Ehsan Akhgari
d09b186e51 Bug 1386411 - Part 6: Add a more efficient nsISelectionController::GetSelection() API for retrieving native Selection objects; r=bzbarsky
This API avoids needless refcounting and QueryInterface overhead.
2017-08-03 17:05:24 -04:00
Masatoshi Kimura
c0943e4f30 Bug 1326520 - Rename nsIURI.path to pathQueryRef. r=valentin.gosu
MozReview-Commit-ID: DqJdTGopR9G
2017-07-29 20:50:21 +09:00
Timothy Nikkel
3bab383a09 Back out changeset 43af422173e3 (add diagnostic asserts) (bug 1354933) 2017-06-22 15:40:40 -05:00
Bevis Tseng
2ecbda13e2 Bug 1378930 - Part 2: Remove the aName parameter from SchedulerGroup/DocGroup/DispatcherTrait. r=billm 2017-07-26 16:13:35 +08:00
Daniel Holbert
00066ddb66 Bug 1349683: Give RevocableEventPtr a "move" assignment operator, and use it to reduce refcount churn. r=froydnj
MozReview-Commit-ID: 9JQXZJqebm2
2017-07-19 00:03:59 -07:00
Masayuki Nakano
6616d17aca Bug 1333459 - part4: Make EventStateManager resets "waiting reply from remote process" when the focused content isn't in remote process r=smaug
On macOS, we fall back eKeyPress event to native menu.  Therefore, widget always requests a reply from remote process because it's difficult to check if the eKeyPress event will be sent to a remote process actually.  If it's not sent to any remote processes, PresShell needs to dispatch the event into the DOM tree.  Additionally, even if it's marked as "waiting reply from remote process", it needs to dispatch the DOM event in the main process first because we need to check if the key combination is reserved by chrome (if it's reserved, the eKeyPress event shouldn't be fired in the remote process).

Therefore, this patch makes EventStateManager::PreHandleEvent() resets the state when focused content isn't in any remote processes and the event's propagation hasn't been stopped.

Additionally, this patch makes PresShell::HandleEventInternal() checks WidgetEvent::PropgationStopped() with WidgetEvent::IsWaitingReplyFromRemoteProcess() before dispatching the event into the DOM tree.

MozReview-Commit-ID: FmgL3rCuQ8y
2017-07-21 17:22:08 +09:00
Masayuki Nakano
bda417b32d Bug 1333459 - part2-2: EventStateManager should check if it needs to wait reply from remote content before handling access keys r=smaug
Currently, access key is handled in EventStateManager::PreHandleEvent() with eKeyPress event, i.e., before dispatching it into the DOM tree, if the access key is registered in EventStateManager.  So, the main process does not check if the preceding eKeyDown event is consumed in focused remote process.

When preceding eKeyDown event is consumed in the main process, eKeyPress event won't be dispatched by widget.  However, if remote process has focus, it's impossible widget to stop dispatching eKeyPress event because preceding eKeyDown event hasn't been handled in the focused remote process yet.  Therefore, main process needs to post eKeyPress event to check if preceding eKeyDown event was consumed.  When eKeyPress event is marked as "waiting reply from remote process", TabChild sends it back to the main process only when preceding eKeyDown event wasn't consumed.  So, only when eKeyPress event is back to the main process, main process should handle accesskey with it.

This patch makes EventStateManager::PreHandleEvent() check if a remote target has focus before handling accesskey.  If a remote process has accesskey and there is an accesskey matching with eKeyPress event, it marks the event as "waiting reply from remote content" and stop propagation in the process.

Finally, when eKeyPress event is sent back to TabParent, TabParent::RecvReplyKeyEvent() calls EventStateManager::HandleAccessKey() before dispatching the reply event into the DOM tree.

MozReview-Commit-ID: KsOkakaIVzb
2017-07-22 10:50:41 +09:00
Masayuki Nakano
e600000538 Bug 1377978 - Make nsRange use uint32_t to offset r=smaug
DOM Standard defines that offset of Range is unsigned long.  However, nsRange uses int32_t to them.

This patch makes nsRange use uint32_t instead.  However, this patch does NOT allow to set over INT32_MAX as offset values since a lot of users of nsRange cannot treat the values as over INT32_MAX because a lot of internal APIs take int32_t as offsets.

For easier to search such points, this patch adds static_cast<int32_t> to uint32_t variables when they are used for int32_t arguments.

And note that nsContentUtils::ComparePoints() behaves odd.  It accepts negative offset and compares such value with valid offset simply.  This patch still uses int32_t offset variables in nsRange::CompareNodeToRange() even though it may be negative value if nsINode::IndexOf() returns -1 because the caller of it depends on this behavior.

MozReview-Commit-ID: 8RbOgA86JuT
2017-07-19 22:49:52 +09:00
Ryan Hunt
743715984e Bug 1379280 - Only do async keyboard scrolling for a selection, not a focused element. r=smaug
This commit changes async keyboard scrolling to be enabled only if the content to
scroll is from a selection. This works around the problem of detecting whether
an arbitrary element has key listeners that should prevent async key scrolling,
because when they have the focus we will have disabled async key scrolling.

MozReview-Commit-ID: 6HhSuGZNsMX
2017-07-13 15:53:26 -05:00
Ryan Hunt
e3bed69882 Bug 1379822 - Schedule an empty transaction on a focus sequence number update. r=kats
MozReview-Commit-ID: 6DBRsf86F8m
2017-07-13 10:47:42 -05:00
Masayuki Nakano
88be892b68 Bug 1377989 - part12: Rename local variables, |endParent| which is set to start container of nsRange to |endContainer| r=smaug
This does NOT change variable names like |endNode| because it's not odd and somebody use it for nsINode and endContent for nsIContent.  So, changing them needs more work.

MozReview-Commit-ID: 22imUltlu5R
2017-07-12 00:08:37 +09:00
Masayuki Nakano
10093839d1 Bug 1377989 - part11: Rename local variables, |startParent| which is set to start container of nsRange to |startContainer| r=smaug
This does NOT change variable names like |startNode| because it's not odd and somebody use it for nsINode and startContent for nsIContent.  So, changing them needs more work.

MozReview-Commit-ID: H19pTDprRuT
2017-07-12 00:02:14 +09:00
Masayuki Nakano
f4a5a8a21e Bug 1377989 - part2: Rename nsRange::GetEndParent() to nsRange::GetEndContainer() r=smaug
MozReview-Commit-ID: K4qPjtZ62yO
2017-07-11 21:11:37 +09:00
Masayuki Nakano
7015ac1e62 Bug 1377989 - part1: Rename nsRange::GetStartParent() to nsRange::GetStartContainer() r=smaug
Web standards use "Container" instead of "Parent".  So, nsRange shouldn't use "Parent" for its members and methods.

MozReview-Commit-ID: Ho6N0diuWtE
2017-07-11 20:53:04 +09:00
Wes Kocher
fa8ed17c23 Merge m-c to inbound, a=merge
MozReview-Commit-ID: 9XdoB5MuVz6
2017-07-05 17:17:41 -07:00
Ryan Hunt
cd74b8e153 Bug 1377814 - Don't schedule an empty transaction on an APZ focus sequence number update. r=botond
MozReview-Commit-ID: 3SERspy0w9s
2017-07-05 16:20:40 -05:00
Kartikaya Gupta
793d78e155 Bug 1377090 - Turn gfxMatrix into a typedef for MatrixDouble. r=jrmuizel
Most of this patch is updating a few places that use gfxMatrix to use
the equivalent-but-differently-named functions on MatrixDouble:
- Translate/Rotate/Scale get turned into PreTranslate/PreRotate/PreScale
- Transform(Point) gets turned into TransformPoint(Point)
- gfxMatrix::TransformBounds(gfxRect) gets turned into
  gfxRect::TransformBoundsBy(gfxMatrix).
- gfxMatrix::Transform(gfxRect) gets turned into
  gfxRect::TransformBy(gfxMatrix).
The last two functions are added in this patch as convenience wrappers
to gfxRect instead of Matrix.h because we don't want Matrix.h to "know"
about gfxRect (to avoid adding gecko dependencies on Moz2D). Once we
turn gfxRect into a typedef for RectDouble these will be eliminated
anyway.

MozReview-Commit-ID: BnOjHzmOSKn
2017-07-05 11:18:49 -04:00
Ehsan Akhgari
27d9bec9f4 Bug 1377447 - Add a new flush type between Frames and InterruptibleLayout to initialize layout if needed and use it from CheckIfFocusable; r=smaug 2017-07-04 22:00:09 -04:00
Ehsan Akhgari
adf093961c Backout bug 1377447 for more test failures on a CLOSED TREE 2017-07-04 17:01:42 -04:00
Ehsan Akhgari
edc606c572 Bug 1377447 - Add a new flush type between Frames and InterruptibleLayout to initialize layout if needed and use it from CheckIfFocusable; r=smaug 2017-07-04 15:13:20 -04:00
Sebastian Hengst
bd853b8c4a Backed out changeset bd3edebd5f20 (bug 1377447) for failing its own test 1377447-1.html on Windows 7 and OS X. r=backout 2017-07-04 18:18:30 +02:00
Ehsan Akhgari
9b46addacd Bug 1377447 - Add a new flush type between Frames and InterruptibleLayout to initialize layout if needed and use it from CheckIfFocusable; r=smaug 2017-07-04 11:13:30 -04:00
Ting-Yu Lin
6b1d1d9b71 Bug 1377196 Part 1 - Store nsBindingManager* in ServoStyleSet. r=heycam
We need to call nsBindingManager's method from ServoStyleSet in a later
patch.

Also, we call nsStyleSet::SetBindingManager() immediately after we call
nsStyleSet::Init(). Therefore, we could pass binding manager to Init()
directly, and delete SetBindingManager().

MozReview-Commit-ID: 43WTpW3mSKX
2017-06-29 13:43:59 -07:00
Cameron McCormack
e1b7ef5687 Bug 1362924 - Part 1: Stop synchronously running XBL constructors and flushing style in PresShell::Initialize. r=tnikkel
MozReview-Commit-ID: 8GUm6Mt5wiK
2017-06-28 09:33:04 -04:00
Ryan Hunt
a588cdca04 Bug 1376538 - Transmit APZ focus target updates on empty transactions. r=kats
This commit also schedules empty transactions on input events that trigger a
focus sequence number update.

MozReview-Commit-ID: 1FWXfStLsGv
2017-06-28 15:11:04 -04:00
Michael Layzell
29e2418dfb Bug 1375940 - Fix an assertion in PresShell::HandleEventWithTarget, r=smaug
MozReview-Commit-ID: 4hRjlgbLDA8
2017-06-28 12:24:38 -04:00
Carsten "Tomcat" Book
fcd85bf967 Backed out changeset 2db98c5fe22c (bug 1362924) for bustage 2017-06-28 15:46:48 +02:00
Cameron McCormack
a9a17ed801 Bug 1362924 - Part 1: Stop synchronously running XBL constructors and flushing style in PresShell::Initialize. r=tnikkel
MozReview-Commit-ID: 8GUm6Mt5wiK
2017-06-28 09:33:04 -04:00
Sebastian Hengst
d09742dc22 Backed out changeset 991cb2487be8 (bug 1375940) 2017-06-28 02:22:03 +02:00
Michael Layzell
fc4d0a27c5 Bug 1375940 - Part 2: Fix an assertion in PresShell::HandleEventWithTarget, r=smaug
MozReview-Commit-ID: 4hRjlgbLDA8
2017-06-27 16:24:48 -04:00
Ryan Hunt
d1e0c30b0a Bug 1351783 part 17 - Do less work when apz.keyboard.enabled is false. r=kats
When keyboard apz is disabled, we don't need to calculate focus targets and
we don't need to update focus state. It should be harmless even if it's done,
but I think it's good to not add something on this critical path that doesn't
do anything.

This commit also disable keyboard map generation in this case too for similar
reasoning. This has the side effect that you can't turn on keyboard apz without
doing a restart.

MozReview-Commit-ID: LxmofT2g7qs
2017-06-06 11:08:45 -05:00
Ryan Hunt
03a67c3376 Bug 1351783 part 12 - Create and sync focus sequence numbers. r=kats,botond,dvander
Focus can change at any moment in a document. This causes non-determinism and
correctness problems for doing keyboard apz scrolling. To get around this, we
will maintain deterministic behavior for focus changes initiated by input events
and see if we can get away with more non-determinism for things like `setTimeout`

In order to do this, we disable async keyboard scrolling when an input event is
processed that could have a event listener. We then attach a sequence number to
that input event and dispatch it to content. In content, we record the highest
sequence number that we have processed from an event, and send that on each focus
update. Using this, we can determine in APZ if we have a current focus target or
if we are still waiting for an input event to be processed and focus to be
reconfirmed.

MozReview-Commit-ID: CWcu8YEFQz4
2017-06-05 19:45:31 -05:00
Ryan Hunt
efb9965aef Bug 1351783 part 10 - Create and sync the current FocusTarget on each layer transaction. r=kats,botond
This commit modifies PresShell and nsDisplayList to send a FocusTarget update on
every layer transaction. Ideally we would like to send updates as often as possible,
but this seems like it works well. This can be iterated on later, if necessary.

MozReview-Commit-ID: 8PFqIOhzH77
2017-06-13 02:00:49 -04:00
Ryan Hunt
b5ae153509 Bug 1351783 part 7 - Create FocusState and FocusTarget types. r=kats,botond
This commit begins the work needed for tracking focus by creating two new classes,
FocusTarget and FocusState. FocusState is created and used by APZCTreeManager to
track the global focus information, while FocusTarget is created per layer tree and
sent to APZ with local focus information. Between the two we are able to figure out
what the correct scrollable layer is to use in response to a keyboard scroll.

See the comment in `FocusState.h` for more details on the architecture and things
needed in future patches to complete this.

MozReview-Commit-ID: F75VZv3i9U2
2017-06-05 19:12:22 -05:00
Bill McCloskey
ce42826bdf Bug 1372405 - Provide names for all runnables in the tree (r=froydnj)
MozReview-Commit-ID: DKR6ROiHRS7
2017-06-26 14:19:58 -07:00
Nicholas Nethercote
a58025002f Bug 1375392 - Tweak the PROFILER_LABEL* macros. r=mstange.
This patch makes the following changes to the macros.

- Removes PROFILER_LABEL_FUNC. It's only suitable for use in functions outside
  classes, due to PROFILER_FUNCTION_NAME not getting class names, and it was
  mostly misused.

- Removes PROFILER_FUNCTION_NAME. It's no longer used, and __func__ is
  universally available now anyway.

- Combines the first two string literal arguments of PROFILER_LABEL and
  PROFILER_LABEL_DYNAMIC into a single argument. There was no good reason for
  them to be separate, and it forced a '::' in the label, which isn't always
  appropriate. Also, the meaning of the "name_space" argument was interpreted
  in an interesting variety of ways.

- Adds an "AUTO_" prefix to PROFILER_LABEL and PROFILER_LABEL_DYNAMIC, to make
  it clearer they construct RAII objects rather than just being function calls.
  (I myself have screwed up the scoping because of this in the past.)

- Fills in the 'js::ProfileEntry::Category::' qualifier within the macro, so
  the caller doesn't need to. This makes a *lot* more of the uses fit onto a
  single line.

The patch also makes the following changes to the macro uses (beyond those
required by the changes described above).

- Fixes a bunch of labels that had gotten out of sync with the name of the
  class and/or function that encloses them.

- Removes a useless PROFILER_LABEL use within a trivial scope in
  EventStateManager::DispatchMouseOrPointerEvent(). It clearly wasn't serving
  any useful purpose. It also serves as extra evidence that the AUTO_ prefix is
  a good idea.

- Tweaks DecodePool::SyncRunIf{Preferred,Possible} so that the labelling is
  done within them, instead of at their callsites, because that's a more
  standard way of doing things.
2017-06-22 17:08:53 +10:00
Nicholas Nethercote
55c693e8f9 Bug 1375299 (part 1) - Reduce usage of MOZ_GECKO_PROFILER. r=mstange.
This patch reduces the differences between builds where the profiler is enabled
and those where the profiler is disabled. It does this by removing numerous
MOZ_GECKO_PROFILER checks.

These changes have the following consequences.

- Various functions and classes are now defined in all builds, and so can be
  used unconditionally: profiler_add_marker(), profiler_set_js_context(),
  profiler_clear_js_context(), profiler_get_pseudo_stack(), AutoProfilerLabel.
  (They are effectively no-ops in non-profiler builds, of course.)

- The no-op versions of PROFILER_* are now gone. The remaining versions are
  almost no-ops when the profiler isn't built.
2017-06-22 06:26:16 +10:00
Carsten "Tomcat" Book
238bf154d5 Backed out changeset 4f6302a98ae4 (bug 1372405) 2017-06-21 13:59:26 +02:00
Bill McCloskey
67e8af4720 Bug 1372405 - Provide names for all runnables in the tree (r=froydnj)
MozReview-Commit-ID: DKR6ROiHRS7
2017-06-20 21:44:11 -07:00
Carsten "Tomcat" Book
bbe9441993 Backed out changeset 9846de3bd954 (bug 1372405) 2017-06-20 08:27:02 +02:00
Bill McCloskey
f69608368b Bug 1372405 - Provide names for all runnables in the tree (r=froydnj)
MozReview-Commit-ID: DKR6ROiHRS7
2017-06-19 22:25:47 -07:00
Andi-Bogdan Postelnicu
1661b99af2 Bug 1374236 - Refactor MaybeSetupTransactionIdAllocator to avoid passing nsView*. r=mats
MozReview-Commit-ID: L3jedbOFdCP
2017-06-19 18:58:42 +03:00
Xidorn Quan
a63d6abe88 Bug 1359217 part 1 - Make document nsIDocumentObserver::StyleRule* methods include the rule as parameter. r=bz
MozReview-Commit-ID: H8FgiwCv0Gr
2017-06-19 15:45:43 +10:00
Mats Palmgren
2429b9dd25 Bug 1371956 - Use mApproximatelyVisibleFrames.EnsureInserted/EnsureRemoved to avoid doing unnecessary hashtable lookups. r=froydnj
MozReview-Commit-ID: 87A0v0APtFs
2017-06-17 00:06:04 +02:00
Mats Palmgren
896d3fb697 Bug 966240 - Remove support for <meta http-equiv="msthemecompatible" content="no">. r=dbaron
It appears that neither Chrome, Safari or Edge support this feature,
and it's causing web-compat issues for us, e.g. bug 1373417.

MozReview-Commit-ID: AP5LMgL6QmR
2017-06-16 17:17:22 +02:00
Alexis Beingessner
3117218f13 Bug 1088760 - Remove nsRenderingContext, replacing all of its uses with gfxContext. r=jwatt,jrmuizel
MozReview-Commit-ID: K1WUIOnvazF
2017-06-13 11:00:10 -04:00
Nicholas Nethercote
9ae0762bf5 Bug 1370329 (part 1) - Clean up the profiler's RAII classes. r=mstange.
This patch does the following renamings, which increase consistency.

- GeckoProfilerInitRAII -> AutoProfilerInit
- GeckoProfilerThread{Sleep,Wake}RAII -> AutoProfilerThread{Sleep,Wake}
- GeckoProfilerTracingRAII -> AutoProfilerTracing
- AutoProfilerRegister -> AutoProfilerRegisterThread
- ProfilerStackFrameRAII -> AutoProfilerLabel
- nsJSUtils::mProfilerRAII -> nsJSUtils::mAutoProfilerLabel

Plus a few other minor ones (e.g. local variables).

The patch also add MOZ_GUARD_OBJECT macros to all the profiler RAII classes
that lack them, and does some minor whitespace reformatting.
2017-06-07 12:33:19 +10:00