Commit Graph
52 Commits
Author SHA1 Message Date
Henri Sivonen 0124daca51 Bug 2038124 addendum - Simplify the attribute holder in the HTML parser. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D302278
2026-06-02 09:12:41 +00:00
Henri Sivonen d13776d321 Bug 2038124 - Optimize setting attributes on non-custom HTML elements from parser. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D302276
2026-06-02 09:12:39 +00:00
Alexandru Marc 16e384440d Revert "Bug 2038124 addendum - Simplify the attribute holder in the HTML parser. r=smaug" for causing build bustages @ Element.cpp
This reverts commit 82b2e13b45.

Revert "Bug 2038124 - Optimize setting attributes on non-custom HTML elements from parser. r=smaug"

This reverts commit 2d1ee1cd69.
2026-06-02 07:41:40 +00:00
Henri Sivonen 82b2e13b45 Bug 2038124 addendum - Simplify the attribute holder in the HTML parser. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D302278
2026-06-02 07:07:28 +00:00
Henri Sivonen 2d1ee1cd69 Bug 2038124 - Optimize setting attributes on non-custom HTML elements from parser. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D302276
2026-06-02 07:07:26 +00:00
Atila Butkovits d68e85e91d Revert "Bug 2038124 addendum - Simplify the attribute holder in the HTML parser. r=smaug" for causing bustages at Element.cpp.
This reverts commit 9dd3f6b595.

Revert "Bug 2038124 - Optimize setting attributes on non-custom HTML elements from parser. r=smaug"

This reverts commit b1774ce65e.
2026-06-01 21:47:14 +00:00
Henri Sivonen 9dd3f6b595 Bug 2038124 addendum - Simplify the attribute holder in the HTML parser. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D302278
2026-06-01 20:50:19 +00:00
Henri Sivonen b1774ce65e Bug 2038124 - Optimize setting attributes on non-custom HTML elements from parser. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D302276
2026-06-01 20:50:16 +00:00
serge-sans-paille b931b9dec7 Bug 2027664 - Mark nsTArray::ClearAndRetainStorage() with [[clang::reinitializes]] as MOZ_REINITIALIZES r=emilio,necko-reviewers,janerik
Quoting https://clang.llvm.org/docs/AttributeReference.html#reinitializes:

    The reinitializes attribute can be applied to a non-static, non-const
    C++ member function to indicate that this member function reinitializes
    the entire object to a known state, independent of the previous state of
    the object.

Which is exactly what we need for clang-tidy's bugprone-use-after-move analysis

