Commit Graph

1099 Commits

Author SHA1 Message Date
Emilio Cobos Álvarez
02472ef6d7 Bug 1561900 - Fix scroll state restoration when not coming from the bfcache on the initial frame construction. r=bzbarsky
There is no way this ever properly worked, as we always passed null for
`aFrameState`.

So it'd only work if we reframed the document element or such...  Which is not
amazing.

For simpler test-cases, when we don't construct the scrollframe via
PresShell::Initialize, but via the regular frame constructor updates
(ContentAppended, etc...), those end up working because we go through lazy frame
construction, which ends up in RecreateFramesForContent, which passes
mTempFrameTreeState.

Differential Revision: https://phabricator.services.mozilla.com/D59569
2020-01-15 13:18:52 +00:00
Eric Rahm
daeb56f35b Bug 1606187 - Part 2b: Update users of nsClassHashtable to handle UniquePtr differences r=KrisWright,froydnj
Differential Revision: https://phabricator.services.mozilla.com/D59042
2020-01-13 19:18:56 +00:00
Mirko Brodesser
d02e84d2d2 Bug 1608071: part 2) Rename nsContentUtils::GetCommonAncestor and related methods. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D59319
2020-01-13 10:29:44 +00:00
Jamie Nicol
01ae2a8ea0 Bug 1581868 - Make webrender schedule a frame immediately on resume. r=sotaro
On webrender on android, parent-process pages (eg about:support) were not being
rendered immediately after minimising then resuming the app, resulting in a
black screen. The problem was that webrender believed the previous frame was
still valid, and therefore that it did not need to render a new
one. Content-process pages were unnaffected because we clear cached resources
when the app is minimised, so we accidentally rendered a new frame on
resumption.

To fix this we always force a new frame to be rendered immediately on
resumption. This uncovers a race condition which causes us to sometimes render
frames at the wrong size when the window size has changed (for example when
showing or hiding the keyboard), so that is also fixed.

This also fixes a bug affecting fenix, where when opening a page in a new tab
the portion of the screen where the keyboard used to be would remain black until
the page had loaded. This no longer occurs because we force a composite as soon
as the keyboard is hidden.

Additionally, this patch reverts the original attempt at fixing this
bug, as it is not necessary.

Differential Revision: https://phabricator.services.mozilla.com/D59367
2020-01-10 02:01:30 +00:00
Sebastian Streich
f58f9e3193 Bug 1602487 - Remove GetURI calls in PresShell.cpp r=ckerschb
Differential Revision: https://phabricator.services.mozilla.com/D58790
2020-01-09 12:09:18 +00:00
Ting-Yu Lin
5d544dc447 Bug 1606492 - Add nsAutoScriptBlocker to PresShell::DidDoReflow(). r=emilio
Add a script block to prevent reflow observers from running the scripts,
which may flush layout, until the end of DidDoReflow().

Specifically, Document::MaybeInitializeFinalizeFrameLoaders() can flush
layout somewhere down in the stack as bug 1606492 comment 0 shows.
Adding a script block can force it to schedule its runnable to run at
the end of DidDoReflow().

Also, HandlePostedReflowCallbacks() can flush layout. It's better to check
`mIsDestroying` before proceeding.

Differential Revision: https://phabricator.services.mozilla.com/D59015
2020-01-07 22:58:37 +00:00
Ting-Yu Lin
983e4b52f4 Bug 1607123 - Terminate AccessibleCaretEventHub after tearing down the frame tree. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D58738
2020-01-06 20:18:06 +00:00
Emilio Cobos Álvarez
bc18da0d20 Bug 1605956 - Don't invalidate scroll anchor on visual viewport offset updates if visual viewport size is not set. r=botond
As we only use the offset if the visual viewport size is set.

Differential Revision: https://phabricator.services.mozilla.com/D58226
2019-12-30 17:03:46 +00:00
Emilio Cobos Álvarez
1278d10333 Bug 1595435 - Allow content to steal focus from a cross-origin iframe. r=masayuki
This matches other browsers.

Keep the restriction just to chrome nodes, and in that case, avoid getting into
the broken state, which is what causes the issue. I'm not sure if this even
matters anymore given e10s but...

