Commit graph

252 commits

Author SHA1 Message Date
Emilio Cobos Álvarez
91e6e4c5d4 Bug 1823686 - Share URLExtraData between SVG attribute mapping and style attribute. r=smaug
I don't think there's ever a way these should differ.

Got some include hell from removing ReferrerInfo.h from Document.h but
hopefully should be straight-forward to review.

Depends on D173154

Differential Revision: https://phabricator.services.mozilla.com/D173155
2023-03-22 14:54:43 +00:00
Olli Pettay
c9a8465bf3 Bug 1800347, use RenderBlocking priority for async css parsing, r=emilio
Depends on D161954

Differential Revision: https://phabricator.services.mozilla.com/D161955
2022-11-16 09:23:28 +00:00
Olli Pettay
93acdfad59 Bug 1777574, automate CC zone handling, r=mccr8
Differential Revision: https://phabricator.services.mozilla.com/D155084
2022-09-07 11:22:51 +00:00
Emilio Cobos Álvarez
32257d0c50 Bug 1769771 - Improve DevTools support for constructable stylesheets. r=nchevobbe
These should be trivial fixes for the most part, just fixing assumptions
for constructable stylesheets which have no owner node. Since Gecko
internally also has the concept of "associated document", let's just use
that.

We don't have the authored text around for these. We could keep it
around but I'd kinda prefer we didn't have to just for devtools, since
it seems to me we already need to deal with rules not being there
(imagine e.g. an empty style element with all the rules inserted via
script with insertRule()). So returning the empty string should be
reasonable for now...

Writing some tests now...

Differential Revision: https://phabricator.services.mozilla.com/D146682
2022-05-19 22:32:28 +00:00
Emilio Cobos Álvarez
47ef79d1a6 Bug 1768215 - Use the right referrer info for constructable stylesheets. r=jfkthame
Document::GetReferrerInfo is not what we want (that is the referrer of
the document itself).

What we want is to use the document _as_ the referrer. That's what
regular stylesheets do, and that fixes our chrome only rules enabled
check.

Differential Revision: https://phabricator.services.mozilla.com/D145794
2022-05-06 16:42:41 +00:00
Emilio Cobos Álvarez
82f5738318 Bug 1752392 - Don't drop CSSStyleSheet.cssRules from CSSStyleSheet.replace/Sync(). r=firefox-style-system-reviewers,layout-reviewers,boris
As per spec this object should always return the same JS object.

Differential Revision: https://phabricator.services.mozilla.com/D144569
2022-04-28 15:40:19 +00:00
Cristian Tuns
1ea913ec8d Backed out 2 changesets (bug 1644102, bug 1752392) for causing mochitest failures in test_parseStyleSheetImport.html CLOSED TREE
Backed out changeset b5c0bdafaf5e (bug 1644102)
Backed out changeset 092814d96f1d (bug 1752392)
2022-04-28 05:37:52 -04:00
Emilio Cobos Álvarez
f334bb494a Bug 1752392 - Don't drop CSSStyleSheet.cssRules from CSSStyleSheet.replace/Sync(). r=firefox-style-system-reviewers,layout-reviewers,boris
As per spec this object should always return the same JS object.

Differential Revision: https://phabricator.services.mozilla.com/D144569
2022-04-27 23:50:48 +00:00
Emilio Cobos Álvarez
48c864f2b1 Bug 1729488 - Refactor shared sheet cache into something more reusable. r=jwatt
This moves the style-specific bits of the shared style sheet cache into
a super-class, and leaves the generic "sub-resource management" bits
inside a base class. In order to implement it you need to provide some
types, mainly:

  * Loader, which implements LoaderPrincipal() and allows you to key per
    principal. The idea is that this would be the
    {CSS,Script,Image}Loader object.

  * Key (self explanatory). We might want to introduce a common key to
    share the cache partitioning logic.

  * Value, which represents the final cached value. This is expected to
    be a StyleSheet / Stencil / imgRequestProxy.

  * LoadingValue, which must inherit from
    SharedSubResourceCacheLoadingValueBase (which contains the linked
    list and the state that the cache manages). It also must provide a
    ValueForCache() and ExpirationTime() members. For style, this is the
    SheetLoadData. For script this will probably be the
    ScriptLoadRequest. For images it might be enough with the
    imgRequestProxy, but we might need something else, haven't looked
    into it too deeply yet.

