Commit Graph

559 Commits

Author SHA1 Message Date
Emilio Cobos Álvarez
968d38693b Bug 1857455 - Deal with BrowsingContext not being yet attached in nsSubDocumentFrame::Init. r=hsivonen
For initial about:blank, nsSubDocumentFrame::Init might not have an
extant browsing context yet. Some code did deal with that properly
(MaybeUpdateEmbeddedColorScheme for example), but some other didn't.

Consistently propagate data to our browsing context after ShowViewer to
fix this.

Differential Revision: https://phabricator.services.mozilla.com/D190275
2023-10-10 12:56:30 +00:00
Stanca Serban
2ef7ec1e93 Backed out changeset 8de2cc7842d0 (bug 1857455) for causing mochitests failures in test_css_visibility_propagation.xhtml 2023-10-07 00:03:48 +03:00
Emilio Cobos Álvarez
f124cb7f35 Bug 1857455 - Deal with BrowsingContext not being yet attached in nsSubDocumentFrame::Init. r=hsivonen
For initial about:blank, nsSubDocumentFrame::Init might not have an
extant browsing context yet. Some code did deal with that properly
(MaybeUpdateEmbeddedColorScheme for example), but some other didn't.

Consistently propagate data to our browsing context after ShowViewer to
fix this.

Differential Revision: https://phabricator.services.mozilla.com/D190275
2023-10-06 13:44:13 +00:00
Emilio Cobos Álvarez
9e491730f8 Bug 1829594 - Remove dead code to deal with edge case that can't happen. r=smaug
In order to "get reframed into a different document", we'd have to get
unbound from the document first. However, frameloaders are destroyed and
nulled-out on unbind, see:

 * nsGenericHTMLFrameElement::UnbindFromTree.
 * XULFrameElement::UnbindFromTree.
 * nsObjectLoadingContent::UnbindFromTree.

So just can't happen that we end up with that frameloader somehow in a
different frame.

Differential Revision: https://phabricator.services.mozilla.com/D187836
2023-10-04 12:54:07 +00:00
Emilio Cobos Álvarez
3a2100fea0 Bug 1829594 - Fix pre-existing logic bug in nsHideViewer::Run. r=tnikkel,layout-reviewers
This is needed to fix layout/reftests/bugs/1743533-1.html after the
previous patch, which will otherwise perma-pass (which is actually
perma-fail).

The reason is a bug in nsHideViewer::Run, which now gets used for
fission iframes as well.

What happens is that mPresShell->IsDestroying() is true, but
frame->PresShell() is a different press shell in fact (because page mode
re-creates the pres shell).

We should not hide the frame loader there. Hiding it if
mPresShell->IsDestroying() is redundant anyways, even if the frame
belongs to mPresShell, because if there is a frame, that frame going
away will end up in nsHideViewer::Run again, eventually.

Depends on D187650

Differential Revision: https://phabricator.services.mozilla.com/D187657
2023-10-04 12:54:07 +00:00
Emilio Cobos Álvarez
0f92257f9f Bug 1829594 - Propagate IsUnderHiddenEmbedderElement to from nsHideViewer. r=tnikkel,layout-reviewers
During frame reconstruction we have a brief period of time where we are
hidden otherwise, causing focus to get cleared potentially in OOP
frames, if a refresh driver tick arrives at the wrong time.

Differential Revision: https://phabricator.services.mozilla.com/D187650
2023-10-04 12:54:06 +00:00
Emilio Cobos Álvarez
6c324c6d1b Bug 1851868 - Refactor nsIFrame::Destroy to pass a single DestroyContext parameter. r=dholbert
This shouldn't change behavior, but it packs the two arguments to
DestroyFrom into a single thing, and makes nsIFrame::Destroy not so easy
to call without a previous context.

This is a prerequisite to pass aDestroyContext to various things that
right now just mint one, which can cause badness, see bug 1851787 and
related bugs.

It's also a bit nicer to add things there if we need to in the future.

Differential Revision: https://phabricator.services.mozilla.com/D187578
2023-09-07 11:46:30 +00:00
Narcis Beleuzu
33592fec5e Backed out changeset 55052ae7d067 (bug 1851868) for reftest failure on 1153695.html . CLOSED TREE 2023-09-07 02:42:25 +03:00
Emilio Cobos Álvarez
0698c96bd1 Bug 1851868 - Refactor nsIFrame::Destroy to pass a single DestroyContext parameter. r=dholbert
This shouldn't change behavior, but it packs the two arguments to
DestroyFrom into a single thing, and makes nsIFrame::Destroy not so easy
to call without a previous context.