Differential Revision: https://phabricator.services.mozilla.com/D57475
2019-12-25 06:50:25 +00:00
Chris Peterson
0a9155f83b Bug 1570499 - Part 1: Replace MOZ_FALLTHROUGH macro with C++17's [[fallthrough]] attribute. r=froydnj
This changeset is a simple find and replace of `MOZ_FALLTHROUGH` and `[[fallthrough]]`.

Unfortunately, the MOZ_FALLTHROUGH_ASSERT macro (to assert on case fallthrough in debug builds) is still necessary after switching from [[clang::fallthrough]] to [[fallthrough]] because:

* MOZ_ASSERT(false) followed by [[fallthrough]] triggers a -Wunreachable-code warning in DEBUG builds
* but MOZ_ASSERT(false) without [[fallthrough]] triggers a -Wimplicit-fallthrough warning in NDEBUG builds.

Differential Revision: https://phabricator.services.mozilla.com/D56440
2019-12-20 07:16:43 +00:00
Ting-Yu Lin
3f94eeb311 Bug 1604701 - Make EventTargetData::mPresShell always compute from the frame. r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D57601
2019-12-19 17:08:41 +00:00
Hiroyuki Ikezoe
48585fe72f Bug 1596317 - Use CallState for SubDocEnumFunc. r=smaug
`true` -> `CallState::Continue`
`false` -> `CallState::Stop`

Differential Revision: https://phabricator.services.mozilla.com/D57437
2019-12-19 07:58:45 +00:00
Bogdan Tara
e59c8c65fb Backed out 7 changesets (bug 1596317) for causing build bustages CLOSED TREE
Backed out changeset 0d3208fcb948 (bug 1596317)
Backed out changeset fe5554dc4115 (bug 1596317)
Backed out changeset 019de59cbc93 (bug 1596317)
Backed out changeset f4851472b087 (bug 1596317)
Backed out changeset a984cf515db8 (bug 1596317)
Backed out changeset d0da5bf9b4d4 (bug 1596317)
Backed out changeset abe5f2030dd9 (bug 1596317)
2019-12-19 06:49:39 +02:00
Hiroyuki Ikezoe
5575d95de1 Bug 1596317 - Use CallState for SubDocEnumFunc. r=smaug
`true` -> `CallState::Continue`
`false` -> `CallState::Stop`

Differential Revision: https://phabricator.services.mozilla.com/D57437
2019-12-19 04:16:10 +00:00
Emilio Cobos Álvarez
17063db12a No bug - Remove a useless include in PresShell.h. r=jya
Differential Revision: https://phabricator.services.mozilla.com/D57690
2019-12-18 22:57:48 +00:00
Masayuki Nakano
2038dd1320 Bug 1543315 - part 20: Mark PresShell::ContentStateChanged() as MOZ_CAN_RUN_SCRIPT_BOUNDARY r=smaug
While it calls `RestyleManager::ContentStateChanged()`, it blocks script
with `nsAutoCauseReflowNotifier`.  Therefore, it should be marked as
`MOZ_CAN_RUN_SCRIPT_BOUNDARY` at least (looks like the other override,
`DocAccessible::ContentStateChanged()` does not run script).

There is a concern about the lifetime of `RestyleManager`.  It's destroyed
when `nsPresContext::DetachPresShell()` is called.  It's called by
`PresShell::Destroy()` and destructor of `nsPresContext`.  The latter is
safe since `PresShell` owns `mPresContext` and it's never cleared.  However,
I'm not sure about the former.  It might be better to create blocker of
synchronous handling of `PresShell::Destroy()`.

And also this does not make `Document::ContentStateChanged()` use
`RefPtr<PresShell>` at calling it because it might cause performance
regression, but it does not do anything after destroying
`nsAutoCauseReflowNotifier`.

Finally, for guaranteeing that the lifetime of `PresShell::mPresContext` is
longer than `PresShell`, this makes it to `RefPtr<nsPresContext> const`.
However, initializing it in constructor breaks other objects' initialization
process since they assume that `PresShell::GetPresContext()` won't return
valid pointer until the `nsPresContext` is attached.  For solving this issue
safe, this patch keeps setting `mPresContext` in `Init()` with `const_cast`
hack.

