Commit Graph

72 Commits

Author SHA1 Message Date
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
Boris Zbarsky
a306daca09 Bug 1612007. Add convenience methods for throwing various spec-defined DOMExceptions on ErrorResult. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D61202
2020-01-29 09:09:11 +00:00
Emilio Cobos Álvarez
cb80dc288e Bug 1608931 - Ensure we tick the refresh driver at least once after calling IntersectionObserver.observe. r=mstange
Differential Revision: https://phabricator.services.mozilla.com/D60015
2020-01-21 23:21:32 +00:00
Emilio Cobos Álvarez
1cf22c6021 Bug 1600362 - Cleanup IntersectionObserver. r=smaug
Initially this was going to be a simple cleanup: Remove some useless namespaces
here and there and so on, remove `using` statements from the header and so on.

But unfortunately, DOMIntersectionObserver.h (which is included in Element.h,
unnecessarily) ended up exposing `Element` unnamespaced to a lot of code, so I
had to fix that.

Differential Revision: https://phabricator.services.mozilla.com/D55316
2019-11-29 20:39:36 +00:00
Emilio Cobos Álvarez
daa2657756 Bug 1551716 - Factor out some intersection observer code, and add spec quotes. r=mstange
This would've made my life a lot easier. There's a couple things that don't
match the spec that I've left as comments.

Differential Revision: https://phabricator.services.mozilla.com/D31151
2019-11-22 22:36:27 +00:00
Geoff Lankow
9bc5032fbb Bug 1580462 - Follow-up: include a missing header file. r=baku
Differential Revision: https://phabricator.services.mozilla.com/D50435
2019-10-24 07:32:23 +00:00
Boris Zbarsky
17361b9160 Bug 1581276. Require a message arg to ThrowDOMException. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D46250
2019-09-20 02:17:01 +00:00
Hiroyuki Ikezoe
d9a5336c96 Bug 1581974 - Change DOMIntersectionObserver::Update to use the BrowsingContext parent chain. r=jwatt
Using the BrowsingUsing parent chain is able to avoid 1) obtaining a wrong
root in cross-process documents and also avoid 2) not being able to obtain
the proper root in same-origin documents in the case where there is a
cross-process document in between the top level document and the same-origin
documents.

dom/base/test/test_intersectionobservers.html is a test of case 1).
testing/web-platform/tests/intersection-observer/same-origin-grand-child-iframe.sub.html
is a test case of case 2).

Differential Revision: https://phabricator.services.mozilla.com/D46432
2019-09-20 04:59:56 +00:00
Emilio Cobos Álvarez
a1af38505c Bug 1553673 - Round intersection observer percentage margins with NSToCoordRound rather than the default rounder. r=dholbert
The default rounder floors percentages instead of rounding, which can cause
subtle issues.

This is generally desirable for most lengths, AIUI, so that pages don't cause
undesired overflow when using percentage widths and such, but for the
intersection observer root margin, it can cause some annoyance as the percentage
going negative may cause the root rect to be negatively sized and report no
intersection.

This also seems to match Blink[1], though it goes back to the initial
implementation of IntersectionObserver.rootMargin[2].

[1]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/intersection_observer/intersection_geometry.cc?l=52&rcl=8671a050dd117b730bffbad5838f218fcc024845
[2]: c88a8ad4f1

Differential Revision: https://phabricator.services.mozilla.com/D32873
2019-06-11 19:16:46 +00:00
Emilio Cobos Álvarez
cbe0d2071f Bug 1551716 - Deindent some IntersectionObserver code. r=mstange
Just trying to make it slightly nicer. Probably should get a function to get the
root target document frame.

Will file a bug for fission since I _suspect_ fission is going to do something
about IntersectionObserver.

Depends on D31149

Differential Revision: https://phabricator.services.mozilla.com/D31150
2019-05-15 17:34:30 +00:00
Emilio Cobos Álvarez
1d299ab6bb Bug 1551716 - Use ranged-for loop in DOMIntersectionObserver. r=mstange
There's nothing here that should be mutating us (and if there was we'd be hosed
already given the amount of weak pointers we keep around), so this is nicer.

