LibWeb/Editing: Include all effectively contained nodes in traversal

One big assumption that our "effectively contained node traversal" made
was that the common ancestor container of the range would be all the way
at the root of the effectively contained nodes, but that's not the case
- e.g. a common text ancestor could reside inside a `<span>` whose
children are all effectively contained, causing that element to be
contained as well.

Walk up from the common ancestor container until we've found the
top-most effectively contained ancestor.
This commit is contained in:
Jelle Raaijmakers 2026-06-16 10:50:35 +02:00 committed by Jelle Raaijmakers
parent 2b9397c9f2
commit 641404d6b3
5 changed files with 30 additions and 26 deletions

View file

@ -4679,8 +4679,13 @@ void for_each_node_effectively_contained_in_range(GC::Ptr<DOM::Range> range, Fun
return;
// A node can still be "effectively contained" in range even if it's not actually contained within the range; so we
// need to do an inclusive subtree traversal since the common ancestor could be matched as well.
range->common_ancestor_container()->for_each_in_inclusive_subtree([&](GC::Ref<DOM::Node> descendant) {
// need to traverse the highest effectively contained ancestor of the common ancestor container.
// See: https://w3c.github.io/editing/docs/execCommand/#effectively-contained
GC::Ref<DOM::Node> traversal_root = range->common_ancestor_container();
while (traversal_root->parent() && is_effectively_contained_in_range(*traversal_root->parent(), *range))
traversal_root = *traversal_root->parent();
traversal_root->for_each_in_inclusive_subtree([&](GC::Ref<DOM::Node> descendant) {
if (!is_effectively_contained_in_range(descendant, *range)) {
// NOTE: We cannot skip children here since if a descendant is not effectively contained within a range, its
// children might still be.

View file

@ -2,8 +2,7 @@ Harness status: OK
Found 1026 tests
1025 Pass
1 Fail
1026 Pass
Pass [["backcolor","#00FFFF"]] "foo[]bar": execCommand("backcolor", false, "#00FFFF") return value
Pass [["backcolor","#00FFFF"]] "foo[]bar" checks for modifications to non-editable content
Pass [["backcolor","#00FFFF"]] "foo[]bar" compare innerHTML
@ -914,7 +913,7 @@ Pass [["backcolor","#00FFFF"]] "foo[<span style=background-color:tan>bar</span>]
Pass [["backcolor","#00FFFF"]] "foo[<span style=background-color:tan>bar</span>]baz" queryCommandValue("backcolor") after
Pass [["backcolor","#00FFFF"]] "foo<span style=background-color:tan>[bar]</span>baz": execCommand("backcolor", false, "#00FFFF") return value
Pass [["backcolor","#00FFFF"]] "foo<span style=background-color:tan>[bar]</span>baz" checks for modifications to non-editable content
Fail [["backcolor","#00FFFF"]] "foo<span style=background-color:tan>[bar]</span>baz" compare innerHTML
Pass [["backcolor","#00FFFF"]] "foo<span style=background-color:tan>[bar]</span>baz" compare innerHTML
Pass [["backcolor","#00FFFF"]] "foo<span style=background-color:tan>[bar]</span>baz" queryCommandIndeterm("backcolor") before
Pass [["backcolor","#00FFFF"]] "foo<span style=background-color:tan>[bar]</span>baz" queryCommandState("backcolor") before
Pass [["backcolor","#00FFFF"]] "foo<span style=background-color:tan>[bar]</span>baz" queryCommandValue("backcolor") before

View file

@ -2,8 +2,8 @@ Harness status: OK
Found 1000 tests
984 Pass
16 Fail
994 Pass
6 Fail
Pass [["stylewithcss","false"],["bold",""]] "foo[<span style=\"font-weight: bold\">bar</span>]baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo[<span style=\"font-weight: bold\">bar</span>]baz" queryCommandValue("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo[<span style=\"font-weight: bold\">bar</span>]baz" queryCommandIndeterm("stylewithcss") after
@ -196,7 +196,7 @@ Pass [["stylewithcss","false"],["bold",""]] "<b id=purple>bar [baz] qoz</b>" que
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz": execCommand("stylewithcss", false, "true") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" queryCommandValue("stylewithcss") before
@ -212,7 +212,7 @@ Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 100\">
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz": execCommand("stylewithcss", false, "false") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 100\">[bar]</span>baz" queryCommandValue("stylewithcss") before
@ -228,7 +228,7 @@ Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 100\"
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz": execCommand("stylewithcss", false, "true") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" queryCommandValue("stylewithcss") before
@ -244,7 +244,7 @@ Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 200\">
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz": execCommand("stylewithcss", false, "false") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 200\">[bar]</span>baz" queryCommandValue("stylewithcss") before
@ -260,7 +260,7 @@ Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 200\"
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz": execCommand("stylewithcss", false, "true") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" queryCommandValue("stylewithcss") before
@ -276,7 +276,7 @@ Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 300\">
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz": execCommand("stylewithcss", false, "false") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 300\">[bar]</span>baz" queryCommandValue("stylewithcss") before
@ -292,7 +292,7 @@ Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 300\"
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz": execCommand("stylewithcss", false, "true") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" queryCommandValue("stylewithcss") before
@ -308,7 +308,7 @@ Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 400\">
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz": execCommand("stylewithcss", false, "false") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 400\">[bar]</span>baz" queryCommandValue("stylewithcss") before
@ -324,7 +324,7 @@ Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 400\"
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz": execCommand("stylewithcss", false, "true") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" queryCommandValue("stylewithcss") before
@ -340,7 +340,7 @@ Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: 500\">
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz": execCommand("stylewithcss", false, "false") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: 500\">[bar]</span>baz" queryCommandValue("stylewithcss") before

View file

@ -2,8 +2,8 @@ Harness status: OK
Found 1000 tests
989 Pass
11 Fail
993 Pass
7 Fail
Fail [["bold",""]] "<span style=\"font-weight: 900\">foo[barbaz</span>}" compare innerHTML
Pass [["bold",""]] "<span style=\"font-weight: 900\">foo[barbaz</span>}" queryCommandIndeterm("bold") before
Pass [["bold",""]] "<span style=\"font-weight: 900\">foo[barbaz</span>}" queryCommandState("bold") before
@ -471,7 +471,7 @@ Pass [["bold",""]] "<font color=blue face=monospace><b>foo</b></font>[bar]" quer
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz": execCommand("stylewithcss", false, "true") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" queryCommandValue("stylewithcss") before
@ -487,7 +487,7 @@ Pass [["stylewithcss","true"],["bold",""]] "foo<span style=\"font-weight: normal
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz": execCommand("stylewithcss", false, "false") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz": execCommand("bold", false, "") return value
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" checks for modifications to non-editable content
Fail [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" queryCommandState("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "foo<span style=\"font-weight: normal\"><b>{bar}</b></span>baz" queryCommandValue("stylewithcss") before
@ -535,7 +535,7 @@ Pass [["stylewithcss","false"],["bold",""]] "[foo<span class=notbold>bar</span>b
Pass [["stylewithcss","true"],["bold",""]] "<b><span class=notbold>[foo]</span></b>": execCommand("stylewithcss", false, "true") return value
Pass [["stylewithcss","true"],["bold",""]] "<b><span class=notbold>[foo]</span></b>": execCommand("bold", false, "") return value
Pass [["stylewithcss","true"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" checks for modifications to non-editable content
Fail [["stylewithcss","true"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" compare innerHTML
Pass [["stylewithcss","true"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" queryCommandState("stylewithcss") before
Pass [["stylewithcss","true"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" queryCommandValue("stylewithcss") before
@ -551,7 +551,7 @@ Pass [["stylewithcss","true"],["bold",""]] "<b><span class=notbold>[foo]</span><
Pass [["stylewithcss","false"],["bold",""]] "<b><span class=notbold>[foo]</span></b>": execCommand("stylewithcss", false, "false") return value
Pass [["stylewithcss","false"],["bold",""]] "<b><span class=notbold>[foo]</span></b>": execCommand("bold", false, "") return value
Pass [["stylewithcss","false"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" checks for modifications to non-editable content
Fail [["stylewithcss","false"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" queryCommandState("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "<b><span class=notbold>[foo]</span></b>" queryCommandValue("stylewithcss") before

View file

@ -2,8 +2,8 @@ Harness status: OK
Found 44 tests
39 Pass
5 Fail
38 Pass
6 Fail
Pass [["stylewithcss","false"],["bold",""]] "<span style=font-weight:100>fo[o</span><span style=font-weight:200>b]ar</span>" queryCommandIndeterm("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "<span style=font-weight:100>fo[o</span><span style=font-weight:200>b]ar</span>" queryCommandState("stylewithcss") before
Pass [["stylewithcss","false"],["bold",""]] "<span style=font-weight:100>fo[o</span><span style=font-weight:200>b]ar</span>" queryCommandValue("stylewithcss") before
@ -27,7 +27,7 @@ Pass [["stylewithcss","false"],["bold",""]] "abc<b>[d<span contenteditable=\"fal
Pass [["stylewithcss","false"],["bold",""]] "abc<i>[def]</i>ghi": execCommand("stylewithcss", false, "false") return value
Pass [["stylewithcss","false"],["bold",""]] "abc<i>[def]</i>ghi": execCommand("bold", false, "") return value
Pass [["stylewithcss","false"],["bold",""]] "abc<i>[def]</i>ghi" checks for modifications to non-editable content
Pass [["stylewithcss","false"],["bold",""]] "abc<i>[def]</i>ghi" compare innerHTML
Fail [["stylewithcss","false"],["bold",""]] "abc<i>[def]</i>ghi" compare innerHTML
Pass [["stylewithcss","false"],["bold",""]] "abc[<i>def</i>]ghi": execCommand("stylewithcss", false, "false") return value
Pass [["stylewithcss","false"],["bold",""]] "abc[<i>def</i>]ghi": execCommand("bold", false, "") return value
Pass [["stylewithcss","false"],["bold",""]] "abc[<i>def</i>]ghi" checks for modifications to non-editable content