Differential Revision: https://phabricator.services.mozilla.com/D55804
2019-12-11 12:18:33 +00:00
Emilio Cobos Álvarez
9034de5dd0 Bug 1603313 - Subdocument enum callbacks should take a reference. r=bzbarsky
As they can never take null.

Differential Revision: https://phabricator.services.mozilla.com/D56843
2019-12-14 05:08:39 +00:00
Masayuki Nakano
b079d57023 Bug 1543315 - part 19: Mark PresShell::ReconstructFrames() as MOZ_CAN_RUN_SCRIPT r=smaug
It calls `Document::FlushPendingNotification()` so that we should mark it
as `MOZ_CAN_RUN_SCRIPT`.

And the method calls it of `mDocument` and `mDocument` is never modified
after it's initialized.  Therefore, we can move the initializer to the
constructor and make `RefPtr<Document>` to `RefPtr<Document> const`.  Thus,
we can avoid unnecessary auto `RefPtr`.

Differential Revision: https://phabricator.services.mozilla.com/D55803
2019-12-11 12:18:00 +00:00
Gabriele Svelto
eeb9bfc398 Bug 1600545 - Remove useless inclusions of header files generated from IDL files in accessible/, browser/, caps/, chrome/, devtools/, docshell/, editor/, extensions/, gfx/, hal/, image/, intl/, ipc/, js/, layout/, and media/ r=Ehsan
The inclusions were removed with the following very crude script and the
resulting breakage was fixed up by hand. The manual fixups did either
revert the changes done by the script, replace a generic header with a more
specific one or replace a header with a forward declaration.

find . -name "*.idl" | grep -v web-platform | grep -v third_party | while read path; do
    interfaces=$(grep "^\(class\|interface\).*:.*" "$path" | cut -d' ' -f2)
    if [ -n "$interfaces" ]; then
        if [[ "$interfaces" == *$'\n'* ]]; then
          regexp="\("
          for i in $interfaces; do regexp="$regexp$i\|"; done
          regexp="${regexp%%\\\|}\)"
        else
          regexp="$interfaces"
        fi
        interface=$(basename "$path")
        rg -l "#include.*${interface%%.idl}.h" . | while read path2; do
            hits=$(grep -v "#include.*${interface%%.idl}.h" "$path2" | grep -c "$regexp" )
            if [ $hits -eq 0 ]; then
                echo "Removing ${interface} from ${path2}"
                grep -v "#include.*${interface%%.idl}.h" "$path2" > "$path2".tmp
                mv -f "$path2".tmp "$path2"
            fi
        done
    fi
done

Differential Revision: https://phabricator.services.mozilla.com/D55443
2019-12-06 09:16:44 +00:00
Emilio Cobos Álvarez
998854e799 Bug 1601624 - Don't suppress shrink-to-fit resize reflows on unchanged size. r=tnikkel
As the width and height arguments to ResizeReflow are treated as constraints,
not the final size, in that case.

Differential Revision: https://phabricator.services.mozilla.com/D56108
2019-12-06 01:03:45 +00:00
Kris Taeleman
b896ac611c Bug 1581868 - Black page sometimes when restoring geckoview_example/fenix with webrender enabled. r=jnicol
Differential Revision: https://phabricator.services.mozilla.com/D55338
2019-12-02 08:01:37 +00:00
Emilio Cobos Álvarez
6952f7d153 Bug 1599161 - Rename nsLayoutStylesheetCache to GlobalStyleSheetCache. r=boris
It's a better name, and will avoid confusion when I add other stylesheet caches
outside of the CSS loader.

Depends on D54556

Differential Revision: https://phabricator.services.mozilla.com/D54557
2019-11-25 22:08:43 +00:00
Hiroyuki Ikezoe
f0987efb21 Bug 1586986 - Fire visual viewport resize events and flush position:fixed elements' layout in the same way what Chrome does. r=botond
On Chrome, visual viewport resize event is fired repeatedly during dynamic
toolbar transitions and visual viewport height obtained by the VisualViewport
API is also changed, but in terms of layout the height value is never used
until the dynamic toolbar height reaches to zero or is changed from zero.
The height used at the time is the height for vh units when the toolbar height
reaches to zero and the ICB height when the toolbar height is changed from zero.
To do so, we need to have another visual viewport size in parallel to the
original one and use them depending on situations.

