Commit graph

221 commits

Author SHA1 Message Date
Henri Sivonen
69df6a7000 Bug 1763076 - Avoid OOM crashes when there's a massive number of tree operations. r=edgar
(No test case, because testing unsuited for CI both in terms of space and time.)

Differential Revision: https://phabricator.services.mozilla.com/D143591
2022-04-27 07:24:34 +00:00
Molnar Sandor
622b026960 Backed out changeset aa30bc1b369b (bug 1763076) for causing assertion failure in parser/html/nsHtml5TreeOpExecutor.cpp CLOSED TREE 2022-04-19 14:41:03 +03:00
Henri Sivonen
e70200b735 Bug 1763076 - Avoid OOM crashes when there's a massive number of tree operations. r=edgar
(No test case, because testing unsuited for CI both in terms of space and time.)

Differential Revision: https://phabricator.services.mozilla.com/D143591
2022-04-19 10:19:35 +00:00
Henri Sivonen
97da4f66b8 Bug 1745142 - Communicate encoding commitment via speculative load queue. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D133996
2021-12-22 15:54:49 +00:00
Henri Sivonen
649a5b63d8 Bug 1701828 - meta charset rewrite. r=smaug
Implements https://github.com/whatwg/html/issues/6962 . Improves performance
when <meta charset> occurs in head but after the first kilobyte and aligns
behavior better with WebKit and Blink.

The main change is to avoid reloads when meta appears within head but
after the first kilobyte. Prior to this change, Gecko reloaded in that
case (in compliance with the spec!) even though WebKit and Blink did not.

Differences from WebKit and Blink:

* WebKit and Blink honor <meta charset> in <noscript>. This implementation
  does not.
* WebKit and Blink look for meta as if the tree builder was unaware of
  foreign content. This implementation is foreign content-aware. This
  makes a difference for CDATA sections that contain a > before the meta
  as well as style and script elements within foreign content. This could
  happen if the CDATA section that has mysteriously been introduced around
  a what looks like a meta tag also contains another prior tag-looking
  run of text.
* This implementation processes rel=preload and speculative loads that are
  seen before <meta charset> has been seen. WebKit and Blink instead first
  look for the meta and rewind before starting speculative parsing.
* Unlike WebKit, if there is neither an honored meta nor syntax resembling
  an XML declaration, detection from content takes place (as in Blink).
* Unlike Blink, if there is neither an honored meta nor syntax resembling
  an XML declaration, the detection from content is not dependent of network
  buffer boundaries.
* Unlike Blink, detection from content can trigger a reload at the end of
  the stream if the guess made at that point differs from the first guess.
  (See below for the definition of the input to the first guess.)

Differences from the old spec and Gecko previously:

* Meta inside script and RCDATA elements is no longer honored.
* Late meta is now ignored and no longer triggers a reload.
* Later meta counts as early enough meta: In addition to the previous
  meta within the first 1024 bytes, now a meta that started within the first
  1024 bytes counts as early enough. Additionally, if by then there hasn't
  been a template start tag and head hasn't ended, meta occurring before the
  earlier of the end of the head or a template start tag counts as early
  enough.
* Meta now counts as not-late even if the encoding label has numeric
  character reference escapes.
* Syntax resembling an XML declaration longer than a kilobyte is honored if
  there is no honored meta.
* If there is neither an honored meta nor syntax resembling an XML declaration,
  the initial chardetng scan is potentially longer than before: the first 1024
  bytes, the token spanning the 1024-byte boundary if there is such a token,
  and, if by then head hasn't ended and there hasn't been a template start tag
  until the end of the template start tag or the end of the token that causes
  head to end, ever comes first. However, if the token implying the end of the
  head is a text token, bytes only to the end of the previous non-text token is
  considered. (This definition avoids depending on network buffer boundaries.)
* XML View Source now uses the code for syntax resembling an XML declaration
  instead of expat for extracting the internal encoding label.

Reftest are added as both WPT and Gecko reftests in order to test both http:
and file: URL scenarios. The Gecko tests retain the WPT <link> tags in order
to use the exact same bytes.

