Commit Graph

518 Commits

Author SHA1 Message Date
Ting-Yu Lin
4212852170 Bug 1686603 Part 2 - Add StyleSizeOverrides parameter to ReflowInput's constructor & co. to override data from style system data. r=dholbert
This patch adds the struct as a parameter to various functions.

The struct is cached in ReflowInput so that we don't need to pass it
down to the internal method where nsIFrame::ComputeSize() is called.

In the subsequent patches, we'll use it to revise the implementation of
flex container's flex base size resolution, and size overrides.

Differential Revision: https://phabricator.services.mozilla.com/D101793
2021-01-26 02:47:40 +00:00
Csoregi Natalia
c578110922 Backed out 8 changesets (bug 1686603) for causing crashtest failures. CLOSED TREE
Backed out changeset 94b5d0986d27 (bug 1686603)
Backed out changeset e7edf6fcc41d (bug 1686603)
Backed out changeset 4c9271f07178 (bug 1686603)
Backed out changeset 7013b95266ae (bug 1686603)
Backed out changeset cf7a55638aef (bug 1686603)
Backed out changeset 7717a0f2a37b (bug 1686603)
Backed out changeset c82593b13a61 (bug 1686603)
Backed out changeset fd1d95a1e706 (bug 1686603)
2021-01-26 04:32:13 +02:00
Ting-Yu Lin
e938d6265e Bug 1686603 Part 2 - Add StyleSizeOverrides parameter to ReflowInput's constructor & co. to override data from style system data. r=dholbert
This patch adds the struct as a parameter to various functions.

The struct is cached in ReflowInput so that we don't need to pass it
down to the internal method where nsIFrame::ComputeSize() is called.

In the subsequent patches, we'll use it to revise the implementation of
flex container's flex base size resolution, and size overrides.

Differential Revision: https://phabricator.services.mozilla.com/D101793
2021-01-25 22:29:31 +00:00
Mats Palmgren
35a8dbdbd9 Bug 1687239 part 2 - Remove plugin support from layout/. r=emilio
Note that there's still a little plugin related code in
widget/ and gfx/ etc after this.  That can be removed
once we remove plugin support from dom/ etc.
The removal from layout/ should be pretty complete though.

Differential Revision: https://phabricator.services.mozilla.com/D102140
2021-01-25 11:53:49 +00:00
Mihai Alexandru Michis
0f4955060c Backed out 7 changesets (bug 1686603) for causing crashtest assertion failures.
CLOSED TREE

Backed out changeset 19cba7d34a7f (bug 1686603)
Backed out changeset 3a0d0155ea5e (bug 1686603)
Backed out changeset f1f672cdd0c6 (bug 1686603)
Backed out changeset 63020922e2fd (bug 1686603)
Backed out changeset 8766ce79ba5e (bug 1686603)
Backed out changeset 965dbe8de1e1 (bug 1686603)
Backed out changeset b1328ee45f43 (bug 1686603)
2021-01-21 09:21:12 +02:00
Ting-Yu Lin
f8c6caafee Bug 1686603 Part 2 - Add StyleSizeOverrides parameter to ReflowInput's constructor & co. to override data from style system data. r=dholbert
This patch adds the struct as a parameter to various functions.

The struct is cached in ReflowInput so that we don't need to pass it
down to the internal method where nsIFrame::ComputeSize() is called.

In the subsequent patches, we'll use it to revise the implementation of
flex container's flex base size resolution, and size overrides.

Differential Revision: https://phabricator.services.mozilla.com/D101793
2021-01-21 04:17:59 +00:00
Hiroyuki Ikezoe
0561259a69 Bug 1682200 - Apply the top level resolution for iframes in the same process of the top level document. r=botond
Differential Revision: https://phabricator.services.mozilla.com/D100280
2021-01-11 23:52:09 +00:00
Hiroyuki Ikezoe
38a499c778 Bug 1682197 - Scale the offset to remote iframe in nsDisplayRemote::BuildLayer. r=mattwoodrow
When the iframe is inside a scaled container, the offset to the reference frame
needs to be scaled.

This change fixes both a rendering issue (bug 1682197) and a hit-testing issue
(bug 1682200) altogether for non WebRender.

Differential Revision: https://phabricator.services.mozilla.com/D100218
2021-01-11 23:52:09 +00:00
Cameron McCormack
5b77a97340 Bug 1668106 - Store subdocument intrinsic size and ratio on content rather than frame. r=dholbert
This avoids a problem where we receive the IPC message from the child
with updated intrinsics before an <embed> or <object> has had its frame
constructed in the parent, and drop the update.

