Bug 582940 - Make the HTML5 parser URL unescape <a name> until HTML5-compliant fragment navigation is supported. r=bzbarsky, a=blocking2.0-betaN.

--HG--
extra : rebase_source : 0e4cb540161dfe445d58840618877f97cbe8eba0
This commit is contained in:
Henri Sivonen 2010-07-30 13:08:36 +03:00
Родитель ac49929194
Коммит e21d71c019
6 изменённых файлов: 149 добавлений и 2 удалений

Просмотреть файл

@ -60,6 +60,7 @@
#include "nsIMutationObserver.h"
#include "nsIFormProcessor.h"
#include "nsIServiceManager.h"
#include "nsEscape.h"
#ifdef MOZ_SVG
#include "nsHtml5SVGLoadDispatcher.h"
@ -458,8 +459,19 @@ nsHtml5TreeOperation::Perform(nsHtml5TreeOpExecutor* aBuilder,
// prefix doesn't need regetting. it is always null or a static atom
// local name is never null
nsCOMPtr<nsIAtom> localName = Reget(attributes->getLocalName(i));
newContent->SetAttr(attributes->getURI(i), localName, attributes->getPrefix(i), *(attributes->getValue(i)), PR_FALSE);
// XXX what to do with nsresult?
if (ns == kNameSpaceID_XHTML &&
nsHtml5Atoms::a == name &&
nsHtml5Atoms::name == localName) {
// This is an HTML5-incompliant Geckoism.
// Remove when fixing bug 582361
NS_ConvertUTF16toUTF8 cname(*(attributes->getValue(i)));
NS_ConvertUTF8toUTF16 uv(nsUnescape(cname.BeginWriting()));
newContent->SetAttr(attributes->getURI(i), localName,
attributes->getPrefix(i), uv, PR_FALSE);
} else {
newContent->SetAttr(attributes->getURI(i), localName,
attributes->getPrefix(i), *(attributes->getValue(i)), PR_FALSE);
}
}
return rv;

Просмотреть файл

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html class=reftest-wait>
<head>
<meta charset=utf-8>
<title>Fragment nav</title>
<script>
function loaded() {
document.documentElement.removeAttribute("class");
}
</script>
</head>
<body onload='setTimeout(loaded, 10);'>
<iframe src="frame582940-ref.html#ref"></iframe>
</body>
</html>

Просмотреть файл

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html class=reftest-wait>
<head>
<meta charset=utf-8>
<title>Fragment nav</title>
<script>
function loaded() {
document.documentElement.removeAttribute("class");
}
</script>
</head>
<body onload='setTimeout(loaded, 10);'>
<iframe src="frame582940.html#ref%20ref"></iframe>
</body>
</html>

Просмотреть файл

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Fragment nav</title>
</head>
<body>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p><a name='ref'>Ref!</a></p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
</body>
</html>

Просмотреть файл

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Fragment nav</title>
</head>
<body>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p><a name='ref%20ref'>Ref!</a></p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
<p>Filler</p>
</body>
</html>

Просмотреть файл

@ -1,2 +1,3 @@
== bug566280-1.html bug566280-1-ref.html
== bug582788-1.html bug582788-1-ref.html
== bug582940-1.html bug582940-1-ref.html