An encoding declaration has been added to a number of old tests that didn't
intend to test the new speculation behavior especially in the context of
https://bugzilla.mozilla.org/show_bug.cgi?id=1727750 .

Differential Revision: https://phabricator.services.mozilla.com/D125808
2021-12-08 11:34:20 +00:00
Norisz Fay
1d6984bc21 Backed out changeset 3dfd3c94a105 (bug 1701828) for causing mochitest failures on browser_hsts_host.js CLOSED TREE 2021-12-07 12:05:44 +02:00
Henri Sivonen
58476d7f17 Bug 1701828 - meta charset rewrite. r=smaug
Implements https://github.com/whatwg/html/issues/6962 . Improves performance
when <meta charset> occurs in head but after the first kilobyte and aligns
behavior better with WebKit and Blink.

The main change is to avoid reloads when meta appears within head but
after the first kilobyte. Prior to this change, Gecko reloaded in that
case (in compliance with the spec!) even though WebKit and Blink did not.

Differences from WebKit and Blink:

* WebKit and Blink honor <meta charset> in <noscript>. This implementation
  does not.
* WebKit and Blink look for meta as if the tree builder was unaware of
  foreign content. This implementation is foreign content-aware. This
  makes a difference for CDATA sections that contain a > before the meta
  as well as style and script elements within foreign content. This could
  happen if the CDATA section that has mysteriously been introduced around
  a what looks like a meta tag also contains another prior tag-looking
  run of text.
* This implementation processes rel=preload and speculative loads that are
  seen before <meta charset> has been seen. WebKit and Blink instead first
  look for the meta and rewind before starting speculative parsing.
* Unlike WebKit, if there is neither an honored meta nor syntax resembling
  an XML declaration, detection from content takes place (as in Blink).
* Unlike Blink, if there is neither an honored meta nor syntax resembling
  an XML declaration, the detection from content is not dependent of network
  buffer boundaries.
* Unlike Blink, detection from content can trigger a reload at the end of
  the stream if the guess made at that point differs from the first guess.
  (See below for the definition of the input to the first guess.)

Differences from the old spec and Gecko previously:

* Meta inside script and RCDATA elements is no longer honored.
* Late meta is now ignored and no longer triggers a reload.
* Later meta counts as early enough meta: In addition to the previous
  meta within the first 1024 bytes, now a meta that started within the first
  1024 bytes counts as early enough. Additionally, if by then there hasn't
  been a template start tag and head hasn't ended, meta occurring before the
  earlier of the end of the head or a template start tag counts as early
  enough.
* Meta now counts as not-late even if the encoding label has numeric
  character reference escapes.
* Syntax resembling an XML declaration longer than a kilobyte is honored if
  there is no honored meta.
* If there is neither an honored meta nor syntax resembling an XML declaration,
  the initial chardetng scan is potentially longer than before: the first 1024
  bytes, the token spanning the 1024-byte boundary if there is such a token,
  and, if by then head hasn't ended and there hasn't been a template start tag
  until the end of the template start tag or the end of the token that causes
  head to end, ever comes first. However, if the token implying the end of the
  head is a text token, bytes only to the end of the previous non-text token is
  considered. (This definition avoids depending on network buffer boundaries.)
* XML View Source now uses the code for syntax resembling an XML declaration
  instead of expat for extracting the internal encoding label.

Reftest are added as both WPT and Gecko reftests in order to test both http:
and file: URL scenarios. The Gecko tests retain the WPT <link> tags in order
to use the exact same bytes.

An encoding declaration has been added to a number of old tests that didn't
intend to test the new speculation behavior especially in the context of
https://bugzilla.mozilla.org/show_bug.cgi?id=1727750 .