Differential Revision: https://phabricator.services.mozilla.com/D290811
2026-03-30 11:30:47 +00:00
Tom Schuster 940baabb7a Bug 1397308 - Implement CSP 'Is element nonceable?' check. r=emilio,hsivonen,freddyb
Differential Revision: https://phabricator.services.mozilla.com/D198150
2024-01-26 14:56:32 +00:00
Olli Pettay 6172d98d49 Bug 1848714 - Use unsafe methods in hot code paths to access and remove elements from nsTArray when it is guaranteed to be safe, r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D186191
2023-08-15 14:24:19 +00:00
Henri Sivonen a8ed2707bb 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 e844dde8a6 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 37fade70f0 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
Sylvestre Ledru e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Emilio Cobos Álvarez 4d343d7da2 Bug 1506133 - More HTML parser cleanup post bug 1392185. r=hsivonen
Differential Revision: https://phabricator.services.mozilla.com/D11480
2018-11-12 14:37:09 +00:00
Boris Zbarsky 051041fc49 Bug 1446097. Switch to "set" as the canonical nsGkAtoms name of the string "set", so it matches the actual tag name "set" in SVG. r=hsivonen,njn
Most of the noise is from the fact that clang-format on parser/html/*.{h,cpp}
reformatted all sorts of stuff.  Not running it caused lots of format changes
from the generator... I guess we changed the format rules since the last time
this got run?

MozReview-Commit-ID: IA2G87zUIKN
2018-03-16 11:26:06 -04:00
Nicholas Nethercote 7dbfdaf890 Bug 1400460 - Rename nsIAtom as nsAtom. r=hiro.
(Path is actually r=froydnj.)

Bug 1400459 devirtualized nsIAtom so that it is no longer a subclass of
nsISupports. This means that nsAtom is now a better name for it than nsIAtom.

MozReview-Commit-ID: 91U22X2NydP
2017-10-03 09:05:19 +11:00
Henri Sivonen 7af0452b6b Bug 1261841 part 2 - Use encoding_rs instead of uconv. r=emk,mystor.
MozReview-Commit-ID: 15Y5GTX98bv
2017-06-13 13:23:23 +03:00
Henri Sivonen 43720a8e05 Bug 1269490 - Merge nsHtml5Atoms into nsGkAtoms. r=wchen
MozReview-Commit-ID: EcfnXkFuJy3
2017-04-20 11:47:02 +03:00
Henri Sivonen 3b050334d4 Bug 1358037 - Inline the methods of nsHtml5ElementName and nsHtml5AttributeName. r=wchen
Moving methods that refer to constant to the header that defines the
constants makes it infeasible to #define the constants at the end
of the header. To avoid introducing a new pass over the Java AST,
this patch turns the primitive constants that were
previously #defined into C++ contants, which, according to
Stroustrup 3rd ed., are handled at compile-time and don't consume
storage.

MozReview-Commit-ID: JnaDgW2OM7t
2017-04-20 10:34:32 +03:00
Henri Sivonen 759c770926 Bug 1355479 - Flatten attribute storage in the HTML parser to AutoTArray to avoid malloc. r=wchen
MozReview-Commit-ID: 77Hqo24F2nB
2017-04-13 11:14:48 +03:00
Henri Sivonen cb263a268d Bug 1347737 - Introduce a new non-heap-allocated type for holding nsStringBuffer* in the HTML parser. r=wchen.
MozReview-Commit-ID: Gn9fXroxQhY
2017-03-20 14:45:15 +02:00
Henri Sivonen a6fb532484 Bug 1288084 - Expose a line number for each attribute, v2; r=wchen 2016-09-20 16:31:57 +02:00
Henri Sivonen 9a0ebc58ff Bug 959150 part 1 - Represent nodes as void* in the portable part of the parser. r=smaug. 2014-03-05 21:38:49 +02:00
Ryan VanderMeulen 35226d8b0a Backed out 8 changesets (bug 959150) for Linux debug build bustage on a CLOSED TREE.
Backed out changeset 30bdc9b15e8e (bug 959150)
Backed out changeset 630e489aed30 (bug 959150)
Backed out changeset c6874004efe7 (bug 959150)
Backed out changeset ebc67518a962 (bug 959150)
Backed out changeset 14441e528582 (bug 959150)
Backed out changeset 8d0ae8bffb08 (bug 959150)
Backed out changeset 603b63c33e9a (bug 959150)
Backed out changeset 261e2d244c54 (bug 959150)
2014-03-05 15:26:07 -05:00
Henri Sivonen ad4e4d2e99 Bug 959150 part 1 - Represent nodes as void* in the portable part of the parser. r=smaug. 2014-03-05 21:38:49 +02:00
Reuben Morais 16c1e76108 Bug 458300 - Rename nsINameSpaceManager.h to nsNameSpaceManager.h. r=jst r=hsivonen 2014-02-27 20:04:46 -03:00
L. David Baron eccc6c3bd1 Bug 976350 patch 1: Move the contents of nsTraceRefcnt.h into nsISupportsImpl.h. r=bsmedberg
This makes sense since the file no longer contains anything with the
nsTraceRefcnt name in it, and it will allow renaming nsTraceRefcntImpl
back to nsTraceRefcnt.
2014-02-26 13:36:35 -08:00
Henri Sivonen 870992c36d Bug 799958 - Remove prtype.h from C++ translator output. r=smaug. 2012-10-25 14:03:27 +03:00
Henri Sivonen e99efa93f4 Bug 503190 - Include assertions in the C++ translator output. r=smaug. 2012-10-01 11:52:32 +03:00
Henri Sivonen fc88a5853d Bug 792790 - Introduce NoBoundsCheck variants of accessors on nsHtml5HtmlAttributes; Make operator= in jArray nullptr-aware. r=smaug. 2012-10-01 11:49:01 +03:00
Ehsan Akhgari 243c878d26 Bug 579517 - Part 1: Automated conversion of NSPR numeric types to stdint types in Gecko; r=bsmedberg
This patch was generated by a script.  Here's the source of the script for
future reference:

function convert() {
echo "Converting $1 to $2..."
find . ! -wholename "*nsprpub*" \
       ! -wholename "*security/nss*" \
       ! -wholename "*/.hg*" \
       ! -wholename "obj-ff-dbg*" \
       ! -name nsXPCOMCID.h \
       ! -name prtypes.h \
         -type f \
      \( -iname "*.cpp" \
         -o -iname "*.h" \
         -o -iname "*.c" \
         -o -iname "*.cc" \
         -o -iname "*.idl" \
         -o -iname "*.ipdl" \
         -o -iname "*.ipdlh" \
         -o -iname "*.mm" \) | \
    xargs -n 1 sed -i -e "s/\b$1\b/$2/g"
}

