Commit Graph

637 Commits

Author SHA1 Message Date
Coroiu Cristina
184ecf8f59 Backed out changeset 1a951477dca5 (bug 1588743) for xpcshell failures at devtools/shared/tests/unit/test_css-properties-db.js on a CLOSED TREE 2019-10-15 15:35:50 +03:00
Emilio Cobos Álvarez
66cf00147c Bug 1588743 - Remove old scroll-snap implementation, and scroll snapping prefs. r=hiro
Differential Revision: https://phabricator.services.mozilla.com/D49267
2019-10-15 11:39:30 +00:00
Emilio Cobos Álvarez
6794a0ca7e Bug 1559077 - Implement Element.part. r=bzbarsky
Differential Revision: https://phabricator.services.mozilla.com/D48707
2019-10-13 09:40:08 +00:00
Emilio Cobos Álvarez
b560263d99 Bug 1581467 - Fix checks for display: inline{,-block} which don't account for inline list items. r=mats
Differential Revision: https://phabricator.services.mozilla.com/D48346
2019-10-12 21:05:16 +00:00
Emilio Cobos Álvarez
014488dcf8 Bug 1587457 - Remove Element::GetTokenList. r=bzbarsky
Looks like this used to be more generic, looking at:

https://hg.mozilla.org/mozilla-central/rev/263812990c503f6e238b33b2fd3314284ac1be3e

But now only specific element subclasses use it, and the token lists can just be
members in the relevant subclasses.

Differential Revision: https://phabricator.services.mozilla.com/D48710
2019-10-11 04:09:40 +00:00
Emilio Cobos Álvarez
7aaa2ea4c1 Bug 1587767 - Assert that link flag handling is correct, and that NodeInfoChanged is only called on disconnected nodes. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D48830
2019-10-10 15:39:20 +00:00
Emilio Cobos Álvarez
83e8f78690 Bug 1585823 - Remove MayNeedToLoadXBLBinding and related code. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D48538
2019-10-09 11:53:20 +00:00
Tim Nguyen
da27ed5d34 Bug 1513325 - Remove textbox binding. r=emilio,dao
Differential Revision: https://phabricator.services.mozilla.com/D38955
2019-10-09 09:27:28 +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
a596b8db59 Bug 1397876 - Don't invalidate style / layout of the host if it has no children. r=smaug
In that case, the flat tree cannot possibly be changing, so we don't really need
to invalidate anything.  This, in theory, is just a really minor optimization.

