Closed Bug 823376 Opened 12 years ago Closed 12 years ago

prepend text node cause "head-content" shipped to <body>

Categories

(Core :: DOM: HTML Parser, defect)

16 Branch
x86_64
Windows 7
defect
Not set
normal

Tracking

()

VERIFIED INVALID

People

(Reporter: gengyun, Unassigned)

Details

User Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0E; .NET4.0C)

Steps to reproduce:

open any html page, if you write some text in front of the page such as:


some text here...
<html>
<head>
<meta>
<link>
...
</head>
<body>
...
</body>




Actual results:

everything in the <head> will be shipped out of head, and put under the <body> node like:
<html>
<head>
</head>
<body>
same text here...
<meta>
<link>
...
</body>
</html>


Expected results:

I think it's mainly because the fix to bug 307122. When the html-parser encountered some text, it will open a <body> and put the text in. It will also excute the following code line:

mFlags |= NS_DTD_FLAG_HAD_BODY

which will cause the parser thinks it has encountered a explict opened body, and the following code:

        theHeadIsParent = theHeadIsParent &&
          (isExclusive ||
           (prefersBody
            ? (mFlags & NS_DTD_FLAG_HAS_EXPLICIT_HEAD) &&
              (mFlags & NS_DTD_FLAG_HAS_OPEN_HEAD)
            : !(mFlags & NS_DTD_FLAG_HAS_MAIN_CONTAINER)));

will end up with theHeadIsParent = false;

So any head-content such as <link> and <meta> will be misplaced. I think a quick fix should put them to the right place.
Component: Untriaged → HTML: Parser
Product: Firefox → Core
(In reply to gengyun from comment #0)

> Actual results:
> 
> everything in the <head> will be shipped out of head, and put under the
> <body> node like:
> <html>
> <head>
> </head>
> <body>
> same text here...
> <meta>
> <link>
> ...
> </body>
> </html>

This behavior is required by the HTML specification: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html

> mFlags |= NS_DTD_FLAG_HAD_BODY

That code is no longer in use for parsing anything other than about:blank.

Marking INVALID in the sense that this is not a bug. Bugzilla lacks a better resolution semantic between INVALID and WONTFIX.
Status: UNCONFIRMED → RESOLVED
Closed: 12 years ago
Resolution: --- → INVALID
Thanks, now I understand much better!
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.