Differential Revision: https://phabricator.services.mozilla.com/D125808
2021-12-07 07:35:32 +00:00
Henri Sivonen
7588a257ed Bug 1724243 - Make text/plain and MediaDocuments use the Standards Mode. r=smaug,emilio
Differential Revision: https://phabricator.services.mozilla.com/D123318
2021-10-01 12:55:28 +00:00
Henri Sivonen
de1b71fe15 Bug 1650066 preparation - Add errListUnclosedStartTags for HTML tree builder error reporting. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D122597
2021-08-16 05:16:58 +00:00
Emilio Cobos Álvarez
e417f09f06 Bug 1598613 - Account for <link media=""> for speculative loads of stylesheet and preload links. r=hsivonen
<link media> applies to both <link rel="stylesheet"> (see
HTMLLinkElement::GetStyleSheetInfo) and all link rel="preload" links,
regardless of as value (see HTMLLinkElement::CheckPreloadAttrs), so pass it
down and check them for all of those cases.

Note that in the <link rel="stylesheet"> case we'd still have to load it, but
it doesn't block rendering and we defer its loading until more important
stylesheets are done (see SheetLoadData::ShouldDefer() which returns false if
the media attribute didn't match). So speculatively loading it seems
counter-productive.

Differential Revision: https://phabricator.services.mozilla.com/D103565
2021-02-01 08:03:57 +00:00
Edgar Chen
303a7297a3 Bug 1685161 - Use consistent namespace in nsHtml5TreeBuilderCppSupplement.h; r=hsivonen
Differential Revision: https://phabricator.services.mozilla.com/D100818
2021-01-11 13:27:31 +00:00
Edgar Chen
3a7902f2c4 Bug 1489437 - Part 1: Make HTML parser distinguish network, document.write and fragments in append operation; r=smaug,hsivonen
For custom element reaction invocation in the parser, we need a way to distinguish the tree appending operation is from fragments or not,
since we don't want to execute reactions until innerHTML finishes running.
(See spec changes https://github.com/whatwg/html/issues/4025)

We don't need to do anything for opAppendText and opAppendCommand since the text and command won't have any chance to
be a custom element.

Differential Revision: https://phabricator.services.mozilla.com/D10226
2021-01-06 09:29:41 +00:00
Emilio Cobos Álvarez
f813f5248d Bug 1669664 - Don't speculatively load scripts, etc inside a template element. r=hsivonen
I guess in order to make this 100% sound we should check the whole
template mode stack, but that seemed more expensive than what I'd really
like, and I think it's not likely to be an issue in practice (maybe we
can too-eagerly preload some images inside tables inside templates, or
something of that sort?).

Differential Revision: https://phabricator.services.mozilla.com/D92773
2020-10-14 21:58:50 +00:00
Bogdan Tara
f07a7512b9 Backed out changeset 0191bd914f91 (bug 1669664) for test_login_item.html failures a=backout 2020-10-09 00:01:18 +03:00
Emilio Cobos Álvarez
35ada269d3 Bug 1669664 - Don't speculatively load scripts, etc inside a template element. r=hsivonen
I guess in order to make this 100% sound we should check the whole
template mode stack, but that seemed more expensive than what I'd really
like, and I think it's not likely to be an issue in practice (maybe we
can too-eagerly preload some images inside tables inside templates, or
something of that sort?).

Differential Revision: https://phabricator.services.mozilla.com/D92773
2020-10-08 10:58:27 +00:00
Simon Giesecke
de7bab0f06 Bug 1650145 - Replace all value uses of Empty[C]String by 0-length _ns literals. r=froydnj,geckoview-reviewers,agi
Differential Revision: https://phabricator.services.mozilla.com/D82325
2020-09-23 15:17:15 +00:00
Henri Sivonen
bb3eb9db34 Bug 1663921 - Make the speculative parser honor the non-xlink: versions of SVG href. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D89604
2020-09-10 11:37:07 +00:00
Kagami Sascha Rosylight
0f5ce0d9b6 Bug 1646140 - Fire SVG onload only when scripting is enabled r=hsivonen
Differential Revision: https://phabricator.services.mozilla.com/D89218
2020-09-07 14:45:12 +00:00
Simon Giesecke
1e02318b49 Bug 1653335 - Replace MakeSpan uses by constructor calls. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D83817
2020-08-07 07:49:47 +00:00
Sean Feng
75047f597c Bug 1653474 - Process META elements when it's inserted r=smaug
Unlike other engine vendors, we process meta elements
at parser, instead of when they are inserted. This
leads some web compact issues.