Depends on D31148

Differential Revision: https://phabricator.services.mozilla.com/D31149
2019-05-15 17:33:45 +00:00
Emilio Cobos Álvarez
e08c8ea7bd Bug 1551716 - Simplify the cross-origin check in IntersectionObserver. r=mstange
Should've no behavior change given the spec issue, but it should read nicer.

Differential Revision: https://phabricator.services.mozilla.com/D31148
2019-05-15 17:32:28 +00:00
Emilio Cobos Álvarez
05b8f7c4e8 Bug 1505471 - Map intersection observer rects to the right viewport. r=mstange
targetFrame is modified during the intersection computation loop, so it's not
the viewport you want if there are scrollframes around.

The test is the same as iframe-no-root.html but with a wrapping scroller which
triggers this bug.

This code is quite subtle, so will refactor and clean it up in a followup.

Differential Revision: https://phabricator.services.mozilla.com/D31147
2019-05-15 17:29:33 +00:00
Masayuki Nakano
e56c690088 Bug 1540015 - part 3: Rename Document::GetShell() to Document::GetPresShell() and make it return PresShell* rather than nsIPresShell* r=smaug,emilio
This makes `Document::GetShell()` return `PresShell*` instead of `nsIPresShell`.

Additonally, "shell" is unclear ("docshell" vs. "presshell").  Therefore, this
also renames `Document::GetShell()` to `Document::GetPresShell()`.

Similarly, some other method names of `Document` are also renamed from
`*Shell*` to `*PresShell*`.

Differential Revision: https://phabricator.services.mozilla.com/D25338
2019-03-29 15:12:47 +00:00
Dorel Luca
6cd4166b18 Backed out 3 changesets (bug 1540015) for build bustage. CLOSED TREE
Backed out changeset 7b71c9da0214 (bug 1540015)
Backed out changeset 5723ddbc5c44 (bug 1540015)
Backed out changeset 9561d2c36fa5 (bug 1540015)
2019-03-29 16:14:26 +02:00
Masayuki Nakano
12ec0ad7f4 Bug 1540015 - part 3: Rename Document::GetShell() to Document::GetPresShell() and make it return PresShell* rather than nsIPresShell* r=smaug,emilio
This makes `Document::GetShell()` return `PresShell*` instead of `nsIPresShell`.

Additonally, "shell" is unclear ("docshell" vs. "presshell").  Therefore, this
also renames `Document::GetShell()` to `Document::GetPresShell()`.

Similarly, some other method names of `Document` are also renamed from
`*Shell*` to `*PresShell*`.

Differential Revision: https://phabricator.services.mozilla.com/D25338
2019-03-29 13:09:26 +00:00
Boris Zbarsky
847bb13da7 Bug 1535384 part 1. Eliminate some easy cases of MOZ_CAN_RUN_SCRIPT_BOUNDARY on webidl callbacks. r=mccr8
Differential Revision: https://phabricator.services.mozilla.com/D23771
2019-03-19 05:24:39 +00:00
Emilio Cobos Álvarez
ce3d5d43c1 Bug 1523071 - Use Rust lengths for margin / padding / inset. r=jwatt
Also for the intersection observer root margin, since it was easier to fix it
up and clean it up than not doing it.

This is the first big step to get rid of nscoord. It duplicates a bit of logic
in nsLayoutUtils since for now max/min-width/height are still represented with
nsStyleCoord, but I think I prefer to land this incrementally.

I didn't add helpers for the physical accessors of the style rect sides that
nsStyleSides has (top/bottom/left/right) since I think we generally should
encourage the logical versions, but let me know if you want me to do that.