This is a prerequisite to pass aDestroyContext to various things that
right now just mint one, which can cause badness, see bug 1851787 and
related bugs.

It's also a bit nicer to add things there if we need to in the future.

Differential Revision: https://phabricator.services.mozilla.com/D187578
2023-09-06 22:34:35 +00:00
Botond Ballo
7d1d4ed15d Bug 1827330 - Do not add a resolution transform to the WebRenderLayerScrollData node for a Remote display item. r=dlrobertson,hiro
This reverts older attempts to account for the resolution in input transforms
targeting OOP subdocuments (bug 1682200, bug 1715187), clearing the slate for
a more proper solution in the forthcoming patches.

Differential Revision: https://phabricator.services.mozilla.com/D184908
2023-08-15 03:36:42 +00:00
Emilio Cobos Álvarez
a67155e52a Bug 1835864 - Make printing / paged mode deal with multiple canvas backgrounds properly. r=dholbert
The subdocument call when there's no root frame is silly, because we
won't find a canvas frame and we'll end up with transparent.

This needs to tweak the canvas frame construction code to make canvas
anon content show up on the "top" canvas, not on the page content
canvas.

This can be simplified now, because the reason we had to build canvas
anon content before processing kids of the root frame (bug 1558352) no
longer applies since I made popups regular out-of-flow elements
(bug 1799343).

Differential Revision: https://phabricator.services.mozilla.com/D179461
2023-08-10 12:59:00 +00:00
Emilio Cobos Álvarez
12547c0c1c Bug 1847929 - Don't throttle zero-size in-viewport OOP iframes. r=smaug
Use edge-inclusive intersection like IntersectionObserver, to make
zero-size iframes that are in the viewport considered visible. This is
consistent with how we treat zero-sized in-process iframes.

Differential Revision: https://phabricator.services.mozilla.com/D185808
2023-08-10 09:30:02 +00:00
Neil Deakin
44b3909607 Bug 1776339, add a browsing context field that syncs the isUnderHiddenEmbedderElement state, r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D168440
2023-05-31 19:46:49 +00:00
Emilio Cobos Álvarez
65baffc32c Bug 1833733 - Properly detect page sequence background from FindEffectiveBackgroundColor. r=dholbert
And specify it since we don't look at gradients.

Differential Revision: https://phabricator.services.mozilla.com/D178476
2023-05-30 11:25:36 +00:00
Cosmin Sabou
982d0bbbf9 Backed out changeset 12975d519459 (bug 1833733) for causing pagination reftest failures. CLOSED TREE 2023-05-19 17:19:56 +03:00
Emilio Cobos Álvarez
c80cc2dd9c Bug 1833733 - Properly detect page sequence background from FindEffectiveBackgroundColor. r=dholbert
And specify it since we don't look at gradients.

Differential Revision: https://phabricator.services.mozilla.com/D178476
2023-05-19 12:42:22 +00:00
Emilio Cobos Álvarez
8f36a9e74c Bug 1815552 - Make positioned table parts deal correctly with switching position without being reframed. r=TYLin,layout-reviewers
While looking at the backout, I noticed table parts relied on reframing
on abspos-container-ness changes in a subtle way, see the test, which
fails with the first patch of this bug applied without these changes.

Make the NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN mean the same for table parts
as for everything else. Instead, keep the registration status on each
relevant frame class individually.

Depends on D169127

Differential Revision: https://phabricator.services.mozilla.com/D170969
2023-03-01 19:04:17 +00:00
Cristina Horotan
76f1a8332c Backed out 2 changesets (bug 1815552) for causing Bp-hybrid bustages at ComputedStyle.h on a CLOSED TREE
Backed out changeset da0f9295df91 (bug 1815552)
Backed out changeset cda1ee891058 (bug 1815552)
2023-03-01 16:05:19 +02:00
Emilio Cobos Álvarez
1190d4ca51 Bug 1815552 - Make positioned table parts deal correctly with switching position without being reframed. r=TYLin,layout-reviewers
While looking at the backout, I noticed table parts relied on reframing
on abspos-container-ness changes in a subtle way, see the test, which
fails with the first patch of this bug applied without these changes.

Make the NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN mean the same for table parts
as for everything else. Instead, keep the registration status on each
relevant frame class individually.

Depends on D169127

Differential Revision: https://phabricator.services.mozilla.com/D170969
2023-03-01 10:36:54 +00:00
Dan Robertson
1f6f3076ca Bug 1379458 - The ScrollParentId should match the ASR tree. r=botond,tnikkel,mstange
Make the ScrollMetadata's mScrollParentId match what is found in the active
scroll root tree.