This patch aligns us with other vendors.

Differential Revision: https://phabricator.services.mozilla.com/D84545
2020-08-05 16:32:57 +00:00
Simon Pieters
8932345bb3 Bug 1650329 - Improve message: bad start tag in noscript in head. r=alchen
Differential Revision: https://phabricator.services.mozilla.com/D82152
2020-08-03 12:30:12 +00:00
Michael[tm] Smith
8399e9fd77 Bug 1650320 - Drop parse error for missing </caption> end tag. r=alchen
See https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-incaption:stack-of-open-elements-2
The parse error for this case was dropped from the spec in
https://github.com/whatwg/html/commit/759ee62

Relates to https://github.com/validator/validator/issues/593
and https://bugzilla.mozilla.org/show_bug.cgi?id=1429415

Differential Revision: https://phabricator.services.mozilla.com/D82146
2020-07-06 12:45:48 +00:00
Michael[tm] Smith
eb17e73a0a Bug 1077211 - Fix grammar problem in HTML parser error message. r=flod,alchen
Differential Revision: https://phabricator.services.mozilla.com/D81995
2020-07-03 10:22:42 +00:00
Honza Bambas
bc388980de Bug 1618322 - Merge network.preload.experimental pref to network.preload, r=dragana
Depends on D70235

Differential Revision: https://phabricator.services.mozilla.com/D70526
2020-05-11 14:15:30 +00:00
Honza Bambas
ec52ba8274 Bug 1618536 - Preload for fonts, r=heycam,hsivonen
Depends on D72118

Differential Revision: https://phabricator.services.mozilla.com/D70235
2020-05-11 14:14:32 +00:00
Honza Bambas
9e027ce534 Bug 1618535 - Implement preloading for as="fetch" type r=kershaw,baku
Depends on D69860

Differential Revision: https://phabricator.services.mozilla.com/D69628
2020-05-11 14:12:33 +00:00
Edgar Chen
3f250fba44 Bug 1618295 - Make imgRequestProxy implement and use PreloaderBase to support the preload as speculative load feature; r=tnikkel,smaug,mayhemer
Depends on D72083

Differential Revision: https://phabricator.services.mozilla.com/D69860
2020-05-11 14:43:05 +00:00
Oana Pop Rus
77ceff26f5 Backed out changeset e65a9431a729 (bug 1618643) for build bustages in sHtml5TreeBuilderCppSupplement.h on a CLOSED TREE 2020-02-28 21:28:02 +02:00
Eric Rahm
eaccc90075 Bug 1618643 - Remove nsAutoPtr usage from parser. r=hsivonen
Differential Revision: https://phabricator.services.mozilla.com/D64251

--HG--
extra : moz-landing-system : lando
2020-02-28 19:12:58 +00:00
Hiroyuki Ikezoe
157511a8d7 Bug 1542784 - Stop speculative image load for lazy load images. r=hsivonen
Depends on D61434

Differential Revision: https://phabricator.services.mozilla.com/D61435

--HG--
extra : moz-landing-system : lando
2020-02-12 21:29:10 +00:00
Honza Bambas
ce072f8e6a Bug 1594449 - <link rel="preload"> implemented as a speculative load initiated during the prescan phase in the HTML5 parser, disabled by default, only supports "script" and "styles" types, r=ckerschb
Differential Revision: https://phabricator.services.mozilla.com/D52019

--HG--
extra : moz-landing-system : lando
2019-11-27 21:45:12 +00:00
Mirko Brodesser
b2de103bf9 Bug 1593222: part 12) Rename "nsNodeUtils.*" to "MutationObservers.*". r=smaug
Depends on D51827

Differential Revision: https://phabricator.services.mozilla.com/D51828

--HG--
rename : dom/base/nsNodeUtils.cpp => dom/base/MutationObservers.cpp
rename : dom/base/nsNodeUtils.h => dom/base/MutationObservers.h
extra : moz-landing-system : lando
2019-11-06 09:08:06 +00:00
Emilio Cobos Álvarez
453ca45319 Bug 1585674 - Start loads more incrementally in the @import scanner. r=hsivonen
Consider the case of a very big <style> element, with a few imports on top,
which we cut half-way over the network.