Differential Revision: https://phabricator.services.mozilla.com/D99304
2020-12-10 21:34:38 +00:00
Emilio Cobos Álvarez
2697d7f4e6 Bug 1676188 - Send position/size updates to remote print documents at paint time. r=mattwoodrow
As there's no incremental reflow for non-print documents, we can't rely
on FinishReflow getting called.

Not ultra-pretty, better ideas welcome.

Differential Revision: https://phabricator.services.mozilla.com/D96790
2020-11-12 03:31:07 +00:00
Ting-Yu Lin
e49625f040 Bug 1675852 Part 2 - Define extra fallback intrinsic sizes in app units. r=emilio
CSSPixel::ToAppUnits() requires computation at runtime. Since most of
the layout computations require `nscoord`, this patch defines extra
intrinsic sizes in app units.

Differential Revision: https://phabricator.services.mozilla.com/D96258
2020-11-09 20:31:57 +00:00
Ting-Yu Lin
5d700958b5 Bug 1674931 Part 5 - Remove zero-argument ReflowInput::ComputedSizeWithBorderPadding(). r=jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D95665
2020-11-03 20:07:18 +00:00
Ting-Yu Lin
fba3337e6a Bug 1674863 Part 2 - Use strong types to define fallback intrinsic width, height, and size. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D95578
2020-11-03 19:54:44 +00:00
Ting-Yu Lin
75199f4507 Bug 1660122 Part 7 - Implement GetAspectRatio(). r=emilio
This patch moves the preferred aspect-ratio calculation from each
replaced elements' GetIntrinicRatio() into GetAspectRatio(), because
they share the same logic.

For nsImageFrame, the cached mIntrinsicRatio now stores only the image's
intrinsic ratio, not considering the aspect-ratio property.

This patch fixed "object-fit:contain" for canvas, image because
GetIntrinicRatio() no longer considers aspect-ratio. This also fixed
replaced elements' size when both "aspect-ratio:<ratio>" and
"contain:size" is specified.

This also makes us pass some of the aspect-ratio tests because we change
GetIntrinicRatio() into GetAspectRatio() in
nsLayoutUtils::IntrinsicForAxis() in Part5, which is used by nsBlockFrame
(via nsLayoutUtils::IntrinsicForContainer) to implement GetMinISize().

Differential Revision: https://phabricator.services.mozilla.com/D91229
2020-09-29 22:33:05 +00:00
Ting-Yu Lin
41e2882093 Bug 1660122 Part 5 - Add nsIFrame::GetAspectRatio() skeleton, and adapt existing callers. r=emilio
For now, GetAspectRatio() is just an alias for GetIntrinicRatio(). In
Part 7, we're going to have GetAspectRatio() consider aspect-ratio
property so that each replaced elements only need to report their
intrinsic ratio via GetIntrinicRatio(). Non-replaced element can also
call GetAspectRatio() to get the ratio suitable to calculate layout
size.

As of this patch, all the replaced elements'
GetIntrinsicRatio() (including nsImageFrame::mIntrinsicRatio) consider
aspect-ratio properties (added in bug 1639963). This is wrong, because
it affects replaced element's content ratio. So we adapt only callers
[1] involving the computation of the frame's external sizes to retain
the behavior after Part 7.

This change shouldn't change behavior.

[1] Exceptions include 1) a caller in nsIFrame::ComputeSize() checking
the frame has no intrinsic ratio; 2) other frame classes implementing
nsIFrame::GetIntrinsicRatio() by calling their parent's
GetIntrinicRatio(). nsSubDocumentFrame::GetIntrinicRatio() is an
example.

Differential Revision: https://phabricator.services.mozilla.com/D91227
2020-09-29 22:32:50 +00:00
Ting-Yu Lin
fdb20bee5c Bug 1660122 Part 3 - Make nsIFrame::GetIntrinsicRatio() a const method. r=boris
Differential Revision: https://phabricator.services.mozilla.com/D91225
2020-09-29 22:32:40 +00:00
Ting-Yu Lin
ee5c720efd Bug 1660122 Part 2 - Mark more methods in nsHTMLCanvasFrame and nsSubDocumentFrame 'const'. r=boris
Differential Revision: https://phabricator.services.mozilla.com/D91224
2020-09-29 22:32:33 +00:00
Emilio Cobos Álvarez
cb233b8098 Bug 1557645 - Clone OOP iframes in the right process. r=nika
This works, though probably we want to do some follow-up tweaks, like
the adding of the onload blocker and so on, so that we can avoid the
UpdateDimensions hack.

We may also want a PrintObject in the nsPrintJob tree, perhaps...

