Commit Graph

118 Commits

Author SHA1 Message Date
Hiroyuki Ikezoe
aa7268d6c1 Bug 1700245 - Replace IsAncestorFrameCrossDoc with IsAncestorFrameCrossDocInProcess in DOMIntersectionObserver::Update. r=emilio
Our IntersectionObserver has been working in OOP iframe since bug 1599795.

Differential Revision: https://phabricator.services.mozilla.com/D117500
2021-06-13 22:02:22 +00:00
Emilio Cobos Álvarez
b7f648be74 Bug 1709577 - Check list of available images before deciding to defer a lazy load. r=edgar
As per https://html.spec.whatwg.org/#updating-the-image-data step 6.

Differential Revision: https://phabricator.services.mozilla.com/D114353
2021-05-07 13:56:33 +00:00
Dorel Luca
3eacfad31f Backed out 2 changesets (bug 1709577) for WPT Failures in /html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url.html. CLOSED TREE
Backed out changeset ceed6d7fca1c (bug 1709577)
Backed out changeset bb44c14b754f (bug 1709577)
2021-05-07 16:46:48 +03:00
Emilio Cobos Álvarez
6302e3acc0 Bug 1709577 - Check list of available images before deciding to defer a lazy load. r=edgar
As per https://html.spec.whatwg.org/#updating-the-image-data step 6.

Differential Revision: https://phabricator.services.mozilla.com/D114353
2021-05-07 11:44:15 +00:00
Sandor Molnar
c7dc20560e Backed out 2 changesets (bug 1709577) for causing wpt failures. CLOSED TREE
Backed out changeset 0da1dba1749c (bug 1709577)
Backed out changeset bab974107b3b (bug 1709577)
2021-05-07 05:34:43 +03:00
Emilio Cobos Álvarez
62bc311075 Bug 1709577 - Check list of available images before deciding to defer a lazy load. r=edgar
As per https://html.spec.whatwg.org/#updating-the-image-data step 6.

Differential Revision: https://phabricator.services.mozilla.com/D114353
2021-05-07 00:11:06 +00:00
Edgar Chen
1bb16b15ba Bug 1709200 - Rename nsContentUtils::GetRootDocument to GetInProcessSubtreeRootDocument; r=kmag
Differential Revision: https://phabricator.services.mozilla.com/D114177
2021-05-05 09:42:20 +00:00
Daniel Holbert
e49e7b9ab2 Bug 1699853: Use "InProcess" version of GetCrossDocParentFrame() in DOMIntersectionObserver.cpp. r=emilio
This patch doesn't change behavior; it's just switching us between two
functions that do the same thing. (One is literally a trivial wrapper for the
other.)

We're using the new "InProcess" version of this API as a way of annotating
callsites that have been vetted as behaving properly in out-of-process iframes.

These two callsites in DOMIntersectionObserver.cpp are part of an algorithm
that was already modernized to work with fission in bug 1599795.  In a
fission-enabled scenario: when we end up with null `containerFrame` due to
hitting an oop-iframe boundary, we should end up handling things properly via
our subsequent application of the passed-in `aRemoteDocumentVisibleRect` arg.

Differential Revision: https://phabricator.services.mozilla.com/D109169
2021-03-19 23:58:30 +00:00
Emilio Cobos Álvarez
49bdf16db5 Bug 941356 - Fix start offset of transformed drag images. r=botond
I'm not sure whether we should deal with ancestor scales and such. There
seemed to be a discussion about that in D77436 but dealing with
partially-3d-transformed content sounds like a massive pain. For now
this fixes the start point, which is a progression.