In practice however, the browser chrome needs it, at least for now, because XUL
elements get frames really early (because we don't have lazy frame construction
for XUL, bug 1584935), and because destroying some kinds of frames (like panels)
does have side effects (they're popups), even though ideally they shouldn't.

Differential Revision: https://phabricator.services.mozilla.com/D48428
2019-10-08 13:13:35 +00:00
Alexander Surkov
19eabb6750 Bug 1397876 - Replace panel and arrowpanel bindings with a custom element r=bgrins
Differential Revision: https://phabricator.services.mozilla.com/D35040
2019-10-07 21:57:04 +00:00
Edgar Chen
dceb498e05 Bug 1129227 - Part 2: Switch Fullscreen to use transient-user-activation API; r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D47151
2019-09-30 13:42:40 +00:00
Edgar Chen
1f18faff86 Bug 1129227 - Part 1: Merge nsContentUtils::CheckRequestFullscreenAllowed into GetFullscreenError; r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D47018
2019-09-27 20:07:37 +00:00
Tim Nguyen
342d60821a Bug 1514926 - Followup: remove now unused arrowscrollbox check from MayNeedToLoadXBLBinding. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D48023
2019-10-03 04:49:15 +00:00
Emilio Cobos Álvarez
d6fa5ebd6b Bug 1585819 - Somewhat dubiously appease the hazard analysis. r=bustage
It was complaining about

  "unrooted '<returnvalue>' of type 'JSObject*' live across GC call at dom/base/Element.cpp:588"

Where the GC call is:

Function '_ZN7mozilla3dom7Element10WrapObjectEP9JSContextN2JS6HandleIP8JSObjectEE$JSObject* mozilla::dom::Element::WrapObject(JSContext*, JS::Handle<JSObject*>)' has unrooted '<returnvalue>' of type 'JSObject*' live across GC call '_ZN6RefPtrI12nsXBLBindingED1Ev$RefPtr<T>::~RefPtr() [with T = nsXBLBinding]' at dom/base/Element.cpp:588
    Element.cpp:588: Assign(64,65, return := __temp_29**)
    Element.cpp:588: Call(65,66, binding.~__dt_comp ()) [[GC call]]
    Element.cpp:588: Call(66,67, principal.~__dt_comp ())
    Element.cpp:588: Call(67,68, uri.~__dt_comp ())
    Element.cpp:588: Call(68,69, style.~__dt_comp ())
    Element.cpp:588: Call(69,70, obj.~__dt_comp ())
    Element.cpp:589:  [[end of function]]
GC Function: _ZN6RefPtrI12nsXBLBindingED1Ev$RefPtr<T>::~RefPtr() [with T = nsXBLBinding]
    RefPtr<T>::~RefPtr() [with T = nsXBLBinding] [[base_dtor]]
    static void RefPtr<T>::ConstRemovingRefPtrTraits<U>::Release(U*) [with U = nsXBLBinding; T = nsXBLBinding]
    static void mozilla::RefPtrTraits<U>::Release(U*) [with U = nsXBLBinding]
    uint32 nsXBLBinding::Release()
    uint64 nsCycleCollectingAutoRefCnt::decr(void*, nsCycleCollectionParticipant*, uint8*) [with void (* suspect)(void*, nsCycleCollectionParticipant*, nsCycleCollectingAutoRefCnt*, bool*) = NS_CycleCollectorSuspect3; uintptr_t = long unsigned int]
    NS_CycleCollectorSuspect3
    nsCycleCollector.cpp:void SuspectAfterShutdown(void*, nsCycleCollectionParticipant*, nsCycleCollectingAutoRefCnt*, uint8*)
    nsCycleCollectionParticipant.DeleteCycleCollectable
    void nsIContent::cycleCollection::DeleteCycleCollectable(void*)
    nsIContent.DeleteCycleCollectable
    unresolved nsIContent.DeleteCycleCollectable

I don't think the analysis is right since the Rooted<> thing will go out of the
scope after the RefPtr.

MANUAL PUSH: Bustage fix for broken (I think) analysis
2019-10-03 06:38:22 +02:00
Emilio Cobos Álvarez
4056a1d27d Bug 1585819 - Restrict loading XBL bindings from WrapObject to the little amount of XUL elements that remain with bindings. r=bzbarsky
People keep shooting themselves in the feet because of this codepath and writing
slow code.

There are just a few elements with bindings left, so just check those.

Also simplify a bit the code. The XUL element + tagname check should be pretty
fast now, and ComputedStyle objects no longer keep weak pointers to pres
contexts and such, so can be safely kept on a RefPtr across an style flush.

Differential Revision: https://phabricator.services.mozilla.com/D47995
2019-10-03 02:31:16 +00:00
Emilio Cobos Álvarez
fddd20afaf Bug 1585818 - Don't check for <html:object> or <html:embed> in MayNeedXBLBinding. r=bzbarsky
They no longer load bindings since quite a while ago.

Differential Revision: https://phabricator.services.mozilla.com/D47989
2019-10-03 02:34:30 +00:00
Brindusan Cristian
15262a9df6 Backed out 3 changesets (bug 1129227) for wpt failures at active-lock.html. CLOSED TREE
Backed out changeset 44219f4bafb0 (bug 1129227)
Backed out changeset 69f7db4e75bf (bug 1129227)
Backed out changeset 3edc8921609b (bug 1129227)
2019-09-27 03:53:36 +03:00
Edgar Chen
a0fde2622e Bug 1129227 - Part 2: Switch Fullscreen to use transient-user-activation API; r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D47151
2019-09-26 21:15:43 +00:00
Edgar Chen
9294ea4976 Bug 1129227 - Part 1: Merge nsContentUtils::CheckRequestFullscreenAllowed into GetFullscreenError; r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D47018
2019-09-26 21:15:31 +00:00
Alexander Surkov
ad8f4a1820 Bug 1555497 - allow shadow DOM in content process for XUL elements to make possible running chrome UI in content process needed for wpt tests r=emilio
* wpt runs chrome priv for a subset of tests (mostly things testing toolkit chrome stuff), but it's still in the content process
* we only ever hit this case if the test is explicitly loaded as chrome. originally added for a couple osx tests at https://bugzilla.mozilla.org/show_bug.cgi?id=1465457. then expanded for all xul tests at https://bugzilla.mozilla.org/show_bug.cgi?id=1557371
* so what we used to do here is run xul/xbl in the content process (not chrome priv)
* the change here is that with our chrome Custom Elements we need to run with chrome priv for https://searchfox.org/mozilla-central/rev/4218cb868d8deed13e902718ba2595d85e12b86b/toolkit/components/processsingleton/CustomElementsListener.jsm#16 to load the elements
* so we made it explicit. the alternative at the time was to change wpt harness to load these tests in parent process, but it was too complex for what we needed (discussed with dbaron)
* this parentprocess check was meant kind of as an optimization so that we wouldn't have to check priv on random pages. but (a) that's short circuited anyway by the xul elem check and (b) this is only called when attachShadow is called on a non-html element so not in any kind of hot path

Differential Revision: https://phabricator.services.mozilla.com/D46310
2019-09-19 11:19:22 +00:00
Emilio Cobos Álvarez
4020d36a28 Bug 1577743 - Remove dead argument from nsStyledElement::ReparseStyleAttribute. r=heycam
And remove the NodeInfoChanged override that used to call it.

This is dead since we removed the old style system. Was used to force a reparse
on cross-style-back-end adoption.

Differential Revision: https://phabricator.services.mozilla.com/D44134
2019-09-04 00:16:28 +00:00
Emilio Cobos Álvarez
233f3e470f Bug 1577721 - Unify attribute cloning between XUL / HTML and everything else. r=bzbarsky
This contains an (intentional) behavior change, which is that we always copy
(i.e.  don't reparse) style attributes, even across documents.

XUL and HTML already had this behavior. This makes stuff like SVG and MathML
consistent with that.



Depends on D44128

Differential Revision: https://phabricator.services.mozilla.com/D44129
2019-09-02 10:43:52 +00:00
Emilio Cobos Álvarez
13f7bd8bd0 Bug 1554498 - Fix an assertion that starts firing with the previous patch after addressing review feedback. r=smaug
After addressing review comments in the other patch of this bug, debug builds
assert all the time here when called from UnbindFromTree() on an already-unbound
subtree.

We clear the binding parent on unbind, so this is only guaranteed to match for
connected nodes, as far as I can tell.

Differential Revision: https://phabricator.services.mozilla.com/D43641
2019-08-27 22:09:26 +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
Thomas Nguyen
a688b675a4 Bug 1528697 - Expose ReferrerPolicy.webidl and use referrerpolicy enum r=smaug
ReferrerPolicy gets tossed back and forth as a uint32_t and
ReferrerPolicy enum in header file. Expose ReferrerPolicyValues from
webidl file and use consistently in native code.

Differential Revision: https://phabricator.services.mozilla.com/D41954
2019-08-21 13:24:45 +00:00
Emilio Cobos Álvarez
9b72dd2a0d Bug 1562425 - Ensure to bind ShadowRoot before explicit kids, so that slot directionality is up-to-date. r=smaug
When we're slotted, we inherit our directionality from the slot element. But
when binding an ltr subtree into an rtl subtree, we used to bind the explicit
kids first, then the shadow root kids (which includes the slots to which
explicit kids may have been assigned).

So the explicit kids looked at the slot directionality before it was recomputed,
and thus ended up with ltr rather than rtl directionality.

Differential Revision: https://phabricator.services.mozilla.com/D42304
2019-08-17 20:26:56 +00:00
Emilio Cobos Álvarez
cc3be970d3 Bug 1568536 - Simplify some style system APIs. r=heycam
Return a raw pointer instead of a strong reference to a ComputedStyle, and
handle the case of the style not being present by returning null rather than
requiring an extra function to check it and crashing if the precondition is not
met.

Also, name them so that it's clear they just return outdated styles and don't
make any extra effort.

This is just cleanup that makes the next patch easier / more obvious.

Differential Revision: https://phabricator.services.mozilla.com/D40080
2019-08-16 05:59:03 +00:00
Eitan Isaacson
c33edccd72 Bug 686400 - Delay accessible removal on frame reconstruction. r=Jamie,emilio
We naively remove and then recreate accessibles when their content's
frame is reconstructed. By delaying the removal until we are certain the
content does not have a new layout frame, we can cut down on redundant
recreations.

When reconstructed content is re-inserted we can check it and its
subtree for missing frames and prune those accessibles from the tree.

Differential Revision: https://phabricator.services.mozilla.com/D38380
2019-08-02 22:13:28 +00:00
Zibi Braniecki
a7c34042b6 Bug 1517880 - Accumulate l10n elements from prototype during document loading. r=mccr8
Differential Revision: https://phabricator.services.mozilla.com/D38970
2019-07-26 20:19:26 +00:00
Olli Pettay
6f03da57d0 Bug 1517880 - Add a flag for l10n elements created from prototype. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D36067
2019-07-26 20:16:37 +00:00
Gurzau Raul
a4db68042a Backed out 5 changesets (bug 1517880) on request from gandalf on a CLOSED TREE.
Backed out changeset 39c3063994bf (bug 1517880)
Backed out changeset 45bf070f451b (bug 1517880)
Backed out changeset d2b9e6bbb4cb (bug 1517880)
Backed out changeset 3bd43f3e288a (bug 1517880)
Backed out changeset 3b54c85a747b (bug 1517880)
2019-07-26 23:09:57 +03:00
Zibi Braniecki
3c25e1f0de Bug 1517880 - Accumulate l10n elements from prototype during document loading. r=mccr8
Differential Revision: https://phabricator.services.mozilla.com/D38970
2019-07-26 17:12:08 +00:00
Olli Pettay
fc54ec9746 Bug 1517880 - Add a flag for l10n elements created from prototype. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D36067
2019-07-26 16:11:42 +00:00
Nicholas Nethercote
c4aacd8403 Bug 1563139 - Remove StaticPrefs.h. r=glandium
This requires replacing inclusions of it with inclusions of more specific prefs
files.

The exception is that StaticPrefsAll.h, which is equivalent to StaticPrefs.h,
and is used in `Codegen.py` because doing something smarter is tricky and
suitable for a follow-up. As a result, any change to StaticPrefList.yaml will
still trigger recompilation of all the generated DOM bindings files, but that's
still a big improvement over trigger recompilation of every file that uses
static prefs.

Most of the changes in this commit are very boring. The only changes that are
not boring are modules/libpref/*, Codegen.py, and ServoBindings.toml.

Differential Revision: https://phabricator.services.mozilla.com/D39138
2019-07-26 01:10:23 +00:00
Emilio Cobos Álvarez
9b6e807979 Bug 1218456 - Remove nsILinkHandler. r=smaug
Interfaces with just one implementation don't seem very useful.

Differential Revision: https://phabricator.services.mozilla.com/D37406
2019-07-09 23:08:05 +02:00
Emilio Cobos Álvarez
2113328e15 Bug 1218456 - Allow navigating when there's no pres context. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D37404
2019-07-09 23:07:29 +02:00
Dorel Luca
7a5944a08d Backed out 5 changesets (bug 1218456) for Crashtest failures on dom/l10n/tests/mochitest/dom_localization/test_overlay.html. CLOSED TREE
Backed out changeset 31afe89c2d42 (bug 1218456)
Backed out changeset 8bd57ebc4528 (bug 1218456)
Backed out changeset e5d37afff36a (bug 1218456)
Backed out changeset e3da86278ecf (bug 1218456)
Backed out changeset 343046089f8e (bug 1218456)
2019-07-09 22:04:13 +03:00
Emilio Cobos Álvarez
19f9994690 Bug 1218456 - Remove nsILinkHandler. r=smaug
Interfaces with just one implementation don't seem very useful.

Differential Revision: https://phabricator.services.mozilla.com/D37406
2019-07-09 16:17:47 +00:00
Emilio Cobos Álvarez
851bb098fd Bug 1218456 - Allow navigating when there's no pres context. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D37404
2019-07-09 16:17:27 +00:00
Hiroyuki Ikezoe
f9bc9ef982 Bug 1560237 - Introduce nsIScrollableFrame::IsSmoothScroll. r=botond
This is pretty much the same as ScrollStyles::IsSmoothScroll right now,
but in the next commit, we will no longer propagate scroll-behavior on <body> to
the root element so that nsIScrollableFrame::IsSmoothScroll will be changed
to reflect it.

Differential Revision: https://phabricator.services.mozilla.com/D35737
2019-06-26 20:59:01 +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
583aaca845 Bug 1555133 - Add some heuristics about visible content in a document. r=bzbarsky
This is intended to give a reasonable number that scales with the amount of
content in a website during page load, for scheduling purposes.

This effectively counts the amount of text connected to a document that isn't
likely to be inline style or script.

Potential improvements:

 * Maybe have some more heuristics for hidden elements, like presence of the
   `hidden` attribute?

 * Maybe skip whitespace-only text? This does a pretty good job anyways because
   whitespace nodes are usually pretty small (like a couple newlines and
   spaces), so they don't add too much to the number. This could be done cheaply if
   looking at sSpaceSharedString / sTabSharedString.

 * Add some weight to some elements? Maybe images should have a fixed weight,
   for example. Though you don't want 0x0 images and such to count... Maybe we
   should add to this heuristic out of band when processing image loads or some
   such.

 * Handle shadow DOM and such better? Right now Shadow DOM and XBL are always
   assumed visible as long as they're connected. You _can_ in theory do
   something like stash a `<div>` inside a `<style>` element, attach a
   ShadowRoot and such, and append a bunch of stuff inside. But I don't think
   it's something we should be particularly worried about.

 * Probably add some check to CharacterData::AppendText as well?  Otherwise this
   undercounts when loading big amount of text arrives via the network, for
   example, but also I'm not sure we're optimizing for log files and such so it
   might be ok.

In any case, this gives us a heuristic that we can iterate on later. This does a
pretty good job at representing the amount of content in the examples over here:

 * https://faraday.basschouten.com/mozilla/executionorder/

For example for:

 * https://faraday.basschouten.com/mozilla/executionorder/allinlinedual.html

You get an output like the following if you print the heuristic after each bind
operation (and de-duplicating them):

```
0
3 // Some whitespace in <head>
4 // Some whitespace in the <body>.
5
6
7
8
9
10
65547 // Actual content injected by the first script.
65548 // Some more whitespace.
131085 // Actual content injected by the second script.
131087 // Some more whitespace.
```

I'm not a fan of what clang-format has done to my code btw :)

Differential Revision: https://phabricator.services.mozilla.com/D34397
2019-06-11 10:00:46 +00:00
Neil Deakin
8a103f89a4 Bug 1519948, remove XUL box objects, r=bzbarsky 2019-06-04 12:45:55 -04:00
Emilio Cobos Álvarez
ca367a3126 Bug 1556095 - Make BindContext carry a bit more information. r=bzbarsky
This makes some callers a bit less awkward by not having, for example, to read
from the parent node or not depending on whether Element::BindToTree has been
called already or not.

Differential Revision: https://phabricator.services.mozilla.com/D33368
2019-06-01 14:40:33 +00:00
Emilio Cobos Álvarez
ec4b914a30 Bug 1555216 - Cache owner doc in the BindContext. r=bzbarsky
And use it to avoid some pointer chases per the review comments of D32949.

Differential Revision: https://phabricator.services.mozilla.com/D33288
2019-05-31 23:31:57 +02:00
Emilio Cobos Álvarez
1534328f98 Bug 1555216 - Make CharacterData::BindToTree and Element::BindToTree more parallel. r=bzbarsky
They're supposed to be, but they have diverged quite a bit...

This unifies them again.

Depends on D32949

Differential Revision: https://phabricator.services.mozilla.com/D32950
2019-05-31 23:31:55 +02: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
ab26c3cce3 Bug 1552708 - Use cbindgen for URIs. r=heycam
This doesn't clean up as much as a whole, but it's a step in the right
direction. In particular, it allows us to start using simple bindings for:

 * Filters
 * Shapes and images, almost. Need to:
   * Get rid of the complex -moz- gradient parsing (let
     layout.css.simple-moz-gradient.enabled get to release).
 * Counters, almost. Need to:
   * Share the Attr representation with Gecko, by not using Option<>.
     * Just another variant should be enough (ContentItem::{Attr,Prefixedattr},
       maybe).

Which in turn allows us to remove a whole lot of bindings in followups to this.

The setup changes a bit. This also removes the double pointer I complained about
while reviewing the shared UA sheet patches. The old setup is:

```
SpecifiedUrl
 * CssUrl
   * Arc<CssUrlData>
     * String
     * UrlExtraData
 * UrlValueSource
   * Arc<CssUrlData>
   * load id
   * resolved uri
   * CORS mode.
   * ...
```

The new one removes the double reference to the url data via URLValue, and looks
like:

```
SpecifiedUrl
 * CssUrl
   * Arc<CssUrlData>
     * String
     * UrlExtraData
     * CorsMode
     * LoadData
       * load id
       * resolved URI
```

The LoadData is the only mutable bit that C++ can change, and is not used from
Rust. Ideally, in the future, we could just use rust-url to resolve the URL
after parsing or something, and make it all immutable. Maybe.

I've verified that this approach still works with the UA sheet patches (via the
LoadDataSource::Lazy).

The reordering of mWillChange is to avoid nsStyleDisplay from going over the
size limit. We want to split it up anyway in bug 1552587, but mBinding gains a
tag member, which means that we were having a bit of extra padding.

One thing I want to explore is to see if we can abuse rustc's non-zero
optimizations to predict the layout from C++, but that's something to explore at
some other point in time and with a lot of care and help from Michael (who sits
next to me and works on rustc ;)).

Differential Revision: https://phabricator.services.mozilla.com/D31742
2019-05-29 21:22:04 +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