Differential Revision: https://phabricator.services.mozilla.com/D90310
2020-09-22 09:57:27 +00:00
Cameron McCormack
3d926b97e1 Bug 1658343 - Propagate intrinsic sizes from SVG documents in embed/object to parent using IPC. r=kmag,dholbert
Differential Revision: https://phabricator.services.mozilla.com/D90055
2020-09-21 02:09:57 +00:00
Ting-Yu Lin
6fa8436245 Bug 1168478 Part 2 - Combine the border and padding arguments for nsIFrame::ComputeSize(). r=dholbert
Also combine the border and padding arguments for
nsContainerFrame::ComputeSizeWithIntrinsicDimensions(), too. This method
is used as a helper to implement ComputeSize() for various replaced
elements. Its callers are all within nsIFrame's derived classes'
overridden methods, so I'm not bothering to convert them in a separate
patch.

This change shouldn't change behavior.

Differential Revision: https://phabricator.services.mozilla.com/D90064
2020-09-14 20:42:22 +00:00
Ting-Yu Lin
7a4abb32a3 Bug 1168478 Part 1 - Combine the border and padding argument for nsIFrame::ComputeAutoSize(). r=dholbert
Also, revise the nsIFrame::ComputeAutoSize()'s documentation.

This change shouldn't change behavior.

Differential Revision: https://phabricator.services.mozilla.com/D90063
2020-09-14 20:39:17 +00:00
Boris Chiou
dc9a75f0f8 Bug 1639963 - Support aspect-ratio for svg object and iframe (i.e. nsSubDocumentFrame). r=emilio
When <object> targets to a svg image, we use nsSubDocumentFrame. The
intrinsic ratio should be overridden by aspect-ratio while computing
its size on this frame.

This update in nsSubDocumentFrame also works in iframe.

Differential Revision: https://phabricator.services.mozilla.com/D79362
2020-08-17 07:07:38 +00:00
Boris Chiou
bdcea722ae Bug 1639963 - Define the default size for replaced elements. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D81006
2020-08-17 07:10:39 +00:00
Boris Chiou
05c0dadd44 Bug 1639963 - Update the API of nsIFrame::ComputeSize for aspect-ratio. r=emilio
In order to apply Automatic content-based minimum sizes, we have to know
the content size on the block axis. We cannot get the content size until
we finish the reflow of the child frames. So we have to keep a flag
which indicates the size of the ratio-dependent axis is overrideen by
aspect-ratio in ReflowInput.

We will set the correct return value in the next patch, For now, we
always return AspectRatioUsage::None.

Differential Revision: https://phabricator.services.mozilla.com/D79335
2020-08-17 06:57:56 +00:00
Emilio Cobos Álvarez
bf3e5da2a7 Bug 1656081 - Cleanup iframe sizing so that it does the same as every other replaced element. r=boris
Differential Revision: https://phabricator.services.mozilla.com/D85386
2020-08-16 18:45:39 +00:00
Glenn Watson
ae75e4c3b2 Bug 1655376 - Fix early rounding of iframe origin for WR. r=kats,aosmond
WR handles snapping of primitives and clips, and prefers the input
data to be exact floats. This fixes an inconsistency between the
clip and bounds of iframes in WR when there is a fractional
device-pixel ratio set.

Differential Revision: https://phabricator.services.mozilla.com/D85219
2020-07-29 13:09:53 +00:00
Kagami Sascha Rosylight
93741338a8 Bug 1630704 - Part 27: Remove nsFrame from inheritance chain r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D81864
2020-07-06 22:29:42 +00:00
Simon Giesecke
a69d79b6db Bug 1648010 - Replace uses of NS_LITERAL_STRING/NS_LITERAL_CSTRING macros by _ns literals. r=geckoview-reviewers,jgilbert,agi,hsivonen,froydnj
Differential Revision: https://phabricator.services.mozilla.com/D80860
2020-07-01 08:29:29 +00:00
Kagami Sascha Rosylight
feacae630a Bug 1647525 - Use HasAnyStateBits() in nsSubDocumentFrame r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D81208
2020-06-27 13:17:36 +00:00
Kartikaya Gupta
fe51eee117 Bug 1641246 - Remove nsDisplayResolution. r=botond
Differential Revision: https://phabricator.services.mozilla.com/D77111
2020-05-27 22:17:09 +00:00
Nika Layzell
6940e0c427 Bug 1637088 - Delay creating BrowserBridgeChild until after new PBrowser has been created, r=farre,emilio
Differential Revision: https://phabricator.services.mozilla.com/D75614
2020-05-25 06:06:30 +00:00
Ting-Yu Lin
1bcc656a6a Bug 1638928 Part 2 - Rename nsIFrame's GetChildLists() to ChildLists(). r=mats
This patch is generated by using my editor's rename functionality.