Differential Revision: https://phabricator.services.mozilla.com/D52338
2019-11-21 21:36:59 +00:00
Hiroyuki Ikezoe
210926ff11 Bug 1586986 - Deliver 'fixed-bottom' offset to the top of the pres context on the foreground tab. r=geckoview-reviewers,tnikkel,snorp
The dynamic toolbar transition doesn't affect on background tabs since to
switch tabs the dynamic toolbar should be restored to its original state (i.e.,
completely visible state).

Differential Revision: https://phabricator.services.mozilla.com/D52336
2019-11-21 21:15:46 +00:00
Daniel Holbert
e2e3c8ef73 Bug 1597348: When reflow is interrupted, purge flex items' cached measurements during the same traversal that we use to mark ancestor-chain as dirty. r=emilio
This means we no longer have any use for the frame state bit
"NS_STATE_FLEX_MEASUREMENTS_INTERRUPTED". Now, if a flex container
has N children and only the last child is interrupted, we'll only
purge the last child's measurement (and we'll do it promptly at the
end of the whole interrupted reflow).

Differential Revision: https://phabricator.services.mozilla.com/D53687
2019-11-18 19:19:42 +00:00
Emilio Cobos Álvarez
e9ad71d0d9 Bug 1596445 - Add some supporting code to nsINode to deal with NAC and shadow DOM separately. r=bzbarsky
We'll use these to remove GetBindingParent.

Differential Revision: https://phabricator.services.mozilla.com/D53029
2019-11-15 15:10:45 +00:00
Doug Thayer
d32eebc96e Bug 1586920 - Sometimes include dynamic string of label frames in BHR r=nika
This adds two AUTO_PROFILER_LABEL_DYNAMIC_... macros and updates select
usages of the old macros to use the new ones. These new macros cause
the dynamic string of the label to be included in BHR stacks.

We don't want to do this all of the time, as in many cases we may not
be interested enough in the dynamic string or it may be sensitive
information, but it is rather important information for certain cases.

This uses the same buffer that we use for the strings for JS frames,
and if we fail to fit into that buffer we just append the raw label.

If the string is too long for our static buffer (128 bytes), we just
leave it truncated, as it should be stable and we may be able to infer
from the truncated form what the full form would be.

Differential Revision: https://phabricator.services.mozilla.com/D51665
2019-11-11 20:27:44 +00:00
Brian Grinstead
134cdfd948 Bug 1593119 - clang-format the files affected by the MOZ_XBL unifdef r=bzbarsky
Differential Revision: https://phabricator.services.mozilla.com/D52057
2019-11-07 00:35:25 +00:00
Brian Grinstead
5c162e767e Bug 1593119 - unifdef MOZ_XBL r=bzbarsky
This was generated with:

```
rg -l -g '*.{cpp,h}' MOZ_XBL . | while read FILE ; do
   echo $FILE
   unifdef -m -UMOZ_XBL $FILE
done
```

After this, I manually removed the directive in nsContentUtils.cpp due to:

  unifdef: ./dom/base/nsContentUtils.cpp: 4630: Unterminated string literal
  unifdef: Output may be truncated

Differential Revision: https://phabricator.services.mozilla.com/D51337
2019-11-07 00:35:13 +00:00
Markus Stange
45407d68ec Bug 1592739 - Ignore the background-color CSS value on the window document's root element if that element has a -moz-appearance. r=tnikkel
For regular elements, whenever -moz-appearance is used, the CSS background is
ignored. Root elements were behaving specially, and the background color also
needed to be adjusted.
For example, for Windows 7, we have the following CSS rule;

```
    :root {
      background-color: transparent;
      -moz-appearance: -moz-win-borderless-glass;
    }
```

This change makes the root element more consistent with other elements, so the
extra `background-color: transparent` declaration is no longer necessary.

This change does not let content documents opt out of forced opaqueness:
Root content documents still get an opaque background color from an existing
check further down in this method.