We move the use counters into the stylesheet since that's both more
similar to how we treat StyleSheetContents and easier (that way we don't
need to add some sort of "extra data" thing to the cache).

Differential Revision: https://phabricator.services.mozilla.com/D124820
2021-10-05 15:15:22 +00:00
Emilio Cobos Álvarez
7529077948 Bug 1730669 - Simplify requesting node set up in the CSS loader. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D125527
2021-09-15 16:43:30 +00:00
Emilio Cobos Álvarez
597b7bc37d Bug 1729330 - Add a simple CSSLayerRule implementation. r=smaug
The specifics of how this is going to work are still getting spec'd /
discussed in https://github.com/w3c/csswg-drafts/issues/6576, but this
allows DevTools to work fine and the feature to be complete enough for
Nightly experimentation (with the other in-flight patches).

Otherwise devtools crashes when trying to inspect pages that use them.

Differential Revision: https://phabricator.services.mozilla.com/D124656
2021-09-08 11:18:32 +00:00
Emilio Cobos Álvarez
a240c81d43 Bug 1719963 - Restore EnsureUniqueInner() call for now. r=jfkthame
This effectively reverts the behavior to the one before bug 1711437
(making the CC setup sound again), but without a big backout.

Fixing the CC setup of @import rules properly is a bit more involved
than what I anticipated and I don't want to have DevTools folks blocked
for too long, nor have this crash in-tree for too long either.

Differential Revision: https://phabricator.services.mozilla.com/D122819
2021-08-17 09:26:29 +00:00
Emilio Cobos Álvarez
60812fc63c Bug 1711437 - Don't EnsureUniqueInner from the cssRules getter. r=layout-reviewers,jfkthame
Instead, fix up the various content data structures when the stylesheet
is mutated. This makes reading a stylesheet not disable style sharing.

Differential Revision: https://phabricator.services.mozilla.com/D115203
2021-07-20 13:17:02 +00:00
Dorel Luca
d1e1f219ba Backed out changeset 0e17878eeb86 (bug 1711437) for causing Bug 1719963. a=backout DONTBUILD 2021-07-14 00:36:05 +03:00
Emilio Cobos Álvarez
241951bce9 Bug 1711437 - Don't EnsureUniqueInner from the cssRules getter. r=layout-reviewers,jfkthame
Instead, fix up the various content data structures when the stylesheet
is mutated. This makes reading a stylesheet not disable style sharing.

Differential Revision: https://phabricator.services.mozilla.com/D115203
2021-07-12 16:02:58 +00:00
Alexandru Michis
6550c23862 Backed out changeset 998af7ced46f (bug 1711437) for causing Bug 1719963. a=backout 2021-07-10 12:44:08 +03:00
Emilio Cobos Álvarez
3de336bbc1 Bug 1711437 - Don't EnsureUniqueInner from the cssRules getter. r=layout-reviewers,jfkthame
Instead, fix up the various content data structures when the stylesheet
is mutated. This makes reading a stylesheet not disable style sharing.

Differential Revision: https://phabricator.services.mozilla.com/D115203
2021-07-09 16:25:54 +00:00
Butkovits Atila
95df13ddf8 Backed out changeset f7944c3f9e5b (bug 1711437) for causing mochitest failures. CLOSED TREE 2021-05-25 18:56:00 +03:00
Emilio Cobos Álvarez
4da4bb9699 Bug 1711437 - Don't EnsureUniqueInner from the cssRules getter. r=layout-reviewers,jfkthame
Instead, fix up the various content data structures when the stylesheet
is mutated. This makes reading a stylesheet not disable style sharing.