In the next patch, `nsIFrame::` prefix is going to be removed manually
from all the ChildLists() calls.

Differential Revision: https://phabricator.services.mozilla.com/D75893
2020-05-19 12:37:37 +00:00
Ting-Yu Lin
8732dad5c0 Bug 1635319 Part 1 - Add nsIFrame::GetChildLists(), and use range-based for loops instead of ChildListIterator in layout/generic/. r=mats
Differential Revision: https://phabricator.services.mozilla.com/D75652
2020-05-18 01:09:34 +00:00
Kartikaya Gupta
f0311ae4f5 Bug 1622360 - Remove render root parameter to CreateOrRecycleWebRenderUserData. r=jrmuizel
Depends on D74948

Differential Revision: https://phabricator.services.mozilla.com/D74949
2020-05-15 00:04:08 +00:00
Miko Mynttinen
5a681b46bd Bug 1554499 - Part 12: Remove index from nsDisplayOwnLayer r=mattwoodrow
Differential Revision: https://phabricator.services.mozilla.com/D74091
2020-05-11 16:58:26 +00:00
Botond Ballo
ba5c0d6ae5 Bug 1556556 - Remove many uses of IgnoreRootScrollFrame. r=mstange,geckoview-reviewers,agi
Differential Revision: https://phabricator.services.mozilla.com/D68913
2020-05-05 19:23:35 +00:00
Daniel Varga
aa27d10c14 Backed out changeset a8ca75f3002d (bug 1633985) on request by dev 2020-04-30 01:58:25 +03:00
Glenn Watson
6af1be5a6c Bug 1633985 - Remove unused clip parent and backface flag from push_iframe r=kats,nical
Differential Revision: https://phabricator.services.mozilla.com/D73006
2020-04-29 21:54:14 +00:00
Dorel Luca
cbb52654f5 Backed out changeset 0a9371673354 (bug 1633985) for Webrender bustages. CLOSED TREE 2020-04-30 00:03:23 +03:00
Glenn Watson
f1b75091c8 Bug 1633985 - Remove unused clip parent and backface flag from push_iframe r=kats,nical
Differential Revision: https://phabricator.services.mozilla.com/D73006
2020-04-29 17:14:50 +00:00
Csoregi Natalia
bdf8849001 Backed out 30 changesets (bug 1556556, bug 1631568) for multiple mochitest failures. CLOSED TREE
Backed out changeset edd529f7a9c5 (bug 1631568)
Backed out changeset 1cc0881e244b (bug 1631568)
Backed out changeset ed3c1e85d5e3 (bug 1556556)
Backed out changeset 38ffc6215bbf (bug 1556556)
Backed out changeset 03c2c25d8023 (bug 1556556)
Backed out changeset 9c717eb067b8 (bug 1556556)
Backed out changeset 98e26bc98b85 (bug 1556556)
Backed out changeset 05a6a581e755 (bug 1556556)
Backed out changeset 867946cf05bb (bug 1556556)
Backed out changeset 20d72a334530 (bug 1556556)
Backed out changeset 2c62e61d9054 (bug 1556556)
Backed out changeset 62a223d057d2 (bug 1556556)
Backed out changeset 2c5d55a1f0b1 (bug 1556556)
Backed out changeset 700447945b4e (bug 1556556)
Backed out changeset 93190ae4f5ff (bug 1556556)
Backed out changeset a7bd34d961bb (bug 1556556)
Backed out changeset fccd1d3c7189 (bug 1556556)
Backed out changeset 24056e47183d (bug 1556556)
Backed out changeset 204881474cc1 (bug 1556556)
Backed out changeset 387320881876 (bug 1556556)
Backed out changeset be8f5eb58460 (bug 1556556)
Backed out changeset 629c58a9166b (bug 1556556)
Backed out changeset 4312b2b5dda8 (bug 1556556)
Backed out changeset d11dbf6403a5 (bug 1556556)
Backed out changeset 95c54c023779 (bug 1556556)
Backed out changeset 80fcb7e71188 (bug 1556556)
Backed out changeset d75a4ecb0d47 (bug 1556556)
Backed out changeset 903c4de34e7a (bug 1556556)
Backed out changeset f15334a3e803 (bug 1556556)
Backed out changeset 9553e99137ea (bug 1556556)
2020-04-28 12:43:11 +03:00
Botond Ballo
5090bbfb8c Bug 1556556 - Remove many uses of IgnoreRootScrollFrame. r=mstange
Differential Revision: https://phabricator.services.mozilla.com/D68913
2020-04-28 02:25:51 +00:00
Ting-Yu Lin
7cabd86cc4 Bug 1627398 Part 1 - Convert nsIFrame::List flags to EnumSet. r=heycam
Differential Revision: https://phabricator.services.mozilla.com/D69914
2020-04-08 00:22:19 +00:00
Emilio Cobos Álvarez
66ff09f01e Bug 1624829 - Use FunctionRef for various Enumerate* callbacks. r=edgar
This avoids a bunch of ugly casts and void pointers, without much overhead
(unlike std::function or such).