Differential Revision: https://phabricator.services.mozilla.com/D51459
2019-11-05 18:47:30 +00:00
Brian Hackett
2ecc4d12c0 Bug 1575657 - Always create record/replay checkpoints when painting, r=mstange.
Differential Revision: https://phabricator.services.mozilla.com/D46244
2019-11-03 12:22:20 +00:00
Dan Glastonbury
8452f4bce4 Bug 1578319: Telemetry for total time spent in layout per Refresh Driver tick. r=heycam
Differential Revision: https://phabricator.services.mozilla.com/D44427
2019-11-01 04:33:48 +00:00
Masayuki Nakano
ee8db65873 Bug 1577058 - part 2: Make nsFrameSelection::CommonPageMove() handle nsFrameSelection::ScrollSelectionIntoView() too r=smaug
Currently, `nsFrameSelection::CommonPageMove()` is called before every caller
calls `nsFrameSelection::ScrollSelectionIntoView()`.  However, when an editing
host has focus, the scroll target may be outside of it.  In such case, without
moving caret, user may want only to scroll the scrollable element.

Chrome behaves like so.  Chrome also can scroll outside scrollable element
of focused editing host.  However, it scrolls caret into view only when
caret is moved actually.  Therefore, it makes sense to follow this behavior.

This patch makes `nsFrameSelection::CommonPageMove()` also call
`nsFrameSelection::ScrollSelectionIntoView()`.  However, it newly takes
`SelectionIntoView` flag for making callers can choose the condition.  I.e.,
`ScrollSelectionIntoView()` should be called always, or only when selection
is actually changed, or shouldn't be called.

Differential Revision: https://phabricator.services.mozilla.com/D50178
2019-10-28 10:03:37 +00:00
Cosmin Sabou
87130b4bff Backed out 2 changesets (bug 1577058) for causing bug 1541915 to nearly permafail.
Backed out changeset c556c5228132 (bug 1577058)
Backed out changeset d00a7e091efd (bug 1577058)
2019-10-27 17:38:58 +02:00
Masayuki Nakano
9b8bb68045 Bug 1577058 - part 2: Make nsFrameSelection::CommonPageMove() handle nsFrameSelection::ScrollSelectionIntoView() too r=smaug
Currently, `nsFrameSelection::CommonPageMove()` is called before every caller
calls `nsFrameSelection::ScrollSelectionIntoView()`.  However, when an editing
host has focus, the scroll target may be outside of it.  In such case, without
moving caret, user may want only to scroll the scrollable element.

Chrome behaves like so.  Chrome also can scroll outside scrollable element
of focused editing host.  However, it scrolls caret into view only when
caret is moved actually.  Therefore, it makes sense to follow this behavior.

This patch makes `nsFrameSelection::CommonPageMove()` also call
`nsFrameSelection::ScrollSelectionIntoView()`.  However, it newly takes
`SelectionIntoView` flag for making callers can choose the condition.  I.e.,
`ScrollSelectionIntoView()` should be called always, or only when selection
is actually changed, or shouldn't be called.

Differential Revision: https://phabricator.services.mozilla.com/D50178
2019-10-27 01:44:55 +00:00
Timothy Nikkel
f503289a6a Bug 1590551. Allow nsPresContext::GetNearestWidget to work when there is no frame tree. r=botond
Differential Revision: https://phabricator.services.mozilla.com/D50135
2019-10-23 23:37:11 +00:00
Botond Ballo
b5f3f21c9b Bug 1560770 - Use a method of getting the widget in UseMobileViewportManager() than does not require the frame tree to be constructed. r=tnikkel
Differential Revision: https://phabricator.services.mozilla.com/D50121
2019-10-22 20:40:35 +00:00
Botond Ballo
a55ce4808e Bug 1560770 - Don't use MobileViewportManager if we're not using APZ. r=tnikkel
Differential Revision: https://phabricator.services.mozilla.com/D50023
2019-10-22 04:20:07 +00:00
Nazım Can Altınova
afa464ca0d Bug 1583271 - Part 1: Change profiler page information IDs to BrowsingContextID and InnerWindowID r=gerald,nika
We were keeping nsDocShell::mHistoryId and nsDocShell::mOSHE as keys. They
weren't quite good because:
1. While loading an iframe, they were being registered twice with the same
ids(for about:blank and the real URL) sometimes.
2. It wasn't possible to access to the parent mHistoryId and mOSHE from a child
processes if the parent is in a different process. That may not be the case for
now, but it will be after fission.
So we had to find other IDs to:
1. Determine the Tab of the frames.
2. Determine the URLs of the frames.
For the first use case, we were using nsDocShell::mHistoryId for that purpose
but that was wrong. The closest thing that we can get to a tab ID is
BrowsingContext ID because they don't change after a navigation. But iframes
have different BrowsingContext's, so we still need to create a tree to
construct a tab content. That can be either in the front-end or capture time.
For the second use case, we were using a key pair of mHistoryId and mOSHE. We
now chose to keep inner window IDs for that purpose. Inner window IDs are
unique for each navigation loads because inner window correspond to each JS
window global objects. That's why we can use that without any problem. But one
problem is that we cannot handle `history.pushState` and `history.replaceState`
changes with that change since window global objects won't change during those.
But that was the best thing we can do after fission. So this will be a small
sacrifice for us to keep that functionality working after fission.
In that patch we also remove the registration/unregistration calls. We are
going to add those calls in the next patch.