Differential Revision: https://phabricator.services.mozilla.com/D115203
2021-05-25 13:23:35 +00:00
Dorel Luca
08f063f4c8 Backed out changeset 2c95330ad7c7 (bug 1711437) for Devtools failures in devtools/client/inspector/markup/test/browser_markup_shadowdom.js. CLOSED TREE 2021-05-24 23:01:46 +03:00
Emilio Cobos Álvarez
510cae01ca Bug 1711437 - Don't EnsureUniqueInner from the cssRules getter. r=layout-reviewers,jfkthame
Instead, fix up the various content data structures when the stylesheet
is mutated. This makes reading a stylesheet not disable style sharing.

Differential Revision: https://phabricator.services.mozilla.com/D115203
2021-05-24 17:18:44 +00:00
Kagami Sascha Rosylight
dc1c69954e Bug 1697829 - Part 2: Make sure mRelevantGlobal exists for constructed stylesheets r=emilio
Depends on D108873

Differential Revision: https://phabricator.services.mozilla.com/D109398
2021-03-22 21:15:34 +00:00
Kagami Sascha Rosylight
ae57171286 Bug 1697829 - Part 1: Get relevant global for disassociated CSS rule objects r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D108873
2021-03-22 21:15:34 +00:00
Emilio Cobos Álvarez
fe36177806 Bug 1637651 - Assume non-quirks mode for style Link header preloads. r=smaug
This is an issue I found while going through this code and
writing/debugging a test for the bug at hand. Without this, the test in
the actual fix for this bug will fail to actually reuse the preloaded
stylesheet.

It seems reasonable to assume that the intersection of quirks mode
documents using link preload headers is small (and in that case we'd
parse the sheet twice, but oh well).

Differential Revision: https://phabricator.services.mozilla.com/D103567
2021-02-01 23:23:50 +00:00
Emilio Cobos Álvarez
1ff0ef892e Bug 1551040 - Allow resource:// stylesheets to use chrome-only rules. r=boris
We'll use it to use @-moz-document from plaintext.css.

Differential Revision: https://phabricator.services.mozilla.com/D101516
2021-01-17 15:07:49 +00:00
Dorel Luca
dac45cc702 Backed out 3 changesets (bug 1551040) for Browser-chrome failures in browser/base/content/test/static/browser_parsable_css.js
Backed out changeset f48f479bcacd (bug 1551040)
Backed out changeset a6cd4b393999 (bug 1551040)
Backed out changeset 252cbf40efcb (bug 1551040)
2021-01-17 16:38:39 +02:00
Emilio Cobos Álvarez
ad1d2a73aa Bug 1551040 - Allow resource:// stylesheets to use chrome-only rules. r=boris
We'll use it to use @-moz-document from plaintext.css.

Differential Revision: https://phabricator.services.mozilla.com/D101516
2021-01-16 18:58:27 +00:00
Bogdan Tara
c88a628881 Backed out 3 changesets (bug 1551040) for stylesheets related bustage CLOSED TREE
Backed out changeset 3822fe3e163d (bug 1551040)
Backed out changeset 032025f28d8f (bug 1551040)
Backed out changeset 1aeb38c2dce3 (bug 1551040)
2021-01-16 20:53:31 +02:00
Emilio Cobos Álvarez
2e092ef47c Bug 1551040 - Allow resource:// stylesheets to use chrome-only rules. r=boris
We'll use it to use @-moz-document from plaintext.css.

Differential Revision: https://phabricator.services.mozilla.com/D101516
2021-01-16 18:26:52 +00:00
Emilio Cobos Álvarez
039592f4d8 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
Emilio Cobos Álvarez
706baf70b6 Bug 1673964 - Fix a typo in an exception message. r=boris
> CSSStyleSheet.cssRules getter: Can't access rules of still-loading
> stylsheet

I have no idea what an stylsheet is :)

Differential Revision: https://phabricator.services.mozilla.com/D95064
2020-10-28 21:22:43 +00:00
Emilio Cobos Álvarez
b800731028 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
Sylvestre Ledru
caf785c695 Bug 1519636 - Reformat recent changes to the Google coding style r=andi
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D82178
2020-07-04 09:38:43 +00:00
Simon Giesecke
cd8b8939b9 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
Emilio Cobos Álvarez
7649856b1f Bug 1649197 - Remove StyleSheet::UnparentChildren. r=nordzilla
It leaves parent pointers nulled out when it really shouldn't when
cloning shared sheets (if there's another suitable parent, we should use
that instead of nulling out).