Differential Revision: https://phabricator.services.mozilla.com/D106896
2021-03-04 10:56:22 +00:00
Emilio Cobos Álvarez
28b6ccc4e5 Bug 1682915 - Deal with root == target in intersection observer code. r=dholbert
The "compute the intersection" algorithm could deal with this case
easily (right now it doesn't), but the spec doesn't, so let's match the
spec and Safari lacking a compelling use case for this.

Chrome doesn't send a notification in this case, which is definitely
wrong.

Differential Revision: https://phabricator.services.mozilla.com/D104386
2021-02-11 14:08:06 +00:00
Sean Feng
461677cdfb Bug 1687358 - Implement telemetry probes to determine the best possible threshold for <lazyload> r=emilio
This patch implements five telemetry probes to help us learn how
lazyload thresholds perform in the wild.

Differential Revision: https://phabricator.services.mozilla.com/D102845
2021-01-29 17:03:25 +00:00
Bogdan Tara
cea3638c90 Backed out changeset a77ccd1c1659 (bug 1687358) for browser_lazyload_telemetry.js failures CLOSED TREE 2021-01-27 02:46:06 +02:00
Sean Feng
2b4f1850d6 Bug 1687358 - Implement telemetry probes to determine the best possible threshold for <lazyload> r=emilio
This patch implements five telemetry probes to help us learn how
lazyload thresholds perform in the wild.

Differential Revision: https://phabricator.services.mozilla.com/D102845
2021-01-26 21:54:33 +00:00
Emilio Cobos Álvarez
4b14f559c4 Bug 1686386 - Make DOMIntersectionObserver check docgroup rather than principal base domain. r=mstange
This is similar effectively, and should be more correct and faster, as per:

  https://github.com/w3c/IntersectionObserver/issues/161#issuecomment-492539452

Differential Revision: https://phabricator.services.mozilla.com/D101636
2021-01-14 14:31:46 +00:00
Emilio Cobos Álvarez
fe2b95e111 Bug 1682003 - Avoid UTF-8 -> UTF-16 conversion during CSSOM serialization. r=heycam
This lifts a bunch of string conversions higher up the stack, but allows
us to make the servo code use utf-8 unconditionally, and seemed faster
in my benchmarking (see comment 0).

It should also make a bunch of attribute setters faster too (like
setting .cssText), now that we use UTF8String for them (we couldn't
because we couldn't specify different string types for the getter and
setters).

Differential Revision: https://phabricator.services.mozilla.com/D99590
2020-12-17 14:04:35 +00:00
Simon Giesecke
eae3689379 Bug 1673931 - Avoid including Document.h from header files. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D95046

Depends on D95045
2020-11-23 16:07:43 +00:00
Simon Giesecke
46908cfb51 Bug 1660470 - Add missing include directives/forward declarations. r=nika
Differential Revision: https://phabricator.services.mozilla.com/D87865
2020-11-23 16:21:38 +00:00
Sylvestre Ledru
68b806d604 Bug 1674637 - Use nested namespaces in dom/ r=sg,andi
Also add some missing namespace qualifications

Done with:
./mach static-analysis check --checks="-*,modernize-concat-nested-namespaces" --fix dom/
./mach clang-format -p $(hg status dom/|grep ^M|awk '{print $2}')

Differential Revision: https://phabricator.services.mozilla.com/D95456
2020-11-04 17:04:01 +00:00
Butkovits Atila
a6e7dcc53f Backed out changeset c0adbf7522dc (bug 1674637) for bustage on GMPParent.cpp. CLOSED TREE 2020-11-04 10:54:36 +02:00
Sylvestre Ledru
8f709b39e8 Bug 1674637 - Use nested namespaces in dom/ r=sg,andi
Also add some missing namespace qualifications

Done with:
./mach static-analysis check --checks="-*,modernize-concat-nested-namespaces" --fix dom/
./mach clang-format -p $(hg status dom/|grep ^M|awk '{print $2}')

Differential Revision: https://phabricator.services.mozilla.com/D95456
2020-11-04 08:29:00 +00:00
Emilio Cobos Álvarez
3bd76fc16f Bug 1670327 - Fix more IntersectionObserver issues. r=hiro
Two spec issues here.

https://github.com/w3c/IntersectionObserver/issues/457: I think this is
just a spec bug and I've made us match other browsers, but since the
tests don't match the spec for now I've added them as .tentative.html

https://github.com/w3c/IntersectionObserver/issues/456: I've aligned
with WebKit here. There was a (disabled) test for this which tests
chrome behavior and which after this patch shouldn't be flaky. This is
what was causing the assertion.

Differential Revision: https://phabricator.services.mozilla.com/D93166
2020-10-12 10:58:35 +00:00
Mihai Alexandru Michis
6683297ddc Backed out changeset a083e04138aa (bug 1670327) for causing wpt failures in intersection-observer/root-margin.html
CLOSED TREE
2020-10-12 13:35:28 +03:00
Emilio Cobos Álvarez
f565092b39 Bug 1670327 - Fix more IntersectionObserver issues. r=hiro
Two spec issues here.

https://github.com/w3c/IntersectionObserver/issues/457: I think this is
just a spec bug and I've made us match other browsers, but since the
tests don't match the spec for now I've added them as .tentative.html

https://github.com/w3c/IntersectionObserver/issues/456: I've aligned
with WebKit here. There was a (disabled) test for this which tests
chrome behavior and which after this patch shouldn't be flaky. This is
what was causing the assertion.

Differential Revision: https://phabricator.services.mozilla.com/D93166
2020-10-12 09:52:22 +00:00
Emilio Cobos Álvarez
869f3bcf09 Bug 1668784 - Return empty oop iframe metrics rather than no metrics for OOP iframes that we still haven't positioned and such. r=hiro
This is the right thing to do. If the compositor still hasn't sent
BrowserChild its visible position, then we should just be
non-intersecting, not carry on with the root document state.

Fix the test to not be racy, as the layout / positioning of the iframe
is async with Fission / Chromium site isolation enabled.

Differential Revision: https://phabricator.services.mozilla.com/D92240
2020-10-02 21:30:37 +00:00
Emilio Cobos Álvarez
56cd679ea1 Bug 1668156 - Fix some IntersectionObserver edge cases, and enable the assertion for good. r=hiro
This patch fixes two issues, described below:

First, the GetTopLevelDocument function was looking at the browsing
context tree. It should look at the window context tree, as looking at
the browsing context tree means that if you're in a discarded or
about-to-get-discarded document, you can end up with a document from a
different tree. Computing intersections between those of course makes no
sense and triggers the assertion we're enabling.

Second, this patch fixes an issue when you have fission enabled, and a
setup such as:

  A1 -> B1 -> A2

If you try to use IntersectionObserver from A2 with the implicit root,
we'd end up with:

  * rootRect: A1's root scrollport rect (this is fine, because it's only
              used to compute the root margin and bounds and so on, not
              to compute geometry).

  * rootFrame: A1's root scroll frame (this is _not_ fine, see below).