Differential Revision: https://phabricator.services.mozilla.com/D68182
2020-03-26 12:44:47 +00:00
Timothy Nikkel
d21ebd70f2 Bug 1582653. Need to clear any associated display items of a nsSubDocumentFrame when the frame loader changes. r=mattwoodrow
parser/htmlparser/tests/crashtests/515533-1.html most cleanly creates this crash if you repeat it many times.

It contains an iframe to a local file (so it's a same process iframe). The document in the iframe has an inline script that does

  window.location.replace("data:text/plain,");

since crashtests have the pref browser.tabs.remote.dataUriInDefaultWebProcess set (to get more testing of fission) this makes the iframe now in a different process from it's parent.

When the bug happens we create the retained nsDisplaySubDocument before the process change, the document inside the iframe has a presshell, and importantly, it does not yet have a root frame. Then the remoteness change happens on the iframe, ResetFrameLoader is called on the nsSubDocumentFrame to remove the old frame loader. So now the nsSubDocumentFrame can't find a presshell (either via views or the frameloader).

The reason that the document in the iframe not having a root frame when the nsDisplaySubDocument is created is important is because if we had a root frame then the root frame would be the mFrame of the nsDisplaySubDocument and when the root frame got destroyed for the remoteness change that frame destruction would make sure that the nsDisplaySubDocument cannot be re-used. The nsSubDocumentFrame sticks around though, so the nsDisplaySubDocument doesn't think anything changed.

Differential Revision: https://phabricator.services.mozilla.com/D65888
2020-03-08 22:17:27 +00:00
Timothy Nikkel
85a3693a74 Bug 1614233. Properly clip nsDisplayRemote. r=mattwoodrow
The existing code just clipped to a rect. We need to do the same clipping that the non-remote code path does which also handles border radius.

The existing code is the from initial implementation of nsDisplayRemote in https://hg.mozilla.org/mozilla-central/rev/85d06279c8358a8e1c883aa670a20212b1039a90 so I suspect that clipping to the inner view bounds instead of the frame content box is not an important difference.

Differential Revision: https://phabricator.services.mozilla.com/D62180
2020-02-13 07:17:43 +00:00
Csoregi Natalia
d7c57b8a1f Backed out changeset 4cfe2ced3cce (bug 1614233) for reftest failures on border-radius/iframe-1-ref.html. CLOSED TREE 2020-02-13 09:05:53 +02:00
Timothy Nikkel
b117797b86 Bug 1614233. Properly clip nsDisplayRemote. r=mattwoodrow
The existing code just clipped to a rect. We need to do the same clipping that the non-remote code path does which also handles border radius.

The existing code is the from initial implementation of nsDisplayRemote in https://hg.mozilla.org/mozilla-central/rev/85d06279c8358a8e1c883aa670a20212b1039a90 so I suspect that clipping to the inner view bounds instead of the frame content box is not an important difference.

Differential Revision: https://phabricator.services.mozilla.com/D62180
2020-02-11 19:00:59 +00:00
Hiroyuki Ikezoe
bed81e5ef4 Bug 1599795 - Change the remote document rect to size in gfx. r=emilio
What we really needed in the first place was the size not the rect.

Differential Revision: https://phabricator.services.mozilla.com/D62215
2020-02-11 03:57:14 +00:00
Timothy Nikkel
828c4ff402 Bug 1609837. Fix content rect offsets in nsDisplayRemote. r=mattwoodrow
There are two distinct fixes in this patch.

1) Fix the rect we pass to EffectsInfo for both webrender and non-webrender case. The rect needs to be in coordinates of the subdocument but it was including the border/padding of the containing iframe. I also intersected it with the content rect so it doesn't extend outside of the subdocument, this doesn't fix anything AFAIK. I didn't track what caused this, it was likely in the first iteration of this code.

2) For webrender we double included the content rect offset in the rect we passed to PushIFrame because GetContentRectLayerOffset already includes that offset. This part is a regression from bug 1406715.

Differential Revision: https://phabricator.services.mozilla.com/D60208
2020-01-17 07:53:52 +00:00