Differential Revision: https://phabricator.services.mozilla.com/D17739
2019-02-10 04:11:58 +01:00
Emilio Cobos Álvarez
dc336a73ba Bug 1517241 - Rename nsIDocument to mozilla::dom::Document. r=smaug
Summary: Really sorry for the size of the patch. It's mostly automatic
s/nsIDocument/Document/ but I had to fix up in a bunch of places manually to
add the right namespacing and such.

Overall it's not a very interesting patch I think.

nsDocument.cpp turns into Document.cpp, nsIDocument.h into Document.h and
nsIDocumentInlines.h into DocumentInlines.h.

I also changed a bunch of nsCOMPtr usage to RefPtr, but not all of it.

While fixing up some of the bits I also removed some unneeded OwnerDoc() null
checks and such, but I didn't do anything riskier than that.
2019-01-03 17:48:33 +01:00
Sylvestre Ledru
e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Emilio Cobos Álvarez
08bea7e24f Bug 1456471: Remove nsCSSParser.h. r=xidorn
MozReview-Commit-ID: 4qa7llzCXeR
2018-04-25 10:38:37 +02:00
Blake Kaplan
1e4512cee3 Bug 1391154 - Handle edge cases around the borders of IntersectionObservers more consistently. r=dholbert
The old code would ignore mThresholds if we happened to update when the
observed element was edge-adjacent to its root. This could cause spurious
notifications if it happened to run during a CSS transformation. The new code
more closely follows the spec with a slight deviation where the code treats
all values less than the smallest passed-in threshold as equivalent (when
looking at previousIndex). This matches Chrome's implementation and the tests.

MozReview-Commit-ID: 7oAh1EdjMiY
2018-04-10 18:54:01 -07:00
Xidorn Quan
b305ac227e Bug 1448763 part 1 - Make DOMIntersectionObserver use nsStyleSides for mRootMargin, and use Servo code to serialize it. r=emilio
MozReview-Commit-ID: 8RsoLflRtzE
2018-04-05 18:27:33 +10:00
Emilio Cobos Álvarez
c48b1f646b Bug 1448690: Remove IsStyledByServo. r=xidorn
MozReview-Commit-ID: I3MDbo2Yu7d
2018-03-26 09:39:26 +02:00
Emilio Cobos Álvarez
b1a35fbef7 Bug 1447358: Unifdef the old style system code. r=jwatt
Summary:
This has been automatically generated using:

  http://dotat.at/prog/unifdef/

And:

find $OBJDIR -type f -name '*.h' |
while read FILE; do
  echo "$FILE"
  unifdef -m -DMOZ_STYLO -UMOZ_OLD_STYLE "$FILE";
done

find $OBJDIR -type f -name '*.cpp' |
while read FILE; do
  echo "$FILE"
  unifdef -m -DMOZ_STYLO -UMOZ_OLD_STYLE "$FILE";
done

MozReview-Commit-ID: I4NdKqbMXzJ

Reviewers: jwatt

Bug #: 1447358