The @import scanner would be likely to have found anything there is to be found,
but we won't process it until we pop the <style> element. It's relatively low
effort to support this use-case by making Scan() return the already-found urls.

Differential Revision: https://phabricator.services.mozilla.com/D47914

--HG--
extra : moz-landing-system : lando
2019-10-03 07:34:35 +00:00
Emilio Cobos Álvarez
1f94271c1d Bug 1546783 - Speculatively load @import rules inside <style>. r=bzbarsky,hsivonen
We don't bother handling the nested element case amazingly. We'd instead stop
at the inner <style> element and drop the URLs from the outer.

But I think that's ok. Any good way to test this? I've verified it does the
right thing looking at the CSS loader logs, but... :)

Differential Revision: https://phabricator.services.mozilla.com/D47471

--HG--
extra : moz-landing-system : lando
2019-09-30 13:39:33 +00:00
Emilio Cobos Álvarez
6195ff232c Bug 1546783 - Stop speculatively trying to load <svg:style xlink:href>. r=bzbarsky
That doesn't make much sense to me.

Differential Revision: https://phabricator.services.mozilla.com/D47470

--HG--
extra : moz-landing-system : lando
2019-09-30 13:29:21 +00:00
Coroiu Cristina
b3555c999a Backed out 3 changesets (bug 1546783) on request by emilio on a CLOSED TREE
Backed out changeset ad3822105edc (bug 1546783)
Backed out changeset a8ac28c2bfc7 (bug 1546783)
Backed out changeset b2678d2e55fb (bug 1546783)
2019-09-30 16:23:16 +03:00
Emilio Cobos Álvarez
f65a6de55c Bug 1546783 - Speculatively load @import rules inside <style>. r=bzbarsky,hsivonen
We don't bother handling the nested element case amazingly. We'd instead stop
at the inner <style> element and drop the URLs from the outer.

But I think that's ok. Any good way to test this? I've verified it does the
right thing looking at the CSS loader logs, but... :)

Differential Revision: https://phabricator.services.mozilla.com/D47471

--HG--
extra : moz-landing-system : lando
2019-09-30 13:00:22 +00:00
Emilio Cobos Álvarez
bc0624be6a Bug 1546783 - Stop speculatively trying to load <svg:style xlink:href>. r=bzbarsky
That doesn't make much sense to me.

Differential Revision: https://phabricator.services.mozilla.com/D47470

--HG--
extra : moz-landing-system : lando
2019-09-30 10:37:24 +00:00
Brendan Dahl
5915a3e4bf Bug 1575620 - Fix refreshing session restore when using prototype cache. r=smaug
The session restore page keeps its restore list within a text input field
so that the values are persisted even if the page is refreshed. When form
elements were loaded with the prototype cache we didn't call
DoneCreatingElement after creating the element, which means the form values
weren't restored.

The list of elements that require DoneCreatingElement and DoneAddingChildren
to be called was in three (now four) different places, so I moved them to
a central spot in nsIContent to share in all locations. This also highlighted
that the check for <output> nodes is missing from the XML content sink.

Differential Revision: https://phabricator.services.mozilla.com/D44866

--HG--
extra : moz-landing-system : lando
2019-09-06 20:27:09 +00:00
shindli
b99fd194b2 Backed out changeset 5e9663384022 (bug 1575620) for causing bustages in builds/worker/workspace/build/src/obj-firefox/dist/include/nsIContent.h CLOSED TREE 2019-09-06 22:47:18 +03:00
Brendan Dahl
c377fd351d Bug 1575620 - Fix refreshing session restore when using prototype cache. r=smaug
The session restore page keeps its restore list within a text input field
so that the values are persisted even if the page is refreshed. When form
elements were loaded with the prototype cache we didn't call
DoneCreatingElement after creating the element, which means the form values
weren't restored.