convert PRInt8 int8_t
convert PRUint8 uint8_t
convert PRInt16 int16_t
convert PRUint16 uint16_t
convert PRInt32 int32_t
convert PRUint32 uint32_t
convert PRInt64 int64_t
convert PRUint64 uint64_t

convert PRIntn int
convert PRUintn unsigned

convert PRSize size_t

convert PROffset32 int32_t
convert PROffset64 int64_t

convert PRPtrdiff ptrdiff_t

convert PRFloat64 double
2012-08-22 11:56:38 -04:00
Aryeh Gregor 8b4a23fc4c Bug 777292 part 2 - Change all nsnull to nullptr 2012-07-30 17:20:58 +03:00
Aryeh Gregor e3e1225e61 Bug 626472 part 1 - Define nsnull as nullptr where available; r=ehsan 2012-07-20 14:16:17 +03:00
Henri Sivonen a42c6e14db Bug 482921 part 1 - Implement HTML syntax highlighting using the new parser. r=Olli.Pettay. 2010-07-30 13:15:38 +03:00
Ehsan Akhgari 478ad1a412 Bug 690892 - Replace PR_TRUE/PR_FALSE with true/false on mozilla-central; rs=dbaron
Landing on a CLOSED TREE
2011-10-17 10:59:28 -04:00
Michael Wu 0fe7772ece Bug 675553 - Switch from PRBool to bool on a CLOSED TREE , r=bsmedberg,khuey,bz,cjones 2011-09-28 23:19:26 -07:00
Henri Sivonen cb3cedf1bc Bug 643395 - Update the HTML parser Java code to the state in the htmlparser repo (NPOTB). rs=jonas. 2011-04-08 09:07:27 +03:00
Henri Sivonen 738dc53862 Bug 605466 - Implement new spec-based limits for formatting element proliferation in the HTML5 parsing algorithm. rs=jonas, a=blocking2.0-betaN. 2010-10-15 12:23:42 +03:00
Henri Sivonen a00ca20e07 Bug 502176 - Replace static use of jArray with a plain old data staticJArray, introduce an autoJArray for nicer memory management. r=tglek, a=jst. 2010-09-28 10:32:31 +03:00
Henri Sivonen ed398af2c1 Bug 555941 - Split HILO_ACCEL out of nsHtml5NamedCharacters. r=jonas, a=benjamin. 2010-06-24 11:54:33 +03:00
Henri Sivonen 38f1270287 Bug 551344 part 6 - Address more review comments from sicking in the Java parts of the HTML5 parser. r=jonas. 2010-04-19 16:25:13 +03:00
Henri Sivonen 4d410f2cc6 Bug 548232 - Make meta charset not have an effect on document.open()ed documents in the HTML5 parser (reverting most of bug 539887). r=bzbarsky. 2010-04-16 13:52:06 +03:00
Henri Sivonen b70fd25289 Bug 539887 - Make document.written meta charset affect the charset of document.opened documents in the HTML5 parser. r=bnewman. 2010-03-09 14:39:32 +02:00
Henri Sivonen 2cf48a3ad5 Bug 516406 - Make document.write() parser and stream parser have distinct tokenizers in the HTML5 parser. r=bnewman. 2009-09-21 16:18:20 +03:00
Henri Sivonen 4384f2fdf0 Bug 515338 - Make HTML5 parser internals not hold nsIContent or regular dynamic atoms. r=bnewman. 2009-09-21 14:43:43 +03:00
Henri Sivonen 78b7b31988 Bug 515142 - Make HTML5 parser never clone nodes. WHATWG spec SVN rev 2947. rs=sicking. 2009-09-21 10:00:10 +03:00
Henri Sivonen 2b8f6a2e36 Bug 499642 - Split the HTML5 parser into stream parser, doc.write parser and tree op executor. r=bnewman, sr=mrbkap. 2009-09-18 12:21:47 +03:00
Henri Sivonen 2f19c38b3b Bug 487949 - Land HTML5 parser on trunk preffed off r=mrbkap, sr=jonas 2009-06-29 00:44:22 +02:00