Fix the code in StyleSheetInfo::RemoveSheet to handle all cases
(including nulling out when removing the only remaining sheet), and rely
on that instead.

Differential Revision: https://phabricator.services.mozilla.com/D81569
2020-06-29 18:41:20 +00:00
Emilio Cobos Álvarez
67f90f0a9e Bug 1648736 - Don't mark a load as performed on a given document until it has actually finished. r=heycam
Consider the case where we have an expired entry in the cache, and we
load a new document.

We get an speculative load from the HTML parser. That's great, and we
see the entry is expired and actually fired the load.

But then, we actually get to the load that the <link> element performs,
and we see that we've already performed this load, so instead of peeking
the in-progress load, we go ahead and peek the expired "complete" cache
entry, which is not what we want.

By marking a load as performed only once it has finished, we avoid the
complete sheet cache, and glom onto the existing load instead, which is
the correct thing to do.

Differential Revision: https://phabricator.services.mozilla.com/D81318
2020-06-29 17:29:06 +00:00
Emilio Cobos Álvarez
8c691e51cb Bug 1646776 - Don't set an URL for pending constructable stylesheet parses. r=heycam
This shouldn't have any behavior change, but it makes the code make a
bit more sense. Rather than counting inline stylesheets like a pending
load, we won't (but note that any @import inside it will).

The SheetLoadData::mURL it's supposed to be the url of the stylesheet,
so for StyleSheet::Replace it should be null.

Differential Revision: https://phabricator.services.mozilla.com/D80379
2020-06-23 02:54:58 +00:00
Emilio Cobos Álvarez
901e5fd0d7 Bug 1645180 - Don't under-report use counters for documents that hit the shared sheet cache. r=firefox-style-system-reviewers,heycam
This makes us refactor a bit more our setup but I think the end it's
worth it.

Differential Revision: https://phabricator.services.mozilla.com/D79377
2020-06-13 02:03:08 +00:00
Emilio Cobos Álvarez
f3e71a1931 Bug 1599160 - Allow caching stylesheets across documents. r=heycam
This patch implements a per-process cache of parsed stylesheets for
non-inline sheets. The entries are evicted when the document gets
destroyed and there's no other document with the same principal around.

This works fine in practice even when navigating because CC happens
pretty late, but we could add an extra timer if we deem it worth it.

I had to adapt some tests so that they keep passing. They were already
clearing various image / network caches so it seems fine to also clear
this one.

Note that there's a very subtle change in the load data key: We only
miss the cache if the referrer _policy_ is different, not if the
referrer is different. While that is slightly dubious, that is the only
think that makes this effort somewhat worth it. Otherwise stylesheets
would have to be re-fetched if the referrer is different, which
effectively would mean to re-parse it if the document URI is different,
which is bad.

It seems like the network cache only keys on the referrer policy, so it
seems fine to do the same.

Differential Revision: https://phabricator.services.mozilla.com/D77457
2020-06-12 19:31:32 +00:00
Razvan Maries
7b30d6e82e Backed out 7 changesets (bug 1599160) for damp failures. CLOSED TREE
Backed out changeset edb0e17f3c98 (bug 1599160)
Backed out changeset 64b42ac358e6 (bug 1599160)
Backed out changeset ce1521b895e1 (bug 1599160)
Backed out changeset 0b0ff0ad8db7 (bug 1599160)
Backed out changeset c7ef05dae614 (bug 1599160)
Backed out changeset 466cfd0ad5db (bug 1599160)
Backed out changeset b3f28494f0e7 (bug 1599160)
2020-06-12 02:40:38 +03:00
Emilio Cobos Álvarez
208b60eed2 Bug 1599160 - Allow caching stylesheets across documents. r=heycam
This patch implements a per-process cache of parsed stylesheets for
non-inline sheets. The entries are evicted when the document gets
destroyed and there's no other document with the same principal around.

