Commit Graph

182 Commits

Author SHA1 Message Date
Simon Giesecke
2634de766d Bug 1691913 - Rename nsClassHashtable::LookupOrAdd to GetOrInsertNew. r=xpcom-reviewers,nika
It should be called "Get" rather than "Lookup" because it returns
UserDataType. "Add" is called "Insert" in the other methods.

Differential Revision: https://phabricator.services.mozilla.com/D105470
2021-02-22 12:07:47 +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
Emilio Cobos Álvarez
3f13fe7485 Bug 1667868 - Optimize directionality change handling during slotting. r=smaug
Same idea, when only one node is slotted or unslotted, we only need to
do work for the rest of assigned nodes iff the slot has dir=auto or a
dir=auto ancestor, and the result of computing the dir=auto ancestor
changes.

Otherwise we just need to propagate the directionality from the slot.

Depends on D91753

Differential Revision: https://phabricator.services.mozilla.com/D91754
2020-09-29 21:43:32 +00:00
Emilio Cobos Álvarez
45f93fa5da Bug 1667868 - Optimize slotting for appends to a shadow host. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D91753
2020-09-29 20:45:04 +00:00
Emilio Cobos Álvarez
498bdbed55 Bug 1667510 - Make UA widgets in print documents more static. r=smaug
This ensures that styles from UA widgets apply. Turns out they look
pretty much right without them, but there's a bug in nsDateTimeBoxFrame
where we rely on the styles in order for the baseline to be sensible.

Differential Revision: https://phabricator.services.mozilla.com/D91616
2020-09-29 10:31:48 +00:00
Bogdan Tara
21f0576989 Backed out changeset 482bd861c745 (bug 1667510) for causing mochitest leaks CLOSED TREE 2020-09-29 01:35:24 +03:00
Emilio Cobos Álvarez
a0d2ab0850 Bug 1667510 - Make UA widgets in print documents more static. r=smaug
This ensures that styles from UA widgets apply. Turns out they look
pretty much right without them, but there's a bug in nsDateTimeBoxFrame
where we rely on the styles in order for the baseline to be sensible.

Differential Revision: https://phabricator.services.mozilla.com/D91616
2020-09-28 18:29:28 +00:00
Emilio Cobos Álvarez
fd39ec39c3 Bug 1659457 - Do clone xml-pretty-printer's UA widget. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D87714
2020-08-20 11:29:45 +00:00
Emilio Cobos Álvarez
f9f038eed5 Bug 1658469 - Don't clone UA widgets for printing. r=smaug
We run the widget initialization code regardless on bind, and some of it
doesn't deal with shadow roots being already populated.

Differential Revision: https://phabricator.services.mozilla.com/D86952
2020-08-14 16:27:49 +00:00
Csoregi Natalia
19fa90cc3c Backed out 2 changesets (bug 1658469) for assertion failures on nsVideoFrame.cpp. CLOSED TREE
Backed out changeset 08a78618c76c (bug 1658469)
Backed out changeset 5c8a07fc83ed (bug 1658469)
2020-08-13 21:13:08 +03:00
Emilio Cobos Álvarez
9c6863c26c Bug 1658469 - When cloning a shadow root for printing, also copy the UA-widget-ness. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D86952
2020-08-13 13:06:38 +00:00
Emilio Cobos Álvarez
d7cd0194a5 Bug 1655751 - Invalidate for CSSOM changes in a more fine-grained way. r=heycam
Also, for changes in CSS declarations, like changing
cssRules[i].style.color or something, we end up avoiding a lot of the
work we were doing.

This page still trips us in the sense that they add a stylesheet, then
call getBoundingClientRect(), then insert more rules in the stylesheet,
which causes us to rebuild a lot of the cascade data.

We could try to detect appends to the last stylesheet on the list or
something I guess, and avoid rebuilding the cascade data in some cases.

Depends on D85615

Differential Revision: https://phabricator.services.mozilla.com/D85616
2020-08-10 18:00:44 +00:00
Frederik Braun
1c9da7b879 Bug 1653232 implement GetInnerHTML() for DocFragments r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D83775
2020-07-16 17:31:10 +00:00
Emilio Cobos Álvarez
b1fc84a629 Bug 1640605 - Remove IsInAnonymousSubtree / IsRootOfAnonymousSubtree. r=edgar
In favor of the NativeAnonymous versions which they forward to.

Done automatically with:

  rg -l 'IsInAnonymousSubtree' | xargs sed -i 's/IsInAnonymousSubtree/IsInNativeAnonymousSubtree/g'

