Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions html/syntax/parsing/doctype-system-identifier-distinction.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<!DOCTYPE html>
<meta charset="utf-8" />
<title>DOCTYPE system identifier: empty string treated as missing</title>
<link
rel="help"
href="https://html.spec.whatwg.org/multipage/parsing.html#the-initial-insertion-mode"
/>
<link rel="help" href="https://github.com/whatwg/html/issues/12023" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
// Tests that an empty string system identifier is treated the same as a missing
// system identifier for quirks mode determination.
// See https://github.com/whatwg/html/issues/12023
//
// The important distinction that must be preserved:
// - missing system ID → quirks mode (BackCompat)
// - empty system ID → quirks mode (BackCompat) [same as missing]
// - non-empty system ID → limited-quirks mode (CSS1Compat) [different from missing]

const testCases = [
// HTML 4.01 Frameset - empty system ID (treated same as missing)
{
file: "support/doctype-system-id-empty-frameset.html",
expected: "BackCompat",
description:
'DOCTYPE with "-//W3C//DTD HTML 4.01 Frameset//" and empty system ID triggers quirks mode',
},
// HTML 4.01 Frameset - missing system ID
{
file: "support/doctype-system-id-missing-frameset.html",
expected: "BackCompat",
description:
'DOCTYPE with "-//W3C//DTD HTML 4.01 Frameset//" and missing system ID triggers quirks mode',
},
// HTML 4.01 Frameset - non-empty system ID (must remain different!)
{
file: "support/doctype-system-id-nonempty-frameset.html",
expected: "CSS1Compat",
description:
'DOCTYPE with "-//W3C//DTD HTML 4.01 Frameset//" and non-empty system ID triggers limited-quirks mode',
},
// HTML 4.01 Transitional - empty system ID (treated same as missing)
{
file: "support/doctype-system-id-empty-transitional.html",
expected: "BackCompat",
description:
'DOCTYPE with "-//W3C//DTD HTML 4.01 Transitional//" and empty system ID triggers quirks mode',
},
// HTML 4.01 Transitional - missing system ID
{
file: "support/doctype-system-id-missing-transitional.html",
expected: "BackCompat",
description:
'DOCTYPE with "-//W3C//DTD HTML 4.01 Transitional//" and missing system ID triggers quirks mode',
},
// HTML 4.01 Transitional - non-empty system ID (must remain different!)
{
file: "support/doctype-system-id-nonempty-transitional.html",
expected: "CSS1Compat",
description:
'DOCTYPE with "-//W3C//DTD HTML 4.01 Transitional//" and non-empty system ID triggers limited-quirks mode',
},
];

for (const testCase of testCases) {
async_test((t) => {
const iframe = document.createElement("iframe");
iframe.onload = t.step_func_done(() => {
assert_equals(
iframe.contentDocument.compatMode,
testCase.expected,
`compatMode should be ${testCase.expected}`
);
iframe.remove();
});
iframe.src = testCase.file;
document.body.appendChild(iframe);
}, testCase.description);
}
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//" "">
<meta charset="utf-8" />
<title>DOCTYPE with empty system identifier (Frameset)</title>
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//" "">
<meta charset="utf-8">
<title>DOCTYPE with empty system identifier (Transitional)</title>

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//">
<meta charset="utf-8">
<title>DOCTYPE with missing system identifier (Frameset)</title>

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//">
<meta charset="utf-8">
<title>DOCTYPE with missing system identifier (Transitional)</title>

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//" "http://www.w3.org/TR/html4/frameset.dtd">
<meta charset="utf-8">
<title>DOCTYPE with non-empty system identifier (Frameset)</title>

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//" "http://www.w3.org/TR/html4/loose.dtd">
<meta charset="utf-8">
<title>DOCTYPE with non-empty system identifier (Transitional)</title>