Depends on D148662

Differential Revision: https://phabricator.services.mozilla.com/D149925
2022-12-27 14:08:51 +00:00
Martin Robinson
62878408df Bug 1803377 - Rename the values of the IntrinsicDirty enum r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D163607
2022-12-02 12:27:31 +00:00
Botond Ballo
bcf265578a Bug 1802225 - Remove Layers.{h,cpp}. r=tnikkel,geckoview-reviewers,jgilbert,media-playback-reviewers,padenot,m_kato
Where appropriate, `#include "Layers.h"` is replaced with
more specific inclusions.

Differential Revision: https://phabricator.services.mozilla.com/D162934
2022-11-29 01:52:03 +00:00
David Shin
a948e97d73 Bug 1792285 - Part 1: Refactor DisplayListBuilder::PushIFrame in preparation for proper subpixel snapping. r=emilio
Incoming `bounds` parameter is now `LayoutDeviceRect` in preparation for
proper subpixel snapping.

Differential Revision: https://phabricator.services.mozilla.com/D159884
2022-11-01 20:32:06 +00:00
Butkovits Atila
4483f466bb Backed out 2 changesets (bug 1379458) for causing failures at nsGfxScrollFrame.cpp. CLOSED TREE
Backed out changeset dd6888957eff (bug 1379458)
Backed out changeset 3239f01e81d7 (bug 1379458)
2022-10-29 22:15:03 +03:00
Dan Robertson
37016ec573 Bug 1379458 - The ScrollParentId should match the ASR tree. r=botond,tnikkel,mstange
Make the ScrollMetadata's mScrollParentId match what is found in the active
scroll root tree.

Differential Revision: https://phabricator.services.mozilla.com/D149925
2022-10-29 02:44:43 +00:00
Cristian Tuns
5ab68833c9 Backed out 3 changesets (bug 1379458) for causing reftest failures on nsDisplayList.cpp CLOSED TREE
Backed out changeset 1d37427ef6f2 (bug 1379458)
Backed out changeset 54494d5e152c (bug 1379458)
Backed out changeset e1347c761038 (bug 1379458)
2022-10-27 18:09:35 -04:00
Dan Robertson
e33f674bea Bug 1379458 - The ScrollParentId should match the ASR tree. r=botond,tnikkel,mstange
Make the ScrollMetadata's mScrollParentId match what is found in the active
scroll root tree.

Differential Revision: https://phabricator.services.mozilla.com/D149925
2022-10-27 21:16:22 +00:00
Martin Robinson
009354aed9 Bug 1791760 - Move GetContainSizeAxes to nsIFrame r=emilio
This will allow this function to eventually return an appropriate value
depending on whether or not content is skipped via `content-visibility:
auto`. This change also starts looking directly at whether
content-visibility is skipping content or not, which should make it
compatible with a future `content-visibility: auto` implementation.

Differential Revision: https://phabricator.services.mozilla.com/D157831
2022-09-22 12:11:09 +00:00
Martin Robinson
d6b19e86ff Bug 1789255: Anonymous children of elements with content-visibility should not be skipped for layout r=emilio
Some anonymous children are important for properly sizing their parents
even when those parents hide content with `content-visibility`. This is
shown by regressions in the proper layout of some form elements with
`content-visibility`.

This change introduces a more conservative approach for avoiding layout
of hidden content. Instead of leaving all children dirty during reflow,
reflow anonymous frames (and nsComboboxDisplayFrame, a specialized kind
of anonymous frame). This change means that frames may only lay out some
of their children, so it must introduce some more changes to assumptions
during line layout.

In addition, this change renames `content-visibility` related methods in
nsIFrame in order to make it more obvious what they do.

Differential Revision: https://phabricator.services.mozilla.com/D157306
2022-09-15 20:32:27 +00:00
Norisz Fay
59f059dd2d Backed out changeset c3780baf6f24 (bug 1789255) for causing build bustages CLOSED TREE 2022-09-15 21:14:04 +03:00
Martin Robinson
a7d2990285 Bug 1789255: Anonymous children of elements with content-visibility should not be skipped for layout r=emilio
Some anonymous children are important for properly sizing their parents
even when those parents hide content with `content-visibility`. This is
shown by regressions in the proper layout of some form elements with
`content-visibility`.

This change introduces a more conservative approach for avoiding layout
of hidden content. Instead of leaving all children dirty during reflow,
reflow anonymous frames (and nsComboboxDisplayFrame, a specialized kind
of anonymous frame). This change means that frames may only lay out some
of their children, so it must introduce some more changes to assumptions
during line layout.