And removing the function definitions afterwards.

Differential Revision: https://phabricator.services.mozilla.com/D76681
2020-05-25 11:43:51 +00:00
Emilio Cobos Álvarez
8688ceb28a Bug 1639392 - Merge nsIStyleSheetLinkingElement and nsStyleLinkElement, and call it LinkStyle. r=jwatt
Which is the spec term. nsIStyleSheetLinkingElement is even more
confusing since it may not be an element at all (see: processing
instructions).

Differential Revision: https://phabricator.services.mozilla.com/D76071
2020-05-21 03:07:16 +00:00
Erik Nordin
9e352b4483 Bug 1629989 - Unify RemoveStyleSheet() Function r=emilio
- Remove function `Document::RemoveStyleSheet()`
- Remove function `ShadowRoot::RemoveSheet()`
- Remove function `DocumentOrShadowRoot::RemoveSheet()`, which was used by the former two functions.
- Add function `DocumentOrShadowRoot::RemoveStyleSheet()`, now uesed in all cases.

Differential Revision: https://phabricator.services.mozilla.com/D70927
2020-04-15 17:20:11 +00:00
Erik Nordin
40ae331dc6 Bug 1459698 - Unlink DocumentOrShadowRoot::mStyleSheets r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D70768
2020-04-14 22:41:45 +00:00
Erik Nordin
2f39e0a4f8 Bug 1621415 - Ensure adopted styles are applied when printing r=emilio
- Add functionality to clone adopted style sheets for printing.
- Add reftest to ensure that the document's adopted styles show in print.
- Add reftest to ensure that a shadow root's adopted styles show in print.

Differential Revision: https://phabricator.services.mozilla.com/D66517
2020-03-24 22:54:18 +00:00
Razvan Maries
3f45f52996 Backed out changeset c0235b7bddcc (bug 1621415) for Mochitest perma failures on test_printpreview.xhtml. CLOSED TREE 2020-03-14 02:52:09 +02:00
Erik Nordin
5c64096511 Bug 1621415 - Ensure adopted styles are applied when printing r=emilio
- Add functionality to clone adopted style sheets for printing.
- Add reftest to ensure that the document's adopted styles show in print.
- Add reftest to ensure that a shadow root's adopted styles show in print.

Differential Revision: https://phabricator.services.mozilla.com/D66517
2020-03-13 21:20:22 +00:00
Emilio Cobos Álvarez
ba32c1b0ef Bug 1617746 - Deal with duplicate adopted stylesheets correctly. r=nordzilla
This also fixes some other bits, like mAdoptedStyleSheets.ElementAt(0) (which
really should be "the first applicable adopted stylesheet") and so on. Added a
test for that.

The new invariant also implies that a DocumentOrShadowRoot can't appear twice in
StyleSheet::mAdopters.

Also clears adopted stylesheets in Document::ResetStylesheetsToURI, as it's the
right thing to do (if you hit that code path with constructable sheets you'd end
up asserting, as we'd call FillStyleSetDocumentSheets after and find sheets in
there). I don't quite have a test-case for that though.

Differential Revision: https://phabricator.services.mozilla.com/D64151
2020-02-27 01:46:17 +00:00
Cosmin Sabou
0244f04f96 Backed out 2 changesets (bug 1617746) assertion failures on ShadowRoot.cpp.
CLOSED TREE
Backed out changeset 6cb30e866b95 (bug 1617746)
Backed out changeset 3543162b815b (bug 1617746)
2020-02-27 01:12:46 +02:00
Emilio Cobos Álvarez
f1f68b0376 Bug 1617746 - Deal with duplicate adopted stylesheets correctly. r=nordzilla
This also fixes some other bits, like mAdoptedStyleSheets.ElementAt(0) (which
really should be "the first applicable adopted stylesheet") and so on. Added a
test for that.

The new invariant also implies that a DocumentOrShadowRoot can't appear twice in
StyleSheet::mAdopters.

Also clears adopted stylesheets in Document::ResetStylesheetsToURI, as it's the
right thing to do (if you hit that code path with constructable sheets you'd end
up asserting, as we'd call FillStyleSetDocumentSheets after and find sheets in
there). I don't quite have a test-case for that though.

Differential Revision: https://phabricator.services.mozilla.com/D64151
2020-02-26 21:20:05 +00:00
Erik Nordin
57d2fd53ca Bug 1609288 - Apply styles from adopted stylesheets r=emilio
- Ensure that adopted styles are applied correctly to ShadowRoot
- Ensure that adopted styles are applied correctly to Document
- Add new WPT test cases to ensure the ordering of the styles.