Differential Revision: https://phabricator.services.mozilla.com/D47065
2019-10-09 21:25:11 +00:00
Brendan Dahl
bf272a3bca Bug 1510785 - Only build XBL related code when MOZ_XBL is defined. r=bzbarsky
When XBL is disabled, no code in dom/xbl will be built. Also, adds ifdefs
to remove any of the XBL related code elsewhere. There's definitely more
that can be done here, but I think it's better to wait to do the rest of
the cleanup when we actually remove the code.

Depends on D45612

Differential Revision: https://phabricator.services.mozilla.com/D45613
2019-10-08 23:52:14 +00:00
Sylvestre Ledru
49802d0a8e Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D47737
2019-10-06 18:29:55 +00:00
Emilio Cobos Álvarez
7070f5b15d Bug 1584263 - No need to flush delayed resizes while flushing layout. r=bzbarsky
We have already called FlushDelayedResize(false) earlier in this method, and
after bug 1583534 that queues a reflow if one is needed. All the boolean
controls is whether reflows are processed by the FlushDelayedResize call.

Since we plan to process reflows anyway a few lines later, there is no need to
do that explicitly that via FlushDelayedResize(true).

Differential Revision: https://phabricator.services.mozilla.com/D47287
2019-09-29 20:41:17 +00:00
Emilio Cobos Álvarez
ac56bb00e0 Bug 1578933 - Run scroll anchoring adjustments when blocking script. r=dholbert
I wanted to fix the more general problem and script-block more of
FlushPendingNotifications, but simple attempts to do that have resulted in
terribly orange try runs with very bizarre failures, so in the "perfect is the
enemy of good" spirit, fix the issue at hand (scroll anchoring adjustments not
dealing with layout reentering beneath them) by running them while
script-blocked, which is the right thing to do anyway.

Differential Revision: https://phabricator.services.mozilla.com/D47256
2019-09-26 17:07:03 +00:00
Emilio Cobos Álvarez
2796ac482a Bug 1553772 - Bug 1549812 - Try to assert a bit harder about stuff not flushing under our nose. r=TYLin,mats
I think these should hold, everything that runs under them should just schedule
other stuff to some later date:

 * Synth mouse events -> scheduled as refresh driver observers.
 * Scroll events -> Scheduled as well.
 * Caret state change events -> Also scheduled after last patch.
 * IME and accessibility stuff -> I don't think they can reenter layout.

We can always revert this if it causes troubles, plus it shouldn't crash on
release so should be fine.

Differential Revision: https://phabricator.services.mozilla.com/D31090
2019-09-26 20:55:58 +00:00
Emilio Cobos Álvarez
126ad6dd75 Bug 1551659 - Remove MVMContext::ResizeEventFlag and related code. r=botond,hiro
D46944 / bug 1583534 is what fixes the root cause of bug 1528052 by not
having the first call to ResizeReflow have a wrong old size of 0x0.

This removes the code that bug introduces to suppress resize events, which
fixes this bug. I think our behavior now is pretty sane.

In particular, consider the test-case:

<!doctype html>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<a href="" target="_blank">Open me in a separate tab</a>
<pre id="log"></pre>
<script>
  // This shouldn't be needed, but otherwise Fenix doesn't show the tooltip on
  // longpress...
  document.querySelector("a").href = location.href;

  function logSize() {
    log.innerText += window.innerWidth + "x" + window.innerHeight + "\n";
  }
  logSize();
  onresize = logSize;