This works fine in practice even when navigating because CC happens
pretty late, but we could add an extra timer if we deem it worth it.

I had to adapt some tests so that they keep passing. They were already
clearing various image / network caches so it seems fine to also clear
this one.

Note that there's a very subtle change in the load data key: We only
miss the cache if the referrer _policy_ is different, not if the
referrer is different. While that is slightly dubious, that is the only
think that makes this effort somewhat worth it. Otherwise stylesheets
would have to be re-fetched if the referrer is different, which
effectively would mean to re-parse it if the document URI is different,
which is bad.

It seems like the network cache only keys on the referrer policy, so it
seems fine to do the same.

Differential Revision: https://phabricator.services.mozilla.com/D77457
2020-06-11 11:42:46 +00:00
Emilio Cobos Álvarez
5f15c64dda Bug 1642224 - Make sheet loads always have a sensible triggering principal. r=ckerschb
I'm going to need to always have a principal at hand for bug 1599160,
and this helps with that.

This fixes the assumptions in the comment here:

  https://searchfox.org/mozilla-central/rev/5e4d4827aa005d031580d2d17a01bae1af138b2e/layout/style/Loader.cpp#1408-1411

Which are not always true I think.

In particular, we may not always do a non-system load without an
associated DOM node. For link headers, we use the document loader, but
there's no DOM node to get a hand to. In those cases, before this patch
we're currently loading using the system principal, which seems wrong.

Differential Revision: https://phabricator.services.mozilla.com/D77614
2020-06-08 09:11:26 +00:00
Cameron McCormack
1e8189c0f1 Bug 1640537 - Improve style sheet dumping in the layout debugger. r=TYLin
Make it show the contents of style sheets (as it used to before Stylo)
and make it work in --disable-debug --enable-layout-debugger builds.

Differential Revision: https://phabricator.services.mozilla.com/D76640
2020-05-26 23:07:36 +00:00
Emilio Cobos Álvarez
c3b7227771 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
Emilio Cobos Álvarez
ed46f1f078 Bug 1636974 - Make SheetLoadData know whether it's a preload on construction. r=mayhemer
And make a bunch of other stuff const while at it.

Differential Revision: https://phabricator.services.mozilla.com/D74860
2020-05-12 16:36:11 +00:00
Razvan Maries
d70a3f8735 Backed out 2 changesets (bug 1636974) for wpt perma failures at subresource-integrity.html. CLOSED TREE
Backed out changeset 74820b124af2 (bug 1636974)
Backed out changeset f53ceddd5fe3 (bug 1636974)
2020-05-12 22:46:15 +03:00
Emilio Cobos Álvarez
d17a489ef0 Bug 1636974 - Make SheetLoadData know whether it's a preload on construction. r=mayhemer
And make a bunch of other stuff const while at it.

Differential Revision: https://phabricator.services.mozilla.com/D74860
2020-05-12 16:36:11 +00:00
Cameron McCormack
3ccaaa0422 Bug 1621773 - Gracefully handle errors creating shared memory UA style sheets. r=emilio
We still panic in a debug build, so that developers can notice when they
need to add a new static atom after modifying UA sheets.

We also add telemetry to note when this happens, add an app note to a
crash report, in case any crash later on occurs, and re-up the existing,
expired shared memory sheet telemetry probes so we can look at them
again.

Differential Revision: https://phabricator.services.mozilla.com/D73188
2020-05-11 00:11:45 +00:00
Erik Nordin
2060006fba Bug 1632686 - Retain GlobalObject in StyleSheets r=emilio
- Add new data member StyleSheet::mParentObject
- Clone Sheets before adding them to nsXULPrototypeCache
- Return mParentObject from GetParentObject if non-null

Differential Revision: https://phabricator.services.mozilla.com/D72725
2020-05-01 17:08:54 +00:00
Erik Nordin
83744c8b4d Bug 1626005 - Fix crash when non-constructed sheets call replace() r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D71399
2020-04-24 17:42:22 +00:00