Differential Revision: https://phabricator.services.mozilla.com/D60083
2020-02-15 01:16:46 +00:00
Emilio Cobos Álvarez
9829583319 Bug 1612114 - Invalidate shadow root style data on insertion if needed. r=jwatt
Differential Revision: https://phabricator.services.mozilla.com/D61293
2020-02-03 12:40:36 +00:00
Emilio Cobos Álvarez
dd4116db2f Bug 1610059 - Rename Document::SetStyleSheetApplicableState. r=nordzilla
It doesn't set anything, it is just a notification callback.

Differential Revision: https://phabricator.services.mozilla.com/D60336
2020-01-22 01:14:42 +00:00
Emilio Cobos Álvarez
26575cb7a6 Bug 1600155 - Make @import rules less weird. r=heycam
Have their own notification for when the child sheet loads instead of
piggy-backing in the RuleAdded one, and make the callers check instead.

This prevents incorrectly marking as modified sheets which only have @import
rules.

Differential Revision: https://phabricator.services.mozilla.com/D55184
2019-11-30 12:24:24 +00:00
Emilio Cobos Álvarez
a309f27753 Bug 1597715 - Don't dereference this on DocumentOrShadowRoot subclasses. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D53836
2019-11-20 19:58:21 +00:00
Emilio Cobos Álvarez
87b1e5bf4d Bug 1596209 - Remove nsIContent::GetBindingParent. r=smaug
It's unused after all the previous patches.

Differential Revision: https://phabricator.services.mozilla.com/D53217
2019-11-15 18:19:37 +00:00
Sebastian Hengst
3f8b7d41c8 Backed out changeset 0478d1bf6e32 (bug 1596209) on request from emilio. CLOSED TREE 2019-11-15 19:11:06 +01:00
Emilio Cobos Álvarez
a97037f571 Bug 1596209 - Remove nsIContent::GetBindingParent. r=smaug
It's unused after all the previous patches.

Differential Revision: https://phabricator.services.mozilla.com/D53217
2019-11-15 16:46:29 +00:00
Emilio Cobos Álvarez
b4fe3dee59 Bug 1596768 - Remove GetBindingParent() usage in GetEventTargetParent. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D53197
2019-11-15 17:00:14 +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
Emilio Cobos Álvarez
37073ac7e1 Bug 1585823 - Make ShadowRoot use consistent DOM binding wrapping, and make nsINode::WrapObject final. r=smaug
Looks like an oversight from all the way back to bug 806506.



Depends on D48538

Differential Revision: https://phabricator.services.mozilla.com/D48539
2019-10-09 11:53:24 +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
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
Emilio Cobos Álvarez
6a1b8b7f27 Bug 1554498 - Don't use nsIMutationObserver for ShadowRoot. r=smaug
This penalizes a bit non-shadow-DOM content, in exchange of making Shadow DOM
slightly faster as well.

The biggest advantage of this is that all ContentRemoved notifications would see
the flattened tree before the changes, which is something a11y needs to be
correct.

XBL would still not be handled right by a11y, but that's not new and content
cannot do random stuff with XBL so it's not too bad.

Differential Revision: https://phabricator.services.mozilla.com/D32639
2019-08-27 22:10:46 +00:00
Emilio Cobos Álvarez
2bee24a3f1 Bug 1505489 - Keep track of elements with part attributes in a shadow tree. r=bzbarsky
I need this to make style invalidation work with Shadow Parts in a way that's
fast. If something in the ancestor shadow root or any of its ancestor changes,
that makes a ::part() selector change, I don't want to walk the whole shadow
tree over and over in order to find the parts that I need to restyle.

Unfortunately we cannot just use the mutation observer setup from ShadowRoot
since, unlike for slotted elements, there's no restriction of where a part can
appear in the shadow tree.

That means that the regular nsIMutationObserver notifications don't quite cut
it, since we'd get notified only of subtree roots and we'd need to tree-walk
around in order to figure out if we have any new part.

I thought that I was going to be able to share more code with other bits if I
moved them away from nsIMutationObserver, thus bug 1554498, but in the end it
was not the case, so here's the "without bug 1554498" version of the patch.

The patch on top of that bug (that as I mention in the commit message I'm
ambivalent about whether we should land or not) should be pretty similar either
way.