In addition, this change renames `content-visibility` related methods in
nsIFrame in order to make it more obvious what they do.

Differential Revision: https://phabricator.services.mozilla.com/D157306
2022-09-15 17:56:42 +00:00
Sandor Molnar
12e1fb9746 Backed out changeset 3a5759eabb42 (bug 1789255) for causing wpt failures in netwerk/protocol/http/Http2Session.cpp CLOSED TREE 2022-09-14 02:01:36 +03:00
Martin Robinson
00e3cff6d7 Bug 1789255: Anonymous children of elements with content-visibility should not be skipped for layout r=emilio
Some anonymous children are important for properly sizing their parents
even when those parents hide content with `content-visibility`. This is
shown by regressions in the proper layout of some form elements with
`content-visibility`.

This change introduces a more conservative approach for avoiding layout
of hidden content. Instead of leaving all children dirty during reflow,
reflow anonymous frames (and nsComboboxDisplayFrame, a specialized kind
of anonymous frame). This change means that frames may only lay out some
of their children, so it must introduce some more changes to assumptions
during line layout.

In addition, this change renames `content-visibility` related methods in
nsIFrame in order to make it more obvious what they do.

Differential Revision: https://phabricator.services.mozilla.com/D156473
2022-09-13 20:01:35 +00:00
Emilio Cobos Álvarez
09bcd7c8c5 Bug 1787127 - Use used color-scheme (not preferred) to determine canvas background adjustments. r=tnikkel
As per spec, see https://drafts.csswg.org/css-color-adjust/#color-scheme-effect:

> In order to preserve expected color contrasts, in the case of embedded
> documents typically rendered over a transparent canvas (such as
> provided via an HTML iframe element), if the used color scheme of the
> element and the used color scheme of the embedded document’s root
> element do not match, then the UA must use an opaque canvas of the
> Canvas color appropriate to the embedded document’s used color scheme
> instead of a transparent canvas.

After bug 1782596 we were using the preferred rather than used
color-scheme, which is the right thing to do for prefers-color-scheme,
but not for the canvas background.

Differential Revision: https://phabricator.services.mozilla.com/D155831
2022-09-04 23:16:32 +00:00
Emilio Cobos Álvarez
1c6fe315ab Bug 1782596 - Propagate preferred color-scheme to non-top frames. r=jwatt
The ColorSchemeMode::Preferred change doesn't make a difference (that
is, always use the preferred one), since when we only propagate from
top's embedder the embedder is chrome, which always has the preferred
color-scheme.

Differential Revision: https://phabricator.services.mozilla.com/D154931
2022-08-22 14:23:09 +00:00
Andreas Farre
3cab76dcc7 Bug 1595491 - Part 1: Make <embed> and <object> behave more like <iframe>. r=smaug,emilio
By making image loading in <embed> and <object> behave more like when
an <iframe> loads an image, we can make sure that the synthetic
document generated is process switched if the image is cross
origin. This is done by making image loading in nsObjectLoadingContent
follow the document loading path.

We also make sure that we pass the image size back to the embedder
element to not get stuck with the intrinsic size.

To avoid named targeting being able to target these synthetic
documents, as well as showing up in `Window.frames` and being counted
in `Window.length`, we keep a filtered list of non-synthetic browsing
contexts for that use-case.

This feature is controlled by two prefs:

* browser.opaqueResponseBlocking.syntheticBrowsingContext

  This triggers the creation of synthetic documents for images loaded
  in <object> or embed.

* browser.opaqueResponseBlocking.syntheticBrowsingContext.filter

  This turns on the filtering of synthetic browsing contexts in named
  targeting, `Window.length` and `Window.frames`.

Differential Revision: https://phabricator.services.mozilla.com/D148117
2022-08-16 16:42:58 +00:00
Oriol Brufau
604d3ae004 Bug 1782673 - Obey contain-intrinsic-size in iframes. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D153446
2022-08-02 14:11:15 +00:00
Ting-Yu Lin
06ddbd2b65 Bug 1464761 Part 4 - Remove nsReflowStatus::mTruncated bit. r=dholbert
In the description of the mTruncated bit, its purpose is the same as calling
SetInlineLineBreakBeforeAndReset(). We've removed all its usages in previous
patches, so the bit is no longer needed.