Differential Revision: https://phabricator.services.mozilla.com/D779
2018-03-21 10:20:34 +01:00
Dorel Luca
ee8e21ebda Backed out changeset 38577c007450 (bug 1424371) for Marionett test failure on testing/marionette/harness/marionette_harness/tests/unit/test_window_maximize.py. CLOSED TREE 2018-02-19 22:15:23 +02:00
Milan Sreckovic
2aa2530441 Bug 1424371: Use BaseRect access methods instead of member variables in dom/ r=qdot
MozReview-Commit-ID: HXWhggOMIEK
2018-02-19 12:56:10 -05:00
Cameron McCormack
02c617875f Bug 1430014 - Part 4: #ifdef out unnecessary code when the old style system is not built. r=xidorn
MozReview-Commit-ID: 1FZ9VzjcPzN
2018-02-01 15:04:04 +11:00
Olli Pettay
9f03b49e10 Bug 1422092 - Revert the changes made by bug 1399603. r=mrbkap 2017-12-10 14:52:49 -05:00
Cameron McCormack
c931762bf7 Bug 1408305 - Use Servo to parse IntersectionObserver rootMargin values. r=xidorn
MozReview-Commit-ID: 4CIXP73kcf2
2017-10-16 18:02:16 +08:00
Tobias Schneider
7750edf434 Bug 1406102 - [intersection-observer] Calculate areas using int64_t. r=dholbert 2017-10-09 15:08:41 -07:00
Tobias Schneider
7372e9b4b3 Bug 1399603 - [intersection-observer] Stop observing a target when intersection root is deleted. r=mrbkap 2017-10-06 07:39:54 -07:00
Tobias Schneider
3ef2e1983e Bug 1401416 - [intersection-observer] Let intersection rect be empty if do_QueryFrame(rootFrame) returns null. r=dholbert 2017-09-21 12:43:35 -07:00
Tobias Schneider
452c21fede Bug 1399605 - [intersection-observer] Check if target is actually being observed when unobserving. r=mrbkap 2017-09-19 10:50:10 -07:00
Milan Sreckovic
5e848ab767 Bug 1387514: Upgrade BaseRect (derived classes) width and height direct member variable use to instead use Width()/SetWidth() and Height()/SetHeight() in dom/*. r=overholt
MozReview-Commit-ID: B9YWmM3C1oX
2017-08-14 08:30:10 -04:00
Brad Werth
52b929d34a Bug 1383296 Part 1: Remove all uses of the nsCSSValue::Serialization enum, now that it no longer has multiple values. r=heycam
MozReview-Commit-ID: n6px5hNHtB
2017-07-21 17:26:35 -07:00
Tobias Schneider
bbf5037289 Bug 1366371 - Use signed integer for intersection threshold. r=mstange 2017-07-26 16:00:58 -07:00
Sylvestre Ledru
9d4a84d778 Bug 1378712 - Remove all trailing whitespaces r=Ehsan
MozReview-Commit-ID: Kdz2xtTF9EG
2017-07-06 14:00:35 +02:00
Tobias Schneider
86cafd6045 Bug 1359311 - (intersection-observer) Send update notifications in same order as observed. r=smaug 2017-06-25 19:35:21 -07:00
Tobias Schneider
9acab9a0c6 Bug 1363650 - (intersection-observer) Use content area as the intersection rectangle for custom root with overflow clip. r=mattwoodrow 2017-06-21 10:40:44 -07:00
Phil Ringnalda
b2ecb07c37 Backed out changeset eeb0a65afa6d (bug 1363650) for wpt failures in intersection-observer/bounding-box.html and intersection-observer/unclipped-root.html
MozReview-Commit-ID: HycwX8lA9sw
2017-06-20 20:50:08 -07:00
Tobias Schneider
6caca18e1e Bug 1363650 - (intersection-observer) Use content area as the intersection rectangle for custom root with overflow clip. r=mattwoodrow 2017-06-20 16:43:17 -07:00
Tobias Schneider
e46a2bee9e Bug 1359317 - (intersection-observer) Use targetFrame->GetRectRelativeToSelf() as the initial intersection rect. r=mstange 2017-06-19 13:32:07 -07:00
Mats Palmgren
a5b3e14375 Bug 1371925 - Remove unnecessary hashtable lookups in DOMIntersectionObserver. r=froydnj
MozReview-Commit-ID: LUt03nCz3SD
2017-06-17 00:06:04 +02:00
Tobias Schneider
53b184b817 Bug 1370968 - Guard against possible NULL values when IntersecionObserver API is used in XUL pages. r=mstange 2017-06-07 15:16:59 -07:00
Tobias Schneider
4b54676b9d Bug 1359318 - (intersection-observer) Map intersectionRect to the coordinate space of the target document. r=mstange 2017-06-02 14:11:31 -07:00
Tobias Schneider
1376830603 Bug 1359316 - (intersection-observer) Intersection ratio should be 1.0 for zero-area intersections. r=mstange 2017-05-17 12:19:07 -07:00