Then, we'd try to map rects from A2's target to A1's viewport, and we
can't really do that sensibly with the existing nsLayoutUtils functions,
because we're not accounting for all the OOP iframe transforms that may
be going on. This also triggers the assertion that this patch enables in
same-origin-grand-child-iframe.sub.html.

To fix it, for the A2 case, use the same code that we have for other OOP
iframes. The test tweaks fails with fission enabled without the patch
(because we don't account for the OOP iframe clip).

Differential Revision: https://phabricator.services.mozilla.com/D92089
2020-10-01 22:41:55 +00:00
Simon Giesecke
1f29cc4393 Bug 1656117 - Reduce include dependencies on nsRefreshDriver.h. r=mstange
The abstract observer base classes are moved to a separate header file
nsRefreshObservers.h and the includes are adjusted accordingly.

Some method implementations are moved to the corresponding implementation files
to avoid the need to include the nsRefreshDriver.h file in the header.

Differential Revision: https://phabricator.services.mozilla.com/D85764
2020-08-04 21:17:50 +00:00
Simon Giesecke
1fbb2b245e Bug 1654992 - Use std::move instead of SwapElements where possible. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D84807
2020-08-04 11:27:07 +00:00
Noemi Erli
c5adcfe981 Backed out 4 changesets (bug 1654992, bug 1654991) for causing timeous in mask-opacity-1e.html
Backed out changeset 11f0f54c6e0a (bug 1654992)
Backed out changeset a353dd5b3f08 (bug 1654991)
Backed out changeset 6a7964ba549f (bug 1654991)
Backed out changeset cf3bfb91d98c (bug 1654991)
2020-08-03 22:09:36 +03:00
Simon Giesecke
9d2e516112 Bug 1654992 - Use std::move instead of SwapElements where possible. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D84807
2020-08-03 14:54:18 +00:00
Emilio Cobos Álvarez
49454b63d9 Bug 1581876 - Fix IntersectionObserver's rect to include all continuations. r=mstange
This does the same thing that getBoundingClientRect() does, which is
what the spec asks for, and thus fixes the intersection ratio for split
inlines where the first continuation is empty for example.

Differential Revision: https://phabricator.services.mozilla.com/D85385
2020-07-30 19:43:35 +00:00
Sylvestre Ledru
f3721408bf Bug 1519636 - Reformat recent changes to the Google coding style r=necko-reviewers,dragana
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D77580
2020-05-30 09:55:27 +00:00
Emilio Cobos Álvarez
75e63e3a1d Bug 1611204 - Fix IntersectionObserverEntry.isIntersecting to match other browsers. r=mstange
Note that no browser matches the spec (see
https://github.com/w3c/IntersectionObserver/issues/432), but that our
behavior is reasonably close to them. So do this to match them.

Differential Revision: https://phabricator.services.mozilla.com/D76603
2020-05-28 10:38:51 +00:00
Razvan Maries
ca375ca64e Backed out changeset 0dba60796753 (bug 1611204) for perma failures on isIntersecting-threshold.html. CLOSED TREE 2020-05-28 05:33:20 +03:00
Emilio Cobos Álvarez
cb0186d469 Bug 1611204 - Fix IntersectionObserverEntry.isIntersecting to match other browsers. r=mstange
Note that no browser matches the spec (see
https://github.com/w3c/IntersectionObserver/issues/432), but that our
behavior is reasonably close to them. So do this to match them.

Differential Revision: https://phabricator.services.mozilla.com/D76603
2020-05-28 01:10:35 +00:00
Hiroyuki Ikezoe
0fefab91f1 Bug 1635941 - Drop debug printf. r=boris
Differential Revision: https://phabricator.services.mozilla.com/D74141
2020-05-06 21:21:46 +00:00
Hiroyuki Ikezoe
8d9bbe8251 Bug 1634943 - Move animation related stuff in nsDisplayList.cpp into AnimationInfo class. r=boris
Depends on D73573

Differential Revision: https://phabricator.services.mozilla.com/D73574
2020-05-06 01:42:05 +00:00
Simon Giesecke
5ab46b5ad0 Bug 1626570 - Improve handling of copying arrays in dom/base/. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D73625
2020-05-05 10:08:02 +00:00
Boris Zbarsky
e62a6fc4d1 Bug 1619112 part 2. Pass char literals instead of char16_t literals into ErrorResult throwing methods. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D65538
2020-03-06 21:04:58 +00:00
Hiroyuki Ikezoe
d4804588e1 Bug 1619857 - Early return from GetOopIframeMetrics in cases where either the presshell or the docshell is being destroyed. r=emilio
I gave up writing crash tests for this since it's quite hard to destroy
an OOP iframe during processing IntersectionObserver's update step in the
OOP process.

Differential Revision: https://phabricator.services.mozilla.com/D65417
2020-03-05 01:56:48 +00:00
Emilio Cobos Álvarez
fd4fe8e21c Bug 1619858 - Minimal cleanup of the image lazy loading code. r=hiro
We don't really need to wait till we have an inner window, really.

The mOwner is only used to create a reflector, and we don't even want to expose
this observer to script, so we could leave it null if we wanted.

Differential Revision: https://phabricator.services.mozilla.com/D65369
2020-03-04 21:34:20 +00:00
Boris Zbarsky
8031cbb2e6 Bug 1617972. Add a table that stores the exception type of DOM errors. r=peterv
The callsite in DOMIntersectionObserver did end up throwing a RangeError, as the
spec requires, because in the end we just used the exception code to determine
the kind of exception to throw, but was misleading about what it was doing.

Differential Revision: https://phabricator.services.mozilla.com/D64175
2020-03-03 15:47:22 +00:00
Frederic Wang
1b1386bd54 Bug 1617154 - [intersection-observer] Accept a Document as an explicit root. r=emilio,bzbarsky
This patch allows users to specify a Document as an explicit root of an
intersection observer. For rationale, see the intent-to thread:
https://groups.google.com/forum/#!topic/mozilla.dev.platform/64nDLTAZGzY

It is implemented under a preference option enabled in Nightly:
dom.IntersectionObserverExplicitDocumentRoot.enabled
When disabled, the current TypeError exception is preserved so that
people can continue to feature detect the support.

The enhancement is tested by and enabled for the following test:
https://w3c-test.org/intersection-observer/document-scrolling-element-root.html

Differential Revision: https://phabricator.services.mozilla.com/D63766
2020-03-03 12:25:30 +00:00
Emilio Cobos Álvarez
33ce56e731 Bug 1618601 - Make lazy-load margin configurable. r=hiro
But keep it being zero by default.

Depends on D64611

Differential Revision: https://phabricator.services.mozilla.com/D64612
2020-02-27 21:14:43 +00:00
Emilio Cobos Álvarez
81f5747d96 Bug 1615609 - Rename nsRefreshDriver::IntersectionObservationAdded. r=hiro
The existing name is wrong since recently.

Differential Revision: https://phabricator.services.mozilla.com/D62922
2020-02-15 07:23:51 +00:00
Mihai Alexandru Michis
3e074d5ae0 Backed out changeset 93c88e36d8ea (bug 1615609) for causing bustages in DOMIntersectionObserver.cpp
CLOSED TREE
2020-02-15 03:17:43 +02:00
Emilio Cobos Álvarez
7ee6dc8ce3 Bug 1615609 - Rename nsRefreshDriver::IntersectionObservationAdded. r=hiro
The existing name is wrong since recently.

Differential Revision: https://phabricator.services.mozilla.com/D62922
2020-02-14 21:16:06 +00:00
Hiroyuki Ikezoe
c2209fbab7 Bug 1542784 - Implement lazy loading for images. r=emilio,hsivonen
Though with this initial implementation, we do create an IntersectionObserver
only for the root document in each processes, once we found issues on this
model, we can create an IntersectionObserver in each _document_.

Depends on D61437

Differential Revision: https://phabricator.services.mozilla.com/D61438
2020-02-12 21:31:48 +00:00
Hiroyuki Ikezoe
4340942236 Bug 1542784 - Make DOMIntersectionObserver::mCallback Variant. r=emilio,bzbarsky
So that it can accept a callback function implemented in C++ for lazy-loading.

Depends on D61435

Differential Revision: https://phabricator.services.mozilla.com/D61436
2020-02-12 21:29:19 +00:00
Hiroyuki Ikezoe
b03d8571d6 Bug 1599795 - Make IntersectionObserver work in fission world. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D61938
2020-02-11 03:59:14 +00:00
Ting-Yu Lin
6205510cad Bug 1610670 - Add AllPhysicalSides() to support range-based for loops. r=mats
This patch is generated via:
1. Manually modify gfx/2d/Types.h
2. Run the following script and clang-format.

```

function rename() {
    echo "Renaming $1 to $2"
    rg -l "$1" | xargs sed -i -E -e s/"$1"/"$2"/g
}

rename "NS_FOR_CSS_SIDES\(side\)" "for (const auto side : mozilla::AllPhysicalSides())"
rename "NS_FOR_CSS_SIDES\(s\)" "for (const auto s : mozilla::AllPhysicalSides())"
rename "NS_FOR_CSS_SIDES\(i\)" "for (const auto i : mozilla::AllPhysicalSides())"
rename "NS_FOR_CSS_SIDES\(ix\)" "for (const auto ix : mozilla::AllPhysicalSides())"
```

Differential Revision: https://phabricator.services.mozilla.com/D61250
2020-02-04 03:28:27 +00:00