Differential Revision: https://phabricator.services.mozilla.com/D151461
2022-07-27 21:55:18 +00:00
Oriol Brufau
58c8eea78c Bug 1780475 - Obey contain-intrinsic-size in ContainSizeAxes. r=emilio
ContainSizeAxes::ContainSize and ContainSizeAxes::ContainIntrinsicSize
were just using 0 for the axes with size containment, now they will take
contain-intrinsic-width and contain-intrinsic-height into account.

The WritingMode parameter is replaced with a nsIFrame from which the
properties are retrieved.

There are various places that aren't currently using these functions, so
the effect of this patch is rather minimal, but some cases of the new
test are now passing.

Differential Revision: https://phabricator.services.mozilla.com/D152355
2022-07-22 14:35:10 +00:00
Miko Mynttinen
45c5c7a493 Bug 1766650 - Store modified frames in display root frame RetainedDisplayListBuilder r=tnikkel
Differential Revision: https://phabricator.services.mozilla.com/D144889
2022-05-30 14:20:58 +00:00
Emilio Cobos Álvarez
46072986c8 Bug 1738380 - Draw backgrounds of iframes with mismatched embedder color schemes. r=jwatt
In the future we might want to (also?) propagate the
prefers-color-scheme on the iframe like we do for the content/chrome
boundary / top browsing contexts, see:

 * https://github.com/w3c/csswg-drafts/issues/4772
 * https://github.com/w3c/csswg-drafts/issues/7213

Differential Revision: https://phabricator.services.mozilla.com/D146162
2022-05-20 15:20:34 +00:00
Razvan Cojocaru
31f93c6a79 Bug 1767121 - Change the type of StackingContextHelper::mScale to MatrixScales. r=botond
Fix a minor typo while at it: "Inherrited" -> "Inherited".

Differential Revision: https://phabricator.services.mozilla.com/D146298
2022-05-19 01:45:52 +00:00
Daniel Holbert
abefdf2317 Bug 1767131: run clang-format on the layout/ directory. r=emilio DONTBUILD
This patch does not impact behavior; it's just formatting changes.

This patch was automatically generated by the following command:
    ./mach clang-format -p layout

Differential Revision: https://phabricator.services.mozilla.com/D145163
2022-04-30 15:25:29 +00:00
Razvan Cojocaru
94c557a449 Bug 1733313 - Change EffectsInfo::mScaleX/Y into a Scale2D and rename to mRasterScale. r=botond
Differential Revision: https://phabricator.services.mozilla.com/D144274
2022-04-26 03:12:38 +00:00
Emilio Cobos Álvarez
e35be8db1a Bug 1765331 - Account for dest rect correctly in nsDisplayRemote painting. r=tnikkel
The in-process code does this here:

  https://searchfox.org/mozilla-central/rev/4b3039b48c3cb67774270ebcc2a7d8624d888092/layout/generic/nsSubDocumentFrame.cpp#729-742

This doesn't do much for regular iframes because they have no meaningful
intrinsic ratio, but this will matter for bug 1595491.

Differential Revision: https://phabricator.services.mozilla.com/D144000
2022-04-20 11:00:58 +00:00
David Shin
fa30ed0b4a Bug 1755565 - Implement contain: inline-size. r=emilio,dholbert
Differential Revision: https://phabricator.services.mozilla.com/D143501
2022-04-19 17:44:16 +00:00
Cosmin Sabou
995c78b892 Backed out changeset 5d53e0ca638d (bug 1765331) for causing reftest assertion failures on APZCTreeManager.cpp. CLOSED TREE 2022-04-19 19:50:18 +03:00
Emilio Cobos Álvarez
4ed96eaf80 Bug 1765331 - Account for dest rect correctly in nsDisplayRemote painting. r=tnikkel
The in-process code does this here:

  https://searchfox.org/mozilla-central/rev/4b3039b48c3cb67774270ebcc2a7d8624d888092/layout/generic/nsSubDocumentFrame.cpp#729-742

This doesn't do much for regular iframes because they have no meaningful
intrinsic ratio, but this will matter for bug 1595491.

Differential Revision: https://phabricator.services.mozilla.com/D144000
2022-04-19 13:46:02 +00:00
Emilio Cobos Álvarez
ca62e4aea2 Bug 1751961 - Account for cross-process paint scale in nsSubDocumentFrame::Paint. r=tnikkel
This is the real fix.

Depends on D142908

Differential Revision: https://phabricator.services.mozilla.com/D142909
2022-04-13 11:32:55 +00:00
Martin Robinson
ca0375e365 Bug 1761995 - Skip content-visibility: hidden content in display lists r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D142341
2022-04-05 09:10:42 +00:00