</script>

(Hosted at https://crisal.io/tmp/gecko-mobile-resize.html for convenience)

Right now on trunk, when you click the link from GVE or Fenix, we're only
getting an initial size of 0x0 (which is not great, btw), and only after first
paint we get the real device size, but content doesn't get a resize event.

This is obviously wrong, every time the layout viewport changes we should fire
resize events.

Pages that get opened in new tabs and get refreshed when resized may get an
extra reload with this approach, but this seems not avoidable unless widget sets
the viewport size right in advance (which from discussion with snorp and agi
doesn't seem possible in the general case).

What used to happen is that we were triggering a redundant resize reflow from
the initial paint which didn't update the layout viewport (because the content
viewer and co had the right viewport from the previous navigation).

Now that we optimize those away, I think our behavior should be correct.

Differential Revision: https://phabricator.services.mozilla.com/D46956
2019-09-25 19:35:29 +00:00
Emilio Cobos Álvarez
c1bd815761 Bug 1583534 - Further simplify PresShell::ResizeReflow. r=botond
In particular, not let ResizeReflow take the old and new size. Most of the
callers pass dummy values anyway.

Instead, use the old size of the layout viewport. This ensures we fire resize
events only if the layout viewport actually changes.

This is important because the first resize of the mobile viewport manager
after a navigation has an "old size" of 0x0, even though the layout viewport
is initialized on presshell initialization to the right size.

Thus, we fire resize events unnecessarily in that case, which is the root cause
for bug 1528052.

To do this, we need to shuffle a bit of code in nsDocumentViewer that deals with
delayed resizes, to set the visible area _and_ invalidate layout, rather than
setting the visible area and _then_ relying on doing a resize reflow.

Further cleanup is possible, though not required for my android resizing fix, so
will do separately.

Differential Revision: https://phabricator.services.mozilla.com/D46944
2019-09-25 19:12:44 +00:00
Emilio Cobos Álvarez
0d9373b571 Bug 1575138 - Do not schedule reconstruction for <slot> if there's no fallback. r=smaug
Just realized that we probably want this too.

Differential Revision: https://phabricator.services.mozilla.com/D46898
2019-09-24 15:13:34 +00:00
Emilio Cobos Álvarez
532f20c66a Bug 1575138 - Don't bother scheduling a reconstruct on <slot>s that have no fallback. r=smaug
So basically what's going on is that we remove all children from the popup here:

  https://searchfox.org/mozilla-central/rev/153feabebc2d13bb4c29ef8adf104ec1ebd246ae/browser/base/content/browser-places.js#687

This makes us schedule a reconstruct of the slot, in case it has fallback
content:

  https://searchfox.org/mozilla-central/rev/153feabebc2d13bb4c29ef8adf104ec1ebd246ae/dom/base/ShadowRoot.cpp#616

Then we insert frames for the items. They get inserted right away, because we
don't support lazy frame construction for XUL:

  https://searchfox.org/mozilla-central/rev/153feabebc2d13bb4c29ef8adf104ec1ebd246ae/layout/base/nsCSSFrameConstructor.cpp#6507

If this was normal HTML content, the insertion would've been lazy, and no
reconstruct would've happened.

The right fix is to support lazy frame construction for XUL. Now that there's
very little XBL it should be possible. This fixes it but it's a kind-of stop-gap
solution.

Differential Revision: https://phabricator.services.mozilla.com/D46825
2019-09-24 00:03:39 +00:00
Edgar Chen
9ce65d9730 Bug 1578355 - Part 1: Move user-activation code from EventStateManager to UserActivation; r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D45168
2019-09-20 20:51:25 +00:00
Daniel Varga
0c8477fc87 Backed out 3 changesets (bug 1578355) for build bustage at build/src/dom/base/nsSyncLoadService.h:48:21. On a CLOSED TREE
Backed out changeset d50ad759f129 (bug 1578355)
Backed out changeset 339ab54ca471 (bug 1578355)
Backed out changeset 284299dac42c (bug 1578355)
2019-09-20 14:05:12 +03:00