Differential Revision: https://phabricator.services.mozilla.com/D32641
2019-06-11 17:41:37 +00:00
Emilio Cobos Álvarez
a3b32df884 Bug 1555216 - Change the signature of BindToTree to be (BindContext&, nsINode& aParentNode). r=bzbarsky
BindContext was going to have way more information at first, but then I realized
that most of the things I wanted to know were basically a flag away using the
parent node.

Still I think it's worth it, now experimenting with BindToTree will only mean
adding a field to a struct that's included from a couple cpp files, instead of a
massive pain.

I also think this is clearer, and doing this highlights quite a few
inconsistencies in our code which I've left untouched, but commented with
FIXMEs.

Steps are:

$ for file in $(rg 'nsresult BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#nsresult BindToTree(Document\* aDocument, nsIContent\* aParent,#nsresult BindToTree(BindContext\&, nsINode\& aParent)#g' $file; done
$ for file in $(rg 'nsresult BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#                      nsIContent\* aBindingParent) override#override#g' $file; done
$ for file in $(rg '::BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#::BindToTree(Document\* aDocument, nsIContent\* aParent,#::BindToTree(BindContext\& aContext, nsINode\& aParent)#g' $file; done
$ for file in $(rg '::BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#nsIContent\* aBindingParent)##g' $file; done
$ for file in $(rg '::BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#::BindToTree(aDocument, aParent, aBindingParent)#::BindToTree(aContext, aParent)#g' $file; done
$ ./mach clang-format

Then manual fixups.

Depends on D32948

Differential Revision: https://phabricator.services.mozilla.com/D32949
2019-05-31 23:31:52 +02:00
Emilio Cobos Álvarez
b1b80b9f5a Bug 1554498 - Some miscellaneous cleanups while I was going through this code. r=edgar
Differential Revision: https://phabricator.services.mozilla.com/D32638
2019-05-29 19:20:37 +00:00
Emilio Cobos Álvarez
9160cd2967 Bug 1555143 - Remove unused aDeep argument from UnbindFromTree. r=bzbarsky
$ for file in $(rg UnbindFromTree | cut -d : -f 1 | sort | uniq); do sed -i 's#UnbindFromTree(bool aDeep = true,#UnbindFromTree(#g' $file; done
$ for file in $(rg UnbindFromTree | cut -d : -f 1 | sort | uniq); do sed -i 's#UnbindFromTree(bool aDeep,#UnbindFromTree(#g' $file; done
$ for file in $(rg UnbindFromTree | cut -d : -f 1 | sort | uniq); do sed -i 's#UnbindFromTree(aDeep,#UnbindFromTree(#g' $file; done
$ ./mach clang-format

And fix the two callers and little use of the aDeep argument (see the "Manual
changes" patch attached to bug).

Differential Revision: https://phabricator.services.mozilla.com/D32898
2019-05-28 22:47:08 +00:00
Emilio Cobos Álvarez
789158c4f4 Bug 1546255 - When an @import stylesheet is cloned, we should also make sure to restyle. r=heycam
We need to notify the whole parent chain (using NOTIFY) rather than just
mStyleSets, since mStyleSets is empty for @import-ed sheets.

Differential Revision: https://phabricator.services.mozilla.com/D31787
2019-05-22 06:01:51 +00:00
Edgar Chen
0346e9a7dc Bug 1548848 - Moving assigned nodes caused by slot removal should properly invalidate layout; r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D30194
2019-05-08 10:39:40 +00:00
Emilio Cobos Álvarez
cfdcee2e12 Bug 1541952 - Move ApplicableStylesChanged() to Document. r=heycam
It's the right place for it to be now that it owns the StyleSet.

Differential Revision: https://phabricator.services.mozilla.com/D26213
2019-04-06 19:25:25 +00:00
Emilio Cobos Álvarez
751aa531e2 Bug 1535788 - Make the Document own the StyleSet. r=heycam
This is the last step to be able to call matchMedia on display: none iframes.

This is green, except for some startup preference query tests that I'm going to
address in a blocking bug (making LangGroupFontPrefs global, basically).

The setup is similar to the ShadowRoot one, except we don't eagerly keep the
StyleSet around up-to-date, we only fill it if it ever had a pres context.

Differential Revision: https://phabricator.services.mozilla.com/D23903
2019-04-03 07:02:00 +00:00
Emilio Cobos Álvarez
9df3965672 Bug 1541016 - Add a generic TreeOrderedArray. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D25756
2019-04-03 07:02:34 +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