The list of elements that require DoneCreatingElement and DoneAddingChildren
to be called was in three (now four) different places, so I moved them to
a central spot in nsIContent to share in all locations. This also highlighted
that the check for <output> nodes is missing from the XML content sink.

Differential Revision: https://phabricator.services.mozilla.com/D44866

--HG--
extra : moz-landing-system : lando
2019-09-05 22:26:25 +00:00
Alphan Chen
fc59938bee Bug 1482885 - Refactor nsHtml5TreeOperation's enum plus fields into mozilla::Variant r=hsivonen
Differential Revision: https://phabricator.services.mozilla.com/D42809

--HG--
extra : moz-landing-system : lando
2019-08-27 09:39:41 +00:00
Emilio Cobos Álvarez
2189015730 Bug 1565129 - Re-introduce plain_text.wrap_long_lines. r=bzbarsky
Looks like some users use it, and it's not too much effort to support. This is
somewhat simpler, and IMO better than what existed before bug 1514655 because:

 * It doesn't regress bidi rendering when the pref is disabled (before, the pref
   would prevent plaintext.css from applying altogether).

 * It's consistent with the way view-source docs work.

 * It doesn't use non-standard stylesheet APIs to toggle the stylesheet
   (bug 1260720).

Differential Revision: https://phabricator.services.mozilla.com/D37742

--HG--
extra : moz-landing-system : lando
2019-07-11 18:49:50 +00:00
Bogdan Tara
fa0329b09b Backed out changeset 6f468ad73df2 (bug 1565129) for causing leaks CLOSED TREE 2019-07-11 21:00:59 +03:00
Emilio Cobos Álvarez
f75dd725f5 Bug 1565129 - Re-introduce plain_text.wrap_long_lines. r=bzbarsky
Looks like some users use it, and it's not too much effort to support. This is
somewhat simpler, and IMO better than what existed before bug 1514655 because:

 * It doesn't regress bidi rendering when the pref is disabled (before, the pref
   would prevent plaintext.css from applying altogether).

 * It's consistent with the way view-source docs work.

 * It doesn't use non-standard stylesheet APIs to toggle the stylesheet
   (bug 1260720).

Differential Revision: https://phabricator.services.mozilla.com/D37742

--HG--
extra : moz-landing-system : lando
2019-07-11 16:32:08 +00:00
Masayuki Nakano
5e41233499 Bug 1540990 - Get rid of unnecessary nsIPresShell.h inclusions r=emilio
A lot of files include `nsIPresShell.h` even though currently they don't
need it.  This patch removes the unnecessary inclusions.

Differential Revision: https://phabricator.services.mozilla.com/D25744

--HG--
extra : moz-landing-system : lando
2019-04-04 00:19:48 +00:00
Razvan Maries
1cd564b971 Backed out changeset 3b94c20ba873 (bug 1540990) for build bustages. CLOSED TREE 2019-04-04 02:44:00 +03:00
Masayuki Nakano
b2bba953cc Bug 1540990 - Get rid of unnecessary nsIPresShell.h inclusions r=emilio
A lot of files include `nsIPresShell.h` even though currently they don't
need it.  This patch removes the unnecessary inclusions.

Differential Revision: https://phabricator.services.mozilla.com/D25744

--HG--
extra : moz-landing-system : lando
2019-04-03 23:29:38 +00:00
Henri Sivonen
34559b2b59 Bug 256180 parser part - Insert elements as siblings instead of children at the Blink-defined magic depth for compatibility. r=smaug.
MozReview-Commit-ID: K8fgv3rgklt
2019-01-11 09:44:09 +02:00
Andreea Pavel
f5a1a0f098 Backed out 5 changesets (bug 256180) for failing win xpcshell at xpcshell.ini:toolkit/mozapps/extensions/test/xpcshell/test_temporary.js on a CLOSED TREE
Backed out changeset e85e41f84971 (bug 256180)
Backed out changeset 125ebcfac58d (bug 256180)
Backed out changeset bc2e0a89d88e (bug 256180)
Backed out changeset b696df615c8b (bug 256180)
Backed out changeset 2d69841d2eb7 (bug 256180)
2019-01-08 20:35:31 +02:00