summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/conformance-checkers/html-aria
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/conformance-checkers/html-aria
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/conformance-checkers/html-aria')
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/_/780.htm18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/ariatree.html106
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/ariatree2.html124
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/img/expander.gifbin0 -> 80 bytes
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/treebox.css65
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/treesimple.css50
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/aria.js158
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/init.js8
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/prototype.js4180
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/checkbox-title.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/file-title.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/password-title.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/radio-title.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/text-title.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/673.html34
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/674.html34
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/675.html36
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/676.html38
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/677.html35
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/678.html36
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/679.html38
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/680.html37
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/681.html34
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/682.html43
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/683.html45
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/684.html44
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/685.html54
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/686.html54
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/687.html55
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/688.html55
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/689.html43
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/690.html43
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/691.html46
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/692.html44
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/693.html52
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/694.html55
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/695.html55
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/696.html42
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/697.html34
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/698.html34
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/699.html34
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/700.html34
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/701.html35
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/702.html34
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/703.html35
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/704.html34
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/705.html45
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/706.html47
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/707.html50
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/708.html53
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/709.html54
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/710.html54
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/711.html55
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/712.html55
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/713.html54
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/714.html53
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/715.html46
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/716.html47
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/717.html53
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/718.html53
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/719.html53
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/720.html53
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/772.html13
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/773.html13
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/774.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/838.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/567.html20
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/568.html32
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/569.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/571-haswarn.html84
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/572-haswarn.html73
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/573-haswarn.html73
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/574.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/575.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/576.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/577.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/578.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/579.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/580.html24
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/581.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/582.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/584.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/button-pressed/589.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/button-pressed/590.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/combobox-autocomplete-list/div-haswarn.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/combobox-autocomplete-list/input.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/default.pngbin0 -> 1286 bytes
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-1.pngbin0 -> 1287 bytes
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-2.pngbin0 -> 1296 bytes
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-3.pngbin0 -> 1297 bytes
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-4.pngbin0 -> 1295 bytes
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-disparity-haswarn.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-norole-haswarn.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-role-haswarn.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/host-language/input-range-valuetext.htm10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-1-haswarn.html74
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-2.html80
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-3.html76
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-4.html74
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-5.html76
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-6.html80
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/mixed-value/585.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/mixed-value/586.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/596.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/597-haswarn.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/598-haswarn.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/599-haswarn.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/600.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/601.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/602.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/603.html2
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/604.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/605.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/606.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/607.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/608.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/837.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/557-isvalid.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/565-isvalid.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/566-isvalid.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/foo.jpgbin0 -> 6735 bytes
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/test.pngbin0 -> 1913 bytes
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/538.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/542.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/543.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/544.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/545.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/546.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/551.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/552.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/553.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/609.html13
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/610.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/611.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/612.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/613.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/614.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/615.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/659.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/660.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/661.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/662.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/663.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/721.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/723.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/724.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/725.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/748.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/749.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/750.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/751.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/753.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/754.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/755.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/756.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/758.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/759.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/760.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/761.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/foo.jpgbin0 -> 6735 bytes
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/859.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/860.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/861.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/863.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/864.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/865.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/866.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/867.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/868.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/869.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/871.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/872.html13
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/873.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/874.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/875.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/879.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/880.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/887.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/888.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/889.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/890.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/891.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/892.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/893.html20
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/noaria.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/497-novalid.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/498-novalid.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/499-novalid.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/500-novalid.html13
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/501-novalid.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/502-novalid.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/503-novalid.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/504-novalid.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/505-novalid.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/506-novalid.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/507-novalid.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/509-novalid.html11
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/510.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/511.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/512.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/513.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/514.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/515.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/516.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/517.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/518.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/519.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/520.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/521.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/522.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/523-haswarn.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/524.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/525.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/527.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-839.html22
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-840.html22
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-842.html22
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-843.html22
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-844.html22
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-busy-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-busy-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-controls-obj1-obj2.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-controls-obj1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-describedby-obj1-obj2.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-describedby-obj1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-disabled-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-disabled-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-copy.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-execute.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-link.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-move.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-none.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-popup.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-flowto-obj1-obj2.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-flowto-obj1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-haspopup-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-haspopup-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-hidden-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-hidden-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-grammar.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-spelling.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-label-Test-string-value-haswarn.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-labelledby-obj1-obj2.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-labelledby-obj1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-assertive.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-off.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-polite.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-owns-obj1-obj2.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-owns-obj1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-additions-text.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-additions.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-all.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-removals.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-text.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/591.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/592.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/593.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-alert.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-alertdialog.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-application.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-article.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-banner.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-button.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-complementary.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-contentinfo.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-definition.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-dialog.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-directory.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-document.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-form.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-grid.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-group.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-heading.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-img.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-link.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-list.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-listbox-parent-combobox.html35
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-listbox.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-log.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-main.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-marquee.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-math.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-menu.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-menubar.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-navigation.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-note.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-option.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-presentation.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-progressbar.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-radiogroup.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-region.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-rowheader.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-search.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-separator.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-status.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tablist.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tabpanel.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-textbox.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-timer.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-toolbar.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tooltip.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tree.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-treegrid.html10
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-atomic-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-atomic-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-busy-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-busy-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-controls-obj1-obj2.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-controls-obj1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-describedby-obj1-obj2.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-describedby-obj1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-disabled-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-disabled-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-copy.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-execute.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-link.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-move.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-none.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-popup.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-flowto-obj1-obj2.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-flowto-obj1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-haspopup-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-haspopup-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-hidden-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-hidden-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-grammar.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-spelling.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-label-Test-string-value.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-labelledby-obj1-obj2.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-labelledby-obj1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-assertive.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-off.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-polite.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-owns-obj1-obj2.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-owns-obj1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-additions-text.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-additions.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-all.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-removals.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-text.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/menuitemcheckbox-aria-checked-mixed.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/menuitemcheckbox-aria-checked-undefined.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-mixed.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-mixed.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-false.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-true.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-undefined.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-readonly-false.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-readonly-true.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-required-false.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-required-true.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-false.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-true.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-undefined.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-activedescendant-obj1.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-activedescendant-obj1.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/gridcell-aria-expanded-false.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/gridcell-aria-expanded-undefined.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-false.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-true.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-undefined.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-activedescendant-obj1.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-activedescendant-obj1.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-activedescendant-obj1.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-false.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-mixed.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-true.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-undefined.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuemax-1.1.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuemin-1.1.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuenow-1.1.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuetext-Test-string-value.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-mixed.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/row-aria-activedescendant-obj1.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowgroup-aria-activedescendant-obj1.html19
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-false.html23
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-true.html23
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-undefined.html23
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-readonly-false.html23
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-readonly-true.html23
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-required-false.html23
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-required-true.html23
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-false.html23
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-true.html23
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-undefined.html23
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-false.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-true.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-undefined.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-activedescendant-obj1.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-false.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-true.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-undefined.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-false.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-true.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-undefined.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-activedescendant-obj1.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-false.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-true.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-undefined.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-activedescendant-obj1.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-false.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-true.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-undefined.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-activedescendant-obj1.html21
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-false.html21
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-true.html21
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-undefined.html21
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-level-1.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-multiselectable-false.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-multiselectable-true.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-readonly-false.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-readonly-true.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-required-false.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-required-true.html18
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-mixed.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-undefined.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-level-1.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-posinset-1.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-false.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-true.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-undefined.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-setsize-1.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-mixed.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-ascending.html31
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-descending.html31
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-none.html31
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-other.html31
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-both.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-inline.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-list.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-none.html17
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-multiselectable-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-multiselectable-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-readonly-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-readonly-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-readonly-false.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-readonly-true.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-required-false.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-required-true.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-false.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-true.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-undefined.html16
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-heading-aria-level-1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-multiselectable-false.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-multiselectable-true.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-required-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-required-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-level-1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-posinset-1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-setsize-1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-mixed.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-posinset-1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-setsize-1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-radiogroup-aria-required-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-radiogroup-aria-required-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-level-1.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-ascending.html21
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-descending.html21
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-none.html21
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-other.html21
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-orientation-horizontal.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-orientation-vertical.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-undefined.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tablist-aria-level-1.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-activedescendant-obj1.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-both.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-inline.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-list.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-none.html14
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-multiline-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-multiline-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-readonly-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-readonly-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-required-false.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-required-true.html12
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-multiselectable-false.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-multiselectable-true.html15
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-required-false.html13
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-required-true.html13
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/selected-state/670.html32
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/selected-state/671.html34
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/selected-state/672.html38
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-1.html86
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-5.html71
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-6.html75
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/testcase-769.html89
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/stability-of-dom/669.html33
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-A.html52
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-B.html50
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-C.html64
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-multiselectable-D.html41
-rw-r--r--testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-tree-multiselectable-C.html46
637 files changed, 16001 insertions, 0 deletions
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/_/780.htm b/testing/web-platform/tests/conformance-checkers/html-aria/_/780.htm
new file mode 100644
index 0000000000..7e37b720ef
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/_/780.htm
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>AT-SPI ONLY: option within listbox exposed as ROLE_MENU: option is exposed as ROLE_MENU_ITEM</title>
+ </head>
+ <body>
+ <h1>AT-SPI ONLY: option within listbox exposed as ROLE_MENU: option is exposed as ROLE_MENU_ITEM</h1>
+ <div role="combobox" aria-expanded="true" aria-label="Combobox for AT-SPI test of listbox/option mappings">
+ <input type="text" value="combobox entry field">
+ <div role="listbox" aria-label="Listbox child of combobox for AT-SPI test of listbox/option mappings">
+ <p role="option" id="test">Test option</p>
+ <p role="option">Another option</p>
+ <p role="option">A third option</p>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/ariatree.html b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/ariatree.html
new file mode 100644
index 0000000000..d915c55d78
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/ariatree.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML><!-- HTML 5 -->
+<html lang="en">
+<head>
+ <title>ARIA Tree Example</title>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+ <link rel="stylesheet" href="./css/treesimple.css" type="text/css">
+ <script src="./js/prototype.js"></script>
+ <script src="./js/aria.js"></script>
+ <script src="./js/init.js"></script>
+</head>
+<body>
+
+ <h1>Directions</h1>
+ <ol>
+ <li>Tab into the tree control.</li>
+ <li>Use the up/down arrow keys to change the active descendant.</li>
+ <li>Use the right/left arrow keys to expand/collapse appropriate nodes.</li>
+ </ol>
+
+ <p>Some <a href="javascript:$('tree0').focus();">focusable</a> content before the ARIA application.</p>
+
+ <div role="application">
+ <h1 id="treelabel">ARIA Tree Example</h1>
+ <ul id="tree0" role="tree" aria-labelledby="treelabel" aria-activedescendant="tree0_item0_2_0_1" tabindex="0">
+ <!-- all the ids and aria-* attributes are hardcoded here for sake of example (final version will use javascript to assign ids as needed) -->
+ <li id="tree0_item0" role="treeitem" aria-level="1" aria-expanded="true">
+ <!-- .expander becomes the javascript trigger for expand/collapse -->
+ <span class="expander"></span>
+ Animals
+ <ul role="group">
+ <li id="tree0_item0_0" role="treeitem" aria-level="2"><span>Birds</span></li>
+ <li id="tree0_item0_1" role="treeitem" aria-level="2" aria-expanded="false">
+ <span class="expander"></span>
+ Cats
+ <ul role="group">
+ <li id="tree0_item0_1_0" role="treeitem" aria-level="3">Siamese</li>
+ <li id="tree0_item0_1_1" role="treeitem" aria-level="3">Tabby</li>
+ </ul>
+ </li>
+ <li id="tree0_item0_2" role="treeitem" aria-level="2" aria-expanded="true">
+ <span class="expander"></span>
+ Dogs
+ <ul role="group">
+ <li id="tree0_item0_2_0" role="treeitem" aria-level="3" aria-expanded="true">
+ <span class="expander"></span>
+ Small Breeds
+ <ul role="group">
+ <li id="tree0_item0_2_0_0" role="treeitem" aria-level="4">Chihuahua</li>
+ <li id="tree0_item0_2_0_1" role="treeitem" aria-level="4">Italian Greyhound</li>
+ <li id="tree0_item0_2_0_2" role="treeitem" aria-level="4">Japanese Chin</li>
+ </ul>
+ </li>
+ <li id="tree0_item0_2_1" role="treeitem" aria-level="3" aria-expanded="false">
+ <span class="expander"></span>
+ Medium Breeds
+ <ul role="group">
+ <li id="tree0_item0_2_1_0" role="treeitem" aria-level="4">Beagle</li>
+ <li id="tree0_item0_2_1_1" role="treeitem" aria-level="4">Cocker Spaniel</li>
+ <li id="tree0_item0_2_1_2" role="treeitem" aria-level="4">Pit Bull</li>
+ </ul>
+ </li>
+ <li id="tree0_item0_2_2" role="treeitem" aria-level="3" aria-expanded="false">
+ <span class="expander"></span>
+ Large Breeds
+ <ul role="group">
+ <li id="tree0_item0_2_2_0" role="treeitem" aria-level="4">Afghan</li>
+ <li id="tree0_item0_2_2_1" role="treeitem" aria-level="4">Great Dane</li>
+ <li id="tree0_item0_2_2_2" role="treeitem" aria-level="4">Mastiff</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li id="tree0_item1" role="treeitem" aria-level="1" aria-expanded="true">
+ <span class="expander"></span>
+ Minerals
+ <ul role="group">
+ <li id="tree0_item1_0" role="treeitem" aria-level="2">Zinc</li>
+ <li id="tree0_item1_1" role="treeitem" aria-level="2" aria-expanded="false">
+ <span class="expander"></span>
+ Gold
+ <ul role="group">
+ <li id="tree0_item1_1_0" role="treeitem" aria-level="3">Yellow Gold</li>
+ <li id="tree0_item1_1_1" role="treeitem" aria-level="3">White Gold</li>
+ </ul>
+ </li>
+ <li id="tree0_item1_2" role="treeitem" aria-level="2">Silver</li>
+ </ul>
+ </li>
+ <li id="tree0_item2" role="treeitem" aria-level="1" aria-expanded="true">
+ <span class="expander"></span>
+ Vegetables
+ <ul role="group">
+ <li id="tree0_item2_0" role="treeitem" aria-level="2">Carrot</li>
+ <li id="tree0_item2_1" role="treeitem" aria-level="2">Tomato</li>
+ <li id="tree0_item2_2" role="treeitem" aria-level="2">Lettuce</li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+
+ <p>More <a href="javascript:$('tree0').focus();">focusable</a> content after the ARIA application.</p>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/ariatree2.html b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/ariatree2.html
new file mode 100644
index 0000000000..3efe246488
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/ariatree2.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML><!-- HTML 5 -->
+<html lang="en">
+<head>
+ <title>ARIA Tree Example</title>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+ <link rel="stylesheet" href="./css/treebox.css" type="text/css">
+ <script src="./js/prototype.js"></script>
+ <script src="./js/aria.js"></script>
+ <script src="./js/init.js"></script>
+</head>
+<body>
+
+ <h1>Directions</h1>
+ <ol>
+ <li>Tab into the tree control.</li>
+ <li>Use the up/down arrow keys to change the active descendant.</li>
+ <li>Use the right/left arrow keys to expand/collapse appropriate nodes.</li>
+ </ol>
+
+ <p>Some <a href="javascript:$('tree0').focus();">focusable</a> content before the ARIA application.</p>
+
+ <div role="application">
+ <h1 id="treelabel">ARIA Tree Example</h1>
+ <ul id="tree0" role="tree" aria-labelledby="treelabel" aria-activedescendant="tree0_item0_2_0_1" tabindex="0">
+ <!-- all the ids and aria-* attributes are hardcoded here for sake of example (final version will use javascript to assign ids as needed) -->
+ <li id="tree0_item0" role="treeitem" aria-level="1" aria-expanded="true">
+ <!-- .expander becomes the javascript trigger for expand/collapse -->
+ <span>
+ <span class="expander"></span>
+ Animals
+ </span>
+ <ul role="group">
+ <li id="tree0_item0_0" role="treeitem" aria-level="2"><span>Birds</span></li>
+ <li id="tree0_item0_1" role="treeitem" aria-level="2" aria-expanded="false">
+ <span>
+ <span class="expander"></span>
+ Cats
+ </span>
+ <ul role="group">
+ <li id="tree0_item0_1_0" role="treeitem" aria-level="3"><span>Siamese</span></li>
+ <li id="tree0_item0_1_1" role="treeitem" aria-level="3"><span>Tabby</span></li>
+ </ul>
+ </li>
+ <li id="tree0_item0_2" role="treeitem" aria-level="2" aria-expanded="true">
+ <span>
+ <span class="expander"></span>
+ Dogs
+ </span>
+ <ul role="group">
+ <li id="tree0_item0_2_0" role="treeitem" aria-level="3" aria-expanded="true">
+ <span>
+ <span class="expander"></span>
+ Small Breeds
+ </span>
+ <ul role="group">
+ <li id="tree0_item0_2_0_0" role="treeitem" aria-level="4"><span>Chihuahua</span></li>
+ <li id="tree0_item0_2_0_1" role="treeitem" aria-level="4"><span>Italian Greyhound</span></li>
+ <li id="tree0_item0_2_0_2" role="treeitem" aria-level="4"><span>Japanese Chin</span></li>
+ </ul>
+ </li>
+ <li id="tree0_item0_2_1" role="treeitem" aria-level="3" aria-expanded="false">
+ <span>
+ <span class="expander"></span>
+ Medium Breeds
+ </span>
+ <ul role="group">
+ <li id="tree0_item0_2_1_0" role="treeitem" aria-level="4"><span>Beagle</span></li>
+ <li id="tree0_item0_2_1_1" role="treeitem" aria-level="4"><span>Cocker Spaniel</span></li>
+ <li id="tree0_item0_2_1_2" role="treeitem" aria-level="4"><span>Pit Bull</span></li>
+ </ul>
+ </li>
+ <li id="tree0_item0_2_2" role="treeitem" aria-level="3" aria-expanded="false">
+ <span>
+ <span class="expander"></span>
+ Large Breeds
+ </span>
+ <ul role="group">
+ <li id="tree0_item0_2_2_0" role="treeitem" aria-level="4"><span>Afghan</span></li>
+ <li id="tree0_item0_2_2_1" role="treeitem" aria-level="4"><span>Great Dane</span></li>
+ <li id="tree0_item0_2_2_2" role="treeitem" aria-level="4"><span>Mastiff</span></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li id="tree0_item1" role="treeitem" aria-level="1" aria-expanded="true">
+ <span>
+ <span class="expander"></span>
+ Minerals
+ </span>
+ <ul role="group">
+ <li id="tree0_item1_0" role="treeitem" aria-level="2"><span>Zinc</span></li>
+ <li id="tree0_item1_1" role="treeitem" aria-level="2" aria-expanded="false">
+ <span>
+ <span class="expander"></span>
+ Gold
+ </span>
+ <ul role="group">
+ <li id="tree0_item1_1_0" role="treeitem" aria-level="3"><span>Yellow Gold</span></li>
+ <li id="tree0_item1_1_1" role="treeitem" aria-level="3"><span>White Gold</span></li>
+ </ul>
+ </li>
+ <li id="tree0_item1_2" role="treeitem" aria-level="2"><span>Silver</span></li>
+ </ul>
+ </li>
+ <li id="tree0_item2" role="treeitem" aria-level="1" aria-expanded="true">
+ <span>
+ <span class="expander"></span>
+ Vegetables
+ </span>
+ <ul role="group">
+ <li id="tree0_item2_0" role="treeitem" aria-level="2"><span>Carrot</span></li>
+ <li id="tree0_item2_1" role="treeitem" aria-level="2"><span>Tomato</span></li>
+ <li id="tree0_item2_2" role="treeitem" aria-level="2"><span>Lettuce</span></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+
+ <p>More <a href="javascript:$('tree0').focus();">focusable</a> content after the ARIA application.</p>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/img/expander.gif b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/img/expander.gif
new file mode 100644
index 0000000000..e305b9dd73
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/img/expander.gif
Binary files differ
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/treebox.css b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/treebox.css
new file mode 100644
index 0000000000..5064fa308a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/treebox.css
@@ -0,0 +1,65 @@
+
+/* variant of treesimple.css, that adds slightly more complex styling. */
+
+html, body {
+ color:#333;
+ background-color:#fff;
+ font-family:"helvetica neue", arial, helvetica, sans-serif;
+ font-size:12px;
+ line-height:1.4em;
+}
+h1{
+ font-size:14px;
+}
+[role="tree"]{
+ border:solid 1px #000;
+ width:300px; /* hardcoded for example */
+ cursor:default;
+}
+ul[role="tree"], [role="tree"] li, [role="tree"] ul {
+ display:block;
+ list-style:none;
+ margin:0;
+ padding:0;
+}
+li[role="treeitem"] {
+ position:relative;
+}
+
+[role="treeitem"] > span{ display:block; }
+
+/* looks kinda redundant, but is necessary to get the full left bleed on sub-level items */
+[role="treeitem"] > span{ padding-left:15px; }
+[role="treeitem"] [role="treeitem"] > span{ padding-left:30px; }
+[role="treeitem"] [role="treeitem"] [role="treeitem"] > span{ padding-left:45px; }
+[role="treeitem"] [role="treeitem"] [role="treeitem"] [role="treeitem"] > span{ padding-left:60px; }
+[role="treeitem"] [role="treeitem"] [role="treeitem"] [role="treeitem"] [role="treeitem"] > span{ padding-left:75px; }
+
+.expander {
+ display:block;
+ position:absolute;
+ left:2px;
+ top:0.3em;
+ width:9px;
+ height:9px;
+ background:transparent url(./img/expander.gif) -9px 0 no-repeat;
+}
+[aria-expanded="false"] > * > .expander {
+ background-position:0 0;
+}
+[role="treeitem"] [role="treeitem"] .expander { left:17px; }
+[role="treeitem"] [role="treeitem"] [role="treeitem"] .expander { left:32px; }
+[role="treeitem"] [role="treeitem"] [role="treeitem"] [role="treeitem"] .expander { left:47px; }
+[role="treeitem"] [role="treeitem"] [role="treeitem"] [role="treeitem"] [role="treeitem"] .expander { left:62px; }
+
+
+[aria-expanded="false"] [role="group"] {
+ display:none;
+}
+[role="tree"] .activedescendant > span {
+ background-color:#ccc;
+}
+[role="tree"]:focus .activedescendant > span {
+ color:#fff;
+ background-color:#03c;
+}
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/treesimple.css b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/treesimple.css
new file mode 100644
index 0000000000..835d4e1c3b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/css/treesimple.css
@@ -0,0 +1,50 @@
+
+html, body {
+ color:#333;
+ background-color:#fff;
+ font-family:"helvetica neue", arial, helvetica, sans-serif;
+ font-size:12px;
+ line-height:1.4em;
+}
+h1{
+ font-size:14px;
+}
+[role="tree"]{
+ cursor:default;
+}
+ul[role="tree"], [role="tree"] li, [role="tree"] ul {
+ display:block;
+ list-style:none;
+ margin:0;
+ padding:0;
+}
+li[role="treeitem"] {
+ position:relative;
+ padding-left:15px;
+}
+.expander {
+ display:block;
+ position:absolute;
+ left:2px;
+ top:0.3em;
+ width:9px;
+ height:9px;
+ background:transparent url(./img/expander.gif) -9px 0 no-repeat;
+}
+[aria-expanded="false"] > * > .expander {
+ background-position:0 0;
+}
+[aria-expanded="false"] [role="group"] {
+ display:none;
+}
+[role="tree"] .activedescendant {
+ font-weight:bold;
+ color:#000;
+}
+[role="tree"]:focus .activedescendant{
+ color:#03c;
+}
+[role="tree"] .activedescendant [role="group"] {
+ font-weight:normal;
+ color:#000;
+}
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/aria.js b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/aria.js
new file mode 100644
index 0000000000..bf3bc5399e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/aria.js
@@ -0,0 +1,158 @@
+
+/* Aria Singleton */
+var Aria = {
+ Trees: new Array(), // instances of Aria.Tree Class
+ isEnabled: function(inNode){
+ // todo: this may need to check isEnabled on all parentNodes, inheritence of aria-enabled is ambiguous
+ if(inNode.getAttribute('aria-enabled') && inNode.getAttribute('aria-enabled').toLowerCase()=='false') return false;
+ else return true;
+ },
+ isExpanded: function(inNode){
+ if(inNode.getAttribute('aria-expanded') && inNode.getAttribute('aria-expanded').toLowerCase()=='false') return false;
+ else return true;
+ },
+ isTreeItem: function(inNode){
+ if(inNode.getAttribute('role') && inNode.getAttribute('role').toLowerCase()=='treeitem') return true;
+ else return false;
+ }
+};
+
+Aria.Tree = Class.create();
+Aria.Tree.prototype = {
+ initialize: function(inNode){
+ this.el = $(inNode);
+ this.index = Aria.Trees.length; // each tree should know its index in the Aria singleton's list, in order to concatenate id strings
+ this.strActiveDescendant = this.el.getAttribute('aria-activedescendant');
+ this.strDefaultActiveDescendant = 'tree'+this.index+'_item0'; // default first item
+ if(!$(this.strActiveDescendant)) this.strActiveDescendant = this.strDefaultActiveDescendant; // set to default if no existing activedescendant
+ this.setActiveDescendant($(this.strActiveDescendant));
+
+ // set up event delegation on the tree node
+ Event.observe(this.el, 'click', this.handleClick.bindAsEventListener(this));
+ Event.observe(this.el, 'keydown', this.handleKeyPress.bindAsEventListener(this)); //webkit doesn't send keypress events for arrow keys, so use keydown instead
+
+ },
+ getActiveDescendant: function(inNode){
+ if(inNode){ // if inNode (from event target), sets the activedescendant to nearest ancestor treeitem
+ var el = $(inNode);
+ while(el != this.el){
+ if(Aria.isTreeItem(el)) break; // exit the loop; we have the treeitem
+ el = el.parentNode;
+ }
+ if(el == this.el) {
+ this.setActiveDescendant(); // set to default activedescendant
+ } else {
+ this.setActiveDescendant(el);
+ return el;
+ }
+ } else {
+ return $(this.el.getAttribute('aria-activedescendant'));
+ }
+ },
+ getNextTreeItem: function(inNode){
+ var el = $(inNode);
+ var originalElm = $(inNode);
+ while(!Aria.isTreeItem(el) || el == originalElm){
+ if(Aria.isExpanded(el) && el.down()){ // should be el.down('[role="treeitem"]');
+ var elements = el.getElementsByTagName('*');
+ for(var i=0, c=elements.length; i<c; i++){
+ if(Aria.isTreeItem(elements[i])) return elements[i];
+ }
+ }
+ if(el.next()){
+ el = el.next();
+ } else {
+ while(!el.parentNode.next() && el.parentNode != this.el){
+ el = el.parentNode;
+ }
+ if(el.parentNode == this.el) return originalElm; // if no next items in tree, return current treeitem
+ else el = el.parentNode.next();
+ }
+ }
+ return el;
+ },
+ getPreviousTreeItem: function(inNode){
+ var el = $(inNode);
+ var originalElm = $(inNode);
+ while(!Aria.isTreeItem(el) || el == originalElm){
+ if(el.previous()){
+ el = el.previous();
+ // recursively choose last child node of previous el, as long as it's not in an collapsed node
+ if (el.down() && Aria.isExpanded(el)){
+ el = el.down();
+ while (el.next() || (el.down() && Aria.isExpanded(el))){
+ if (el.next()) el = el.next();
+ else el = el.down();
+ }
+ }
+ } else {
+ if(el.parentNode == this.el) return originalElm; // if no previous items in tree, return current treeitem
+ el = el.parentNode;
+ }
+ }
+ if(el == this.el) return originalElm; // if no previous items in tree, return current treeitem
+ return el;
+ },
+ handleClick: function(inEvent){
+ var target = inEvent.target; // get the click target
+ var el = this.getActiveDescendant(target);
+ if(target.className.indexOf('expander')>-1){ // if it's an expander widget
+ this.toggleExpanded(el); // toggle the aria-expanded attribute on activedescendant
+ Event.stop(inEvent); // and stop the event
+ }
+ },
+ handleKeyPress: function(inEvent){
+ switch(inEvent.keyCode){
+ // case Event.KEY_PAGEUP: break;
+ // case Event.KEY_PAGEDOWN: break;
+ // case Event.KEY_END: break;
+ // case Event.KEY_HOME: break;
+ case Event.KEY_LEFT: this.keyLeft(); break;
+ case Event.KEY_UP: this.keyUp(); break;
+ case Event.KEY_RIGHT: this.keyRight(); break;
+ case Event.KEY_DOWN: this.keyDown(); break;
+ default:
+ return;
+ }
+ Event.stop(inEvent);
+ },
+ keyLeft: function(){
+ var el = this.activeDescendant;
+ if(Aria.isExpanded(el)){
+ el.setAttribute('aria-expanded','false');
+ this.setActiveDescendant(this.activeDescendant);
+ }
+ },
+ keyUp: function(){
+ var el = this.activeDescendant;
+ this.setActiveDescendant(this.getPreviousTreeItem(el));
+ },
+ keyRight: function(){
+ var el = this.activeDescendant;
+ if(!Aria.isExpanded(el)){
+ el.setAttribute('aria-expanded','true');
+ this.setActiveDescendant(this.activeDescendant);
+ }
+ },
+ keyDown: function(){
+ var el = this.activeDescendant;
+ this.setActiveDescendant(this.getNextTreeItem(el));
+ },
+ setActiveDescendant: function(inNode){
+ Element.removeClassName(this.activeDescendant,'activedescendant')
+ if($(inNode)) this.activeDescendant = $(inNode);
+ else this.activeDescendant = $(this.strDefaultActiveDescendant);
+ Element.addClassName(this.activeDescendant,'activedescendant')
+ this.strActiveDescendant = this.activeDescendant.id;
+ this.el.setAttribute('aria-activedescendant', this.activeDescendant.id);
+ },
+ toggleExpanded: function(inNode){
+ var el = $(inNode);
+ if(Aria.isExpanded(el)){
+ el.setAttribute('aria-expanded','false');
+ } else {
+ el.setAttribute('aria-expanded','true');
+ }
+ this.setActiveDescendant(el);
+ }
+};
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/init.js b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/init.js
new file mode 100644
index 0000000000..c4e507f1f3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/init.js
@@ -0,0 +1,8 @@
+function myLoad(){
+ $$('[role="tree"]').each(function(elm){
+ // for each node where [role="tree"], create a new Aria.Tree instance and append it to array Aria.Trees
+ Aria.Trees.push(new Aria.Tree(elm));
+ });
+}
+Event.observe(window, 'load', myLoad); // will probably use onDOMContentLoaded instead of onLoad
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/prototype.js b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/prototype.js
new file mode 100644
index 0000000000..c14b177230
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/_functional/tree/js/prototype.js
@@ -0,0 +1,4180 @@
+/* Prototype JavaScript framework, version 1.6.0
+ * (c) 2005-2007 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.6.0',
+
+ Browser: {
+ IE: !!(window.attachEvent && !window.opera),
+ Opera: !!window.opera,
+ WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
+ MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+ },
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+ ElementExtensions: !!window.HTMLElement,
+ SpecificElementExtensions:
+ document.createElement('div').__proto__ &&
+ document.createElement('div').__proto__ !==
+ document.createElement('form').__proto__
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+ K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+if (Prototype.Browser.WebKit)
+ Prototype.BrowserFeatures.XPath = false;
+
+/* Based on Alex Arnell's inheritance implementation. */
+var Class = {
+ create: function() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ var subclass = function() { };
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0; i < properties.length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+
+ return klass;
+ }
+};
+
+Class.Methods = {
+ addMethods: function(source) {
+ var ancestor = this.superclass && this.superclass.prototype;
+ var properties = Object.keys(source);
+
+ if (!Object.keys({ toString: true }).length)
+ properties.push("toString", "valueOf");
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames().first() == "$super") {
+ var method = value, value = Object.extend((function(m) {
+ return function() { return ancestor[m].apply(this, arguments) };
+ })(property).wrap(method), {
+ valueOf: function() { return method },
+ toString: function() { return method.toString() }
+ });
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+};
+
+var Abstract = { };
+
+Object.extend = function(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+};
+
+Object.extend(Object, {
+ inspect: function(object) {
+ try {
+ if (object === undefined) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : object.toString();
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ },
+
+ toJSON: function(object) {
+ var type = typeof object;
+ switch (type) {
+ case 'undefined':
+ case 'function':
+ case 'unknown': return;
+ case 'boolean': return object.toString();
+ }
+
+ if (object === null) return 'null';
+ if (object.toJSON) return object.toJSON();
+ if (Object.isElement(object)) return;
+
+ var results = [];
+ for (var property in object) {
+ var value = Object.toJSON(object[property]);
+ if (value !== undefined)
+ results.push(property.toJSON() + ': ' + value);
+ }
+
+ return '{' + results.join(', ') + '}';
+ },
+
+ toQueryString: function(object) {
+ return $H(object).toQueryString();
+ },
+
+ toHTML: function(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ },
+
+ keys: function(object) {
+ var keys = [];
+ for (var property in object)
+ keys.push(property);
+ return keys;
+ },
+
+ values: function(object) {
+ var values = [];
+ for (var property in object)
+ values.push(object[property]);
+ return values;
+ },
+
+ clone: function(object) {
+ return Object.extend({ }, object);
+ },
+
+ isElement: function(object) {
+ return object && object.nodeType == 1;
+ },
+
+ isArray: function(object) {
+ return object && object.constructor === Array;
+ },
+
+ isHash: function(object) {
+ return object instanceof Hash;
+ },
+
+ isFunction: function(object) {
+ return typeof object == "function";
+ },
+
+ isString: function(object) {
+ return typeof object == "string";
+ },
+
+ isNumber: function(object) {
+ return typeof object == "number";
+ },
+
+ isUndefined: function(object) {
+ return typeof object == "undefined";
+ }
+});
+
+Object.extend(Function.prototype, {
+ argumentNames: function() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
+ return names.length == 1 && !names[0] ? [] : names;
+ },
+
+ bind: function() {
+ if (arguments.length < 2 && arguments[0] === undefined) return this;
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function() {
+ return __method.apply(object, args.concat($A(arguments)));
+ }
+ },
+
+ bindAsEventListener: function() {
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function(event) {
+ return __method.apply(object, [event || window.event].concat(args));
+ }
+ },
+
+ curry: function() {
+ if (!arguments.length) return this;
+ var __method = this, args = $A(arguments);
+ return function() {
+ return __method.apply(this, args.concat($A(arguments)));
+ }
+ },
+
+ delay: function() {
+ var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ },
+
+ wrap: function(wrapper) {
+ var __method = this;
+ return function() {
+ return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+ }
+ },
+
+ methodize: function() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ return __method.apply(null, [this].concat($A(arguments)));
+ };
+ }
+});
+
+Function.prototype.defer = Function.prototype.delay.curry(0.01);
+
+Date.prototype.toJSON = function() {
+ return '"' + this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ } finally {
+ this.currentlyExecuting = false;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, {
+ gsub: function(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = arguments.callee.prepareReplacement(replacement);
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ },
+
+ sub: function(pattern, replacement, count) {
+ replacement = this.gsub.prepareReplacement(replacement);
+ count = count === undefined ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ },
+
+ scan: function(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ },
+
+ truncate: function(length, truncation) {
+ length = length || 30;
+ truncation = truncation === undefined ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ },
+
+ strip: function() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ },
+
+ stripTags: function() {
+ return this.replace(/<\/?[^>]+>/gi, '');
+ },
+
+ stripScripts: function() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ },
+
+ extractScripts: function() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ },
+
+ evalScripts: function() {
+ return this.extractScripts().map(function(script) { return eval(script) });
+ },
+
+ escapeHTML: function() {
+ var self = arguments.callee;
+ self.text.data = this;
+ return self.div.innerHTML;
+ },
+
+ unescapeHTML: function() {
+ var div = new Element('div');
+ div.innerHTML = this.stripTags();
+ return div.childNodes[0] ? (div.childNodes.length > 1 ?
+ $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
+ div.childNodes[0].nodeValue) : '';
+ },
+
+ toQueryParams: function(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift());
+ var value = pair.length > 1 ? pair.join('=') : pair[0];
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ },
+
+ toArray: function() {
+ return this.split('');
+ },
+
+ succ: function() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ },
+
+ times: function(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ },
+
+ camelize: function() {
+ var parts = this.split('-'), len = parts.length;
+ if (len == 1) return parts[0];
+
+ var camelized = this.charAt(0) == '-'
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+ : parts[0];
+
+ for (var i = 1; i < len; i++)
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+ return camelized;
+ },
+
+ capitalize: function() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ },
+
+ underscore: function() {
+ return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
+ },
+
+ dasherize: function() {
+ return this.gsub(/_/,'-');
+ },
+
+ inspect: function(useDoubleQuotes) {
+ var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
+ var character = String.specialChar[match[0]];
+ return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ },
+
+ toJSON: function() {
+ return this.inspect(true);
+ },
+
+ unfilterJSON: function(filter) {
+ return this.sub(filter || Prototype.JSONFilter, '#{1}');
+ },
+
+ isJSON: function() {
+ var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+ return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+ },
+
+ evalJSON: function(sanitize) {
+ var json = this.unfilterJSON();
+ try {
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ } catch (e) { }
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+ },
+
+ include: function(pattern) {
+ return this.indexOf(pattern) > -1;
+ },
+
+ startsWith: function(pattern) {
+ return this.indexOf(pattern) === 0;
+ },
+
+ endsWith: function(pattern) {
+ var d = this.length - pattern.length;
+ return d >= 0 && this.lastIndexOf(pattern) === d;
+ },
+
+ empty: function() {
+ return this == '';
+ },
+
+ blank: function() {
+ return /^\s*$/.test(this);
+ },
+
+ interpolate: function(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
+ }
+});
+
+if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
+ escapeHTML: function() {
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ },
+ unescapeHTML: function() {
+ return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
+ }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+};
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+Object.extend(String.prototype.escapeHTML, {
+ div: document.createElement('div'),
+ text: document.createTextNode('')
+});
+
+with (String.prototype.escapeHTML) div.appendChild(text);
+
+var Template = Class.create({
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ if (Object.isFunction(object.toTemplateReplacements))
+ object = object.toTemplateReplacements();
+
+ return this.template.gsub(this.pattern, function(match) {
+ if (object == null) return '';
+
+ var before = match[1] || '';
+ if (before == '\\') return match[2];
+
+ var ctx = object, expr = match[3];
+ var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr);
+ if (match == null) return before;
+
+ while (match != null) {
+ var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+ ctx = ctx[comp];
+ if (null == ctx || '' == match[3]) break;
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+ match = pattern.exec(expr);
+ }
+
+ return before + String.interpret(ctx);
+ }.bind(this));
+ }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = {
+ each: function(iterator, context) {
+ var index = 0;
+ iterator = iterator.bind(context);
+ try {
+ this._each(function(value) {
+ iterator(value, index++);
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ },
+
+ eachSlice: function(number, iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var index = -number, slices = [], array = this.toArray();
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.collect(iterator, context);
+ },
+
+ all: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!iterator(value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ },
+
+ any: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!iterator(value, index))
+ throw $break;
+ });
+ return result;
+ },
+
+ collect: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator(value, index));
+ });
+ return results;
+ },
+
+ detect: function(iterator, context) {
+ iterator = iterator.bind(context);
+ var result;
+ this.each(function(value, index) {
+ if (iterator(value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ },
+
+ findAll: function(iterator, context) {
+ iterator = iterator.bind(context);
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ grep: function(filter, iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var results = [];
+
+ if (Object.isString(filter))
+ filter = new RegExp(filter);
+
+ this.each(function(value, index) {
+ if (filter.match(value))
+ results.push(iterator(value, index));
+ });
+ return results;
+ },
+
+ include: function(object) {
+ if (Object.isFunction(this.indexOf))
+ if (this.indexOf(object) != -1) return true;
+
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ },
+
+ inGroupsOf: function(number, fillWith) {
+ fillWith = fillWith === undefined ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ },
+
+ inject: function(memo, iterator, context) {
+ iterator = iterator.bind(context);
+ this.each(function(value, index) {
+ memo = iterator(memo, value, index);
+ });
+ return memo;
+ },
+
+ invoke: function(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ },
+
+ max: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator(value, index);
+ if (result == undefined || value >= result)
+ result = value;
+ });
+ return result;
+ },
+
+ min: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator(value, index);
+ if (result == undefined || value < result)
+ result = value;
+ });
+ return result;
+ },
+
+ partition: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ (iterator(value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ },
+
+ pluck: function(property) {
+ var results = [];
+ this.each(function(value) {
+ results.push(value[property]);
+ });
+ return results;
+ },
+
+ reject: function(iterator, context) {
+ iterator = iterator.bind(context);
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ sortBy: function(iterator, context) {
+ iterator = iterator.bind(context);
+ return this.map(function(value, index) {
+ return {value: value, criteria: iterator(value, index)};
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ },
+
+ toArray: function() {
+ return this.map();
+ },
+
+ zip: function() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (Object.isFunction(args.last()))
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ },
+
+ size: function() {
+ return this.toArray().length;
+ },
+
+ inspect: function() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+};
+
+Object.extend(Enumerable, {
+ map: Enumerable.collect,
+ find: Enumerable.detect,
+ select: Enumerable.findAll,
+ filter: Enumerable.findAll,
+ member: Enumerable.include,
+ entries: Enumerable.toArray,
+ every: Enumerable.all,
+ some: Enumerable.any
+});
+function $A(iterable) {
+ if (!iterable) return [];
+ if (iterable.toArray) return iterable.toArray();
+ var length = iterable.length, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+}
+
+if (Prototype.Browser.WebKit) {
+ function $A(iterable) {
+ if (!iterable) return [];
+ if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
+ iterable.toArray) return iterable.toArray();
+ var length = iterable.length, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+ }
+}
+
+Array.from = $A;
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+ _each: function(iterator) {
+ for (var i = 0, length = this.length; i < length; i++)
+ iterator(this[i]);
+ },
+
+ clear: function() {
+ this.length = 0;
+ return this;
+ },
+
+ first: function() {
+ return this[0];
+ },
+
+ last: function() {
+ return this[this.length - 1];
+ },
+
+ compact: function() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ },
+
+ flatten: function() {
+ return this.inject([], function(array, value) {
+ return array.concat(Object.isArray(value) ?
+ value.flatten() : [value]);
+ });
+ },
+
+ without: function() {
+ var values = $A(arguments);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ },
+
+ reverse: function(inline) {
+ return (inline !== false ? this : this.toArray())._reverse();
+ },
+
+ reduce: function() {
+ return this.length > 1 ? this : this[0];
+ },
+
+ uniq: function(sorted) {
+ return this.inject([], function(array, value, index) {
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+ array.push(value);
+ return array;
+ });
+ },
+
+ intersect: function(array) {
+ return this.uniq().findAll(function(item) {
+ return array.detect(function(value) { return item === value });
+ });
+ },
+
+ clone: function() {
+ return [].concat(this);
+ },
+
+ size: function() {
+ return this.length;
+ },
+
+ inspect: function() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ },
+
+ toJSON: function() {
+ var results = [];
+ this.each(function(object) {
+ var value = Object.toJSON(object);
+ if (value !== undefined) results.push(value);
+ });
+ return '[' + results.join(', ') + ']';
+ }
+});
+
+// use native browser JS 1.6 implementation if available
+if (Object.isFunction(Array.prototype.forEach))
+ Array.prototype._each = Array.prototype.forEach;
+
+if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+};
+
+if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+};
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+if (Prototype.Browser.Opera){
+ Array.prototype.concat = function() {
+ var array = [];
+ for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ if (Object.isArray(arguments[i])) {
+ for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
+ array.push(arguments[i][j]);
+ } else {
+ array.push(arguments[i]);
+ }
+ }
+ return array;
+ };
+}
+Object.extend(Number.prototype, {
+ toColorPart: function() {
+ return this.toPaddedString(2, 16);
+ },
+
+ succ: function() {
+ return this + 1;
+ },
+
+ times: function(iterator) {
+ $R(0, this, true).each(iterator);
+ return this;
+ },
+
+ toPaddedString: function(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ },
+
+ toJSON: function() {
+ return isFinite(this) ? this.toString() : 'null';
+ }
+});
+
+$w('abs round ceil floor').each(function(method){
+ Number.prototype[method] = Math[method].methodize();
+});
+function $H(object) {
+ return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+ if (function() {
+ var i = 0, Test = function(value) { this.key = value };
+ Test.prototype.key = 'foo';
+ for (var property in new Test('bar')) i++;
+ return i > 1;
+ }()) {
+ function each(iterator) {
+ var cache = [];
+ for (var key in this._object) {
+ var value = this._object[key];
+ if (cache.include(key)) continue;
+ cache.push(key);
+ var pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+ } else {
+ function each(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+ }
+
+ function toQueryPair(key, value) {
+ if (Object.isUndefined(value)) return key;
+ return key + '=' + encodeURIComponent(String.interpret(value));
+ }
+
+ return {
+ initialize: function(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ },
+
+ _each: each,
+
+ set: function(key, value) {
+ return this._object[key] = value;
+ },
+
+ get: function(key) {
+ return this._object[key];
+ },
+
+ unset: function(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ },
+
+ toObject: function() {
+ return Object.clone(this._object);
+ },
+
+ keys: function() {
+ return this.pluck('key');
+ },
+
+ values: function() {
+ return this.pluck('value');
+ },
+
+ index: function(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ },
+
+ merge: function(object) {
+ return this.clone().update(object);
+ },
+
+ update: function(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ },
+
+ toQueryString: function() {
+ return this.map(function(pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
+
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values))
+ return values.map(toQueryPair.curry(key)).join('&');
+ }
+ return toQueryPair(key, values);
+ }).join('&');
+ },
+
+ inspect: function() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ },
+
+ toJSON: function() {
+ return Object.toJSON(this.toObject());
+ },
+
+ clone: function() {
+ return new Hash(this);
+ }
+ }
+})());
+
+Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
+Hash.from = $H;
+var ObjectRange = Class.create(Enumerable, {
+ initialize: function(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ },
+
+ _each: function(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ },
+
+ include: function(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+});
+
+var $R = function(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+};
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest()},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+};
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (Object.isFunction(responder[callback])) {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) { }
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() { Ajax.activeRequestCount++ },
+ onComplete: function() { Ajax.activeRequestCount-- }
+});
+
+Ajax.Base = Class.create({
+ initialize: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: '',
+ evalJSON: true,
+ evalJS: true
+ };
+ Object.extend(this.options, options || { });
+
+ this.options.method = this.options.method.toLowerCase();
+ if (Object.isString(this.options.parameters))
+ this.options.parameters = this.options.parameters.toQueryParams();
+ }
+});
+
+Ajax.Request = Class.create(Ajax.Base, {
+ _complete: false,
+
+ initialize: function($super, url, options) {
+ $super(options);
+ this.transport = Ajax.getTransport();
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = Object.clone(this.options.parameters);
+
+ if (!['get', 'post'].include(this.method)) {
+ // simulate other verbs over post
+ params['_method'] = this.method;
+ this.method = 'post';
+ }
+
+ this.parameters = params;
+
+ if (params = Object.toQueryString(params)) {
+ // when GET, append parameters to URL
+ if (this.method == 'get')
+ this.url += (this.url.include('?') ? '&' : '?') + params;
+ else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ params += '&_=';
+ }
+
+ try {
+ var response = new Ajax.Response(this);
+ if (this.options.onCreate) this.options.onCreate(response);
+ Ajax.Responders.dispatch('onCreate', this, response);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+ this.transport.send(this.body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ // user-defined headers
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (Object.isFunction(extras.push))
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ var status = this.getStatus();
+ return !status || (status >= 200 && status < 300);
+ },
+
+ getStatus: function() {
+ try {
+ return this.transport.status || 0;
+ } catch (e) { return 0 }
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + response.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ var contentType = response.getHeader('Content-type');
+ if (this.options.evalJS == 'force'
+ || (this.options.evalJS && contentType
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ // avoid memory leak in MSIE: clean up
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name);
+ } catch (e) { return null }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval((this.transport.responseText || '').unfilterJSON());
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Response = Class.create({
+ initialize: function(request){
+ this.request = request;
+ var transport = this.transport = request.transport,
+ readyState = this.readyState = transport.readyState;
+
+ if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+ this.status = this.getStatus();
+ this.statusText = this.getStatusText();
+ this.responseText = String.interpret(transport.responseText);
+ this.headerJSON = this._getHeaderJSON();
+ }
+
+ if(readyState == 4) {
+ var xml = transport.responseXML;
+ this.responseXML = xml === undefined ? null : xml;
+ this.responseJSON = this._getResponseJSON();
+ }
+ },
+
+ status: 0,
+ statusText: '',
+
+ getStatus: Ajax.Request.prototype.getStatus,
+
+ getStatusText: function() {
+ try {
+ return this.transport.statusText || '';
+ } catch (e) { return '' }
+ },
+
+ getHeader: Ajax.Request.prototype.getHeader,
+
+ getAllHeaders: function() {
+ try {
+ return this.getAllResponseHeaders();
+ } catch (e) { return null }
+ },
+
+ getResponseHeader: function(name) {
+ return this.transport.getResponseHeader(name);
+ },
+
+ getAllResponseHeaders: function() {
+ return this.transport.getAllResponseHeaders();
+ },
+
+ _getHeaderJSON: function() {
+ var json = this.getHeader('X-JSON');
+ if (!json) return null;
+ json = decodeURIComponent(escape(json));
+ try {
+ return json.evalJSON(this.request.options.sanitizeJSON);
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ },
+
+ _getResponseJSON: function() {
+ var options = this.request.options;
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
+ !(this.getHeader('Content-type') || '').include('application/json')))
+ return null;
+ try {
+ return this.transport.responseText.evalJSON(options.sanitizeJSON);
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+ initialize: function($super, container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ };
+
+ options = options || { };
+ var onComplete = options.onComplete;
+ options.onComplete = (function(response, param) {
+ this.updateContent(response.responseText);
+ if (Object.isFunction(onComplete)) onComplete(response, param);
+ }).bind(this);
+
+ $super(url, options);
+ },
+
+ updateContent: function(responseText) {
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
+ options = this.options;
+
+ if (!options.evalScripts) responseText = responseText.stripScripts();
+
+ if (receiver = $(receiver)) {
+ if (options.insertion) {
+ if (Object.isString(options.insertion)) {
+ var insertion = { }; insertion[options.insertion] = responseText;
+ receiver.insert(insertion);
+ }
+ else options.insertion(receiver, responseText);
+ }
+ else receiver.update(responseText);
+ }
+
+ if (this.success()) {
+ if (this.onComplete) this.onComplete.bind(this).defer();
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+ initialize: function($super, container, url, options) {
+ $super(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = { };
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(response) {
+ if (this.options.decay) {
+ this.decay = (response.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = response.responseText;
+ }
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+function $(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push($(arguments[i]));
+ return elements;
+ }
+ if (Object.isString(element))
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, $(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(Element.extend(query.snapshotItem(i)));
+ return results;
+ };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+ // DOM level 2 ECMAScript Language Binding
+ Object.extend(Node, {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ });
+}
+
+(function() {
+ var element = this.Element;
+ this.Element = function(tagName, attributes) {
+ attributes = attributes || { };
+ tagName = tagName.toLowerCase();
+ var cache = Element.cache;
+ if (Prototype.Browser.IE && attributes.name) {
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
+ delete attributes.name;
+ return Element.writeAttribute(document.createElement(tagName), attributes);
+ }
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+ return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+ };
+ Object.extend(this.Element, element || { });
+}).call(window);
+
+Element.cache = { };
+
+Element.Methods = {
+ visible: function(element) {
+ return $(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = $(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+ hide: function(element) {
+ $(element).style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ $(element).style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = $(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+ content = Object.toHTML(content);
+ element.innerHTML = content.stripScripts();
+ content.evalScripts.bind(content).defer();
+ return element;
+ },
+
+ replace: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ else if (!Object.isElement(content)) {
+ content = Object.toHTML(content);
+ var range = element.ownerDocument.createRange();
+ range.selectNode(element);
+ content.evalScripts.bind(content).defer();
+ content = range.createContextualFragment(content.stripScripts());
+ }
+ element.parentNode.replaceChild(content, element);
+ return element;
+ },
+
+ insert: function(element, insertions) {
+ element = $(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = {bottom:insertions};
+
+ var content, t, range;
+
+ for (position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ t = Element._insertionTranslations[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ t.insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+
+ range = element.ownerDocument.createRange();
+ t.initializeRange(element, range);
+ t.insert(element, range.createContextualFragment(content.stripScripts()));
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ },
+
+ wrap: function(element, wrapper, attributes) {
+ element = $(element);
+ if (Object.isElement(wrapper))
+ $(wrapper).writeAttribute(attributes || { });
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+ else wrapper = new Element('div', wrapper);
+ if (element.parentNode)
+ element.parentNode.replaceChild(wrapper, element);
+ wrapper.appendChild(element);
+ return wrapper;
+ },
+
+ inspect: function(element) {
+ element = $(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(), attribute = pair.last();
+ var value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property) {
+ element = $(element);
+ var elements = [];
+ while (element = element[property])
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return $(element).recursivelyCollect('parentNode');
+ },
+
+ descendants: function(element) {
+ return $A($(element).getElementsByTagName('*')).each(Element.extend);
+ },
+
+ firstDescendant: function(element) {
+ element = $(element).firstChild;
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ return $(element);
+ },
+
+ immediateDescendants: function(element) {
+ if (!(element = $(element).firstChild)) return [];
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ if (element) return [element].concat($(element).nextSiblings());
+ return [];
+ },
+
+ previousSiblings: function(element) {
+ return $(element).recursivelyCollect('previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return $(element).recursivelyCollect('nextSibling');
+ },
+
+ siblings: function(element) {
+ element = $(element);
+ return element.previousSiblings().reverse().concat(element.nextSiblings());
+ },
+
+ match: function(element, selector) {
+ if (Object.isString(selector))
+ selector = new Selector(selector);
+ return selector.match($(element));
+ },
+
+ up: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(element.parentNode);
+ var ancestors = element.ancestors();
+ return expression ? Selector.findElement(ancestors, expression, index) :
+ ancestors[index || 0];
+ },
+
+ down: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ var descendants = element.descendants();
+ return expression ? Selector.findElement(descendants, expression, index) :
+ descendants[index || 0];
+ },
+
+ previous: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
+ var previousSiblings = element.previousSiblings();
+ return expression ? Selector.findElement(previousSiblings, expression, index) :
+ previousSiblings[index || 0];
+ },
+
+ next: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
+ var nextSiblings = element.nextSiblings();
+ return expression ? Selector.findElement(nextSiblings, expression, index) :
+ nextSiblings[index || 0];
+ },
+
+ select: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element, args);
+ },
+
+ adjacent: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element.parentNode, args).without(element);
+ },
+
+ identify: function(element) {
+ element = $(element);
+ var id = element.readAttribute('id'), self = arguments.callee;
+ if (id) return id;
+ do { id = 'anonymous_element_' + self.counter++ } while ($(id));
+ element.writeAttribute('id', id);
+ return id;
+ },
+
+ readAttribute: function(element, name) {
+ element = $(element);
+ if (Prototype.Browser.IE) {
+ var t = Element._attributeTranslations.read;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ if (name.include(':')) {
+ return (!element.attributes || !element.attributes[name]) ? null :
+ element.attributes[name].value;
+ }
+ }
+ return element.getAttribute(name);
+ },
+
+ writeAttribute: function(element, name, value) {
+ element = $(element);
+ var attributes = { }, t = Element._attributeTranslations.write;
+
+ if (typeof name == 'object') attributes = name;
+ else attributes[name] = value === undefined ? true : value;
+
+ for (var attr in attributes) {
+ var name = t.names[attr] || attr, value = attributes[attr];
+ if (t.values[attr]) name = t.values[attr](element, value);
+ if (value === false || value === null)
+ element.removeAttribute(name);
+ else if (value === true)
+ element.setAttribute(name, name);
+ else element.setAttribute(name, value);
+ }
+ return element;
+ },
+
+ getHeight: function(element) {
+ return $(element).getDimensions().height;
+ },
+
+ getWidth: function(element) {
+ return $(element).getDimensions().width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ var elementClassName = element.className;
+ return (elementClassName.length > 0 && (elementClassName == className ||
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ if (!element.hasClassName(className))
+ element.className += (element.className ? ' ' : '') + className;
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ element.className = element.className.replace(
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ return element[element.hasClassName(className) ?
+ 'removeClassName' : 'addClassName'](className);
+ },
+
+ // removes whitespace-only text node children
+ cleanWhitespace: function(element) {
+ element = $(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return $(element).innerHTML.blank();
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = $(element), ancestor = $(ancestor);
+
+ if (element.compareDocumentPosition)
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+ if (element.sourceIndex && !Prototype.Browser.Opera) {
+ var e = element.sourceIndex, a = ancestor.sourceIndex,
+ nextAncestor = ancestor.nextSibling;
+ if (!nextAncestor) {
+ do { ancestor = ancestor.parentNode; }
+ while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
+ }
+ if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex);
+ }
+
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = $(element);
+ var pos = element.cumulativeOffset();
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = $(element);
+ style = style == 'float' ? 'cssFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value) {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ }
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+ return value == 'auto' ? null : value;
+ },
+
+ getOpacity: function(element) {
+ return $(element).getStyle('opacity');
+ },
+
+ setStyle: function(element, styles) {
+ element = $(element);
+ var elementStyle = element.style, match;
+ if (Object.isString(styles)) {
+ element.style.cssText += ';' + styles;
+ return styles.include('opacity') ?
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+ }
+ for (var property in styles)
+ if (property == 'opacity') element.setOpacity(styles[property]);
+ else
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
+ (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
+ property] = styles[property];
+
+ return element;
+ },
+
+ setOpacity: function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+ return element;
+ },
+
+ getDimensions: function(element) {
+ element = $(element);
+ var display = $(element).getStyle('display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ // All *Width and *Height properties give 0 on elements with display none,
+ // so enable the element temporarily
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.clientWidth;
+ var originalHeight = element.clientHeight;
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+ },
+
+ makePositioned: function(element) {
+ element = $(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ // Opera returns the offset relative to the positioning context, when an
+ // element is position relative but top and left have not been defined
+ if (window.opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = $(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = $(element);
+ if (element._overflow) return element;
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+ if (element._overflow !== 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = $(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if (element.tagName == 'BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p == 'relative' || p == 'absolute') break;
+ }
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ absolutize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'absolute') return;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ var offsets = element.positionedOffset();
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ return element;
+ },
+
+ relativize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'relative') return;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ return element;
+ },
+
+ cumulativeScrollOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ getOffsetParent: function(element) {
+ if (element.offsetParent) return $(element.offsetParent);
+ if (element == document.body) return $(element);
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return $(element);
+
+ return $(document.body);
+ },
+
+ viewportOffset: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ // Safari fix
+ if (element.offsetParent == document.body &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ clonePosition: function(element, source) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || { });
+
+ // find page position of source
+ source = $(source);
+ var p = source.viewportOffset();
+
+ // find coordinate system to use
+ element = $(element);
+ var delta = [0, 0];
+ var parent = null;
+ // delta [0,0] will do fine with position: fixed elements,
+ // position:absolute needs offsetParent deltas
+ if (Element.getStyle(element, 'position') == 'absolute') {
+ parent = element.getOffsetParent();
+ delta = parent.viewportOffset();
+ }
+
+ // correct by body offsets (fixes Safari)
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ // set position
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+ return element;
+ }
+};
+
+Element.Methods.identify.counter = 1;
+
+Object.extend(Element.Methods, {
+ getElementsBySelector: Element.Methods.select,
+ childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+ write: {
+ names: {
+ className: 'class',
+ htmlFor: 'for'
+ },
+ values: { }
+ }
+};
+
+
+if (!document.createRange || Prototype.Browser.Opera) {
+ Element.Methods.insert = function(element, insertions) {
+ element = $(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = { bottom: insertions };
+
+ var t = Element._insertionTranslations, content, position, pos, tagName;
+
+ for (position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ pos = t[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ pos.insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+ tagName = ((position == 'before' || position == 'after')
+ ? element.parentNode : element).tagName.toUpperCase();
+
+ if (t.tags[tagName]) {
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ if (position == 'top' || position == 'after') fragments.reverse();
+ fragments.each(pos.insert.curry(element));
+ }
+ else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ };
+}
+
+if (Prototype.Browser.Opera) {
+ Element.Methods._getStyle = Element.Methods.getStyle;
+ Element.Methods.getStyle = function(element, style) {
+ switch(style) {
+ case 'left':
+ case 'top':
+ case 'right':
+ case 'bottom':
+ if (Element._getStyle(element, 'position') == 'static') return null;
+ default: return Element._getStyle(element, style);
+ }
+ };
+ Element.Methods._readAttribute = Element.Methods.readAttribute;
+ Element.Methods.readAttribute = function(element, attribute) {
+ if (attribute == 'title') return element.title;
+ return Element._readAttribute(element, attribute);
+ };
+}
+
+else if (Prototype.Browser.IE) {
+ $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
+ Element.Methods[method] = Element.Methods[method].wrap(
+ function(proceed, element) {
+ element = $(element);
+ var position = element.getStyle('position');
+ if (position != 'static') return proceed(element);
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+ });
+
+ Element.Methods.getStyle = function(element, style) {
+ element = $(element);
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value && element.currentStyle) value = element.currentStyle[style];
+
+ if (style == 'opacity') {
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if (value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+
+ if (value == 'auto') {
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+ return element['offset' + style.capitalize()] + 'px';
+ return null;
+ }
+ return value;
+ };
+
+ Element.Methods.setOpacity = function(element, value) {
+ function stripAlpha(filter){
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
+ }
+ element = $(element);
+ var currentStyle = element.currentStyle;
+ if ((currentStyle && !currentStyle.hasLayout) ||
+ (!currentStyle && element.style.zoom == 'normal'))
+ element.style.zoom = 1;
+
+ var filter = element.getStyle('filter'), style = element.style;
+ if (value == 1 || value === '') {
+ (filter = stripAlpha(filter)) ?
+ style.filter = filter : style.removeAttribute('filter');
+ return element;
+ } else if (value < 0.00001) value = 0;
+ style.filter = stripAlpha(filter) +
+ 'alpha(opacity=' + (value * 100) + ')';
+ return element;
+ };
+
+ Element._attributeTranslations = {
+ read: {
+ names: {
+ 'class': 'className',
+ 'for': 'htmlFor'
+ },
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: function(element, attribute) {
+ var attribute = element.getAttribute(attribute);
+ return attribute ? attribute.toString().slice(23, -2) : null;
+ },
+ _flag: function(element, attribute) {
+ return $(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
+ }
+ }
+ };
+
+ Element._attributeTranslations.write = {
+ names: Object.clone(Element._attributeTranslations.read.names),
+ values: {
+ checked: function(element, value) {
+ element.checked = !!value;
+ },
+
+ style: function(element, value) {
+ element.style.cssText = value ? value : '';
+ }
+ }
+ };
+
+ Element._attributeTranslations.has = {};
+
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+ 'encType maxLength readOnly longDesc').each(function(attr) {
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+ });
+
+ (function(v) {
+ Object.extend(v, {
+ href: v._getAttr,
+ src: v._getAttr,
+ type: v._getAttr,
+ action: v._getAttrNode,
+ disabled: v._flag,
+ checked: v._flag,
+ readonly: v._flag,
+ multiple: v._flag,
+ onload: v._getEv,
+ onunload: v._getEv,
+ onclick: v._getEv,
+ ondblclick: v._getEv,
+ onmousedown: v._getEv,
+ onmouseup: v._getEv,
+ onmouseover: v._getEv,
+ onmousemove: v._getEv,
+ onmouseout: v._getEv,
+ onfocus: v._getEv,
+ onblur: v._getEv,
+ onkeypress: v._getEv,
+ onkeydown: v._getEv,
+ onkeyup: v._getEv,
+ onsubmit: v._getEv,
+ onreset: v._getEv,
+ onselect: v._getEv,
+ onchange: v._getEv
+ });
+ })(Element._attributeTranslations.read.values);
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1) ? 0.999999 :
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
+ return element;
+ };
+}
+
+else if (Prototype.Browser.WebKit) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+
+ if (value == 1)
+ if(element.tagName == 'IMG' && element.width) {
+ element.width++; element.width--;
+ } else try {
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch (e) { }
+
+ return element;
+ };
+
+ // Safari returns margins on body which is incorrect if the child is absolutely
+ // positioned. For performance reasons, redefine Position.cumulativeOffset for
+ // KHTML/WebKit only.
+ Element.Methods.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return Element._returnOffset(valueL, valueT);
+ };
+}
+
+if (Prototype.Browser.IE || Prototype.Browser.Opera) {
+ // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
+ Element.Methods.update = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+
+ content = Object.toHTML(content);
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName in Element._insertionTranslations.tags) {
+ $A(element.childNodes).each(function(node) { element.removeChild(node) });
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) { element.appendChild(node) });
+ }
+ else element.innerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+if (document.createElement('div').outerHTML) {
+ Element.Methods.replace = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ element.parentNode.replaceChild(content, element);
+ return element;
+ }
+
+ content = Object.toHTML(content);
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+ if (Element._insertionTranslations.tags[tagName]) {
+ var nextSibling = element.next();
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ parent.removeChild(element);
+ if (nextSibling)
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+ else
+ fragments.each(function(node) { parent.appendChild(node) });
+ }
+ else element.outerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+Element._returnOffset = function(l, t) {
+ var result = [l, t];
+ result.left = l;
+ result.top = t;
+ return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+ var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+ div.innerHTML = t[0] + html + t[1];
+ t[2].times(function() { div = div.firstChild });
+ return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+ before: {
+ adjacency: 'beforeBegin',
+ insert: function(element, node) {
+ element.parentNode.insertBefore(node, element);
+ },
+ initializeRange: function(element, range) {
+ range.setStartBefore(element);
+ }
+ },
+ top: {
+ adjacency: 'afterBegin',
+ insert: function(element, node) {
+ element.insertBefore(node, element.firstChild);
+ },
+ initializeRange: function(element, range) {
+ range.selectNodeContents(element);
+ range.collapse(true);
+ }
+ },
+ bottom: {
+ adjacency: 'beforeEnd',
+ insert: function(element, node) {
+ element.appendChild(node);
+ }
+ },
+ after: {
+ adjacency: 'afterEnd',
+ insert: function(element, node) {
+ element.parentNode.insertBefore(node, element.nextSibling);
+ },
+ initializeRange: function(element, range) {
+ range.setStartAfter(element);
+ }
+ },
+ tags: {
+ TABLE: ['<table>', '</table>', 1],
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+ SELECT: ['<select>', '</select>', 1]
+ }
+};
+
+(function() {
+ this.bottom.initializeRange = this.top.initializeRange;
+ Object.extend(this.tags, {
+ THEAD: this.tags.TBODY,
+ TFOOT: this.tags.TBODY,
+ TH: this.tags.TD
+ });
+}).call(Element._insertionTranslations);
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
+ var node = $(element).getAttributeNode(attribute);
+ return node && node.specified;
+ }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+if (!Prototype.BrowserFeatures.ElementExtensions &&
+ document.createElement('div').__proto__) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = document.createElement('div').__proto__;
+ Prototype.BrowserFeatures.ElementExtensions = true;
+}
+
+Element.extend = (function() {
+ if (Prototype.BrowserFeatures.SpecificElementExtensions)
+ return Prototype.K;
+
+ var Methods = { }, ByTag = Element.Methods.ByTag;
+
+ var extend = Object.extend(function(element) {
+ if (!element || element._extendedByPrototype ||
+ element.nodeType != 1 || element == window) return element;
+
+ var methods = Object.clone(Methods),
+ tagName = element.tagName, property, value;
+
+ // extend methods for specific tags
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+ for (property in methods) {
+ value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+
+ element._extendedByPrototype = Prototype.emptyFunction;
+ return element;
+
+ }, {
+ refresh: function() {
+ // extend methods for all tags (Safari doesn't need this)
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
+ Object.extend(Methods, Element.Methods);
+ Object.extend(Methods, Element.Methods.Simulated);
+ }
+ }
+ });
+
+ extend.refresh();
+ return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+ if (element.hasAttribute) return element.hasAttribute(attribute);
+ return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+ if (!methods) {
+ Object.extend(Form, Form.Methods);
+ Object.extend(Form.Element, Form.Element.Methods);
+ Object.extend(Element.Methods.ByTag, {
+ "FORM": Object.clone(Form.Methods),
+ "INPUT": Object.clone(Form.Element.Methods),
+ "SELECT": Object.clone(Form.Element.Methods),
+ "TEXTAREA": Object.clone(Form.Element.Methods)
+ });
+ }
+
+ if (arguments.length == 2) {
+ var tagName = methods;
+ methods = arguments[1];
+ }
+
+ if (!tagName) Object.extend(Element.Methods, methods || { });
+ else {
+ if (Object.isArray(tagName)) tagName.each(extend);
+ else extend(tagName);
+ }
+
+ function extend(tagName) {
+ tagName = tagName.toUpperCase();
+ if (!Element.Methods.ByTag[tagName])
+ Element.Methods.ByTag[tagName] = { };
+ Object.extend(Element.Methods.ByTag[tagName], methods);
+ }
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!Object.isFunction(value)) continue;
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = value.methodize();
+ }
+ }
+
+ function findDOMClass(tagName) {
+ var klass;
+ var trans = {
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+ "FrameSet", "IFRAME": "IFrame"
+ };
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName.capitalize() + 'Element';
+ if (window[klass]) return window[klass];
+
+ window[klass] = { };
+ window[klass].prototype = document.createElement(tagName).__proto__;
+ return window[klass];
+ }
+
+ if (F.ElementExtensions) {
+ copy(Element.Methods, HTMLElement.prototype);
+ copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+ }
+
+ if (F.SpecificElementExtensions) {
+ for (var tag in Element.Methods.ByTag) {
+ var klass = findDOMClass(tag);
+ if (Object.isUndefined(klass)) continue;
+ copy(T[tag], klass.prototype);
+ }
+ }
+
+ Object.extend(Element, Element.Methods);
+ delete Element.ByTag;
+
+ if (Element.extend.refresh) Element.extend.refresh();
+ Element.cache = { };
+};
+
+document.viewport = {
+ getDimensions: function() {
+ var dimensions = { };
+ $w('width height').each(function(d) {
+ var D = d.capitalize();
+ dimensions[d] = self['inner' + D] ||
+ (document.documentElement['client' + D] || document.body['client' + D]);
+ });
+ return dimensions;
+ },
+
+ getWidth: function() {
+ return this.getDimensions().width;
+ },
+
+ getHeight: function() {
+ return this.getDimensions().height;
+ },
+
+ getScrollOffsets: function() {
+ return Element._returnOffset(
+ window.pageXOffset || document.scrollingElement.scrollLeft,
+ window.pageYOffset || document.scrollingElement.scrollTop);
+ }
+};
+/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license. Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+ initialize: function(expression) {
+ this.expression = expression.strip();
+ this.compileMatcher();
+ },
+
+ compileMatcher: function() {
+ // Selectors with namespaced attributes can't use the XPath version
+ if (Prototype.BrowserFeatures.XPath && !(/(\[[\w-]*?:|:checked)/).test(this.expression))
+ return this.compileXPathMatcher();
+
+ var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+ c = Selector.criteria, le, p, m;
+
+ if (Selector._cache[e]) {
+ this.matcher = Selector._cache[e];
+ return;
+ }
+
+ this.matcher = ["this.matcher = function(root) {",
+ "var r = root, h = Selector.handlers, c = false, n;"];
+
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+ new Template(c[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.matcher.push("return h.unique(n);\n}");
+ eval(this.matcher.join('\n'));
+ Selector._cache[this.expression] = this.matcher;
+ },
+
+ compileXPathMatcher: function() {
+ var e = this.expression, ps = Selector.patterns,
+ x = Selector.xpath, le, m;
+
+ if (Selector._cache[e]) {
+ this.xpath = Selector._cache[e]; return;
+ }
+
+ this.matcher = ['.//*'];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ if (m = e.match(ps[i])) {
+ this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+ new Template(x[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.xpath = this.matcher.join('');
+ Selector._cache[this.expression] = this.xpath;
+ },
+
+ findElements: function(root) {
+ root = root || document;
+ if (this.xpath) return document._getElementsByXPath(this.xpath, root);
+ return this.matcher(root);
+ },
+
+ match: function(element) {
+ this.tokens = [];
+
+ var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+ var le, p, m;
+
+ while (e && le !== e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ // use the Selector.assertions methods unless the selector
+ // is too complex.
+ if (as[i]) {
+ this.tokens.push([i, Object.clone(m)]);
+ e = e.replace(m[0], '');
+ } else {
+ // reluctantly do a document-wide search
+ // and look for a match in the array
+ return this.findElements(document).include(element);
+ }
+ }
+ }
+ }
+
+ var match = true, name, matches;
+ for (var i = 0, token; token = this.tokens[i]; i++) {
+ name = token[0], matches = token[1];
+ if (!Selector.assertions[name](element, matches)) {
+ match = false; break;
+ }
+ }
+
+ return match;
+ },
+
+ toString: function() {
+ return this.expression;
+ },
+
+ inspect: function() {
+ return "#<Selector:" + this.expression.inspect() + ">";
+ }
+});
+
+Object.extend(Selector, {
+ _cache: { },
+
+ xpath: {
+ descendant: "//*",
+ child: "/*",
+ adjacent: "/following-sibling::*[1]",
+ laterSibling: '/following-sibling::*',
+ tagName: function(m) {
+ if (m[1] == '*') return '';
+ return "[local-name()='" + m[1].toLowerCase() +
+ "' or local-name()='" + m[1].toUpperCase() + "']";
+ },
+ className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+ id: "[@id='#{1}']",
+ attrPresence: "[@#{1}]",
+ attr: function(m) {
+ m[3] = m[5] || m[6];
+ return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+ },
+ pseudo: function(m) {
+ var h = Selector.xpath.pseudos[m[1]];
+ if (!h) return '';
+ if (Object.isFunction(h)) return h(m);
+ return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+ },
+ operators: {
+ '=': "[@#{1}='#{3}']",
+ '!=': "[@#{1}!='#{3}']",
+ '^=': "[starts-with(@#{1}, '#{3}')]",
+ '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+ '*=': "[contains(@#{1}, '#{3}')]",
+ '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+ '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+ },
+ pseudos: {
+ 'first-child': '[not(preceding-sibling::*)]',
+ 'last-child': '[not(following-sibling::*)]',
+ 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
+ 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
+ 'checked': "[@checked]",
+ 'disabled': "[@disabled]",
+ 'enabled': "[not(@disabled)]",
+ 'not': function(m) {
+ var e = m[6], p = Selector.patterns,
+ x = Selector.xpath, le, m, v;
+
+ var exclusion = [];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in p) {
+ if (m = e.match(p[i])) {
+ v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+ exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+ return "[not(" + exclusion.join(" and ") + ")]";
+ },
+ 'nth-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+ },
+ 'nth-last-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+ },
+ 'nth-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("position() ", m);
+ },
+ 'nth-last-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+ },
+ 'first-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+ },
+ 'last-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+ },
+ 'only-of-type': function(m) {
+ var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+ },
+ nth: function(fragment, m) {
+ var mm, formula = m[6], predicate;
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ if (mm = formula.match(/^(\d+)$/)) // digit only
+ return '[' + fragment + "= " + mm[1] + ']';
+ if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (mm[1] == "-") mm[1] = -1;
+ var a = mm[1] ? Number(mm[1]) : 1;
+ var b = mm[2] ? Number(mm[2]) : 0;
+ predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+ "((#{fragment} - #{b}) div #{a} >= 0)]";
+ return new Template(predicate).evaluate({
+ fragment: fragment, a: a, b: b });
+ }
+ }
+ }
+ },
+
+ criteria: {
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
+ attr: function(m) {
+ m[3] = (m[5] || m[6]);
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
+ },
+ pseudo: function(m) {
+ if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+ return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+ },
+ descendant: 'c = "descendant";',
+ child: 'c = "child";',
+ adjacent: 'c = "adjacent";',
+ laterSibling: 'c = "laterSibling";'
+ },
+
+ patterns: {
+ // combinators must be listed first
+ // (and descendant needs to be last combinator)
+ laterSibling: /^\s*~\s*/,
+ child: /^\s*>\s*/,
+ adjacent: /^\s*\+\s*/,
+ descendant: /^\s/,
+
+ // selectors follow
+ tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
+ id: /^#([\w\-\*]+)(\b|$)/,
+ className: /^\.([\w\-\*]+)(\b|$)/,
+ pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/,
+ attrPresence: /^\[([\w]+)\]/,
+ attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
+ },
+
+ // for Selector.match and Element#match
+ assertions: {
+ tagName: function(element, matches) {
+ return matches[1].toUpperCase() == element.tagName.toUpperCase();
+ },
+
+ className: function(element, matches) {
+ return Element.hasClassName(element, matches[1]);
+ },
+
+ id: function(element, matches) {
+ return element.id === matches[1];
+ },
+
+ attrPresence: function(element, matches) {
+ return Element.hasAttribute(element, matches[1]);
+ },
+
+ attr: function(element, matches) {
+ var nodeValue = Element.readAttribute(element, matches[1]);
+ return Selector.operators[matches[2]](nodeValue, matches[3]);
+ }
+ },
+
+ handlers: {
+ // UTILITY FUNCTIONS
+ // joins two collections
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ a.push(node);
+ return a;
+ },
+
+ // marks an array of nodes for counting
+ mark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._counted = true;
+ return nodes;
+ },
+
+ unmark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._counted = undefined;
+ return nodes;
+ },
+
+ // mark each child node with its position (for nth calls)
+ // "ofType" flag indicates whether we're indexing for nth-of-type
+ // rather than nth-child
+ index: function(parentNode, reverse, ofType) {
+ parentNode._counted = true;
+ if (reverse) {
+ for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+ var node = nodes[i];
+ if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
+ }
+ } else {
+ for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+ if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
+ }
+ },
+
+ // filters out duplicates and extends all nodes
+ unique: function(nodes) {
+ if (nodes.length == 0) return nodes;
+ var results = [], n;
+ for (var i = 0, l = nodes.length; i < l; i++)
+ if (!(n = nodes[i])._counted) {
+ n._counted = true;
+ results.push(Element.extend(n));
+ }
+ return Selector.handlers.unmark(results);
+ },
+
+ // COMBINATOR FUNCTIONS
+ descendant: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName('*'));
+ return results;
+ },
+
+ child: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
+ if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+ }
+ return results;
+ },
+
+ adjacent: function(nodes) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ var next = this.nextElementSibling(node);
+ if (next) results.push(next);
+ }
+ return results;
+ },
+
+ laterSibling: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, Element.nextSiblings(node));
+ return results;
+ },
+
+ nextElementSibling: function(node) {
+ while (node = node.nextSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ previousElementSibling: function(node) {
+ while (node = node.previousSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ // TOKEN FUNCTIONS
+ tagName: function(nodes, root, tagName, combinator) {
+ tagName = tagName.toUpperCase();
+ var results = [], h = Selector.handlers;
+ if (nodes) {
+ if (combinator) {
+ // fastlane for ordinary descendant combinators
+ if (combinator == "descendant") {
+ for (var i = 0, node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName(tagName));
+ return results;
+ } else nodes = this[combinator](nodes);
+ if (tagName == "*") return nodes;
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName.toUpperCase() == tagName) results.push(node);
+ return results;
+ } else return root.getElementsByTagName(tagName);
+ },
+
+ id: function(nodes, root, id, combinator) {
+ var targetNode = $(id), h = Selector.handlers;
+ if (!targetNode) return [];
+ if (!nodes && root == document) return [targetNode];
+ if (nodes) {
+ if (combinator) {
+ if (combinator == 'child') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (targetNode.parentNode == node) return [targetNode];
+ } else if (combinator == 'descendant') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.descendantOf(targetNode, node)) return [targetNode];
+ } else if (combinator == 'adjacent') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Selector.handlers.previousElementSibling(targetNode) == node)
+ return [targetNode];
+ } else nodes = h[combinator](nodes);
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node == targetNode) return [targetNode];
+ return [];
+ }
+ return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+ },
+
+ className: function(nodes, root, className, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ return Selector.handlers.byClassName(nodes, root, className);
+ },
+
+ byClassName: function(nodes, root, className) {
+ if (!nodes) nodes = Selector.handlers.descendant([root]);
+ var needle = ' ' + className + ' ';
+ for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+ nodeClassName = node.className;
+ if (nodeClassName.length == 0) continue;
+ if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+ results.push(node);
+ }
+ return results;
+ },
+
+ attrPresence: function(nodes, root, attr) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ var results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.hasAttribute(node, attr)) results.push(node);
+ return results;
+ },
+
+ attr: function(nodes, root, attr, value, operator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ var handler = Selector.operators[operator], results = [];
+ for (var i = 0, node; node = nodes[i]; i++) {
+ var nodeValue = Element.readAttribute(node, attr);
+ if (nodeValue === null) continue;
+ if (handler(nodeValue, value)) results.push(node);
+ }
+ return results;
+ },
+
+ pseudo: function(nodes, name, value, root, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ return Selector.pseudos[name](nodes, value, root);
+ }
+ },
+
+ pseudos: {
+ 'first-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.previousElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'last-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.nextElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'only-child': function(nodes, value, root) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+ results.push(node);
+ return results;
+ },
+ 'nth-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root);
+ },
+ 'nth-last-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true);
+ },
+ 'nth-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, false, true);
+ },
+ 'nth-last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true, true);
+ },
+ 'first-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, false, true);
+ },
+ 'last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, true, true);
+ },
+ 'only-of-type': function(nodes, formula, root) {
+ var p = Selector.pseudos;
+ return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+ },
+
+ // handles the an+b logic
+ getIndices: function(a, b, total) {
+ if (a == 0) return b > 0 ? [b] : [];
+ return $R(1, total).inject([], function(memo, i) {
+ if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+ return memo;
+ });
+ },
+
+ // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
+ nth: function(nodes, formula, root, reverse, ofType) {
+ if (nodes.length == 0) return [];
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ var h = Selector.handlers, results = [], indexed = [], m;
+ h.mark(nodes);
+ for (var i = 0, node; node = nodes[i]; i++) {
+ if (!node.parentNode._counted) {
+ h.index(node.parentNode, reverse, ofType);
+ indexed.push(node.parentNode);
+ }
+ }
+ if (formula.match(/^\d+$/)) { // just a number
+ formula = Number(formula);
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.nodeIndex == formula) results.push(node);
+ } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (m[1] == "-") m[1] = -1;
+ var a = m[1] ? Number(m[1]) : 1;
+ var b = m[2] ? Number(m[2]) : 0;
+ var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+ for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+ for (var j = 0; j < l; j++)
+ if (node.nodeIndex == indices[j]) results.push(node);
+ }
+ }
+ h.unmark(nodes);
+ h.unmark(indexed);
+ return results;
+ },
+
+ 'empty': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ // IE treats comments as element nodes
+ if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
+ results.push(node);
+ }
+ return results;
+ },
+
+ 'not': function(nodes, selector, root) {
+ var h = Selector.handlers, selectorType, m;
+ var exclusions = new Selector(selector).findElements(root);
+ h.mark(exclusions);
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node._counted) results.push(node);
+ h.unmark(exclusions);
+ return results;
+ },
+
+ 'enabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node.disabled) results.push(node);
+ return results;
+ },
+
+ 'disabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.disabled) results.push(node);
+ return results;
+ },
+
+ 'checked': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.checked) results.push(node);
+ return results;
+ }
+ },
+
+ operators: {
+ '=': function(nv, v) { return nv == v; },
+ '!=': function(nv, v) { return nv != v; },
+ '^=': function(nv, v) { return nv.startsWith(v); },
+ '$=': function(nv, v) { return nv.endsWith(v); },
+ '*=': function(nv, v) { return nv.include(v); },
+ '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+ '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
+ },
+
+ matchElements: function(elements, expression) {
+ var matches = new Selector(expression).findElements(), h = Selector.handlers;
+ h.mark(matches);
+ for (var i = 0, results = [], element; element = elements[i]; i++)
+ if (element._counted) results.push(element);
+ h.unmark(matches);
+ return results;
+ },
+
+ findElement: function(elements, expression, index) {
+ if (Object.isNumber(expression)) {
+ index = expression; expression = false;
+ }
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ var exprs = expressions.join(','), expressions = [];
+ exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+ expressions.push(m[1].strip());
+ });
+ var results = [], h = Selector.handlers;
+ for (var i = 0, l = expressions.length, selector; i < l; i++) {
+ selector = new Selector(expressions[i].strip());
+ h.concat(results, selector.findElements(element));
+ }
+ return (l > 1) ? h.unique(results) : results;
+ }
+});
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+ reset: function(form) {
+ $(form).reset();
+ return form;
+ },
+
+ serializeElements: function(elements, options) {
+ if (typeof options != 'object') options = { hash: !!options };
+ else if (options.hash === undefined) options.hash = true;
+ var key, value, submitted = false, submit = options.submit;
+
+ var data = elements.inject({ }, function(result, element) {
+ if (!element.disabled && element.name) {
+ key = element.name; value = $(element).getValue();
+ if (value != null && (element.type != 'submit' || (!submitted &&
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
+ if (key in result) {
+ // a key is already present; construct an array of values
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return options.hash ? data : Object.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, options) {
+ return Form.serializeElements(Form.getElements(form), options);
+ },
+
+ getElements: function(form) {
+ return $A($(form).getElementsByTagName('*')).inject([],
+ function(elements, child) {
+ if (Form.Element.Serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ }
+ );
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('disable');
+ return form;
+ },
+
+ enable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('enable');
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ var elements = $(form).getElements().findAll(function(element) {
+ return 'hidden' != element.type && !element.disabled;
+ });
+ var firstByIndex = elements.findAll(function(element) {
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+ }).sortBy(function(element) { return element.tabIndex }).first();
+
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
+ return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = $(form);
+ form.findFirstElement().activate();
+ return form;
+ },
+
+ request: function(form, options) {
+ form = $(form), options = Object.clone(options || { });
+
+ var params = options.parameters, action = form.readAttribute('action') || '';
+ if (action.blank()) action = window.location.href;
+ options.parameters = form.serialize(true);
+
+ if (params) {
+ if (Object.isString(params)) params = params.toQueryParams();
+ Object.extend(options.parameters, params);
+ }
+
+ if (form.hasAttribute('method') && !options.method)
+ options.method = form.method;
+
+ return new Ajax.Request(action, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+ focus: function(element) {
+ $(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ $(element).select();
+ return element;
+ }
+};
+
+Form.Element.Methods = {
+ serialize: function(element) {
+ element = $(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = { };
+ pair[element.name] = value;
+ return Object.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ setValue: function(element, value) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ Form.Element.Serializers[method](element, value);
+ return element;
+ },
+
+ clear: function(element) {
+ $(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return $(element).value != '';
+ },
+
+ activate: function(element) {
+ element = $(element);
+ try {
+ element.focus();
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
+ !['button', 'reset', 'submit'].include(element.type)))
+ element.select();
+ } catch (e) { }
+ return element;
+ },
+
+ disable: function(element) {
+ element = $(element);
+ element.blur();
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = $(element);
+ element.disabled = false;
+ return element;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element, value) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element, value);
+ default:
+ return Form.Element.Serializers.textarea(element, value);
+ }
+ },
+
+ inputSelector: function(element, value) {
+ if (value === undefined) return element.checked ? element.value : null;
+ else element.checked = !!value;
+ },
+
+ textarea: function(element, value) {
+ if (value === undefined) return element.value;
+ else element.value = value;
+ },
+
+ select: function(element, index) {
+ if (index === undefined)
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ else {
+ var opt, value, single = !Object.isArray(index);
+ for (var i = 0, length = element.length; i < length; i++) {
+ opt = element.options[i];
+ value = this.optionValue(opt);
+ if (single) {
+ if (value == index) {
+ opt.selected = true;
+ return;
+ }
+ }
+ else opt.selected = index.include(value);
+ }
+ }
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ // extend element because hasAttribute may not be native
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+ initialize: function($super, element, frequency, callback) {
+ $super(callback, frequency);
+ this.element = $(element);
+ this.lastValue = this.getValue();
+ },
+
+ execute: function() {
+ var value = this.getValue();
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
+ this.lastValue != value : String(this.lastValue) != String(value)) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback, this);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+if (!window.Event) var Event = { };
+
+Object.extend(Event, {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: { },
+
+ relatedTarget: function(event) {
+ var element;
+ switch(event.type) {
+ case 'mouseover': element = event.fromElement; break;
+ case 'mouseout': element = event.toElement; break;
+ default: return null;
+ }
+ return Element.extend(element);
+ }
+});
+
+Event.Methods = (function() {
+ var isButton;
+
+ if (Prototype.Browser.IE) {
+ var buttonMap = { 0: 1, 1: 4, 2: 2 };
+ isButton = function(event, code) {
+ return event.button == buttonMap[code];
+ };
+
+ } else if (Prototype.Browser.WebKit) {
+ isButton = function(event, code) {
+ switch (code) {
+ case 0: return event.which == 1 && !event.metaKey;
+ case 1: return event.which == 1 && event.metaKey;
+ default: return false;
+ }
+ };
+
+ } else {
+ isButton = function(event, code) {
+ return event.which ? (event.which === code + 1) : (event.button === code);
+ };
+ }
+
+ return {
+ isLeftClick: function(event) { return isButton(event, 0) },
+ isMiddleClick: function(event) { return isButton(event, 1) },
+ isRightClick: function(event) { return isButton(event, 2) },
+
+ element: function(event) {
+ var node = Event.extend(event).target;
+ return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
+ },
+
+ findElement: function(event, expression) {
+ var element = Event.element(event);
+ return element.match(expression) ? element : element.up(expression);
+ },
+
+ pointer: function(event) {
+ return {
+ x: event.pageX || (event.clientX + document.scrollingElement.scrollLeft),
+ y: event.pageY || (event.clientY + document.scrollingElement.scrollTop)
+ };
+ },
+
+ pointerX: function(event) { return Event.pointer(event).x },
+ pointerY: function(event) { return Event.pointer(event).y },
+
+ stop: function(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+ event.stopped = true;
+ }
+ };
+})();
+
+Event.extend = (function() {
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+ m[name] = Event.Methods[name].methodize();
+ return m;
+ });
+
+ if (Prototype.Browser.IE) {
+ Object.extend(methods, {
+ stopPropagation: function() { this.cancelBubble = true },
+ preventDefault: function() { this.returnValue = false },
+ inspect: function() { return "[object Event]" }
+ });
+
+ return function(event) {
+ if (!event) return false;
+ if (event._extendedByPrototype) return event;
+
+ event._extendedByPrototype = Prototype.emptyFunction;
+ var pointer = Event.pointer(event);
+ Object.extend(event, {
+ target: event.srcElement,
+ relatedTarget: Event.relatedTarget(event),
+ pageX: pointer.x,
+ pageY: pointer.y
+ });
+ return Object.extend(event, methods);
+ };
+
+ } else {
+ Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
+ Object.extend(Event.prototype, methods);
+ return Prototype.K;
+ }
+})();
+
+Object.extend(Event, (function() {
+ var cache = Event.cache;
+
+ function getEventID(element) {
+ if (element._eventID) return element._eventID;
+ arguments.callee.id = arguments.callee.id || 1;
+ return element._eventID = ++arguments.callee.id;
+ }
+
+ function getDOMEventName(eventName) {
+ if (eventName && eventName.include(':')) return "dataavailable";
+ return eventName;
+ }
+
+ function getCacheForID(id) {
+ return cache[id] = cache[id] || { };
+ }
+
+ function getWrappersForEventName(id, eventName) {
+ var c = getCacheForID(id);
+ return c[eventName] = c[eventName] || [];
+ }
+
+ function createWrapper(element, eventName, handler) {
+ var id = getEventID(element);
+ var c = getWrappersForEventName(id, eventName);
+ if (c.pluck("handler").include(handler)) return false;
+
+ var wrapper = function(event) {
+ if (!Event || !Event.extend ||
+ (event.eventName && event.eventName != eventName))
+ return false;
+
+ Event.extend(event);
+ handler.call(element, event)
+ };
+
+ wrapper.handler = handler;
+ c.push(wrapper);
+ return wrapper;
+ }
+
+ function findWrapper(id, eventName, handler) {
+ var c = getWrappersForEventName(id, eventName);
+ return c.find(function(wrapper) { return wrapper.handler == handler });
+ }
+
+ function destroyWrapper(id, eventName, handler) {
+ var c = getCacheForID(id);
+ if (!c[eventName]) return false;
+ c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+ }
+
+ function destroyCache() {
+ for (var id in cache)
+ for (var eventName in cache[id])
+ cache[id][eventName] = null;
+ }
+
+ if (window.attachEvent) {
+ window.attachEvent("onunload", destroyCache);
+ }
+
+ return {
+ observe: function(element, eventName, handler) {
+ element = $(element);
+ var name = getDOMEventName(eventName);
+
+ var wrapper = createWrapper(element, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.addEventListener) {
+ element.addEventListener(name, wrapper, false);
+ } else {
+ element.attachEvent("on" + name, wrapper);
+ }
+
+ return element;
+ },
+
+ stopObserving: function(element, eventName, handler) {
+ element = $(element);
+ var id = getEventID(element), name = getDOMEventName(eventName);
+
+ if (!handler && eventName) {
+ getWrappersForEventName(id, eventName).each(function(wrapper) {
+ element.stopObserving(eventName, wrapper.handler);
+ });
+ return element;
+
+ } else if (!eventName) {
+ Object.keys(getCacheForID(id)).each(function(eventName) {
+ element.stopObserving(eventName);
+ });
+ return element;
+ }
+
+ var wrapper = findWrapper(id, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.removeEventListener) {
+ element.removeEventListener(name, wrapper, false);
+ } else {
+ element.detachEvent("on" + name, wrapper);
+ }
+
+ destroyWrapper(id, eventName, handler);
+
+ return element;
+ },
+
+ fire: function(element, eventName, memo) {
+ element = $(element);
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ if (document.createEvent) {
+ var event = document.createEvent("HTMLEvents");
+ event.initEvent("dataavailable", true, true);
+ } else {
+ var event = document.createEventObject();
+ event.eventType = "ondataavailable";
+ }
+
+ event.eventName = eventName;
+ event.memo = memo || { };
+
+ if (document.createEvent) {
+ element.dispatchEvent(event);
+ } else {
+ element.fireEvent(event.eventType, event);
+ }
+
+ return event;
+ }
+ };
+})());
+
+Object.extend(Event, Event.Methods);
+
+Element.addMethods({
+ fire: Event.fire,
+ observe: Event.observe,
+ stopObserving: Event.stopObserving
+});
+
+Object.extend(document, {
+ fire: Element.Methods.fire.methodize(),
+ observe: Element.Methods.observe.methodize(),
+ stopObserving: Element.Methods.stopObserving.methodize()
+});
+
+(function() {
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+ Matthias Miller, Dean Edwards and John Resig. */
+
+ var timer, fired = false;
+
+ function fireContentLoadedEvent() {
+ if (fired) return;
+ if (timer) window.clearInterval(timer);
+ document.fire("dom:loaded");
+ fired = true;
+ }
+
+ if (document.addEventListener) {
+ if (Prototype.Browser.WebKit) {
+ timer = window.setInterval(function() {
+ if (/loaded|complete/.test(document.readyState))
+ fireContentLoadedEvent();
+ }, 0);
+
+ Event.observe(window, "load", fireContentLoadedEvent);
+
+ } else {
+ document.addEventListener("DOMContentLoaded",
+ fireContentLoadedEvent, false);
+ }
+
+ } else {
+ document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
+ $("__onDOMContentLoaded").onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ this.onreadystatechange = null;
+ fireContentLoadedEvent();
+ }
+ };
+ }
+})();
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+ Before: function(element, content) {
+ return Element.insert(element, {before:content});
+ },
+
+ Top: function(element, content) {
+ return Element.insert(element, {top:content});
+ },
+
+ Bottom: function(element, content) {
+ return Element.insert(element, {bottom:content});
+ },
+
+ After: function(element, content) {
+ return Element.insert(element, {after:content});
+ }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+// This should be moved to script.aculo.us; notice the deprecated methods
+// further below, that map to the newer Element methods.
+var Position = {
+ // set to true if needed, warning: firefox performance problems
+ // NOT neeeded for page scrolling, only if draggable contained in
+ // scrollable elements
+ includeScrollOffsets: false,
+
+ // must be called before calling withinIncludingScrolloffset, every time the
+ // page is scrolled
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.scrollingElement.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.scrollingElement.scrollTop
+ || 0;
+ },
+
+ // caches x/y coordinate pair to use with overlap
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = Element.cumulativeScrollOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ // within must be called directly before
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+ // Deprecation layer -- use newer Element methods now (1.5.2).
+
+ cumulativeOffset: Element.Methods.cumulativeOffset,
+
+ positionedOffset: Element.Methods.positionedOffset,
+
+ absolutize: function(element) {
+ Position.prepare();
+ return Element.absolutize(element);
+ },
+
+ relativize: function(element) {
+ Position.prepare();
+ return Element.relativize(element);
+ },
+
+ realOffset: Element.Methods.cumulativeScrollOffset,
+
+ offsetParent: Element.Methods.getOffsetParent,
+
+ page: Element.Methods.viewportOffset,
+
+ clone: function(source, target, options) {
+ options = options || { };
+ return Element.clonePosition(target, source, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+ function iter(name) {
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+ }
+
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+ function(element, className) {
+ className = className.toString().strip();
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+ } : function(element, className) {
+ className = className.toString().strip();
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+ if (!classNames && !className) return elements;
+
+ var nodes = $(element).getElementsByTagName('*');
+ className = ' ' + className + ' ';
+
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+ (classNames && classNames.all(function(name) {
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
+ }))))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ };
+
+ return function(className, parentElement) {
+ return $(parentElement || document.body).getElementsByClassName(className);
+ };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = $(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+Element.addMethods();
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/checkbox-title.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/checkbox-title.html
new file mode 100644
index 0000000000..1ce1a6ee83
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/checkbox-title.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Checkbox with title attribute and no other labeling mechanism</title>
+ </head>
+ <body>
+ <input type="checkbox" id="test" title="foo">
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/file-title.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/file-title.html
new file mode 100644
index 0000000000..769dddbf80
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/file-title.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>File input with title attribute and no other labeling mechanism</title>
+ </head>
+ <body>
+ <input type="file" id="test" title="foo">
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/password-title.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/password-title.html
new file mode 100644
index 0000000000..7e2fc7c403
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/password-title.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Password input with title attribute and no other labeling mechanism</title>
+ </head>
+ <body>
+ <input type="password" id="test" title="foo">
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/radio-title.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/radio-title.html
new file mode 100644
index 0000000000..df7729c781
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/radio-title.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Radio button with title attribute and no other labeling mechanism</title>
+ </head>
+ <body>
+ <input type="radio" id="test" title="foo">
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/text-title.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/text-title.html
new file mode 100644
index 0000000000..48ac5a34a5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-input/text-title.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Text input with title attribute and no other labeling mechanism</title>
+ </head>
+ <body>
+ <input type="text" id="test" title="foo">
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/673.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/673.html
new file mode 100644
index 0000000000..38100513da
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/673.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 673</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 673</h1>
+
+ <div id="TEST_ID" aria-live="polite" >
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the value="polite".
+ After the onload event completes a child DOM text node is added to the element with
+ the aria-live attribute.</p>
+
+ <script>
+
+ function addTextNode() {
+ var node = document.getElementById('TEST_ID');
+ var text_node = document.createTextNode('TEST TEXT');
+ node.appendChild(text_node);
+ }
+
+ function onload() {
+ setTimeout(addTextNode,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/674.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/674.html
new file mode 100644
index 0000000000..52269a560a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/674.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 674</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 674</h1>
+
+ <div id="TEST_ID" aria-live="polite" >
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the value="polite".
+ After the onload event completes a child DOM text node is added to the element
+ with the aria-live attribute.</p>
+
+ <script>
+
+ function addTextNode() {
+ var node = document.getElementById('TEST_ID');
+ var text_node = document.createTextNode('TEST TEXT');
+ node.appendChild(text_node);
+ }
+
+ function onload() {
+ setTimeout(addTextNode,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/675.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/675.html
new file mode 100644
index 0000000000..1c778dd0bd
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/675.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 675</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 675</h1>
+
+ <div id="TEST_ID">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element without an aria-live attribute is defined in markup.
+ After the onload event completes an aria-live attribute with the
+ value 'assertive' is added to the element and a child DOM text
+ node is added to the element.</p>
+
+ <script>
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID');
+ node.setAttribute('aria-live', 'assertive');
+ var text_node = document.createTextNode('TEST TEXT');
+ node.appendChild(text_node);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/676.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/676.html
new file mode 100644
index 0000000000..117fc5c575
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/676.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 676</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 676</h1>
+
+ <div id="TEST_ID">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element without an aria-live attribute is defined in markup.
+ After the onload event completes a new element with an aria-live attribute with the
+ value 'assertive' is added to the document and a child element and text
+ node is added to the element with the aria-live attribute.</p>
+
+ <script>
+
+ function addElement() {
+ var node = document.getElementById('TEST_ID');
+ var element_node = document.createElement('span');
+ element_node.setAttribute('aria-live','assertive');
+ var text_node = document.createTextNode('Text added in a span element on load');
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+ }
+
+ function onload() {
+ setTimeout(addElement,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/677.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/677.html
new file mode 100644
index 0000000000..9a6b48805d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/677.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 677</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 677</h1>
+
+ <div aria-live="polite" >
+ <span id="TEST_ID" style="display: none">Text in markup</span>
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the value="polite"
+ which has a child DOM element node with text content that is hidden using CSS display="none".
+ After the onload event completes a child DOM element node with text content has the
+ CSS dsiplay property changed to display="block".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID');
+ node.style.display = 'block';
+ }
+
+ function onload() {
+ setTimeout(showElement,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/678.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/678.html
new file mode 100644
index 0000000000..6479eca47c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/678.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 678</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 678</h1>
+
+ <div aria-live="assertive" >
+ <span id="TEST_ID" style="display: none">Text in markup</span>
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the
+ value="assertive" which has a child DOM element node with text content
+ that is hidden using CSS display="none". After the onload event completes
+ a child DOM element node with text content has the CSS dsiplay property
+ changed to display="block".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID');
+ node.style.display = 'block';
+ }
+
+ function onload() {
+ setTimeout(showElement,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/679.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/679.html
new file mode 100644
index 0000000000..0f745965dc
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/679.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 679</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 679</h1>
+
+ <div aria-live="polite" >
+ <span>Text before test : </span>
+ <span id="TEST_ID" style="visibility: hidden">TEST TEXT</span>
+ <span> : Text after test</span>
+ </div>
+
+ <h2>Description</h2>
+
+ <p>An element with an aria-live attribute is defined in markup with the value="polite" which has a child
+ DOM element node with text content that is hidden using CSS visibility="hidden".
+ After the onload event completes a child DOM element node with text content has the
+ CSS dsiplay property changed to visibility="visible".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID');
+ node.style.visibility = 'visible';
+ }
+
+ function onload() {
+ setTimeout(showElement,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/680.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/680.html
new file mode 100644
index 0000000000..9a64936755
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/680.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 680</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 680</h1>
+
+ <div aria-live="assertive" >
+ <span>Text before test : </span>
+ <span id="TEST_ID" style="visibility: hidden">TEST TEXT</span>
+ <span> : Text after test</span>
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the value="assertive"
+ which has a child DOM element node with text content that is hidden using CSS visibility="hidden".
+ After the onload event completes a child DOM element node with text content has the CSS dsiplay
+ property changed to visibility="visible".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID');
+ node.style.visibility = 'visible';
+ }
+
+ function onload() {
+ setTimeout(showElement,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/681.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/681.html
new file mode 100644
index 0000000000..e8a60269cb
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/681.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 681</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 681</h1>
+
+ <div id="TEST_ID" aria-live="polite">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during the onload
+ event with the value="polite". After the onload event completes a child DOM text node is added
+ to the element with the aria-live attribute.</p>
+
+ <script>
+
+ function addChildTextNode() {
+ var node = document.getElementById('TEST_ID');
+ var text_node = document.createTextNode("TEST TEXT");
+ node.appendChild(text_node);
+ }
+
+ function onload() {
+ setTimeout(addChildTextNode,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/682.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/682.html
new file mode 100644
index 0000000000..85d744de6d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/682.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 682</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 682</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during the onload
+ event with the value="assertive". After the onload event completes a child DOM text node is
+ added to the element with the aria-live attribute.</p>
+
+ <script>
+
+ function addChildTextNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var text_node = document.createTextNode("TEST TEXT");
+ node.appendChild(text_node);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'assertive');
+ node.appendChild(element_node);
+ setTimeout(addChildTextNode,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/683.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/683.html
new file mode 100644
index 0000000000..92bde34f7b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/683.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 683</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 683</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during the onload
+ event with the value="polite". After the onload event completes a child DOM element node is
+ added to the element with the aria-live attribute.</p>
+
+ <script>
+
+ function addChildElementNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var element_node = document.createElement('div');
+ var text_node = document.createTextNode("TEST TEXT");
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var live_node = document.createElement('div');
+ live_node.setAttribute('id', 'TEST_ID_2');
+ live_node.setAttribute('aria-live', 'polite');
+ node.appendChild(live_node);
+ setTimeout(addChildElementNode,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/684.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/684.html
new file mode 100644
index 0000000000..c77062ca20
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/684.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 684</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 684</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during
+ the onload event with the value="assertive". After the onload event completes a
+ child DOM element node is added to the element with the aria-live attribute.</p>
+
+ <script>
+
+ function addChildElementNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('aria-live', 'polite');
+ node.appendChild(element_node);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'assertive');
+ node.appendChild(element_node);
+ setTimeout(addChildElementNode, 1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/685.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/685.html
new file mode 100644
index 0000000000..f09903944d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/685.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 685</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 685</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during the onload
+ event with the value="polite" and the element has a child DOM element node with text content
+ that is hidden using CSS display="none". After the onload event completes a child DOM element
+ node with text content has the CSS display property changed to display="block".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID_3');
+ node.style.display = "block";
+ }
+
+ function addChildElementNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_3');
+ element_node.setAttribute('style', 'display: none');
+ var text_node = document.createTextNode("TEST TEXT");
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+ setTimeout(showElement,1000);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'polite');
+ node.appendChild(element_node);
+ setTimeout(addChildElementNode,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/686.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/686.html
new file mode 100644
index 0000000000..ed550077de
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/686.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 686</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 686</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during the onload
+ event with the value="assertive" and the element has a child DOM element node with text content
+ that is hidden using CSS display="none". After the onload event completes a child DOM element
+ node with text content has the CSS display property changed to display="block".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID_3');
+ node.style.display = "block";
+ }
+
+ function addChildElementNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_3');
+ element_node.setAttribute('style', 'display: none');
+ var text_node = document.createTextNode("TEST TEXT");
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+ setTimeout(showElement,1000);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'assertive');
+ node.appendChild(element_node);
+ setTimeout(addChildElementNode,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/687.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/687.html
new file mode 100644
index 0000000000..9503adb54f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/687.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 687</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 687</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during
+ the onload event with the value="polite" and the element has a child DOM element node
+ with text content that is hidden using CSS visibility="hidden". After the onload
+ event completes a child DOM element node with text content has the CSS display property
+ changed to visibility="visible".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID_3');
+ node.setAttribute('style', 'visibility: visible');
+ }
+
+ function addChildElementNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_3');
+ element_node.setAttribute('style', 'visibility: hidden');
+ var text_node = document.createTextNode("TEST TEXT");
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+ setTimeout(showElement,1000);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'polite');
+ node.appendChild(element_node);
+ setTimeout(addChildElementNode,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/688.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/688.html
new file mode 100644
index 0000000000..c21cf2714f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/688.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 688</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 688</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script
+ during the onload event with the value="assertive" and the element has a child
+ DOM element node with text content that is hidden using CSS visibility="hidden".
+ After the onload event completes a child DOM element node with text content
+ has the CSS display property changed to visibility="visible".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID_3');
+ node.setAttribute('style', 'visibility: visible');
+ }
+
+ function addChildElementNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_3');
+ element_node.setAttribute('style', 'visibility: hidden');
+ var text_node = document.createTextNode("TEST TEXT");
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+ setTimeout(showElement,1000);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'assertive');
+ node.appendChild(element_node);
+ setTimeout(addChildElementNode,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/689.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/689.html
new file mode 100644
index 0000000000..98f20d456b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/689.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 689</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 689</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script after the
+ onload event completes with the value="polite". After the aria-live attribute is added,
+ a child DOM text node is added to the element with the aria-live attribute.</p>
+
+ <script>
+
+ function addChildTextNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var text_node = document.createTextNode("TEST TEXT");
+ node.appendChild(text_node);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'polite');
+ node.appendChild(element_node);
+ setTimeout(addChildTextNode,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/690.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/690.html
new file mode 100644
index 0000000000..d3fb88c841
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/690.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 690</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 690</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script after
+ the onload event completes with the value="assertive". After the aria-live attribute
+ is added, a child DOM text node is added to the element with the aria-live attribute.</p>
+
+ <script>
+
+ function addChildTextNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var text_node = document.createTextNode("TEST TEXT");
+ node.appendChild(text_node);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'assertive');
+ node.appendChild(element_node);
+ setTimeout(addChildTextNode,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/691.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/691.html
new file mode 100644
index 0000000000..4cb1ab7112
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/691.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 691</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 691</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script
+ after the onload event completes with the value="polite". After the aria-live
+ attribute is added, a child DOM element node is added to the element with
+ the aria-live attribute.</p>
+
+ <script>
+
+ function addChildElementNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var element_node = document.createElement('div');
+ var text_node = document.createTextNode("TEST TEXT");
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'polite');
+ node.appendChild(element_node);
+ setTimeout(addChildElementNode,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/692.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/692.html
new file mode 100644
index 0000000000..7f6f3f9ec3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/692.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 692</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 692</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script after
+ the onload event completes with the value="assertive". After the aria-live attribute
+ is added, a child DOM element node is added to the element with the aria-live attribute.</p>
+
+ <script>
+
+ function addChildElementNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('aria-live', 'polite');
+ node.appendChild(element_node);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'assertive');
+ node.appendChild(element_node);
+ setTimeout(addChildElementNode,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/693.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/693.html
new file mode 100644
index 0000000000..9695f25a63
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/693.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 693</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 693</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script after
+ the onload event completes with the value="polite" and the element has a child DOM
+ element node with text content that is hidden using CSS display="none". After the
+ aria-live attribute is added, the child DOM element node with text content has the
+ CSS display property changed to display="block".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID_2');
+ node.setAttribute('style', 'display: block');
+ }
+
+ function addChildElementNode() {
+ var element_node = document.getElementById('TEST_ID_2');
+ var text_node = document.createTextNode("TEST TEXT");
+ element_node.appendChild(text_node);
+ element_node.setAttribute('style', 'display: none');
+ setTimeout(showElement,500);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'polite');
+ node.appendChild(element_node);
+ setTimeout(addChildElementNode,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/694.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/694.html
new file mode 100644
index 0000000000..392e7d22f4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/694.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 694</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 694</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script after
+ the onload event completes with the value="assertive" and the element has a child
+ DOM element node with text content that is hidden using CSS display="none". After
+ the aria-live attribute is added, the child DOM element node with text content has
+ the CSS display property changed to display="block".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID_3');
+ node.setAttribute('style', 'display: block');
+ }
+
+ function addChildElementNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_3');
+ element_node.setAttribute('style', 'display: none');
+ var text_node = document.createTextNode("TEST TEXT");
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+ setTimeout(showElement,500);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'assertive');
+ node.appendChild(element_node);
+ setTimeout(addChildElementNode,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/695.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/695.html
new file mode 100644
index 0000000000..46c1666d1d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/695.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 695</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 695</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script
+ after the onload event completes with the value="polite" and the element has
+ a child DOM element node with text content that is hidden using CSS
+ visibility="hidden". After the aria-live attribute is added, the child DOM
+ element node with text content has the CSS display property changed to visibility="visible".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID_3');
+ node.setAttribute('style', 'visibility: visible');
+ }
+
+ function addChildElementNode() {
+ var node = document.getElementById('TEST_ID_2');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_3');
+ element_node.setAttribute('style', 'visibility: hidden');
+ var text_node = document.createTextNode("TEST TEXT");
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+ setTimeout(showElement,500);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'assertive');
+ node.appendChild(element_node);
+ setTimeout(addChildElementNode,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/696.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/696.html
new file mode 100644
index 0000000000..b66a7214e3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/696.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 696</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 696</h1>
+
+ <div id="TEST_ID_1">
+ <div id="TEST_ID_2" style="visibility: hidden">TEST TEXT</div>
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script after the
+ onload event completes with the value="assertive" and the element has a child DOM
+ element node with text content that is hidden using CSS visibility="hidden". After
+ the aria-live attribute is added, the child DOM element node with text content has
+ the CSS display property changed to visibility="visible".</p>
+
+ <script>
+
+ function showElement() {
+ var node = document.getElementById('TEST_ID_2');
+ node.setAttribute('style', 'visibility: visible');
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ node.setAttribute('aria-live', 'assertive');
+ setTimeout(showElement,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/697.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/697.html
new file mode 100644
index 0000000000..c229e74ca0
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/697.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 697</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 697</h1>
+
+ <div id="TEST_ID_1" aria-live="polite">
+ TEST TEXT
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the value="polite"
+ has a child DOM text node with content. After the onload event completes the child
+ DOM text node is deleted.</p>
+
+ <script>
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_1');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function onload() {
+ setTimeout(deleteChildNodes,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/698.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/698.html
new file mode 100644
index 0000000000..3d96ba9f43
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/698.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 698</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 698</h1>
+
+ <div id="TEST_ID_1" aria-live="assertive">
+ TEST TEXT
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the value="assertive"
+ has a child DOM text node with content. After the onload event completes the child DOM
+ text node is deleted.</p>
+
+ <script>
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_1');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function onload() {
+ setTimeout(deleteChildNodes,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/699.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/699.html
new file mode 100644
index 0000000000..adc1c79b55
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/699.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 699</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 699</h1>
+
+ <div id="TEST_ID_1" aria-live="polite">
+ <div>TEST TEXT</div>
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the value="polite"
+ has a child DOM element node that contains text content. After the onload event completes
+ the child DOM element node is deleted.</p>
+
+ <script>
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_1');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function onload() {
+ setTimeout(deleteChildNodes,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/700.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/700.html
new file mode 100644
index 0000000000..4f0af8cc61
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/700.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 700</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 700</h1>
+
+ <div id="TEST_ID_1" aria-live="assertive">
+ <div>TEST TEXT</div>
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the
+ value="assertive" has a child DOM element node that contains text content.
+ After the onload event completes the child DOM element node is deleted.</p>
+
+ <script>
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_1');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function onload() {
+ setTimeout(deleteChildNodes,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/701.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/701.html
new file mode 100644
index 0000000000..755b226963
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/701.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 701</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 701</h1>
+
+ <div id="TESTZ" aria-live="polite">
+ Text before: <span id="TEST_ID_1">TEST TEXT</span> :text after
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with
+ the value="polite" has a child DOM element node that contains text
+ content. After the onload event completes the CSS 'display' property
+ of the child DOM element node is changed to display="none".</p>
+
+ <script>
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_1');
+ node.setAttribute('style', 'display: none');
+ }
+
+ function onload() {
+ setTimeout(hideElement,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/702.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/702.html
new file mode 100644
index 0000000000..e13b82edcd
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/702.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 702</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 702</h1>
+
+ <div id="TESTZ" aria-live="assertive">
+ Text before: <span id="TEST_ID_1">TEST TEXT</span> :text after
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the value="assertive"
+ has a child DOM element node that contains text content. After the onload event completes
+ the CSS 'display' property of the child DOM element node is changed to display="none".</p>
+
+ <script>
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_1');
+ node.setAttribute('style', 'display: none');
+ }
+
+ function onload() {
+ setTimeout(hideElement,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/703.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/703.html
new file mode 100644
index 0000000000..e0a4ed5495
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/703.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 703</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 703</h1>
+
+ <div id="TESTZ" aria-live="polite">
+ Text before: <span id="TEST_ID_1">TEST TEXT</span> :text after
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the value="polite"
+ has a child DOM element node that contains text content. After the onload event
+ completes the CSS 'visibility' property of the child DOM element node is changed
+ to visibility="hidden".</p>
+
+ <script>
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_1');
+ node.setAttribute('style', 'visibility: hidden');
+ }
+
+ function onload() {
+ setTimeout(hideElement,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/704.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/704.html
new file mode 100644
index 0000000000..c2294a5f54
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/704.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 704</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 704</h1>
+
+ <div id="TESTZ" aria-live="assertive">
+ Text before: <span id="TEST_ID_1">TEST TEXT</span> :text after
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is defined in markup with the value="assertive"
+ has a child DOM element node that contains text content. After the onload event completes
+ the CSS 'visibility' property of the child DOM element node is changed to visibility="hidden".</p>
+
+ <script>
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_1');
+ node.setAttribute('style', 'visibility: hidden');
+ }
+
+ function onload() {
+ setTimeout(hideElement,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/705.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/705.html
new file mode 100644
index 0000000000..3ac9831e97
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/705.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 705</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 705</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script
+ during the onload event with the value="polite" and the element has a child DOM
+ text node with content. After the onload event completes the child DOM text
+ node is deleted.</p>
+
+ <script>
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_2');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+ element_node.setAttribute('aria-live', 'polite');
+ var text_node = document.createTextNode('TEST TEXT');
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+ setTimeout(deleteChildNodes,500);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/706.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/706.html
new file mode 100644
index 0000000000..edcc7a960b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/706.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 706</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 706</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during the onload
+ event with the value="assertive" and the element has a child DOM text node with content. After
+ the onload event completes the child DOM text node is deleted.</p>
+
+ <script>
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_2');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('aria-live', 'assertive');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+ element_node.appendChild(text_node);
+ node.appendChild(element_node);
+
+ setTimeout(deleteChildNodes,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/707.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/707.html
new file mode 100644
index 0000000000..ed0de5ffa0
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/707.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 707</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 707</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script
+ during the onload event with the value="polite" and the element has a child
+ DOM element node that contains text content. After the onload event completes
+ the child DOM element node is deleted.</p>
+
+ <script>
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_2');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'polite');
+ live_node.setAttribute('id', 'TEST_ID_2');
+
+ var element_node = document.createElement('div');
+
+ var text_node = document.createTextNode('TEST TEXT');
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+ setTimeout(deleteChildNodes,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/708.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/708.html
new file mode 100644
index 0000000000..796b729086
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/708.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 708</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 708</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during
+ the onload event with the value="assertive" and the element has a child DOM element
+ node that contains text content. After the onload event completes the child DOM
+ element node is deleted.</p>
+
+ <script>
+
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_2');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'assertive');
+ live_node.setAttribute('id', 'TEST_ID_2');
+
+ var element_node = document.createElement('div');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(deleteChildNodes,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/709.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/709.html
new file mode 100644
index 0000000000..3306f7e152
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/709.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 709</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 709</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during
+ the onload event with the value="polite" and the element has a child DOM element node
+ that contains text content. After the onload event completes the CSS 'display'
+ property of the child DOM element node is changed to display="none".</p>
+
+ <script>
+
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_2');
+ node.setAttribute('style', 'display: none');
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'polite');
+ live_node.setAttribute('id','TESTZ');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(hideElement,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/710.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/710.html
new file mode 100644
index 0000000000..dd947f21d9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/710.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 710</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 710</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script during
+ the onload event with the value="assertive" and the element has a child DOM element
+ node that contains text content. After the onload event completes the CSS 'display'
+ property of the child DOM element node is changed to display="none".</p>
+
+ <script>
+
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_2');
+ node.setAttribute('style', 'display: none');
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'assertive');
+ live_node.setAttribute('id','TESTZ');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(hideElement,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/711.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/711.html
new file mode 100644
index 0000000000..af409ce80a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/711.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 711</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 711</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a script
+ during the onload event with the value="polite" and the element has a child
+ DOM element node that contains text content. After the onload event completes
+ the CSS 'visibility' property of the child DOM element node is changed
+ to visibility="hidden".</p>
+
+ <script>
+
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_2');
+ node.setAttribute('style', 'visibility: hidden');
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'polite');
+ live_node.setAttribute('id', 'TESTZ');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(hideElement,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/712.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/712.html
new file mode 100644
index 0000000000..11dd2f28b2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/712.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 712</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 712</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute is added to the document by a
+ script during the onload event with the value="assertive" and the element
+ has a child DOM element node that contains text content. After the onload
+ event completes the CSS 'visibility' property of the child DOM element
+ node is changed to visibility="hidden".</p>
+
+ <script>
+
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_2');
+ node.setAttribute('style', 'visibility: hidden');
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'assertive');
+ live_node.setAttribute('id', 'TESTZ');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(hideElement,1000);
+ }
+
+ function onload() {
+ addLiveRegion();
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/713.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/713.html
new file mode 100644
index 0000000000..24387f9206
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/713.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 713</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 713</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a
+ script after the onload event completes with the value="polite" and
+ the element has a child DOM text node with content. After the
+ aria-live attribute is added, the child DOM text node is deleted.</p>
+
+ <script>
+
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_2');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'polite');
+ live_node.setAttribute('id', 'TESTZ');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(deleteChildNodes,1000);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion, 1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/714.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/714.html
new file mode 100644
index 0000000000..b2d4f120b7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/714.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 714</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 714</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a
+ script after the onload event completes with the value="assertive"
+ and the element has a child DOM text node with content. After the
+ aria-live attribute is added, the child DOM text node is deleted.</p>
+
+ <script>
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_2');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'assertive');
+ live_node.setAttribute('id', 'TESTZ');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(deleteChildNodes,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/715.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/715.html
new file mode 100644
index 0000000000..00b26f591b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/715.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 715</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 715</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script
+ after the onload event completes with the value="polite" and the element has
+ a child DOM element node that contains text content. After the aria-live
+ attribute is added, the child DOM element node is deleted.</p>
+
+ <script>
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_1');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ node.setAttribute('aria-live', 'polite');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ node.appendChild(text_node);
+
+ setTimeout(deleteChildNodes,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/716.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/716.html
new file mode 100644
index 0000000000..80d2b85ecd
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/716.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 716</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 716</h1>
+
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script
+ after the onload event completes with the value="polite" and the element has
+ a child DOM element node that contains text content. After the aria-live
+ attribute is added, the child DOM element node is deleted.</p>
+
+ <script>
+
+ function deleteChildNodes() {
+ var node = document.getElementById('TEST_ID_1');
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ node.setAttribute('aria-live', 'assertive');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ node.appendChild(text_node);
+
+ setTimeout(deleteChildNodes,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/717.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/717.html
new file mode 100644
index 0000000000..aaed8c09d7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/717.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 717</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 717</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script
+ after the onload event completes with the value="polite" and the element has
+ a child DOM element node that contains text content. After the aria-live
+ attribute is added, the CSS 'display' property of the child DOM element
+ node is changed to display="none".</p>
+
+ <script>
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_2');
+ node.style.display = "none";
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'polite');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(hideElement,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/718.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/718.html
new file mode 100644
index 0000000000..f6e9a2b1ad
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/718.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 718</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 718</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a script
+ after the onload event completes with the value="assertive" and the element has
+ a child DOM element node that contains text content. After the aria-live
+ attribute is added, the CSS 'display' property of the child DOM element
+ node is changed to display="none".</p>
+
+ <script>
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_2');
+ node.style.display = "none";
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'assertive');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(hideElement,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/719.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/719.html
new file mode 100644
index 0000000000..1f132e67ae
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/719.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 719</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 719</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a
+ script after the onload event completes with the value="polite" and
+ the element has a child DOM element node that contains text content.
+ After the aria-live attribute is added, the CSS 'visibility' property
+ of the child DOM element node is changed to visibility="hidden".</p>
+
+ <script>
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_2');
+ node.style.visibility = "hidden";
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'polite');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(hideElement,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/720.html b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/720.html
new file mode 100644
index 0000000000..23564ea247
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/accessible-name-updates/720.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 720</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 720</h1>
+
+ <div id="TEST_ID_1">
+ </div>
+
+ <h2>Description</h2>
+ <p>The aria-live attribute is added to an element in the document by a
+ script after the onload event completes with the value="assertive" and
+ the element has a child DOM element node that contains text content.
+ After the aria-live attribute is added, the CSS 'visibility' property
+ of the child DOM element node is changed to visibility="hidden".</p>
+
+ <script>
+
+ function hideElement() {
+ var node = document.getElementById('TEST_ID_2');
+ node.style.visibility = "hidden";
+ }
+
+ function addLiveRegion() {
+ var node = document.getElementById('TEST_ID_1');
+
+ var live_node = document.createElement('div');
+ live_node.setAttribute('aria-live', 'assertive');
+
+ var element_node = document.createElement('div');
+ element_node.setAttribute('id', 'TEST_ID_2');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ element_node.appendChild(text_node);
+ live_node.appendChild(element_node);
+ node.appendChild(live_node);
+
+ setTimeout(hideElement,500);
+ }
+
+ function onload() {
+ setTimeout(addLiveRegion,1000);
+ }
+
+ window.addEventListener('load', onload);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/772.html b/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/772.html
new file mode 100644
index 0000000000..4684774cc2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/772.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test 772
+ </title>
+ </head>
+ <body>
+ <img src="foo.jpg" id="test" alt="test" aria-describedby="t1">
+ <div id="t1">foo</div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/773.html b/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/773.html
new file mode 100644
index 0000000000..cb1bd17ad5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/773.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test 773
+ </title>
+ </head>
+ <body>
+ <img src="foo.jpg" id="test" alt="test" aria-describedby="t1">
+ <div id="t1" style="display:none">foo</div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/774.html b/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/774.html
new file mode 100644
index 0000000000..0fac481545
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/774.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test 774</title>
+ </head>
+ <body>
+ <img src="foo.jpg" id="test" alt="test" aria-describedby="t1">
+ <span id="t1" role="presentation">foo</span>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/838.html b/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/838.html
new file mode 100644
index 0000000000..3a765b685d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/aria-describedby/838.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test 773
+ </title>
+ </head>
+ <body>
+ <img src="foo.jpg" id="test" alt="test" aria-describedby="t1">
+ <div id="t1" style="visibility:hidden">foo</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/567.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/567.html
new file mode 100644
index 0000000000..3800104d52
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/567.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A &lt;div&gt; with role "button" followed by a modification to the value of "checkbox".</title>
+ <script>
+ function changeRole (/* Element */ element, /* String */ newRole) {
+ element.setAttribute ('role', newRole);
+ element.innerHTML = "This &lt;div&gt; has role '" + newRole + "'";
+ }
+ </script>
+ </head>
+ <body>
+ <div role="button" id="test" tabindex="0" onclick="changeRole (this, 'checkbox');" onkeydown="changeRole (this, 'checkbox');">This &lt;div&gt; has role 'button'</div>
+ <p>
+ <button onclick="changeRole (document.getElementById ('test'), 'checkbox')" type="button">Change Role</button>
+ <button onclick="window.location.reload()" type="button">Reload Page</button>
+ </p>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/568.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/568.html
new file mode 100644
index 0000000000..d290ada24c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/568.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A &lt;div&gt; with role "button" followed by removal of the element and its children and an insertion of a new div having role="checkbox"</title>
+ <script>
+ function changeRoleByRemoval (/* Element */ element, /* String */ newRole) {
+ var parent = element.parentNode;
+ if (parent) {
+ parent.removeChild (element);
+ var div = document.createElement ('div');
+ div.setAttribute ('role', newRole);
+ div.setAttribute ('id', 'test');
+ div.setAttribute ('tabindex', '0');
+ div.setAttribute ('onclick', 'changeRoleByRemoval (this, "checkbox");');
+ div.setAttribute ('onkeydown', 'changeRoleByRemoval (this, "checkbox");');
+ div.innerHTML = "This &lt;div&gt; has role '" + newRole + "'";
+ parent.appendChild (div);
+ }
+ }
+ </script>
+ </head>
+ <body>
+ <div>
+ <div role="button" id="test" tabindex="0" onclick="changeRoleByRemoval (this, 'checkbox');" onkeydown="changeRoleByRemoval (this, 'checkbox');">This &lt;div&gt; has role 'button'</div>
+ </div>
+ <p>
+ <button onclick="changeRoleByRemoval (document.getElementById ('test'), 'checkbox')" type="button">Change Role</button>
+ <button onclick="window.location.reload()" type="button">Reload Page</button>
+ </p>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/569.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/569.html
new file mode 100644
index 0000000000..eca4e1f3e8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/569.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A &lt;div&gt; with role role="listbox" aria-busy="true", but no "option" descendants.</title>
+ </head>
+ <body>
+ <div id="test" role="listbox" aria-busy="true">
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/571-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/571-haswarn.html
new file mode 100644
index 0000000000..92130fbf98
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/571-haswarn.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>In a &lt;div&gt; element with role="combobox" and aria-autocomplete="none", change values of the combobox by typing.</title>
+ <style>
+ .hasFocus { border: 2px solid red; }
+ </style>
+ <script>
+ var DEL = 8;
+ var BACK_SPACE = 72;
+ var comboInfo = {};
+
+ function initComboInfo() {
+ comboInfo.comboBox = document.getElementById ('test');
+ comboInfo.textEntry = document.getElementById ('textEntry');
+ var active = document.getElementById (comboInfo.comboBox.getAttribute ('aria-activedescendant'));
+ comboInfo.options = active.parentElement.children;
+ return active;
+ }
+
+ function matchOption(/* String */ entryVal) {
+ var theOption = null;
+
+ // Check only if entryVal is not empty.
+ //
+ if (entryVal != null && entryVal.length != 0) {
+ for (var i = 0; i < comboInfo.options.length; i++) {
+ var anOption = comboInfo.options[i];
+ var optionText = anOption.innerHTML.toLowerCase();
+ if (optionText.indexOf (entryVal) == 0) {
+ theOption = anOption;
+ break;
+ }
+ }
+ }
+ return theOption;
+ }
+
+ function updateActive (/* Element */ newActive) {
+ var oldActive = document.getElementById (comboInfo.comboBox.getAttribute ('aria-activedescendant'));
+ if (oldActive != newActive) {
+ comboInfo.comboBox.setAttribute ('aria-activedescendant', newActive.getAttribute ('id'));
+ oldActive.removeAttribute ('class');
+ newActive.setAttribute ('class', 'hasFocus');
+ }
+ }
+
+ function doOnload() {
+ var active = initComboInfo();
+ active.setAttribute ('class', 'hasFocus');
+ comboInfo.textEntry.value = active.innerHTML;
+ comboInfo.textEntry.focus();
+ }
+
+ function handleTyping (event) {
+ /* NOTE: With respect to IE, assumes IE9 as per CR criteria (http://www.w3.org/WAI/ARIA/1.0/CR/implementation-report) */
+ /* NOTE: Supports deletion only from the end of the text INPUT value */
+ var stringSoFar = event.target.value;
+
+ if (event.which == DEL || event.which == BACK_SPACE)
+ stringSoFar = stringSoFar.slice(0, stringSoFar.length-1);
+ else
+ stringSoFar = stringSoFar + String.fromCharCode (event.which);
+
+ var matchedOption = matchOption (stringSoFar.toLowerCase());
+ if (matchedOption != null)
+ updateActive (matchedOption);
+ }
+
+ </script>
+ </head>
+ <body onload="doOnload();">
+ <div id="test" role="combobox" aria-expanded="true" aria-label="Tag" aria-autocomplete="none" aria-activedescendant="o1">
+ <input id="textEntry" role="textbox" aria-owns="owned_listbox" onkeypress="handleTyping(event);" type="text">
+ <ul role="listbox" id="owned_listbox" style="list-style-type: none;">
+ <li role="option" id="o1">Zebra</li>
+ <li role="option" id="o2">Zoom</li>
+ <li role="option" id="o3">Zeta</li>
+ <li role="option" id="o4">Zaphod</li>
+ <li role="option" id="o5">Alpha</li>
+ </ul>
+ </div>
+
+</body></html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/572-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/572-haswarn.html
new file mode 100644
index 0000000000..358d14a617
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/572-haswarn.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>In a &lt;div&gt; element with role="combobox" and aria-autocomplete="inline", change values of the combobox by adjusting the up and down arrow keys with focus on the textfield in the combobox.</title>
+ <style>
+ .hasFocus { border: 2px solid red; }
+ </style>
+ <script>
+ var UP = 38;
+ var DOWN = 40;
+ comboInfo = {};
+
+ function toArray (/* NodeList */ nodeList) {
+ var result = [];
+ for (var i=0; i < nodeList.length; i++) {
+ result[i] = nodeList[i];
+ }
+ return result;
+ }
+
+ function initComboInfo() {
+ comboInfo.comboBox = document.getElementById ('test');
+ comboInfo.textEntry = document.getElementById ('testEntry');
+ var active = document.getElementById (comboInfo.comboBox.getAttribute ('aria-activedescendant'));
+ comboInfo.options = toArray (active.parentElement.children);
+ return active;
+ }
+
+ function handleArrow (/* Event */ event) {
+ /* NOTE: With respect to IE, assumes IE9 as per CR criteria (http://www.w3.org/WAI/ARIA/1.0/CR/implementation-report) */
+ var active = document.getElementById (comboInfo.comboBox.getAttribute ('aria-activedescendant'));
+ var currentIndex = comboInfo.options.indexOf (active);
+ var nextIndex = currentIndex;
+ if (event.which == DOWN) {
+ nextIndex = (currentIndex + 1) % comboInfo.options.length;
+ }
+ else if (event.which == UP) {
+ nextIndex = currentIndex - 1;
+ if (nextIndex < 0)
+ nextIndex = comboInfo.options.length - 1;
+ }
+
+ if (nextIndex != currentIndex) {
+ active.removeAttribute ('class');
+ active = comboInfo.options[nextIndex];
+ comboInfo.comboBox.setAttribute ('aria-activedescendant', active.getAttribute ('id'));
+ active.setAttribute ('class', 'hasFocus');
+ event.target.value = active.innerHTML;
+ }
+ }
+
+ function doOnload() {
+ var active = initComboInfo();
+ comboInfo.textEntry.value = active.innerHTML;
+ comboInfo.textEntry.focus();
+ active.setAttribute ('class', 'hasFocus');
+ }
+
+ </script>
+ </head>
+ <body onload='doOnload()'>
+ <div id="test" role="combobox" aria-expanded="true" aria-label="Tag" aria-autocomplete="inline" aria-activedescendant="o1">
+ <input id="testEntry" type="text" role="textbox" aria-owns="owned_listbox" onkeydown='handleArrow (event)'>
+ <ul role="listbox" id="owned_listbox" style="list-style-type: none;">
+ <li role="option" id="o1">Zebra</li>
+ <li role="option" id="o2">Zoom</li>
+ <li role="option" id="o3">Zeta</li>
+ <li role="option" id="o4">Zaphod</li>
+ </ul>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/573-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/573-haswarn.html
new file mode 100644
index 0000000000..195dc7cdc0
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/573-haswarn.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>In a &lt;div&gt; element with role="combobox" and aria-autocomplete="both", change values of the combobox by adjusting the up and down arrow keys with focus on the textfield in the combobox.</title>
+ <style>
+ .hasFocus { border: 2px solid red; }
+ </style>
+ <script>
+ var UP = 38;
+ var DOWN = 40;
+ comboInfo = {};
+
+ function toArray (/* NodeList */ nodeList) {
+ var result = [];
+ for (var i=0; i < nodeList.length; i++) {
+ result[i] = nodeList[i];
+ }
+ return result;
+ }
+
+ function initComboInfo() {
+ comboInfo.comboBox = document.getElementById ('test');
+ comboInfo.textEntry = document.getElementById ('testEntry');
+ var active = document.getElementById (comboInfo.comboBox.getAttribute ('aria-activedescendant'));
+ comboInfo.options = toArray (active.parentElement.children);
+ return active;
+ }
+
+ function handleArrow (/* Event */ event) {
+ /* NOTE: With respect to IE, assumes IE9 as per CR criteria (http://www.w3.org/WAI/ARIA/1.0/CR/implementation-report) */
+ var active = document.getElementById (comboInfo.comboBox.getAttribute ('aria-activedescendant'));
+ var currentIndex = comboInfo.options.indexOf (active);
+ var nextIndex = currentIndex;
+ if (event.which == DOWN) {
+ nextIndex = (currentIndex + 1) % comboInfo.options.length;
+ }
+ else if (event.which == UP) {
+ nextIndex = currentIndex - 1;
+ if (nextIndex < 0)
+ nextIndex = comboInfo.options.length - 1;
+ }
+
+ if (nextIndex != currentIndex) {
+ active.removeAttribute ('class');
+ active = comboInfo.options[nextIndex];
+ comboInfo.comboBox.setAttribute ('aria-activedescendant', active.getAttribute ('id'));
+ active.setAttribute ('class', 'hasFocus');
+ event.target.value = active.innerHTML;
+ }
+ }
+
+ function doOnload() {
+ var active = initComboInfo();
+ comboInfo.textEntry.value = active.innerHTML;
+ comboInfo.textEntry.focus();
+ active.setAttribute ('class', 'hasFocus');
+ }
+
+ </script>
+ </head>
+ <body onload='doOnload()'>
+ <div id="test" role="combobox" aria-expanded="true" aria-label="Tag" aria-autocomplete="both" aria-activedescendant="o2">
+ <input id="testEntry" type="text" role="textbox" aria-owns="owned_listbox" onkeydown='handleArrow (event)'>
+ <ul role="listbox" id="owned_listbox" style="list-style-type: none;">
+ <li role="option" id="o1">Zebra</li>
+ <li role="option" id="o2">Zoom</li>
+ <li role="option" id="o3">Zeta</li>
+ <li role="option" id="o4">Zaphod</li>
+ </ul>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/574.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/574.html
new file mode 100644
index 0000000000..0edd82e91d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/574.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A &lt;div&gt; with role="list" and a child div with role="group" who has a child of role="button".</title>
+ </head>
+ <body>
+ <div id="test" role="list">
+ <div id="listChild" role="group">
+ <span id="groupChild" role="button">List <abbr title="containing">→</abbr> group <abbr title="containing">→</abbr> button</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/575.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/575.html
new file mode 100644
index 0000000000..2672741683
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/575.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A &lt;div&gt;with role="menu" and a child div with role="group" who has a child of role="button"..</title>
+ </head>
+ <body>
+ <div id="test" role="menu">
+ <div id="menuChild" role="group">
+ <span id="groupChild" role="button">Menu <abbr title="containing">→</abbr> group <abbr title="containing">→</abbr> button</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/576.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/576.html
new file mode 100644
index 0000000000..25ac37ce26
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/576.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A &lt;div&gt; with role="tree" and a child div with role="group" who has a child of role="button"</title>
+ </head>
+ <body>
+ <div id="test" role="tree">
+ <div id="treeChild" role="group">
+ <span id="groupChild" role="button">Tree <abbr title="containing">→</abbr> group <abbr title="containing">→</abbr> button</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/577.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/577.html
new file mode 100644
index 0000000000..f08915bed2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/577.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A &lt;div&gt; with role="grid" and a child div with role="rowgroup" who has a child of role="button".</title>
+ </head>
+ <body>
+ <div id="test" role="grid">
+ <div id="gridChild" role="rowgroup">
+ <span id="rowgroupChild" role="button">Grid <abbr title="containing">→</abbr> rowgroup <abbr title="containing">→</abbr> button</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/578.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/578.html
new file mode 100644
index 0000000000..2e781e3d04
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/578.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A page with two div elements that have role="toolbar" but not aria-label property.</title>
+ </head>
+ <body>
+ <div id="test" role="toolbar">Toolbar 1</div>
+ <div id="test2" role="toolbar">Toolbar 2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/579.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/579.html
new file mode 100644
index 0000000000..fd2441ea6a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/579.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A page with one div element that has role="toolbar" but not aria-label property.</title>
+ </head>
+ <body>
+ <div id="test" role="toolbar">Toolbar 1</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/580.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/580.html
new file mode 100644
index 0000000000..14a2c11bd2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/580.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A div element with style="display:none" has aria-hidden="true", and then script sets style to "display: block".</title>
+ <script>
+ function replaceStyle (/* Element */ element, /* String */ selector, /* String */ newValue) {
+ element.setAttribute ('style', selector + ':' + newValue);
+ if (newValue == 'block')
+ element.setAttribute ('aria-hidden', 'false');
+ else if (newValue == 'none')
+ element.setAttribute ('aria-hidden', 'true');
+ }
+ </script>
+ </head>
+ <body>
+ <div id="test" aria-hidden="true" style="display:none;">This &lt;div&gt;'s style switched from 'display:none' to 'display:block'. It's <code>aria-hidden</code> was simultaneously switched to 'false'.</div>
+ <p>
+ <button onclick="replaceStyle (document.getElementById ('test'), 'display', 'block')" type="button">Change to 'display:block'</button>
+ <button onclick="replaceStyle (document.getElementById ('test'), 'display', 'none')" type="button">Change to 'display:none'</button>
+ <button onclick="window.location.reload()" type="button">Reload Page</button>
+ </p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/581.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/581.html
new file mode 100644
index 0000000000..bbe7143c50
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/581.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>A page with a div element with id="owned1" is referenced by two div elements that each have aria-owns="owned1".</title>
+ </head>
+ <body>
+ <div id="owner1" aria-owns="owned1">First owner of owned1</div>
+ <div id="owner2" aria-owns="owned1">Second owner of owned1</div>
+ <div id="owned1">I am owned1</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/582.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/582.html
new file mode 100644
index 0000000000..82a1f19981
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/582.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>An element with aria-setsize=5 has aria-posinset=6.</title>
+ </head>
+ <body>
+ <h2 id="label_fruit"> Available Fruit </h2>
+ <ul role="listbox" aria-labelledby="label_fruit">
+ <li role="option" aria-setsize="5" aria-posinset="6" id="test"> apples </li>
+ <li role="option" aria-setsize="5" aria-posinset="2"> bananas </li>
+ <li role="option" aria-setsize="5" aria-posinset="3"> cantaloupes </li>
+ <li role="option" aria-setsize="5" aria-posinset="4"> dates </li>
+ <li role="option" aria-setsize="5" aria-posinset="5"> kumquat </li>
+ </ul>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/584.html b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/584.html
new file mode 100644
index 0000000000..e784d5be04
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/author-requirements/584.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>An element with aria-setsize=1 has aria-posinset=5</title>
+ </head>
+ <body>
+ <h2 id="label_fruit"> Available Fruit </h2>
+ <ul role="listbox" aria-labelledby="label_fruit">
+ <li role="option" aria-setsize="1" aria-posinset="5" id="test"> apples </li>
+ <li role="option" aria-setsize="5" aria-posinset="2"> bananas </li>
+ <li role="option" aria-setsize="5" aria-posinset="3"> cantaloupes </li>
+ <li role="option" aria-setsize="5" aria-posinset="4"> dates </li>
+ <li role="option" aria-setsize="5" aria-posinset="5"> kumquat </li>
+ </ul>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/button-pressed/589.html b/testing/web-platform/tests/conformance-checkers/html-aria/button-pressed/589.html
new file mode 100644
index 0000000000..25171dfd05
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/button-pressed/589.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>An element with role button without the aria-pressed state.</title>
+ </head>
+ <body>
+ <div id="test" role="button">This div has role button</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/button-pressed/590.html b/testing/web-platform/tests/conformance-checkers/html-aria/button-pressed/590.html
new file mode 100644
index 0000000000..a5fc030cba
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/button-pressed/590.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>An element with role button with an aria-pressed state of "true".</title>
+ </head>
+ <body>
+ <div id="test" role="button" aria-pressed='true'>This div has role button, with aria-pressed='true'</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/combobox-autocomplete-list/div-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/combobox-autocomplete-list/div-haswarn.html
new file mode 100644
index 0000000000..c60006cc98
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/combobox-autocomplete-list/div-haswarn.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Div with role="combobox" and aria-autocomplete="list"</title>
+ </head>
+ <body>
+ <div role="combobox" aria-expanded="true" aria-label="Tag"
+ aria-autocomplete="list" aria-activedescendant="selected_option">
+ <input type="text" role="textbox" aria-owns="owned_listbox">
+ <ul role="listbox" id="owned_listbox">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option" aria-selected="true">Zoom</li>
+ </ul>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/combobox-autocomplete-list/input.html b/testing/web-platform/tests/conformance-checkers/html-aria/combobox-autocomplete-list/input.html
new file mode 100644
index 0000000000..7bf7dd587a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/combobox-autocomplete-list/input.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Input with role="combobox" and aria-autocomplete="list"</title>
+ </head>
+ <body>
+ <input tabindex="0" type="text" id="test" role="combobox" aria-label="Tag" aria-expanded="true"
+ aria-autocomplete="list" aria-owns="owned_listbox" aria-activedescendant="selected_option">
+ <ul role="listbox" id="owned_listbox">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option" aria-selected="true">Zoom</li>
+ </ul>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/default.png b/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/default.png
new file mode 100644
index 0000000000..556809f15f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/default.png
Binary files differ
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-1.png b/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-1.png
new file mode 100644
index 0000000000..7d2bbefe80
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-1.png
Binary files differ
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-2.png b/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-2.png
new file mode 100644
index 0000000000..51ce95ec28
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-2.png
Binary files differ
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-3.png b/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-3.png
new file mode 100644
index 0000000000..2e22838edc
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-3.png
Binary files differ
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-4.png b/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-4.png
new file mode 100644
index 0000000000..1bb8260997
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/css-attr-sel/state-4.png
Binary files differ
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-disparity-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-disparity-haswarn.html
new file mode 100644
index 0000000000..99679c3d6d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-disparity-haswarn.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Native checkbox with aria-checked that conflicts with native checked</title>
+ </head>
+ <body>
+ <form>
+ <input type="checkbox" role="checkbox" checked="checked" aria-checked="false" id="test" value="Placeholder content">
+ </form>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-norole-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-norole-haswarn.html
new file mode 100644
index 0000000000..edaedf0168
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-norole-haswarn.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Native checkbox with aria-checked but no role</title>
+ </head>
+ <body>
+ <form>
+ <input type="checkbox" checked="checked" aria-checked="mixed" id="test" value="Placeholder content">
+ </form>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-role-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-role-haswarn.html
new file mode 100644
index 0000000000..8426a61711
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/host-language/implicit-semantics-checkbox-role-haswarn.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Native checkbox with aria-checked with role</title>
+ </head>
+ <body>
+ <form>
+ <input type="checkbox" checked="checked" role="checkbox" aria-checked="mixed" id="test" value="Placeholder content">
+ </form>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/host-language/input-range-valuetext.htm b/testing/web-platform/tests/conformance-checkers/html-aria/host-language/input-range-valuetext.htm
new file mode 100644
index 0000000000..2e6d079733
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/host-language/input-range-valuetext.htm
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <title>valuetext</title>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+</head>
+<body>
+ <input id="test" type="range" min="0" max="100" value="75" aria-valuetext="awesome">
+</body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-1-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-1-haswarn.html
new file mode 100644
index 0000000000..58f860520c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-1-haswarn.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Live Region Event Test Case: Add text content</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <style>
+ div#TEST_ID {
+ margin: 0.5em;
+ padding: 0.25em;
+ border: medium gray solid;
+ width: 10em;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>ARIA 1.0 Live Region Event Test Case: Add text content</h1>
+
+ <div id="TEST_ID" aria-live="assertive" aria-label="charlotte">
+ </div>
+
+ <button onclick="tryAgain()">Try Again</button>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute with the value "assertive" has a text content added
+ 1.5 seconds after the document is loaded.</p>
+
+ <h2>Expected Results</h2>
+
+ <dl>
+ <dt>ATK/AT-SPI</dt>
+ <dd>ATK/AT-SPIevent: text_changed::insert event</dd>
+
+ <dt>AXAPI</dt>
+ <dd>AXLiveRegionChanged notification</dd>
+
+ <dt>MSAA + IAccessible2</dt>
+ <dd>IAccessible2: IA2_EVENT_TEXT_INSERTED event</dd>
+
+ <dt>MSAA + UIA Express</dt>
+ <dd>TextPattern..::.TextChangedEvent event</dd>
+
+ </dl>
+
+
+ <script>
+
+ function tryAgain() {
+ var node = document.getElementById('TEST_ID');
+
+ while (node.firstChild) node.removeChild(node.firstChild);
+
+ onLoad();
+
+ }
+
+ function addText () {
+ var node = document.getElementById('TEST_ID');
+
+ var text_node = document.createTextNode('TEST TEXT ADDED');
+
+ node.appendChild(text_node);
+ }
+
+ function onLoad() {
+
+ setTimeout(addText,1500);
+
+ }
+
+ window.addEventListener('load', onLoad);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-2.html b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-2.html
new file mode 100644
index 0000000000..180ff4c44e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-2.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Live Region Event Test Case: Delete text content</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <style>
+ div#TEST_ID {
+ margin: 0.5em;
+ padding: 0.25em;
+ border: medium gray solid;
+ width: 10em;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>ARIA 1.0 Live Region Event Test Case: Delete text content</h1>
+
+ <div id="TEST_ID" aria-live="polite" >
+ TEST TEXT
+ </div>
+
+ <button onclick="tryAgain()">Try Again</button>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute with the value "polite" has a text content deleted
+ 1.5 seconds after the document is loaded.</p>
+
+ <h2>Expected Results</h2>
+
+ <dl>
+ <dt>ATK/AT-SPI</dt>
+ <dd>ATK/AT-SPIevent: text_changed::delete event</dd>
+
+ <dt>AXAPI</dt>
+ <dd></dd>
+ <dd>AXLiveRegionChanged notification</dd>
+
+ <dt>MSAA + IAccessible2</dt>
+ <dd>IAccessible2: IA2_EVENT_TEXT_REMOVED event</dd>
+
+ <dt>MSAA + UIA Express</dt>
+ <dd>TextPattern..::.TextChangedEvent event</dd>
+
+ </dl>
+
+
+ <script>
+
+ function tryAgain() {
+ addText()
+
+ onLoad();
+
+ }
+
+ function clearText() {
+ var node = document.getElementById('TEST_ID');
+
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function addText () {
+ var node = document.getElementById('TEST_ID');
+
+ var text_node = document.createTextNode('TEST TEXT');
+
+ node.appendChild(text_node);
+ }
+
+ function onLoad() {
+
+ setTimeout(clearText,1500);
+
+ }
+
+ window.addEventListener('load', onLoad);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-3.html b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-3.html
new file mode 100644
index 0000000000..8bd066d9f2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-3.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Live Region Event Test Case: Change text content</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <style>
+ div#TEST_ID {
+ margin: 0.5em;
+ padding: 0.25em;
+ border: medium gray solid;
+ width: 10em;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>ARIA 1.0 Live Region Event Test Case: Change text content</h1>
+
+ <div id="TEST_ID" aria-live="assertive">
+ TEST TEXT 1
+ </div>
+
+ <button onclick="tryAgain()">Try Again</button>
+
+ <h2>Description</h2>
+ <p>An element with an aria-live attribute with the value "assertive" has a text content changed
+ 1.5 seconds after the document is loaded.</p>
+
+ <h2>Expected Results</h2>
+
+ <dl>
+ <dt>ATK/AT-SPI</dt>
+ <dd>ATK/AT-SPIevent: text_changed::delete event followed by text_changed::insert event</dd>
+
+ <dt>AXAPI</dt>
+ <dd></dd>
+ <dd>AXLiveRegionChanged notification</dd>
+
+ <dt>MSAA + IAccessible2</dt>
+ <dd>IAccessible2: IA2_EVENT_TEXT_REMOVED event followed by IA2_EVENT_TEXT_INSERTED event</dd>
+
+ <dt>MSAA + UIA Express</dt>
+ <dd>TextPattern..::.TextChangedEvent event followed by another TextPattern..::.TextChangedEvent event</dd>
+
+ </dl>
+
+
+ <script>
+
+ function tryAgain() {
+ changeText('TEST TEXT 1')
+ onLoad();
+ }
+
+ function changeText(str) {
+ var node = document.getElementById('TEST_ID');
+ while (node.firstChild) node.removeChild(node.firstChild);
+
+ if (typeof str !== 'string') str = 'changed test text 2';
+ addText(str)
+ }
+
+ function addText (str) {
+ var node = document.getElementById('TEST_ID');
+ var text_node = document.createTextNode(str);
+ node.appendChild(text_node);
+ }
+
+ function onLoad() {
+ setTimeout(changeText,1500);
+ }
+
+ window.addEventListener('load', onLoad);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-4.html b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-4.html
new file mode 100644
index 0000000000..25609e92c5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-4.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Live Region Event Test Case: Add text content (ALERT role)</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <style>
+ div#TEST_ID {
+ margin: 0.5em;
+ padding: 0.25em;
+ border: medium gray solid;
+ width: 20em;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>ARIA 1.0 Live Region Event Test Case: Add text content (ALERT role)</h1>
+
+ <div id="TEST_ID" role="alert" >
+ </div>
+
+ <button onclick="tryAgain()">Try Again</button>
+
+ <h2>Description</h2>
+ <p>An element with an role attribute with the value "alert" has a text content added
+ 1.5 seconds after the document is loaded.</p>
+
+ <h2>Expected Results</h2>
+
+ <dl>
+ <dt>ATK/AT-SPI</dt>
+ <dd>ATK/AT-SPIevent: text_changed::insert event</dd>
+
+ <dt>AXAPI</dt>
+ <dd>AXLiveRegionChanged notification</dd>
+
+ <dt>MSAA + IAccessible2</dt>
+ <dd>IAccessible2: IA2_EVENT_TEXT_INSERTED event</dd>
+
+ <dt>MSAA + UIA Express</dt>
+ <dd>TextPattern..::.TextChangedEvent event</dd>
+
+ </dl>
+
+
+ <script>
+
+ function tryAgain() {
+ var node = document.getElementById('TEST_ID');
+
+ while (node.firstChild) node.removeChild(node.firstChild);
+
+ onLoad();
+
+ }
+
+ function addText () {
+ var node = document.getElementById('TEST_ID');
+
+ var text_node = document.createTextNode('ALERT ROLE TEST TEXT ADDED');
+
+ node.appendChild(text_node);
+ }
+
+ function onLoad() {
+
+ setTimeout(addText,1500);
+
+ }
+
+ window.addEventListener('load', onLoad);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-5.html b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-5.html
new file mode 100644
index 0000000000..4ca9d33fc6
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-5.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Live Region Event Test Case: Change text content (LOG role)</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <style>
+ div#TEST_ID {
+ margin: 0.5em;
+ padding: 0.25em;
+ border: medium gray solid;
+ width: 20em;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>ARIA 1.0 Live Region Event Test Case: Change text content (LOG role)</h1>
+
+ <div id="TEST_ID" role="log">
+ LOG ROLE TEST TEXT 1
+ </div>
+
+ <button onclick="tryAgain()">Try Again</button>
+
+ <h2>Description</h2>
+ <p>An element with an role attribute with the value "log" has a text content changed
+ 1.5 seconds after the document is loaded.</p>
+
+ <h2>Expected Results</h2>
+
+ <dl>
+ <dt>ATK/AT-SPI</dt>
+ <dd>ATK/AT-SPIevent: text_changed::delete event followed by text_changed::insert event</dd>
+
+ <dt>AXAPI</dt>
+ <dd></dd>
+ <dd>AXLiveRegionChanged notification</dd>
+
+ <dt>MSAA + IAccessible2</dt>
+ <dd>IAccessible2: IA2_EVENT_TEXT_REMOVED event followed by IA2_EVENT_TEXT_INSERTED event</dd>
+
+ <dt>MSAA + UIA Express</dt>
+ <dd>TextPattern..::.TextChangedEvent event followed by another TextPattern..::.TextChangedEvent event</dd>
+
+ </dl>
+
+
+ <script>
+
+ function tryAgain() {
+ changeText('LOG ROLE TEST TEXT 1')
+ onLoad();
+ }
+
+ function changeText(str) {
+ var node = document.getElementById('TEST_ID');
+ while (node.firstChild) node.removeChild(node.firstChild);
+
+ if (typeof str !== 'string') str = 'log role changed test text 2';
+ addText(str)
+ }
+
+ function addText (str) {
+ var node = document.getElementById('TEST_ID');
+ var text_node = document.createTextNode(str);
+ node.appendChild(text_node);
+ }
+
+ function onLoad() {
+ setTimeout(changeText,1500);
+ }
+
+ window.addEventListener('load', onLoad);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-6.html b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-6.html
new file mode 100644
index 0000000000..7fb2a07a01
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/live-events/test-case-live-event-6.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Live Region Event Test Case: Delete text content (STATUS role)</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <style>
+ div#TEST_ID {
+ margin: 0.5em;
+ padding: 0.25em;
+ border: medium gray solid;
+ width: 20em;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>ARIA 1.0 Live Region Event Test Case: Delete text content (STATUS role)</h1>
+
+ <div id="TEST_ID" role="status" >
+ STATUS ROLE TEST TEXT
+ </div>
+
+ <button onclick="tryAgain()">Try Again</button>
+
+ <h2>Description</h2>
+ <p>An element with an role attribute with the value "status" has a text content deleted
+ 1.5 seconds after the document is loaded.</p>
+
+ <h2>Expected Results</h2>
+
+ <dl>
+ <dt>ATK/AT-SPI</dt>
+ <dd>ATK/AT-SPIevent: text_changed::delete event</dd>
+
+ <dt>AXAPI</dt>
+ <dd></dd>
+ <dd>AXLiveRegionChanged notification</dd>
+
+ <dt>MSAA + IAccessible2</dt>
+ <dd>IAccessible2: IA2_EVENT_TEXT_REMOVED event </dd>
+
+ <dt>MSAA + UIA Express</dt>
+ <dd>TextPattern..::.TextChangedEvent event </dd>
+
+ </dl>
+
+
+ <script>
+
+ function tryAgain() {
+ addText()
+
+ onLoad();
+
+ }
+
+ function clearText() {
+ var node = document.getElementById('TEST_ID');
+
+ while (node.firstChild) node.removeChild(node.firstChild);
+ }
+
+ function addText () {
+ var node = document.getElementById('TEST_ID');
+
+ var text_node = document.createTextNode('STATUS ROLE TEST TEXT');
+
+ node.appendChild(text_node);
+ }
+
+ function onLoad() {
+
+ setTimeout(clearText,1500);
+
+ }
+
+ window.addEventListener('load', onLoad);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/mixed-value/585.html b/testing/web-platform/tests/conformance-checkers/html-aria/mixed-value/585.html
new file mode 100644
index 0000000000..5b7c024dd5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/mixed-value/585.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Element with role menuitemradio having inherited state or property aria-checked with value "mixed".</title>
+ </head>
+ <body>
+ <div role="menu">
+ <div id="test" role="menuitemradio" aria-checked="mixed" tabindex="0">Radio menu item with aria-checked='mixed'</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/mixed-value/586.html b/testing/web-platform/tests/conformance-checkers/html-aria/mixed-value/586.html
new file mode 100644
index 0000000000..cc5d35362c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/mixed-value/586.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Element with role radio having inherited state or property aria-checked with value "mixed".</title>
+ </head>
+ <body>
+ <div id="test" role="radio" tabindex="0" aria-checked="mixed">Radio button with aria-checked='mixed'</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/596.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/596.html
new file mode 100644
index 0000000000..d2f4a9d8a2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/596.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>DIV with aria-labelledby="ID1" and aria-label is not specified and title is not specified.</title>
+ </head>
+ <body>
+ <div id="test" aria-labelledby='ID1'>aria-labelledby='ID1'</div>
+ <span id="ID1">Label for 'test' element</span>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/597-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/597-haswarn.html
new file mode 100644
index 0000000000..9a2901cefa
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/597-haswarn.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>DIV with aria-label="Tag" and aria-labelledby is not specified and title is not specified..</title>
+ </head>
+ <body>
+ <div id="test" aria-label='Tag'>aria-label='Tag'</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/598-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/598-haswarn.html
new file mode 100644
index 0000000000..7d9404d823
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/598-haswarn.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>DIV with aria-labelledby="ID1" aria-label="Tag" and title is not specified.</title>
+ </head>
+ <body>
+ <div id="test" aria-labelledby="ID1" aria-label='Tag'>aria-labelledby="ID1" aria-label='Tag'</div>
+ <span id="ID1">Element with id='ID1'</span>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/599-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/599-haswarn.html
new file mode 100644
index 0000000000..e08b666475
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/599-haswarn.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+ <html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>DIV with id="ID0" and aria-labelledby="ID0 ID1" and aria-label="Tag" and title is not specified.</title>
+ </head>
+ <body>
+ <div id="test" aria-labelledby="ID0 ID1" aria-label="Tag">aria-labelledby="ID0 ID1" aria-label='Tag'</div>
+ <span id="ID0">Element with id='ID0'</span>
+ <span id="ID1">Element with id='ID1'</span>
+ </body>
+ </html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/600.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/600.html
new file mode 100644
index 0000000000..407e35009d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/600.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>DIV with text and aria-label is not specified and aria-labelledby is not specified and title is not specified and role is not specified.</title>
+ </head>
+ <body>
+ <div id="test">Div with text</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/601.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/601.html
new file mode 100644
index 0000000000..696f900b99
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/601.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>DIV with text and role="button" and aria-label is not specified and aria-labelledby is not specified and title is not specified.</title>
+ </head>
+ <body>
+ <div id="test" role="button">Div with role of button, with text.</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/602.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/602.html
new file mode 100644
index 0000000000..cd896fc11f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/602.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>DIV with text and role="button" and title="Tag" and aria-label is not specified and aria-labelledby is not specified.</title>
+ </head>
+ <body>
+ <div id="test" role="button" title="Tag" style="outline:medium solid black; width:2em; height:1em;"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/603.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/603.html
new file mode 100644
index 0000000000..d43057cb7c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/603.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>&lt; href="test.html" aria-labelledby="ID1"&gt; ABC &lt;/A&gt; and aria-label is not specified and title is not specified.</title> </head> <body>
+ <div id="ID1">Nifty</div> <a href="test.html" aria-labelledby="ID1">ABC</a> </body> </html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/604.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/604.html
new file mode 100644
index 0000000000..d130308935
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/604.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>aria-label on anchor (without aria-labelledby or title attribute)</title>
+ </head>
+ <body>
+ <a id="test" href="test.html" aria-label="Tag">ABC</a>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/605.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/605.html
new file mode 100644
index 0000000000..a9a47476bb
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/605.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Aria-label on anchor with aria-labelledby (no title attribute)</title>
+ </head>
+ <body>
+ <a href="test.html" id="test" aria-labelledby="ID1" aria-label="Tag">ABC</a>
+ <p id="ID1">Here is some labelledby text</p>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/606.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/606.html
new file mode 100644
index 0000000000..31a65d6b8a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/606.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>aria-label on anchor with two aria-labelledby ids (no title attribute)</title>
+ </head>
+ <body>
+ <a href="test.html" id="ID0" aria-labelledby="ID0 ID1" aria-label="Tag"></a>
+ <p id="ID1">Also labelledby text ID1</p>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/607.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/607.html
new file mode 100644
index 0000000000..8e71e7d6e8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/607.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Anchor with no aria-label, no aria-labelledby, no title attribute</title>
+ </head>
+ <body>
+ <a href="test.html" id="test">ABC</a>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/608.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/608.html
new file mode 100644
index 0000000000..e73fc0f25a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/608.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Title attribute, no aria-label, aria-labelledby</title>
+ </head>
+ <body>
+ <a href="test.html" id="test" title="Tag"></a>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/837.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/837.html
new file mode 100644
index 0000000000..eab418c842
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-general/837.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Tree item with text value "Animals" with two descendant tree items with text value "Cats" and "Dogs".</title>
+ </head>
+ <body>
+ <ul id="tree0" role="tree" aria-activedescendant="tree0_item0" tabindex="0">
+ <li id="tree0_item0" role="treeitem" aria-level="1" aria-expanded="true">
+ Animals
+ <ul role="group">
+ <li id="tree0_item0_1" role="treeitem" aria-level="2" aria-expanded="true">Cats</li>
+ <li id="tree0_item0_2" role="treeitem" aria-level="2" aria-expanded="true">Dogs</li>
+ </ul>
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/557-isvalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/557-isvalid.html
new file mode 100644
index 0000000000..5cd2d30636
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/557-isvalid.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 557 IMG with aria-label="l" and alt="a" and title="t" and aria-labelledby not specified.</title>
+</head>
+<body>
+<img src="foo.jpg" aria-label="1" alt="a" title="t">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/565-isvalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/565-isvalid.html
new file mode 100644
index 0000000000..78ccdf0ca2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/565-isvalid.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 565 IMG with id="ID0" and aria-label="l" and aria-labelledby="ID0 ID1 ID2 ID3" and alt="a" and title="t".</title>
+</head>
+<body>
+<input type="text" value="peanuts" id="ID1">
+<input type="text" value="popcorn" id="ID2">
+<input type="text" value="apple jacks" id="ID3">
+<img id="ID0" aria-label="1" aria-labelledby="ID0 ID1 ID2 ID3" alt= "a" title="t" src="foo.jpg">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/566-isvalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/566-isvalid.html
new file mode 100644
index 0000000000..58ea9334e0
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/566-isvalid.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 566 IMG with id="ID0" and aria-label="" and aria-labelledby="ID0 ID1 ID2 ID3" and alt="a" and title="t".</title>
+</head>
+<body>
+<input type="text" value="peanuts" id="ID1">
+<input type="text" value="popcorn" id="ID2">
+<input type="text" value="apple jacks" id="ID3">
+<img id="ID0" aria-label="" aria-labelledby="ID0 ID1 ID2 ID3" alt= "" title="t" src="foo.jpg">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/foo.jpg b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/foo.jpg
new file mode 100644
index 0000000000..7d11a4f7cf
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/foo.jpg
Binary files differ
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/test.png b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/test.png
new file mode 100644
index 0000000000..85cfa35fd1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-img/test.png
Binary files differ
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/538.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/538.html
new file mode 100644
index 0000000000..d8d9225c1f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/538.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 538 UT type="hidden" with no aria-labelledby and with id="test".</title>
+</head>
+<body>
+<input type="hidden" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/542.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/542.html
new file mode 100644
index 0000000000..2e2f5c5afa
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/542.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 542 An INPUT type=submit, with id="test", with no aria-labelledby and no aria-label and does not have a role=presentation.</title>
+</head>
+<body>
+<input type="submit" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/543.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/543.html
new file mode 100644
index 0000000000..4fd6cc33a5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/543.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 543 An INPUT type="reset", with id="test", with no aria-labelledby and no aria-label and does not have a role=presentation.</title>
+</head>
+<body>
+<input type="reset" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/544.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/544.html
new file mode 100644
index 0000000000..3bf8fb2457
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/544.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 544 An INPUT type=button, with id="test", value="foo", with no aria-labelledby and no aria-label and does not have a role=presentation.</title>
+</head>
+<body>
+<input type="button" id="test" value="foo">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/545.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/545.html
new file mode 100644
index 0000000000..16e0d7e1f9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/545.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 545 An INPUT type=img, with id="test", with no aria-labelledby, and no aria-label, does not have a role=presentation, and has an alt attribute.</title>
+</head>
+<body>
+<input src="baz.html" type="image" id="test" alt="foo">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/546.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/546.html
new file mode 100644
index 0000000000..e17ad3be87
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/546.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 546 An INPUT type=text, password, checkbox, radio, file, or img, with id="test", with no aria-labelledby and no aria-label, does not have a role=presentation, and is referenced by a LABEL element.</title>
+</head>
+<body>
+<label for="test">States:</label>
+<input type="text" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/551.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/551.html
new file mode 100644
index 0000000000..fe1f4c17b6
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/551.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 551 An INPUT type=text, password, checkbox, radio, file, or image , with id="test", with no aria-labelledby and no aria-label, does not have a role=presentation, is not referenced by a LABEL element, and has a title.</title>
+</head>
+<body>
+<input type="text" id="test" title="crazy" value="baz">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/552.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/552.html
new file mode 100644
index 0000000000..6623a107e9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/552.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 552 An INPUT type=text, password, checkbox, radio, file, or image, with id="test", with no aria-labelledby and no aria-label, but is referenced by a LABEL element that has an associated CSS :before content rule.</title>
+<style>
+
+label:before
+{
+content:"fancy ";
+}
+</style>
+</head>
+<body>
+<label for="test">fruit</label>
+<input type="text" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/553.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/553.html
new file mode 100644
index 0000000000..b0189c7163
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/553.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 553 An INPUT type=text, password, checkbox, radio, file, or image, with id="test", with no aria-labelledby and no aria-label, but is referenced by a LABEL element that has an associated CSS :after content rule. </title>
+<style>
+
+label:after
+{
+content:" fruit";
+}
+</style>
+</head>
+<body>
+<label for="test">fancy</label>
+<input type="text" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/609.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/609.html
new file mode 100644
index 0000000000..b3b07abff7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/609.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Title attribute, no aria-label, aria-labelledby</title>
+ </head>
+ <body>
+ <input id="test" type="text" aria-labelledby="ID1 ID2 ID3">
+ <p id="ID1">Here is some labelledby text for ID1</p>
+ <p id="ID2">Also labelledby text ID2</p>
+ <p id="ID3">Additional labelledby text ID3</p>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/610.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/610.html
new file mode 100644
index 0000000000..bd234fbc49
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/610.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Input element, no wai-aria</title>
+ </head>
+ <body>
+ <input id="test" type="text" aria-label="bar" aria-labelledby="ID1 test">
+ <div id="ID1">foo</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/611.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/611.html
new file mode 100644
index 0000000000..4a9d343a41
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/611.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Input element with type="text" referenced by a label, no wai aria</title>
+ </head>
+ <body>
+ <input id="test" type="text">
+ <label for="test">foo</label>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/612.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/612.html
new file mode 100644
index 0000000000..5037cbd785
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/612.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Input with type="password" label/for without wai-aria</title>
+ </head>
+ <body>
+<input type="password" id="test">
+<label for="test">foo</label></body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/613.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/613.html
new file mode 100644
index 0000000000..0f16f92202
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/613.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Input with type="checkbox" label/for without wai-aria</title>
+ </head>
+ <body>
+<input type="checkbox" id="test">
+<label for="test">foo</label></body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/614.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/614.html
new file mode 100644
index 0000000000..29d3d59cd2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/614.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Input with type="radio" label/for without wai-aria</title>
+ </head>
+ <body>
+<input type="radio" id="test">
+<label for="test">foo</label></body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/615.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/615.html
new file mode 100644
index 0000000000..1790e6aa8e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/615.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Input with type="file" label/for without wai-aria</title>
+ </head>
+ <body>
+<input type="file" id="test">
+<label for="test">foo</label></body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/659.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/659.html
new file mode 100644
index 0000000000..c7700a8d02
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/659.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Text input with @title and :before and :after content rule</title>
+ <style>
+ label:before { content: "foo"; }
+ label:after { content: "baz"; }
+ </style>
+ </head>
+ <body>
+ <form>
+ <label for="test" title="bar"><input id="test" type="text" name="test" title="bar"></label>
+ </form>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/660.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/660.html
new file mode 100644
index 0000000000..7fd0d265a3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/660.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Text input with @title and :before and :after content rule</title>
+ <style>
+ label:before { content: "foo "; }
+ label:after { content: " baz"; }
+ </style>
+ </head>
+ <body>
+ <form>
+ <label for="test" title="bar"><input id="test" type="password" name="test" title="bar"></label>
+ </form>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/661.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/661.html
new file mode 100644
index 0000000000..7cb28dcf8e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/661.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Text input with @title and :before and :after content rule</title>
+ <style>
+ label:before { content: "foo"; }
+ label:after { content: "baz"; }
+ </style>
+ </head>
+ <body>
+ <form>
+ <label for="test"><input id="test" type="checkbox" name="test" title=" bar "></label>
+ </form>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/662.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/662.html
new file mode 100644
index 0000000000..a857a15560
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/662.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Text input with @title and :before and :after content rule</title>
+ <style>
+ label:before { content: "foo"; }
+ label:after { content: "baz"; }
+ </style>
+ </head>
+ <body>
+ <form>
+ <label for="test"><input id="test" type="radio" name="test" title=" bar "></label>
+ </form>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/663.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/663.html
new file mode 100644
index 0000000000..01c5604826
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/663.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Text input with @title and :before and :after content rule</title>
+ <style>
+ label:before { content: "foo "; }
+ label:after { content: " baz"; }
+ </style>
+ </head>
+ <body>
+ <form>
+ <label for="test"><input id="test" type="file" name="test" title="bar"></label>
+ </form>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/721.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/721.html
new file mode 100644
index 0000000000..ae260117b3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/721.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 546a An INPUT type=text, password, checkbox, radio, file, or img, with id="test", with no aria-labelledby and no aria-label, does not have a role=presentation, and is referenced by a LABEL element.</title>
+</head>
+<body>
+<label for="test">States:</label>
+<input type="password" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/723.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/723.html
new file mode 100644
index 0000000000..eb407a8aff
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/723.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 546b An INPUT type=text, password, checkbox, radio, file, or img, with id="test", with no aria-labelledby and no aria-label, does not have a role=presentation, and is referenced by a LABEL element.</title>
+</head>
+<body>
+<label for="test">States:</label>
+<input type="checkbox" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/724.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/724.html
new file mode 100644
index 0000000000..bede445367
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/724.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 546c An INPUT type=text, password, checkbox, radio, file, or img, with id="test", with no aria-labelledby and no aria-label, does not have a role=presentation, and is referenced by a LABEL element.</title>
+</head>
+<body>
+<label for="test">States:</label>
+<input type="radio" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/725.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/725.html
new file mode 100644
index 0000000000..e24d07d9bd
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/725.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 546d An INPUT type=text, password, checkbox, radio, file, or img, with id="test", with no aria-labelledby and no aria-label, does not have a role=presentation, and is referenced by a LABEL element.</title>
+</head>
+<body>
+<label for="test">File:</label>
+<input type="file" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/748.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/748.html
new file mode 100644
index 0000000000..fe6468492e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/748.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image , with id="test", with no aria-labelledby and no aria-label, does not have a role=presentation, is not referenced by a LABEL element, and has a title.</title>
+</head>
+<body>
+<input type="password" id="test" title="crazy" value="baz">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/749.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/749.html
new file mode 100644
index 0000000000..39492c77ef
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/749.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image , with id="test", with no aria-labelledby and no aria-label, does not have a role=presentation, is not referenced by a LABEL element, and has a title.</title>
+</head>
+<body>
+<input type="checkbox" id="test" title="crazy">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/750.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/750.html
new file mode 100644
index 0000000000..28c9db3b72
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/750.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image , with id="test", with no aria-labelledby and no aria-label, does not have a role=presentation, is not referenced by a LABEL element, and has a title.</title>
+</head>
+<body>
+<input type="radio" id="test" title="crazy">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/751.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/751.html
new file mode 100644
index 0000000000..a68873061c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/751.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image , with id="test", with no aria-labelledby and no aria-label, does not have a role=presentation, is not referenced by a LABEL element, and has a title.</title>
+</head>
+<body>
+<input type="file" id="test" title="crazy">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/753.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/753.html
new file mode 100644
index 0000000000..49d29bfe81
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/753.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image, with id="test", with no aria-labelledby and no aria-label, but is referenced by a LABEL element that has an associated CSS :before content rule.</title>
+<style>
+
+label:before
+{
+content:"fancy ";
+}
+</style>
+</head>
+<body>
+<label for="test">fruit</label>
+<input type="password" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/754.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/754.html
new file mode 100644
index 0000000000..9e4fe8aa81
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/754.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image, with id="test", with no aria-labelledby and no aria-label, but is referenced by a LABEL element that has an associated CSS :before content rule.</title>
+<style>
+
+label:before
+{
+content:"fancy ";
+}
+</style>
+</head>
+<body>
+<label for="test">fruit</label>
+<input type="checkbox" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/755.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/755.html
new file mode 100644
index 0000000000..8d765bffe4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/755.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image, with id="test", with no aria-labelledby and no aria-label, but is referenced by a LABEL element that has an associated CSS :before content rule.</title>
+<style>
+
+label:before
+{
+content:"fancy ";
+}
+</style>
+</head>
+<body>
+<label for="test">fruit</label>
+<input type="radio" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/756.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/756.html
new file mode 100644
index 0000000000..f8d1b89cd0
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/756.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image, with id="test", with no aria-labelledby and no aria-label, but is referenced by a LABEL element that has an associated CSS :before content rule.</title>
+<style>
+
+label:before
+{
+content:"fancy ";
+}
+</style>
+</head>
+<body>
+<label for="test">fruit</label>
+<input type="file" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/758.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/758.html
new file mode 100644
index 0000000000..51c48ea04f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/758.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image, with id="test", with no aria-labelledby and no aria-label, but is referenced by a LABEL element that has an associated CSS :after content rule. </title>
+<style>
+
+label:after
+{
+content:" fruit"
+}
+</style>
+</head>
+<body>
+<label for="test">fancy</label>
+<input type="password" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/759.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/759.html
new file mode 100644
index 0000000000..63929e2d61
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/759.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image, with id="test", with no aria-labelledby and no aria-label, but is referenced by a LABEL element that has an associated CSS :after content rule. </title>
+<style>
+
+label:after
+{
+content:" fruit"
+}
+</style>
+</head>
+<body>
+<label for="test">fancy</label>
+<input type="checkbox" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/760.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/760.html
new file mode 100644
index 0000000000..feda3261e4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/760.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image, with id="test", with no aria-labelledby and no aria-label, but is referenced by a LABEL element that has an associated CSS :after content rule. </title>
+<style>
+
+label:after
+{
+content:" fruit"
+}
+</style>
+</head>
+<body>
+<label for="test">fancy</label>
+<input type="radio" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/761.html b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/761.html
new file mode 100644
index 0000000000..9ac96625a8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/761.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>An INPUT type=text, password, checkbox, radio, file, or image, with id="test", with no aria-labelledby and no aria-label, but is referenced by a LABEL element that has an associated CSS :after content rule. </title>
+<style>
+
+label:after
+{
+content:"fancy";
+}
+</style>
+</head>
+<body>
+<label for="test">fruit</label>
+<input type="file" id="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/foo.jpg b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/foo.jpg
new file mode 100644
index 0000000000..7d11a4f7cf
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/name-computation-input/foo.jpg
Binary files differ
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/859.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/859.html
new file mode 100644
index 0000000000..ad383353b0
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/859.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test 859</title>
+ </head>
+ <body>
+ <div id="test" aria-label="test" role="alertdialog"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/860.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/860.html
new file mode 100644
index 0000000000..3079ef86c7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/860.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test 860</title>
+ </head>
+ <body>
+ <div id="test" aria-label="test" role="application"></div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/861.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/861.html
new file mode 100644
index 0000000000..86284e08d9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/861.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test 861</title>
+ </head>
+ <body>
+ <div id="test" aria-label="test" role="button"></div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/863.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/863.html
new file mode 100644
index 0000000000..8ae98c7f1e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/863.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test 863</title>
+ </head>
+ <body>
+ <div role="grid" aria-label="mygrid">
+ <div role="row">
+ <div id="test" aria-label="foo" role="columnheader"></div>
+ </div>
+ </div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/864.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/864.html
new file mode 100644
index 0000000000..0b706e5c87
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/864.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 864
+ </title>
+ </head>
+ <body>
+ <input type="text" id="test" aria-label="foo" role="combobox"
+ aria-owns="owned_listbox" aria-activedescendant="selected_option" aria-expanded="true">
+ <ul role="listbox" id="owned_listbox">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option">Zoom</li>
+ </ul>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/865.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/865.html
new file mode 100644
index 0000000000..d706f80a25
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/865.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test 865</title>
+ </head>
+ <body>
+ <div id="test" aria-label="foo" role="dialog"></div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/866.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/866.html
new file mode 100644
index 0000000000..8d4d5e42f1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/866.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test 866</title>
+ </head>
+ <body>
+ <div id="test" aria-label="foo" role="document"></div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/867.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/867.html
new file mode 100644
index 0000000000..a60653fd7c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/867.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test 867</title>
+ </head>
+ <body>
+ <div id="test" role="grid" aria-label="foo">
+ <div role="row">
+ <div role="columnheader" id="obj1">obj1</div>
+ </div>
+ <div role="row">
+ <div role="gridcell" id="obj2">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/868.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/868.html
new file mode 100644
index 0000000000..d43c86f296
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/868.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test 868</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div role="columnheader" id="obj1">obj1</div>
+ </div>
+ <div role="row">
+ <div id="test" aria-label="foo" role="gridcell">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/869.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/869.html
new file mode 100644
index 0000000000..cba68be90a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/869.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test 869</title>
+ </head>
+ <body>
+ <div id="test" aria-label="foo" role="heading" aria-level="1"></div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/871.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/871.html
new file mode 100644
index 0000000000..4595a7cf99
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/871.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 871</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <div id="test" role="listbox" aria-label="foo">
+ <div role="option" aria-setsize="3" aria-posinset="1" tabindex="-1">Option 1</div>
+ <div role="option" aria-setsize="3" aria-posinset="2" tabindex="-1">Option 2</div>
+ <div role="option" aria-setsize="3" aria-posinset="3" tabindex="-1">Option 3</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/872.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/872.html
new file mode 100644
index 0000000000..0469d7c169
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/872.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 872</title>
+ </head>
+ <body>
+ <div role="list"><div id="test" role="listitem" aria-label="foo"></div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/873.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/873.html
new file mode 100644
index 0000000000..7ae36c5e70
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/873.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 873
+ </title>
+ </head>
+ <body>
+ <div id="test" role="log" aria-label="foo">Placeholder content</div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/874.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/874.html
new file mode 100644
index 0000000000..5d44672d31
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/874.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 874
+ </title>
+ </head>
+ <body>
+ <div id="test" role=" marquee" aria-label="foo"></div>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/875.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/875.html
new file mode 100644
index 0000000000..52422efade
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/875.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 875
+ </title>
+ </head>
+ <body>
+ <div id="test" role="menu" tabindex="0" aria-label="foo" aria-activedescendant="obj1">
+ <div id="obj1" role="menuitem">obj1</div>
+ <div id="obj2" role="menuitem">obj2</div>
+ </div>
+ </body>
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/879.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/879.html
new file mode 100644
index 0000000000..a9a876a03e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/879.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 879</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <div role="listbox">
+ <div role="option" aria-setsize="3" aria-label="foo" id="test" aria-posinset="1" tabindex="-1"></div>
+ <div role="option" aria-setsize="3" aria-posinset="2" tabindex="-1">Option 2</div>
+ <div role="option" aria-setsize="3" aria-posinset="3" tabindex="-1">Option 3</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/880.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/880.html
new file mode 100644
index 0000000000..570d85361d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/880.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 880
+ </title>
+ </head>
+ <body>
+ <div id="test" role="progressbar" aria-label="foo" aria-valuemax="1.1">Placeholder content</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/887.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/887.html
new file mode 100644
index 0000000000..90151869f7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/887.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 887</title>
+ </head>
+ <body>
+ <div role="tablist">
+ <div role="tab">tab1</div><div role="tab">tab2</div>
+ </div>
+ <div id="test" aria-label="foo" role="tabpanel">
+ Boring tab panel
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/888.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/888.html
new file mode 100644
index 0000000000..da876814e0
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/888.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 888</title>
+ </head>
+ <body>
+ <div id="test" aria-label="foo" role="textbox"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/889.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/889.html
new file mode 100644
index 0000000000..2cf67a3201
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/889.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 889</title>
+ </head>
+ <body>
+ <div id="test" aria-label="foo" role="timer"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/890.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/890.html
new file mode 100644
index 0000000000..23299390b2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/890.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 890</title>
+ </head>
+ <body>
+ <input type="text" aria-describedby="test">
+ <div id="test" aria-label="foo" role="tooltip"></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/891.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/891.html
new file mode 100644
index 0000000000..2d2361e43d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/891.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 891
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tree" aria-label="foo">
+ <div role="treeitem" id="obj1">obj1</div>
+ <div role="treeitem" id="obj2">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/892.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/892.html
new file mode 100644
index 0000000000..20934bbbfa
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/892.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 892
+ </title>
+ </head>
+ <body>
+ <div role="tree">
+ <div role="treeitem" aria-label="foo" id="test">obj1</div>
+ <div role="treeitem" id="obj2">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/893.html b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/893.html
new file mode 100644
index 0000000000..819fa8d8d8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/namefromauthor-requ/893.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>test case 893
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-label="foo" aria-activedescendant="obj1" tabindex="0">
+ <div role="row">
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ <div role="row">
+ <div id="obj3" role="gridcell">obj3</div>
+ <div id="obj4" role="gridcell">obj4</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/noaria.html b/testing/web-platform/tests/conformance-checkers/html-aria/noaria.html
new file mode 100644
index 0000000000..e404e6619a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/noaria.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>No ARIA markup</title>
+ </head>
+ <body>
+ <div id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/497-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/497-novalid.html
new file mode 100644
index 0000000000..73d4e99d65
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/497-novalid.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 497 Image element with role="presentation" but with a reference to a description </title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-describedby="foo">
+<p id="foo">
+This is an image.
+</p>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/498-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/498-novalid.html
new file mode 100644
index 0000000000..974f044917
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/498-novalid.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 498 Image element with role="presentation" but aria-disabled="true" </title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-disabled="true">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/499-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/499-novalid.html
new file mode 100644
index 0000000000..30f0c90e0a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/499-novalid.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 499 Image element with role="presentation" but aria-dropeffect="move" </title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-dropeffect="move">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/500-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/500-novalid.html
new file mode 100644
index 0000000000..309833d3e5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/500-novalid.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 500 Image element with role="presentation" but with a valid aria-flowto attribute</title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-flowto="test2">
+<div role="img" id="test2">
+</div>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/501-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/501-novalid.html
new file mode 100644
index 0000000000..f944fd0725
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/501-novalid.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 501 Image element with role="presentation" but with aria-grabbed="true"</title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-grabbed="true">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/502-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/502-novalid.html
new file mode 100644
index 0000000000..944e1c16c2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/502-novalid.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 502 Image element with role="presentation" but with aria-haspopup="true"</title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-haspopup="true">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/503-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/503-novalid.html
new file mode 100644
index 0000000000..33fec52acf
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/503-novalid.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 503 Image element with role="presentation" but with aria-hidden="true"</title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-hidden="true">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/504-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/504-novalid.html
new file mode 100644
index 0000000000..3b1f807b3b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/504-novalid.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 504 Image element with role="presentation" but with aria-invalid="true"</title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-invalid="true">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/505-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/505-novalid.html
new file mode 100644
index 0000000000..587cd874b1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/505-novalid.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 505 Image element with role="presentation" but with aria-label="test"</title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-label="test">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/506-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/506-novalid.html
new file mode 100644
index 0000000000..d518b25d9e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/506-novalid.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 506 Image element with role="presentation" but with a valid aria-labelledby attribute</title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-labelledby="test2">
+<div id="test2">
+test_label
+</div>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/507-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/507-novalid.html
new file mode 100644
index 0000000000..5b5542abec
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/507-novalid.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 507 Image element with role="presentation" but with aria-live="assertive"</title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-live="assertive">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/509-novalid.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/509-novalid.html
new file mode 100644
index 0000000000..1934481487
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/509-novalid.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 509 Image element with role="presentation" but with aria-relevant="text"</title>
+</head>
+<body>
+<img src="foo.jpg" alt="" width="40" height="40" role="presentation" aria-live="polite" aria-relevant="text">
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/510.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/510.html
new file mode 100644
index 0000000000..05c50a161e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/510.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 510 An owned, unfocusable, element untied to an aria relationship that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td>Test me</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/511.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/511.html
new file mode 100644
index 0000000000..d9a3043fe3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/511.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 511 An owned, focusable element, tied to an aria relationship that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td tabindex="0" id="foo">Test me</td>
+</tr>
+</table>
+<div aria-controls="foo">
+</div>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/512.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/512.html
new file mode 100644
index 0000000000..35c0a5ef07
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/512.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 512 An owned, unfocusable element, having aria-atomic="true" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-atomic="true">Test me</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/513.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/513.html
new file mode 100644
index 0000000000..4a908544f5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/513.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 513 An owned, unfocusable element, having aria-busy="true" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-busy="true">Test me</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/514.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/514.html
new file mode 100644
index 0000000000..0f7c348002
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/514.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 514 An owned, unfocusable element, with a valid aria-controls attribue set that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-controls="foo">Test me</td>
+</tr>
+</table>
+<div id="foo">
+</div>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/515.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/515.html
new file mode 100644
index 0000000000..de4d7caa2c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/515.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 515 An owned, unfocusable element, with a valid aria-describedby attribue set that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-describedby="foo">Test me</td>
+</tr>
+</table>
+<div id="foo">
+You can
+</div>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/516.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/516.html
new file mode 100644
index 0000000000..dacee180ca
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/516.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 516 An owned, unfocusable element, having aria-disabled="true" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-disabled="true">Test me</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/517.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/517.html
new file mode 100644
index 0000000000..3154b9da2f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/517.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 517 An owned, unfocusable element, having aria-dropeffect="move" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-dropeffect="move">Test me</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/518.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/518.html
new file mode 100644
index 0000000000..a2c85521c1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/518.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 518 An owned, unfocusable element, with a valid aria-flowto attribue set that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-flowto="foo">Test me</td>
+</tr>
+</table>
+<div id="foo">
+You can
+</div>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/519.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/519.html
new file mode 100644
index 0000000000..8ff435f4d6
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/519.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 519 An owned, unfocusable element, having aria-grabbed="true" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-grabbed="true">Test me</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/520.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/520.html
new file mode 100644
index 0000000000..9b7bee0f64
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/520.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 520 An owned, unfocusable element, having aria-haspopup="true" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-haspopup="true">Test me</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/521.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/521.html
new file mode 100644
index 0000000000..c98a873d6a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/521.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 521 An owned, unfocusable element, having aria-hidden="true" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-hidden="true">Test me</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/522.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/522.html
new file mode 100644
index 0000000000..1d18a47b8a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/522.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 522 An owned, unfocusable element, having aria-invalid="true" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-invalid="true">Test me</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/523-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/523-haswarn.html
new file mode 100644
index 0000000000..7a2ba4138e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/523-haswarn.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 523 An owned, unfocusable element, having aria-label="test" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-label="test">foo</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/524.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/524.html
new file mode 100644
index 0000000000..b624f041a2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/524.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 524 An owned, unfocusable element, with a valid aria-labelledby attribute set that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-labelledby="foo"></td>
+</tr>
+</table>
+<div id="foo">test</div>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/525.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/525.html
new file mode 100644
index 0000000000..cf97c15f61
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/525.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 525 An owned, unfocusable element, having aria-live="assertive" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-live="assertive">test</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/527.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/527.html
new file mode 100644
index 0000000000..a7a6e751cf
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentation-role/527.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<title>Test 527 An owned, unfocusable element, having aria-relevant="text" that inherits role="presentation"</title>
+</head>
+<body>
+<table role="presentation">
+<tr>
+<td aria-relevant="text">test</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-839.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-839.html
new file mode 100644
index 0000000000..5a64d87858
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-839.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 839: Separator</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 839: Separator</h1>
+
+ <div role="separator">
+ <div>Test text content</div>
+ <label>Textbox <input type="text" value="123456789"></label>
+ <p><a href="#link">Test link</a></p>
+ <div role="button" onclick="alert('Button Pressed')">Button</div>
+ </div>
+
+
+ </body>
+
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-840.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-840.html
new file mode 100644
index 0000000000..ed1f857bf7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-840.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 840: progressbar</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 840: progressbar</h1>
+
+ <div role="progressbar">
+ <div>Test text content</div>
+ <label>Textbox <input type="text" value="123456789"></label>
+ <p><a href="#link">Test link</a></p>
+ <div role="button" onclick="alert('Button Pressed')">Button</div>
+ </div>
+
+
+ </body>
+
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-842.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-842.html
new file mode 100644
index 0000000000..aa1cf57591
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-842.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 842: img</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 842: img</h1>
+
+ <div role="img" aria-label="Test image">
+ <div>Test text content</div>
+ <label>Textbox <input type="text" value="123456789"></label>
+ <p><a href="#link">Test link</a></p>
+ <div role="button" onclick="alert('Button Pressed')">Button</div>
+ </div>
+
+
+ </body>
+
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-843.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-843.html
new file mode 100644
index 0000000000..cae563fc7e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-843.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 843: slider</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 843: slider</h1>
+
+ <div role="slider" aria-valuemin="0" aria-valuenow="5" aria-valuemax="10">
+ <div>Test text content</div>
+ <label>Textbox <input type="text" value="123456789"></label>
+ <p><a href="#link">Test link</a></p>
+ <div role="button" onclick="alert('Button Pressed')">Button</div>
+ </div>
+
+
+ </body>
+
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-844.html b/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-844.html
new file mode 100644
index 0000000000..8690b3fcca
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/presentational-children/testcase-844.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 844: math</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 844: math</h1>
+
+ <div role="math" aria-label="a plus b equals c">
+ <div>Test text content</div>
+ <label>Textbox <input type="text" value="123456789"></label>
+ <p><a href="#link">Test link</a></p>
+ <div role="button" onclick="alert('Button Pressed')">Button</div>
+ </div>
+
+
+ </body>
+
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic-false.html
new file mode 100644
index 0000000000..31452f627e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-atomic" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" aria-live="polite" aria-atomic="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic-true.html
new file mode 100644
index 0000000000..499b675db8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-atomic" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" aria-live="polite" aria-atomic="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic.html
new file mode 100644
index 0000000000..84faaeb86e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-atomic.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "" value of "true"</title>
+ </head>
+ <body>
+ <div aria-atomic="true">
+ Placeholder content
+
+ </div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-busy-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-busy-false.html
new file mode 100644
index 0000000000..f10c124040
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-busy-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-busy" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" aria-busy="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-busy-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-busy-true.html
new file mode 100644
index 0000000000..efd700760a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-busy-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-busy" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" aria-busy="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-controls-obj1-obj2.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-controls-obj1-obj2.html
new file mode 100644
index 0000000000..63eb41b1ce
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-controls-obj1-obj2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-controls" value of "obj1 obj2"</title>
+ </head>
+ <body>
+ <div id="test" aria-controls="obj1 obj2">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-controls-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-controls-obj1.html
new file mode 100644
index 0000000000..8e012dd564
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-controls-obj1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-controls" value of "obj1"</title>
+ </head>
+ <body>
+ <div id="test" aria-controls="obj1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-describedby-obj1-obj2.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-describedby-obj1-obj2.html
new file mode 100644
index 0000000000..e36e08eab1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-describedby-obj1-obj2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-describedby" value of "obj1 obj2"</title>
+ </head>
+ <body>
+ <div id="test" aria-describedby="obj1 obj2">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-describedby-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-describedby-obj1.html
new file mode 100644
index 0000000000..317165628c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-describedby-obj1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-describedby" value of "obj1"</title>
+ </head>
+ <body>
+ <div id="test" aria-describedby="obj1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-disabled-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-disabled-false.html
new file mode 100644
index 0000000000..dc3c8ce0ea
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-disabled-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-disabled" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" aria-disabled="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-disabled-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-disabled-true.html
new file mode 100644
index 0000000000..fd01ff2d4a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-disabled-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-disabled" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" aria-disabled="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-copy.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-copy.html
new file mode 100644
index 0000000000..4f0782bf42
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-copy.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-dropeffect" value of "copy"</title>
+ </head>
+ <body>
+ <div id="test" aria-dropeffect="copy">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-execute.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-execute.html
new file mode 100644
index 0000000000..e445c8b3f7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-execute.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-dropeffect" value of "execute"</title>
+ </head>
+ <body>
+ <div id="test" aria-dropeffect="execute">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-link.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-link.html
new file mode 100644
index 0000000000..cbbc24c0e8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-link.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-dropeffect" value of "link"</title>
+ </head>
+ <body>
+ <div id="test" aria-dropeffect="link">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-move.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-move.html
new file mode 100644
index 0000000000..55bfe810f5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-move.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-dropeffect" value of "move"</title>
+ </head>
+ <body>
+ <div id="test" aria-dropeffect="move">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-none.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-none.html
new file mode 100644
index 0000000000..05ccc7aa55
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-none.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-dropeffect" value of "none"</title>
+ </head>
+ <body>
+ <div id="test" aria-dropeffect="none">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-popup.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-popup.html
new file mode 100644
index 0000000000..dd5045e45d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-dropeffect-popup.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-dropeffect" value of "popup"</title>
+ </head>
+ <body>
+ <div id="test" aria-dropeffect="popup">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-flowto-obj1-obj2.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-flowto-obj1-obj2.html
new file mode 100644
index 0000000000..0efca8bdca
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-flowto-obj1-obj2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-flowto" value of "obj1 obj2"</title>
+ </head>
+ <body>
+ <div id="test" aria-flowto="obj1 obj2">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-flowto-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-flowto-obj1.html
new file mode 100644
index 0000000000..d60135c3f5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-flowto-obj1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-flowto" value of "obj1"</title>
+ </head>
+ <body>
+ <div id="test" aria-flowto="obj1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-false.html
new file mode 100644
index 0000000000..c3e422266d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-grabbed" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" aria-grabbed="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-true.html
new file mode 100644
index 0000000000..ab42aa1001
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-grabbed" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" aria-grabbed="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-undefined.html
new file mode 100644
index 0000000000..91626fe957
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-grabbed-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-grabbed" value of "undefined"</title>
+ </head>
+ <body>
+ <div id="test" aria-grabbed="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-haspopup-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-haspopup-false.html
new file mode 100644
index 0000000000..125b43ba3b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-haspopup-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-haspopup" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" aria-haspopup="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-haspopup-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-haspopup-true.html
new file mode 100644
index 0000000000..735c64e7a3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-haspopup-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-haspopup" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" aria-haspopup="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-hidden-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-hidden-false.html
new file mode 100644
index 0000000000..185bb60114
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-hidden-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-hidden" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" aria-hidden="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-hidden-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-hidden-true.html
new file mode 100644
index 0000000000..fb3b6179f7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-hidden-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-hidden" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" aria-hidden="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-false.html
new file mode 100644
index 0000000000..6293d2324e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-invalid" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" aria-invalid="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-grammar.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-grammar.html
new file mode 100644
index 0000000000..f71287c17d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-grammar.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-invalid" value of "grammar"</title>
+ </head>
+ <body>
+ <div id="test" aria-invalid="grammar">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-spelling.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-spelling.html
new file mode 100644
index 0000000000..b09c6d147e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-spelling.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-invalid" value of "spelling"</title>
+ </head>
+ <body>
+ <div id="test" aria-invalid="spelling">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-true.html
new file mode 100644
index 0000000000..ad255df243
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-invalid-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-invalid" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" aria-invalid="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-label-Test-string-value-haswarn.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-label-Test-string-value-haswarn.html
new file mode 100644
index 0000000000..3b6b442d48
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-label-Test-string-value-haswarn.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-label" value of "Test string value"</title>
+ </head>
+ <body>
+ <div id="test" aria-label="Test string value">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-labelledby-obj1-obj2.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-labelledby-obj1-obj2.html
new file mode 100644
index 0000000000..1c45b0c2b7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-labelledby-obj1-obj2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-labelledby" value of "obj1 obj2"</title>
+ </head>
+ <body>
+ <div id="test" aria-labelledby="obj1 obj2">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-labelledby-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-labelledby-obj1.html
new file mode 100644
index 0000000000..2a863ca953
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-labelledby-obj1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-labelledby" value of "obj1"</title>
+ </head>
+ <body>
+ <div id="test" aria-labelledby="obj1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-assertive.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-assertive.html
new file mode 100644
index 0000000000..b977bd4c4d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-assertive.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-live" value of "assertive"</title>
+ </head>
+ <body>
+ <div id="test" aria-live="assertive">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-off.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-off.html
new file mode 100644
index 0000000000..b8cbf15ad2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-off.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-live" value of "off"</title>
+ </head>
+ <body>
+ <div id="test" aria-live="off">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-polite.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-polite.html
new file mode 100644
index 0000000000..d250f7b530
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-live-polite.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-live" value of "polite"</title>
+ </head>
+ <body>
+ <div id="test" aria-live="polite">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-owns-obj1-obj2.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-owns-obj1-obj2.html
new file mode 100644
index 0000000000..784e02b353
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-owns-obj1-obj2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-owns" value of "obj1 obj2"</title>
+ </head>
+ <body>
+ <div id="test" aria-owns="obj1 obj2">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-owns-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-owns-obj1.html
new file mode 100644
index 0000000000..d44ce0b38f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-owns-obj1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-owns" value of "obj1"</title>
+ </head>
+ <body>
+ <div id="test" aria-owns="obj1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-additions-text.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-additions-text.html
new file mode 100644
index 0000000000..12b17be1e9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-additions-text.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-relevant" value of "additions text"</title>
+ </head>
+ <body>
+ <div id="test" aria-live="polite" aria-relevant="additions text">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-additions.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-additions.html
new file mode 100644
index 0000000000..c8329d95ed
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-additions.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-relevant" value of "additions"</title>
+ </head>
+ <body>
+ <div id="test" aria-live="polite" aria-relevant="additions">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-all.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-all.html
new file mode 100644
index 0000000000..574aa18281
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-all.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-relevant" value of "all"</title>
+ </head>
+ <body>
+ <div id="test" aria-live="polite" aria-relevant="all">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-removals.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-removals.html
new file mode 100644
index 0000000000..3dc0b12fe9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-removals.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-relevant" value of "removals"</title>
+ </head>
+ <body>
+ <div id="test" aria-live="polite" aria-relevant="removals">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-text.html b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-text.html
new file mode 100644
index 0000000000..a8957f1f7c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/properties-global-norole/properties-global-norole-aria-relevant-text.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with no role; global state or property "aria-relevant" value of "text"</title>
+ </head>
+ <body>
+ <div id="test" aria-live="polite" aria-relevant="text">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/591.html b/testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/591.html
new file mode 100644
index 0000000000..f7044aa07f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/591.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Element with role main having global state or property aria-relevant with value "additions removals".</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-relevant='additions removals'>Role main with aria-relevant='additions removals'</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/592.html b/testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/592.html
new file mode 100644
index 0000000000..10bafce609
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/592.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Element with role main having global state or property aria-relevant with value "removals text".</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-relevant='removals text'>Role main with aria-relevant='removals text'</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/593.html b/testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/593.html
new file mode 100644
index 0000000000..e3bb27321a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/relevant-state/593.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Element with role main having global state or property aria-relevant with value "additions removals text".</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-relevant='additions removals text'>Role main with aria-relevant='additions removals text'</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-alert.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-alert.html
new file mode 100644
index 0000000000..733dbfd81d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-alert.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "alert" and no states or properties</title>
+ </head>
+ <body>
+ <div role="alert" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-alertdialog.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-alertdialog.html
new file mode 100644
index 0000000000..88941fea2f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-alertdialog.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "alertdialog" and no states or properties</title>
+ </head>
+ <body>
+ <div role="alertdialog" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-application.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-application.html
new file mode 100644
index 0000000000..6eea2d0c03
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-application.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "application" and no states or properties</title>
+ </head>
+ <body>
+ <div role="application" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-article.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-article.html
new file mode 100644
index 0000000000..c8d99c590e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-article.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "article" and no states or properties</title>
+ </head>
+ <body>
+ <div role="article" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-banner.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-banner.html
new file mode 100644
index 0000000000..f9a8c06e88
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-banner.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "banner" and no states or properties</title>
+ </head>
+ <body>
+ <div role="banner" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-button.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-button.html
new file mode 100644
index 0000000000..f6edccdf13
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-button.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "button" and no states or properties</title>
+ </head>
+ <body>
+ <div role="button" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-complementary.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-complementary.html
new file mode 100644
index 0000000000..86a3325532
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-complementary.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "complementary" and no states or properties</title>
+ </head>
+ <body>
+ <div role="complementary" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-contentinfo.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-contentinfo.html
new file mode 100644
index 0000000000..89d579eb05
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-contentinfo.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "contentinfo" and no states or properties</title>
+ </head>
+ <body>
+ <div role="contentinfo" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-definition.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-definition.html
new file mode 100644
index 0000000000..5bdf02c9c5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-definition.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "definition" and no states or properties</title>
+ </head>
+ <body>
+ <div role="definition" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-dialog.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-dialog.html
new file mode 100644
index 0000000000..59ac2084c6
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-dialog.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "dialog" and no states or properties</title>
+ </head>
+ <body>
+ <div role="dialog" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-directory.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-directory.html
new file mode 100644
index 0000000000..17ca3b6694
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-directory.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "directory" and no states or properties</title>
+ </head>
+ <body>
+ <div role="directory" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-document.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-document.html
new file mode 100644
index 0000000000..a5bc88c614
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-document.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "document" and no states or properties</title>
+ </head>
+ <body>
+ <div role="document" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-form.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-form.html
new file mode 100644
index 0000000000..2ca7e72deb
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-form.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "form" and no states or properties</title>
+ </head>
+ <body>
+ <div role="form" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-grid.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-grid.html
new file mode 100644
index 0000000000..3ed0c84a83
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-grid.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "grid" and no states or properties</title>
+ </head>
+ <body>
+ <div role="grid" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-group.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-group.html
new file mode 100644
index 0000000000..bcd135f68e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-group.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "group" and no states or properties</title>
+ </head>
+ <body>
+ <div role="group" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-heading.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-heading.html
new file mode 100644
index 0000000000..db54490058
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-heading.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "heading" and no states or properties</title>
+ </head>
+ <body>
+ <div role="heading" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-img.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-img.html
new file mode 100644
index 0000000000..a1f9276336
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-img.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "img" and no states or properties</title>
+ </head>
+ <body>
+ <div role="img" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-link.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-link.html
new file mode 100644
index 0000000000..5b17724ee4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-link.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "link" and no states or properties</title>
+ </head>
+ <body>
+ <div role="link" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-list.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-list.html
new file mode 100644
index 0000000000..72ffee9eff
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-list.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "list" and no states or properties</title>
+ </head>
+ <body>
+ <div role="list" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-listbox-parent-combobox.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-listbox-parent-combobox.html
new file mode 100644
index 0000000000..43e137fe57
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-listbox-parent-combobox.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>An element with id=test and role=listbox, which is owned by a combobox</title>
+ <style>
+ ul#test {
+ list-style-type: none;
+ width: 5em;
+ height: 3em;
+ border: 1px solid black;
+ margin-top: 0;
+ margin-left: 1em;
+ }
+
+ ul#test > li {
+ margin-left: -10em;
+ }
+ </style>
+ </head>
+ <body>
+ <p>An element with <code>id=test</code> and <code>role=listbox</code>, which is owned by a <code>combobox</code>:</p>
+ <input type="text"
+ aria-label="Comobox that owns zebra-zoom listbox"
+ role="combobox"
+ aria-expanded="true"
+ aria-owns="test"
+ aria-autocomplete="none"
+ aria-activedescendant="selected_option">
+ <ul role="listbox" id="test">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option">Zoom</li>
+ </ul>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-listbox.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-listbox.html
new file mode 100644
index 0000000000..ff7d32166a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-listbox.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "listbox" and no states or properties</title>
+ </head>
+ <body>
+ <div role="listbox" id="test">
+ <div role="option">Placeholder content</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-log.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-log.html
new file mode 100644
index 0000000000..1a53592804
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-log.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "log" and no states or properties</title>
+ </head>
+ <body>
+ <div role="log" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-main.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-main.html
new file mode 100644
index 0000000000..1f66605023
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-main.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "main" and no states or properties</title>
+ </head>
+ <body>
+ <div role="main" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-marquee.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-marquee.html
new file mode 100644
index 0000000000..05986754b2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-marquee.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "marquee" and no states or properties</title>
+ </head>
+ <body>
+ <div role="marquee" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-math.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-math.html
new file mode 100644
index 0000000000..66f7571d1a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-math.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "math" and no states or properties</title>
+ </head>
+ <body>
+ <div role="math" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-menu.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-menu.html
new file mode 100644
index 0000000000..63c3375aae
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-menu.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "menu" and no states or properties</title>
+ </head>
+ <body>
+ <div role="menu" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-menubar.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-menubar.html
new file mode 100644
index 0000000000..5e9b6a1a3d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-menubar.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "menubar" and no states or properties</title>
+ </head>
+ <body>
+ <div role="menubar" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-navigation.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-navigation.html
new file mode 100644
index 0000000000..1a0cc38ef6
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-navigation.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "navigation" and no states or properties</title>
+ </head>
+ <body>
+ <div role="navigation" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-note.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-note.html
new file mode 100644
index 0000000000..6fd8bb80b7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-note.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "note" and no states or properties</title>
+ </head>
+ <body>
+ <div role="note" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-option.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-option.html
new file mode 100644
index 0000000000..1a44d86561
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-option.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "option" and no states or properties</title>
+ </head>
+ <body>
+ <div role="listbox">
+ <div role="option" id="test">Placeholder content</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-presentation.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-presentation.html
new file mode 100644
index 0000000000..0ebd3cdb81
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-presentation.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "presentation" and no states or properties</title>
+ </head>
+ <body>
+ <div role="presentation" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-progressbar.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-progressbar.html
new file mode 100644
index 0000000000..cbfdef5097
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-progressbar.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "progressbar" and no states or properties</title>
+ </head>
+ <body>
+ <div role="progressbar" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-radiogroup.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-radiogroup.html
new file mode 100644
index 0000000000..a4caff06f7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-radiogroup.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "radiogroup" and no states or properties</title>
+ </head>
+ <body>
+ <div role="radiogroup" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-region.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-region.html
new file mode 100644
index 0000000000..29929c149b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-region.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "region" and no states or properties</title>
+ </head>
+ <body>
+ <div role="region" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-rowheader.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-rowheader.html
new file mode 100644
index 0000000000..9a1bba18ee
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-rowheader.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "rowheader" and no states or properties</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div role="rowheader" id="test">Placeholder content</div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-search.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-search.html
new file mode 100644
index 0000000000..160cec84b7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-search.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "search" and no states or properties</title>
+ </head>
+ <body>
+ <div role="search" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-separator.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-separator.html
new file mode 100644
index 0000000000..d8d8352876
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-separator.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "separator" and no states or properties</title>
+ </head>
+ <body>
+ <div role="separator" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-status.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-status.html
new file mode 100644
index 0000000000..9e41384935
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-status.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "status" and no states or properties</title>
+ </head>
+ <body>
+ <div role="status" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tablist.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tablist.html
new file mode 100644
index 0000000000..211eda8154
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tablist.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "tablist" and no states or properties</title>
+ </head>
+ <body>
+ <div role="tablist" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tabpanel.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tabpanel.html
new file mode 100644
index 0000000000..3884f39422
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tabpanel.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "tabpanel" and no states or properties</title>
+ </head>
+ <body>
+ <div role="tabpanel" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-textbox.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-textbox.html
new file mode 100644
index 0000000000..fcfe673fb5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-textbox.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "textbox" and no states or properties</title>
+ </head>
+ <body>
+ <div role="textbox" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-timer.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-timer.html
new file mode 100644
index 0000000000..af15207e0c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-timer.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "timer" and no states or properties</title>
+ </head>
+ <body>
+ <div role="timer" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-toolbar.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-toolbar.html
new file mode 100644
index 0000000000..8324070282
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-toolbar.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "toolbar" and no states or properties</title>
+ </head>
+ <body>
+ <div role="toolbar" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tooltip.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tooltip.html
new file mode 100644
index 0000000000..299346439b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tooltip.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "tooltip" and no states or properties</title>
+ </head>
+ <body>
+ <div role="tooltip" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tree.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tree.html
new file mode 100644
index 0000000000..a194de5a29
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-tree.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "tree" and no states or properties</title>
+ </head>
+ <body>
+ <div role="tree" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-treegrid.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-treegrid.html
new file mode 100644
index 0000000000..25b242627c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-plain-concrete/roles-plain-concrete-treegrid.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Plain &lt;div&gt; with role "treegrid" and no states or properties</title>
+ </head>
+ <body>
+ <div role="treegrid" id="test">Placeholder content</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-atomic-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-atomic-false.html
new file mode 100644
index 0000000000..a2c0b72621
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-atomic-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-atomic" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-live="polite" aria-atomic="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-atomic-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-atomic-true.html
new file mode 100644
index 0000000000..53f5b6d805
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-atomic-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-atomic" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-live="polite" aria-atomic="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-busy-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-busy-false.html
new file mode 100644
index 0000000000..59b1eaed13
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-busy-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-busy" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-busy="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-busy-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-busy-true.html
new file mode 100644
index 0000000000..f6d8f54992
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-busy-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-busy" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-busy="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-controls-obj1-obj2.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-controls-obj1-obj2.html
new file mode 100644
index 0000000000..5d095774a1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-controls-obj1-obj2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-controls" value of "obj1 obj2"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-controls="obj1 obj2">Placeholder content</div>
+ <div id="obj1" role="navigation">obj1</div>
+ <div id="obj2" role="contentinfo">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-controls-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-controls-obj1.html
new file mode 100644
index 0000000000..56db460384
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-controls-obj1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-controls" value of "obj1"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-controls="obj1">Placeholder content</div>
+ <div id="obj1" role="navigation">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-describedby-obj1-obj2.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-describedby-obj1-obj2.html
new file mode 100644
index 0000000000..55369c9520
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-describedby-obj1-obj2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-describedby" value of "obj1 obj2"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-describedby="obj1 obj2">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-describedby-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-describedby-obj1.html
new file mode 100644
index 0000000000..bb3c294f7f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-describedby-obj1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-describedby" value of "obj1"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-describedby="obj1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-disabled-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-disabled-false.html
new file mode 100644
index 0000000000..90de02c084
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-disabled-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-disabled" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-disabled="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-disabled-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-disabled-true.html
new file mode 100644
index 0000000000..336975f51d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-disabled-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-disabled" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-disabled="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-copy.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-copy.html
new file mode 100644
index 0000000000..4653a0a8fd
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-copy.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-dropeffect" value of "copy"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-dropeffect="copy">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-execute.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-execute.html
new file mode 100644
index 0000000000..5475274455
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-execute.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-dropeffect" value of "execute"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-dropeffect="execute">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-link.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-link.html
new file mode 100644
index 0000000000..b592f1e1ea
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-link.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-dropeffect" value of "link"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-dropeffect="link">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-move.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-move.html
new file mode 100644
index 0000000000..a7caad7709
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-move.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-dropeffect" value of "move"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-dropeffect="move">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-none.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-none.html
new file mode 100644
index 0000000000..86c73586e1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-none.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-dropeffect" value of "none"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-dropeffect="none">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-popup.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-popup.html
new file mode 100644
index 0000000000..23c5f5c3df
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-dropeffect-popup.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-dropeffect" value of "popup"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-dropeffect="popup">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-flowto-obj1-obj2.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-flowto-obj1-obj2.html
new file mode 100644
index 0000000000..3c72e0c5da
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-flowto-obj1-obj2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-flowto" value of "obj1 obj2"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-flowto="obj1 obj2">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-flowto-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-flowto-obj1.html
new file mode 100644
index 0000000000..92747023e9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-flowto-obj1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-flowto" value of "obj1"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-flowto="obj1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-false.html
new file mode 100644
index 0000000000..b44f026ff3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-grabbed" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-grabbed="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-true.html
new file mode 100644
index 0000000000..fef9fcad8b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-grabbed" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-grabbed="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-undefined.html
new file mode 100644
index 0000000000..fbe3f69cb2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-grabbed-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-grabbed" value of "undefined"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-grabbed="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-haspopup-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-haspopup-false.html
new file mode 100644
index 0000000000..b25ab99214
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-haspopup-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-haspopup" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-haspopup="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-haspopup-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-haspopup-true.html
new file mode 100644
index 0000000000..c3d6e6af3e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-haspopup-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-haspopup" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-haspopup="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-hidden-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-hidden-false.html
new file mode 100644
index 0000000000..fe96171ccc
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-hidden-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-hidden" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-hidden="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-hidden-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-hidden-true.html
new file mode 100644
index 0000000000..976cfcc520
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-hidden-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-hidden" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-hidden="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-false.html
new file mode 100644
index 0000000000..ad14b3339b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-invalid" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-invalid="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-grammar.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-grammar.html
new file mode 100644
index 0000000000..cea7b01aed
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-grammar.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-invalid" value of "grammar"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-invalid="grammar">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-spelling.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-spelling.html
new file mode 100644
index 0000000000..7ce8947581
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-spelling.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-invalid" value of "spelling"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-invalid="spelling">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-true.html
new file mode 100644
index 0000000000..8dc3c233ff
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-invalid-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-invalid" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-invalid="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-label-Test-string-value.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-label-Test-string-value.html
new file mode 100644
index 0000000000..dc0c036d20
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-label-Test-string-value.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-label" value of "Test string
+ value"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-label="Test string value">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-labelledby-obj1-obj2.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-labelledby-obj1-obj2.html
new file mode 100644
index 0000000000..36ee9dcd5a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-labelledby-obj1-obj2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-labelledby" value of "obj1 obj2"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-labelledby="obj1 obj2">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-labelledby-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-labelledby-obj1.html
new file mode 100644
index 0000000000..dbcc750638
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-labelledby-obj1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-labelledby" value of "obj1"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-labelledby="obj1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-assertive.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-assertive.html
new file mode 100644
index 0000000000..05f2f3fe87
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-assertive.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-live" value of "assertive"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-live="assertive">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-off.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-off.html
new file mode 100644
index 0000000000..1ff8ac31c2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-off.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-live" value of "off"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-live="off">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-polite.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-polite.html
new file mode 100644
index 0000000000..829bf79069
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-live-polite.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-live" value of "polite"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-live="polite">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-owns-obj1-obj2.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-owns-obj1-obj2.html
new file mode 100644
index 0000000000..2276906bff
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-owns-obj1-obj2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-owns" value of "obj1 obj2"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-owns="obj1 obj2">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-owns-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-owns-obj1.html
new file mode 100644
index 0000000000..ebb95c433d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-owns-obj1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-owns" value of "obj1"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-owns="obj1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-additions-text.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-additions-text.html
new file mode 100644
index 0000000000..be51d2872e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-additions-text.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-relevant" value of "additions
+ text"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-relevant="additions text">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-additions.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-additions.html
new file mode 100644
index 0000000000..59ae86e4ff
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-additions.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-relevant" value of "additions"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-relevant="additions">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-all.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-all.html
new file mode 100644
index 0000000000..d87c522953
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-all.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-relevant" value of "all"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-relevant="all">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-removals.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-removals.html
new file mode 100644
index 0000000000..791a6b2e8e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-removals.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-relevant" value of "removals"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-relevant="removals">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-text.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-text.html
new file mode 100644
index 0000000000..03cabb3fbb
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-global/roles-properties-global-main-aria-relevant-text.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; global state or property "aria-relevant" value of "text"</title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-relevant="text">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/menuitemcheckbox-aria-checked-mixed.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/menuitemcheckbox-aria-checked-mixed.html
new file mode 100644
index 0000000000..837739e7ab
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/menuitemcheckbox-aria-checked-mixed.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menuitemcheckbox; inherited required state or property "aria-checked"
+ value of "mixed"
+ </title>
+ </head>
+ <body>
+ <div role="menu">
+ <div id="test" role="menuitemcheckbox" aria-checked="mixed">Placeholder content</div>
+ </div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/menuitemcheckbox-aria-checked-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/menuitemcheckbox-aria-checked-undefined.html
new file mode 100644
index 0000000000..75f3f087f1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/menuitemcheckbox-aria-checked-undefined.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menuitemcheckbox; inherited required state or property "aria-checked"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="menu">
+ <div id="test" role="menuitemcheckbox" aria-checked="undefined">Placeholder content</div>
+ </div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-false.html
new file mode 100644
index 0000000000..72d48e77cf
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radio; inherited required state or property "aria-checked" value of
+ "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="radio" aria-checked="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-mixed.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-mixed.html
new file mode 100644
index 0000000000..1959329322
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-mixed.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radio; inherited required state or property "aria-checked" value of
+ "mixed"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="radio" aria-checked="mixed">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-true.html
new file mode 100644
index 0000000000..81571b60c5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radio; inherited required state or property "aria-checked" value of
+ "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="radio" aria-checked="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-undefined.html
new file mode 100644
index 0000000000..95a1ca7a27
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required-inherited/radio-aria-checked-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radio; inherited required state or property "aria-checked" value of
+ "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="radio" aria-checked="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-false.html
new file mode 100644
index 0000000000..21e7b0366a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role checkbox; required state or property "aria-checked" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="checkbox" aria-checked="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-mixed.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-mixed.html
new file mode 100644
index 0000000000..09200351ed
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-mixed.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role checkbox; required state or property "aria-checked" value of "mixed"</title>
+ </head>
+ <body>
+ <div id="test" role="checkbox" aria-checked="mixed">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-true.html
new file mode 100644
index 0000000000..295d992b10
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role checkbox; required state or property "aria-checked" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="checkbox" aria-checked="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-undefined.html
new file mode 100644
index 0000000000..250454f822
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-checkbox-aria-checked-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role checkbox; required state or property "aria-checked" value of "undefined"</title>
+ </head>
+ <body>
+ <div id="test" tabindex="0" role="checkbox" aria-checked="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-false.html
new file mode 100644
index 0000000000..751747aec5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; required state or property "aria-expanded" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="combobox" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-true.html
new file mode 100644
index 0000000000..46cd8e5061
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; required state or property "aria-expanded" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="combobox" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-undefined.html
new file mode 100644
index 0000000000..58ea1d313c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-required/roles-properties-required-combobox-aria-expanded-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; required state or property "aria-expanded" value of "undefined"</title>
+ </head>
+ <body>
+ <div id="test" role="combobox" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-false.html
new file mode 100644
index 0000000000..ac960fdbf6
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role alert; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="alert" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-true.html
new file mode 100644
index 0000000000..1b9c610fcc
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role alert; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="alert" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-undefined.html
new file mode 100644
index 0000000000..d6f9d8d793
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alert-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role alert; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="alert" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-false.html
new file mode 100644
index 0000000000..d879970645
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role alertdialog; inherited supported state or property "aria-expanded"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="alertdialog" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-true.html
new file mode 100644
index 0000000000..71f7c1b48b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role alertdialog; inherited supported state or property "aria-expanded"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="alertdialog" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-undefined.html
new file mode 100644
index 0000000000..048ac59a78
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/alertdialog-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role alertdialog; inherited supported state or property "aria-expanded"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="alertdialog" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-false.html
new file mode 100644
index 0000000000..8b12de5aab
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role application; inherited supported state or property "aria-expanded"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="application" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-true.html
new file mode 100644
index 0000000000..0b7a2545f5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role application; inherited supported state or property "aria-expanded"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="application" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-undefined.html
new file mode 100644
index 0000000000..04c44727dc
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/application-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role application; inherited supported state or property "aria-expanded"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="application" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-false.html
new file mode 100644
index 0000000000..6de04bcc87
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role article; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="article" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-true.html
new file mode 100644
index 0000000000..bf6bea8265
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role article; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="article" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-undefined.html
new file mode 100644
index 0000000000..804330711c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/article-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role article; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="article" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-false.html
new file mode 100644
index 0000000000..ddb241c484
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role banner; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="banner" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-true.html
new file mode 100644
index 0000000000..433e68b2e6
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role banner; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="banner" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-undefined.html
new file mode 100644
index 0000000000..ed7605d79c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/banner-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role banner; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="banner" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-false.html
new file mode 100644
index 0000000000..4376474659
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-false.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; inherited supported state or property "aria-expanded"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-expanded="false">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-true.html
new file mode 100644
index 0000000000..521b93520e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-true.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; inherited supported state or property "aria-expanded"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-expanded="true">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-undefined.html
new file mode 100644
index 0000000000..295c4eb5f7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-expanded-undefined.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; inherited supported state or property "aria-expanded"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-expanded="undefined">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-readonly-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-readonly-false.html
new file mode 100644
index 0000000000..6c32d6ae54
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-readonly-false.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; inherited supported state or property "aria-readonly"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-readonly="false">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-readonly-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-readonly-true.html
new file mode 100644
index 0000000000..6ce21d3137
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-readonly-true.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; inherited supported state or property "aria-readonly"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-readonly="true">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-required-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-required-false.html
new file mode 100644
index 0000000000..8c8065963b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-required-false.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; inherited supported state or property "aria-required"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-required="false">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-required-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-required-true.html
new file mode 100644
index 0000000000..644b2756d4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-required-true.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; inherited supported state or property "aria-required"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-required="true">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-false.html
new file mode 100644
index 0000000000..7a4ab45b10
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-false.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; inherited supported state or property "aria-selected"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-selected="false">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-true.html
new file mode 100644
index 0000000000..a16d514810
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-true.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; inherited supported state or property "aria-selected"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-selected="true">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-undefined.html
new file mode 100644
index 0000000000..4416bd662f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/columnheader-aria-selected-undefined.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; inherited supported state or property "aria-selected"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-selected="undefined">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..4e8e3fd583
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-activedescendant-obj1.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="combobox" aria-haspopup="true" aria-expanded="true" aria-activedescendant="obj1" tabindex="0">
+ <div role="textbox"></div>
+ <div role="listbox">
+ <div id="obj1" role="option">obj1</div>
+ <div id="obj2" role="option">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-false.html
new file mode 100644
index 0000000000..76943aefa9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="combobox" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-true.html
new file mode 100644
index 0000000000..7d29edd7a3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="combobox" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-undefined.html
new file mode 100644
index 0000000000..46b28ef3a3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/combobox-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="combobox" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-false.html
new file mode 100644
index 0000000000..ae3dcf35f3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role complementary; inherited supported state or property "aria-expanded"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="complementary" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-true.html
new file mode 100644
index 0000000000..d3b0d83b3e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role complementary; inherited supported state or property "aria-expanded"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="complementary" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-undefined.html
new file mode 100644
index 0000000000..a7952c2543
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/complementary-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role complementary; inherited supported state or property "aria-expanded"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="complementary" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-false.html
new file mode 100644
index 0000000000..de995a9225
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role contentinfo; inherited supported state or property "aria-expanded"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="contentinfo" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-true.html
new file mode 100644
index 0000000000..846f729573
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role contentinfo; inherited supported state or property "aria-expanded"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="contentinfo" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-undefined.html
new file mode 100644
index 0000000000..0a924c6717
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/contentinfo-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role contentinfo; inherited supported state or property "aria-expanded"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="contentinfo" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-false.html
new file mode 100644
index 0000000000..7fce65cff8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role definition; inherited supported state or property "aria-expanded"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="definition" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-true.html
new file mode 100644
index 0000000000..b2ea2ce8ae
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role definition; inherited supported state or property "aria-expanded"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="definition" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-undefined.html
new file mode 100644
index 0000000000..bae456aa73
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/definition-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role definition; inherited supported state or property "aria-expanded"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="definition" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-false.html
new file mode 100644
index 0000000000..e4c26f401e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role dialog; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="dialog" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-true.html
new file mode 100644
index 0000000000..2095b9cd99
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role dialog; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="dialog" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-undefined.html
new file mode 100644
index 0000000000..1df3702ba4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/dialog-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role dialog; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="dialog" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-false.html
new file mode 100644
index 0000000000..ee8ae62340
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role directory; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="directory" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-true.html
new file mode 100644
index 0000000000..8ef8ae9fb7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role directory; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="directory" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-undefined.html
new file mode 100644
index 0000000000..4be1ec3f5f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/directory-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role directory; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="directory" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-false.html
new file mode 100644
index 0000000000..ce533b2956
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role form; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="form" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-true.html
new file mode 100644
index 0000000000..01d98d4a86
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role form; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="form" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-undefined.html
new file mode 100644
index 0000000000..da9fb7bd90
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/form-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role form; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="form" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..71268f39e8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-activedescendant-obj1.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role grid; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div id="test" tabindex="0" role="grid" aria-activedescendant="obj1">
+ <div role="row">
+ <span role="gridcell" id="obj1">row1-cell1</span>
+ <span role="gridcell" id="obj2">row1-cell2</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-false.html
new file mode 100644
index 0000000000..f1c958008c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role grid; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="grid" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-true.html
new file mode 100644
index 0000000000..86223ae165
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role grid; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="grid" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-undefined.html
new file mode 100644
index 0000000000..aeb3693c52
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/grid-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role grid; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="grid" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/gridcell-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/gridcell-aria-expanded-false.html
new file mode 100644
index 0000000000..f4955926f5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/gridcell-aria-expanded-false.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role gridcell; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-expanded="false">Placeholder content</div>
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/gridcell-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/gridcell-aria-expanded-undefined.html
new file mode 100644
index 0000000000..f68e043699
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/gridcell-aria-expanded-undefined.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role gridcell; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1" role="gridcell" >obj1</div>
+ <div id="obj2" role="gridcell" >obj2</div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-false.html
new file mode 100644
index 0000000000..79a3d6a38d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role group; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="group" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-true.html
new file mode 100644
index 0000000000..6d18a366ed
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role group; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="group" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-undefined.html
new file mode 100644
index 0000000000..4a179c532a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/group-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role group; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="group" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-false.html
new file mode 100644
index 0000000000..7997685154
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role heading; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="heading" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-true.html
new file mode 100644
index 0000000000..d1c9468316
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role heading; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="heading" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-undefined.html
new file mode 100644
index 0000000000..2de29fc45d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/heading-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role heading; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="heading" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-false.html
new file mode 100644
index 0000000000..835d6bbb3b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role img; inherited supported state or property "aria-expanded" value of
+ "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="img" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-true.html
new file mode 100644
index 0000000000..46ade1d9ba
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role img; inherited supported state or property "aria-expanded" value of
+ "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="img" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-undefined.html
new file mode 100644
index 0000000000..8d4f17be3f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/img-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role img; inherited supported state or property "aria-expanded" value of
+ "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="img" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-false.html
new file mode 100644
index 0000000000..d510eb1564
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-false.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role list; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="list" aria-expanded="false">Placeholder content
+ <div id="obj1" role="listitem">obj1</div>
+ </div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-true.html
new file mode 100644
index 0000000000..37d15ab667
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-true.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role list; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="list" aria-expanded="true">Placeholder content
+ <div id="obj1" role="listitem">obj1</div>
+ </div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-undefined.html
new file mode 100644
index 0000000000..e1679660c2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/list-aria-expanded-undefined.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role list; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="list" aria-expanded="undefined">Placeholder content
+ <div id="obj1" role="listitem">obj1</div>
+ </div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..f28e43e6f4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-activedescendant-obj1.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listbox; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div id="test" tabindex="0" role="listbox" aria-activedescendant="obj1">
+ <div id="obj1" role="option">obj1</div>
+ <div id="obj2" role="option">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-false.html
new file mode 100644
index 0000000000..2bd754a3b8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listbox; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="listbox" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-true.html
new file mode 100644
index 0000000000..504c7371f9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listbox; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="listbox" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-undefined.html
new file mode 100644
index 0000000000..69055a2370
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/listbox-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listbox; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="listbox" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-false.html
new file mode 100644
index 0000000000..fa242c39cb
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role log; inherited supported state or property "aria-expanded" value of
+ "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="log" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-true.html
new file mode 100644
index 0000000000..072291e90c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role log; inherited supported state or property "aria-expanded" value of
+ "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="log" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-undefined.html
new file mode 100644
index 0000000000..b19c2d6d0c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/log-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role log; inherited supported state or property "aria-expanded" value of
+ "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="log" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-false.html
new file mode 100644
index 0000000000..16cf8f109a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-true.html
new file mode 100644
index 0000000000..d3687cb50f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-undefined.html
new file mode 100644
index 0000000000..c08f104881
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/main-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role main; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="main" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-false.html
new file mode 100644
index 0000000000..18d2f9ee85
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role marquee; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="marquee" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-true.html
new file mode 100644
index 0000000000..aed711775e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role marquee; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="marquee" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-undefined.html
new file mode 100644
index 0000000000..9a164bea71
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/marquee-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role marquee; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="marquee" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-false.html
new file mode 100644
index 0000000000..c038fabadc
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role math; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="math" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-true.html
new file mode 100644
index 0000000000..831c095602
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role math; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="math" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-undefined.html
new file mode 100644
index 0000000000..3bd0b7b025
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/math-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role math; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="math" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..06e5fc7aeb
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-activedescendant-obj1.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menu; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="menu" tabindex="0" aria-activedescendant="obj1">
+ <div id="obj1" role="menuitem">obj1</div>
+ <div id="obj2" role="menuitem">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-false.html
new file mode 100644
index 0000000000..c96d9e2ac5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menu; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="menu" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-true.html
new file mode 100644
index 0000000000..14361d01c1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menu; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="menu" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-undefined.html
new file mode 100644
index 0000000000..7a82e92b13
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menu-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menu; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="menu" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..e761a50a4b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-activedescendant-obj1.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menubar; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="menubar" tabindex="0" aria-activedescendant="obj1">
+ <div id="obj1" role="menuitem">obj1</div>
+ <div id="obj2" role="menuitem">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-false.html
new file mode 100644
index 0000000000..4ab7c9590c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menubar; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="menubar" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-true.html
new file mode 100644
index 0000000000..f7b26995fa
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menubar; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="menubar" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-undefined.html
new file mode 100644
index 0000000000..431f843ba4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menubar-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menubar; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="menubar" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-false.html
new file mode 100644
index 0000000000..5691a55c04
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-false.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menuitemradio; inherited supported state or property "aria-checked"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div role="menu">
+ <div id="test" role="menuitemradio" aria-checked="false">Placeholder content</div>
+ <div id="obj1" role="menuitemradio" aria-checked="false">obj1</div>
+ <div id="obj2" role="menuitemradio" aria-checked="false">obj2</div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-mixed.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-mixed.html
new file mode 100644
index 0000000000..d517d22a3e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-mixed.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menuitemradio; inherited supported state or property "aria-checked"
+ value of "mixed"
+ </title>
+ </head>
+ <body>
+ <div role="menu">
+ <div id="test" tabindex="0" role="menuitemradio" aria-checked="mixed">Placeholder content</div>
+ <div id="obj1" role="menuitemradio" aria-checked="false">obj1</div>
+ <div id="obj2" role="menuitemradio" aria-checked="false">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-true.html
new file mode 100644
index 0000000000..0d364f8ccb
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-true.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menuitemradio; inherited supported state or property "aria-checked"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div role="menu">
+ <div id="test" role="menuitemradio" aria-checked="true">Placeholder content</div>
+ <div id="obj1" role="menuitemradio" aria-checked="false">obj1</div>
+ <div id="obj2" role="menuitemradio" aria-checked="false">obj2</div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-undefined.html
new file mode 100644
index 0000000000..bb6aa7854f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/menuitemradio-aria-checked-undefined.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role menuitemradio; inherited supported state or property "aria-checked"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="menu">
+ <div id="test" role="menuitemradio" aria-checked="undefined">Placeholder content</div>
+ <div id="obj1" role="menuitemradio" aria-checked="false">obj1</div>
+ <div id="obj2" role="menuitemradio" aria-checked="false">obj2</div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-false.html
new file mode 100644
index 0000000000..5769da1789
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role navigation; inherited supported state or property "aria-expanded"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="navigation" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-true.html
new file mode 100644
index 0000000000..01594dc77e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role navigation; inherited supported state or property "aria-expanded"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="navigation" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-undefined.html
new file mode 100644
index 0000000000..9e6f4c630f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/navigation-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role navigation; inherited supported state or property "aria-expanded"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="navigation" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-false.html
new file mode 100644
index 0000000000..02065e732c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role note; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="note" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-true.html
new file mode 100644
index 0000000000..d1e0f8c595
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role note; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="note" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-undefined.html
new file mode 100644
index 0000000000..1e902fb253
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/note-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role note; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="note" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuemax-1.1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuemax-1.1.html
new file mode 100644
index 0000000000..2179446478
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuemax-1.1.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role progressbar; inherited supported state or property "aria-valuemax"
+ value of "1.1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="progressbar" aria-valuemax="1.1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuemin-1.1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuemin-1.1.html
new file mode 100644
index 0000000000..4fca777ec9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuemin-1.1.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role progressbar; inherited supported state or property "aria-valuemin"
+ value of "1.1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="progressbar" aria-valuemin="1.1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuenow-1.1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuenow-1.1.html
new file mode 100644
index 0000000000..751d47ee33
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuenow-1.1.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role progressbar; inherited supported state or property "aria-valuenow"
+ value of "1.1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="progressbar" aria-valuenow="1.1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuetext-Test-string-value.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuetext-Test-string-value.html
new file mode 100644
index 0000000000..bbd0e1fd96
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/progressbar-aria-valuetext-Test-string-value.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role progressbar; inherited supported state or property "aria-valuetext"
+ value of "Test string value"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="progressbar" aria-valuetext="Test string value">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-false.html
new file mode 100644
index 0000000000..b00d45c098
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radio; inherited supported state or property "aria-checked" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="radio" aria-checked="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-mixed.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-mixed.html
new file mode 100644
index 0000000000..8a95837306
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-mixed.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radio; inherited supported state or property "aria-checked" value
+ of "mixed"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="radio" aria-checked="mixed">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-true.html
new file mode 100644
index 0000000000..61e816268a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radio-aria-checked-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radio; inherited supported state or property "aria-checked" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="radio" aria-checked="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-false.html
new file mode 100644
index 0000000000..9d5680f32c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radiogroup; inherited supported state or property "aria-expanded"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="radiogroup" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-true.html
new file mode 100644
index 0000000000..f6f9e13797
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radiogroup; inherited supported state or property "aria-expanded"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="radiogroup" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-undefined.html
new file mode 100644
index 0000000000..0532ea592e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/radiogroup-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radiogroup; inherited supported state or property "aria-expanded"
+ value of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="radiogroup" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-false.html
new file mode 100644
index 0000000000..00b6052c2e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role region; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="region" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-true.html
new file mode 100644
index 0000000000..2fdd56f4b7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role region; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="region" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-undefined.html
new file mode 100644
index 0000000000..22bb837990
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/region-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role region; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="region" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/row-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/row-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..a24595a104
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/row-aria-activedescendant-obj1.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role row; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div id="test" role="row" tabindex="0" aria-activedescendant="obj1">
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowgroup-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowgroup-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..b0ff899930
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowgroup-aria-activedescendant-obj1.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowgroup; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div id="test" tabindex="0" role="rowgroup" aria-activedescendant="obj1">
+ <div id="obj1" role="row">
+ <div role="gridcell">r1c1</div>
+ <div role="gridcell">r1c2</div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-false.html
new file mode 100644
index 0000000000..710d779f51
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-false.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-expanded="false">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-true.html
new file mode 100644
index 0000000000..ac0e55a746
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-true.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-expanded="true">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-undefined.html
new file mode 100644
index 0000000000..13d7bfc6ab
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-expanded-undefined.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-expanded="undefined">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-readonly-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-readonly-false.html
new file mode 100644
index 0000000000..009a72d766
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-readonly-false.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; inherited supported state or property "aria-readonly" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-readonly="false">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-readonly-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-readonly-true.html
new file mode 100644
index 0000000000..3061cc5f9e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-readonly-true.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; inherited supported state or property "aria-readonly" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-readonly="true">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-required-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-required-false.html
new file mode 100644
index 0000000000..cdcba5973e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-required-false.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; inherited supported state or property "aria-required" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-required="false">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-required-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-required-true.html
new file mode 100644
index 0000000000..7ad7b8e99a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-required-true.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; inherited supported state or property "aria-required" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-required="true">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-false.html
new file mode 100644
index 0000000000..17c23801d5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-false.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; inherited supported state or property "aria-selected" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-selected="false">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-true.html
new file mode 100644
index 0000000000..03e6d47980
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-true.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; inherited supported state or property "aria-selected" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-selected="true">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-undefined.html
new file mode 100644
index 0000000000..439abbb05a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/rowheader-aria-selected-undefined.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; inherited supported state or property "aria-selected" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-selected="undefined" tabindex="0">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-false.html
new file mode 100644
index 0000000000..2bcae837fd
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role search; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="search" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-true.html
new file mode 100644
index 0000000000..16885b8d15
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role search; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="search" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-undefined.html
new file mode 100644
index 0000000000..0e39ca5cf6
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/search-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role search; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="search" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-false.html
new file mode 100644
index 0000000000..7dcf0f9acf
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role status; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="status" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-true.html
new file mode 100644
index 0000000000..05314e41f4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role status; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="status" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-undefined.html
new file mode 100644
index 0000000000..18ffebc08a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/status-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role status; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="status" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-false.html
new file mode 100644
index 0000000000..c5a83f98a3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-false.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tab; inherited supported state or property "aria-expanded" value of
+ "false"
+ </title>
+ </head>
+ <body>
+ <div role="tablist">
+ <div id="test" role="tab" aria-expanded="false">Placeholder content</div>
+ </div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-true.html
new file mode 100644
index 0000000000..43fa4f19c8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-true.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tab; inherited supported state or property "aria-expanded" value of
+ "true"
+ </title>
+ </head>
+ <body>
+ <div role="tablist">
+ <div id="test" role="tab" aria-expanded="true">Placeholder content</div>
+ </div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-undefined.html
new file mode 100644
index 0000000000..abd5917a31
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tab-aria-expanded-undefined.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tab; inherited supported state or property "aria-expanded" value of
+ "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="tablist">
+ <div id="test" role="tab" aria-expanded="undefined">Placeholder content</div>
+ </div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..ffbe638b07
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-activedescendant-obj1.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tablist; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tablist" tabindex="0" aria-activedescendant="obj1">
+ <div id="obj1" role="tab">obj1</div>
+ </div>
+
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-false.html
new file mode 100644
index 0000000000..0966d5ba6e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-false.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tablist; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tablist" aria-expanded="false">
+ <div id="obj1" role="tab">obj1</div>
+ </div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-true.html
new file mode 100644
index 0000000000..7ae72f3a6c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-true.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tablist; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tablist" aria-expanded="true">
+ <div id="obj1" role="tab">obj1</div>
+ </div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-undefined.html
new file mode 100644
index 0000000000..24fb428df2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tablist-aria-expanded-undefined.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tablist; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tablist" aria-expanded="undefined">
+ <div id="obj1" role="tab">obj1</div>
+ </div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-false.html
new file mode 100644
index 0000000000..b431a4a6b5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-false.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tabpanel; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div role="tablist">
+ <div id="obj1" role="tab">obj1</div>
+ <div id="obj2" role="tab">obj2</div>
+ </div>
+ <div id="test" role="tabpanel" aria-expanded="false">Placeholder content</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-true.html
new file mode 100644
index 0000000000..dd718b0e70
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-true.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tabpanel; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div role="tablist">
+ <div id="obj1" role="tab">obj1</div>
+ <div id="obj2" role="tab">obj2</div>
+ </div>
+ <div id="test" role="tabpanel" aria-expanded="true">Placeholder content</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-undefined.html
new file mode 100644
index 0000000000..b87facc44a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tabpanel-aria-expanded-undefined.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tabpanel; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="tablist">
+ <div id="obj1" role="tab">obj1</div>
+ <div id="obj2" role="tab">obj2</div>
+ </div>
+ <div id="test" role="tabpanel" aria-expanded="undefined">Placeholder content</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-false.html
new file mode 100644
index 0000000000..c0f2082082
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role timer; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="timer" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-true.html
new file mode 100644
index 0000000000..40d571748a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role timer; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="timer" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-undefined.html
new file mode 100644
index 0000000000..90260acbcd
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/timer-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role timer; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="timer" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..ccc0c9f848
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-activedescendant-obj1.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role toolbar; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="toolbar" tabindex="0" aria-activedescendant="obj1">
+ <div id="obj1" role="button">obj1</div>
+ <div id="obj2" role="button">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-false.html
new file mode 100644
index 0000000000..aff3beeb1b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-false.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role toolbar; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="toolbar" aria-expanded="false">
+ <div id="obj1" role="button">obj1</div>
+ <div id="obj2" role="button">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-true.html
new file mode 100644
index 0000000000..fa949d2bf3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-true.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role toolbar; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="toolbar" aria-expanded="true">
+ <div id="obj1" role="button">obj1</div>
+ <div id="obj2" role="button">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-undefined.html
new file mode 100644
index 0000000000..f71027fbee
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/toolbar-aria-expanded-undefined.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role toolbar; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="toolbar" aria-expanded="undefined">
+ <div id="obj1" role="button">obj1</div>
+ <div id="obj2" role="button">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-false.html
new file mode 100644
index 0000000000..f867da4269
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tooltip; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tooltip" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-true.html
new file mode 100644
index 0000000000..1a52619fe2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tooltip; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tooltip" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-undefined.html
new file mode 100644
index 0000000000..8b24ad9ed8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tooltip-aria-expanded-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tooltip; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tooltip" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..c2d0d83391
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-activedescendant-obj1.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tree; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tree" aria-activedescendant="obj1" tabindex="0">
+ <div id="obj1" role="treeitem">obj1</div>
+ <div id="obj2" role="treeitem">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-false.html
new file mode 100644
index 0000000000..c13f331fd9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-false.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tree; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tree" aria-expanded="false">
+ <div role="treeitem" id="obj1">obj1</div>
+ <div role="treeitem" id="obj2">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-true.html
new file mode 100644
index 0000000000..a2545ef32c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-true.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tree; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tree" aria-expanded="true">
+ <div role="treeitem" id="obj1">obj1</div>
+ <div role="treeitem" id="obj2">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-undefined.html
new file mode 100644
index 0000000000..5379f70395
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/tree-aria-expanded-undefined.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tree; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tree" aria-expanded="undefined">
+ <div role="treeitem" id="obj1">obj1</div>
+ <div role="treeitem" id="obj2">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..bce72b08a0
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-activedescendant-obj1.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-activedescendant"
+ value of "obj1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-activedescendant="obj1" tabindex="0">
+ <div role="row">
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ <div role="row">
+ <div id="obj3" role="gridcell">obj3</div>
+ <div id="obj4" role="gridcell">obj4</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-false.html
new file mode 100644
index 0000000000..7b5d78c98e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-false.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-expanded" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-expanded="false">
+ <div role="row">
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ <div role="row">
+ <div id="obj3" role="gridcell">obj3</div>
+ <div id="obj4" role="gridcell">obj4</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-true.html
new file mode 100644
index 0000000000..c06b957a01
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-true.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-expanded" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-expanded="true">
+ <div role="row">
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ <div role="row">
+ <div id="obj3" role="gridcell">obj3</div>
+ <div id="obj4" role="gridcell">obj4</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-undefined.html
new file mode 100644
index 0000000000..ef2232bf89
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-expanded-undefined.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-expanded" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-expanded="undefined">
+ <div role="row">
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ <div role="row">
+ <div id="obj3" role="gridcell">obj3</div>
+ <div id="obj4" role="gridcell">obj4</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-level-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-level-1.html
new file mode 100644
index 0000000000..1a3a3ef0c6
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-level-1.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-level" value
+ of "1"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-level="1" tabindex="0">
+ <div role="row">
+ <div role="gridcell" tabindex="-1" >Placeholder content</div>
+ <div role="gridcell" id="obj1">obj1</div>
+ <div role="gridcell" id="obj2">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-multiselectable-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-multiselectable-false.html
new file mode 100644
index 0000000000..ac6b7662de
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-multiselectable-false.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-multiselectable"
+ value of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-multiselectable="false">
+ <div role="row">
+ <div role="gridcell">Placeholder content</div>
+ <div role="gridcell" id="obj1">obj1</div>
+ <div role="gridcell" id="obj2">obj2</div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-multiselectable-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-multiselectable-true.html
new file mode 100644
index 0000000000..ee7696ea5f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-multiselectable-true.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-multiselectable"
+ value of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-multiselectable="true">
+ <div role="row">
+ <div role="gridcell">Placeholder content</div>
+ <div role="gridcell" id="obj1">obj1</div>
+ <div role="gridcell" id="obj2">obj2</div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-readonly-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-readonly-false.html
new file mode 100644
index 0000000000..a8f5e6e86d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-readonly-false.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-readonly" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-readonly="false">
+ <div role="row">
+ <div role="gridcell">Placeholder content</div>
+ <div role="gridcell" id="obj1">obj1</div>
+ <div role="gridcell" id="obj2">obj2</div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-readonly-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-readonly-true.html
new file mode 100644
index 0000000000..1ab9c58433
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-readonly-true.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-readonly" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-readonly="true">
+ <div role="row">
+ <div role="gridcell">Placeholder content</div>
+ <div role="gridcell" id="obj1">obj1</div>
+ <div role="gridcell" id="obj2">obj2</div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-required-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-required-false.html
new file mode 100644
index 0000000000..702655bd45
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-required-false.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-required" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-required="false">
+ <div role="row">
+ <div role="gridcell">Placeholder content</div>
+ <div role="gridcell" id="obj1">obj1</div>
+ <div role="gridcell" id="obj2">obj2</div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-required-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-required-true.html
new file mode 100644
index 0000000000..09c0bb6d9f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treegrid-aria-required-true.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treegrid; inherited supported state or property "aria-required" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="treegrid" aria-required="true">
+ <div role="row">
+ <div role="gridcell">Placeholder content</div>
+ <div role="gridcell" id="obj1">obj1</div>
+ <div role="gridcell" id="obj2">obj2</div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-false.html
new file mode 100644
index 0000000000..592cd974e9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treeitem; inherited supported state or property "aria-checked" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div role="tree">
+ <div id="test" role="treeitem" aria-checked="false">Placeholder content</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-mixed.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-mixed.html
new file mode 100644
index 0000000000..6a29dfff75
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-mixed.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treeitem; inherited supported state or property "aria-checked" value
+ of "mixed"
+ </title>
+ </head>
+ <body>
+ <div role="tree">
+ <div id="test" role="treeitem" aria-checked="mixed">Placeholder content</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-true.html
new file mode 100644
index 0000000000..3745c86587
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treeitem; inherited supported state or property "aria-checked" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div role="tree">
+ <div id="test" role="treeitem" aria-checked="true">Placeholder content</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-undefined.html
new file mode 100644
index 0000000000..ede64afbaa
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-checked-undefined.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treeitem; inherited supported state or property "aria-checked" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="tree">
+ <div id="test" role="treeitem" aria-checked="undefined">Placeholder content</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-level-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-level-1.html
new file mode 100644
index 0000000000..adc7b23ccc
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-level-1.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treeitem; inherited supported state or property "aria-level" value
+ of "1"
+ </title>
+ </head>
+ <body>
+ <div role="tree" tabindex="0">
+ <div id="test" role="treeitem" aria-level="1">Placeholder content</div>
+ <div id="obj1" role="treeitem">obj1</div>
+ <div id="obj2" role="treeitem">obj2</div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-posinset-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-posinset-1.html
new file mode 100644
index 0000000000..feb152c5a9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-posinset-1.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treeitem; inherited supported state or property "aria-posinset" value
+ of "1"
+ </title>
+ </head>
+ <body>
+ <div role="tree" tabindex="0">
+ <div id="test" role="treeitem" aria-posinset="1">Placeholder content</div>
+ <div id="obj1" role="treeitem">obj1</div>
+ <div id="obj2" role="treeitem">obj2</div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-false.html
new file mode 100644
index 0000000000..bce9733b76
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-false.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treeitem; inherited supported state or property "aria-selected" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div role="tree" tabindex="0">
+ <div id="test" role="treeitem" aria-selected="false">Placeholder content</div>
+ <div id="obj1" role="treeitem">obj1</div>
+ <div id="obj2" role="treeitem">obj2</div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-true.html
new file mode 100644
index 0000000000..11e529a464
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-true.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treeitem; inherited supported state or property "aria-selected" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div role="tree" tabindex="0">
+ <div id="test" role="treeitem" aria-selected="true">Placeholder content</div>
+ <div id="obj1" role="treeitem">obj1</div>
+ <div id="obj2" role="treeitem">obj2</div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-undefined.html
new file mode 100644
index 0000000000..d24014b0a4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-selected-undefined.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treeitem; inherited supported state or property "aria-selected" value
+ of "undefined"
+ </title>
+ </head>
+ <body>
+ <div role="tree" tabindex="0">
+ <div id="test" role="treeitem" aria-selected="undefined">Placeholder content</div>
+ <div id="obj1" role="treeitem">obj1</div>
+ <div id="obj2" role="treeitem">obj2</div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-setsize-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-setsize-1.html
new file mode 100644
index 0000000000..57005077d1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported-inherited/treeitem-aria-setsize-1.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role treeitem; inherited supported state or property "aria-setsize" value
+ of "1"
+ </title>
+ </head>
+ <body>
+ <div role="tree">
+ <div id="test" role="treeitem" aria-posinset="1" aria-setsize="1">Placeholder content</div>
+ </div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-false.html
new file mode 100644
index 0000000000..81e7807e17
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role button; supported state or property "aria-expanded" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="button" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-true.html
new file mode 100644
index 0000000000..6fd1ed8b6b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role button; supported state or property "aria-expanded" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="button" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-undefined.html
new file mode 100644
index 0000000000..b51b006b97
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-expanded-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role button; supported state or property "aria-expanded" value of "undefined"</title>
+ </head>
+ <body>
+ <div id="test" role="button" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-false.html
new file mode 100644
index 0000000000..c7aeae0a0a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role button; supported state or property "aria-pressed" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="button" aria-pressed="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-mixed.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-mixed.html
new file mode 100644
index 0000000000..510846d639
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-mixed.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role button; supported state or property "aria-pressed" value of "mixed"</title>
+ </head>
+ <body>
+ <div id="test" role="button" aria-pressed="mixed">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-true.html
new file mode 100644
index 0000000000..f99a0e1f5e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role button; supported state or property "aria-pressed" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="button" aria-pressed="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-undefined.html
new file mode 100644
index 0000000000..8591e12f07
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-button-aria-pressed-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role button; supported state or property "aria-pressed" value of "undefined"</title>
+ </head>
+ <body>
+ <div id="test" role="button" aria-pressed="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-ascending.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-ascending.html
new file mode 100644
index 0000000000..53fc144796
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-ascending.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; supported state or property "aria-sort" value of "ascending"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-sort="ascending">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-descending.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-descending.html
new file mode 100644
index 0000000000..ebffc1be7c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-descending.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; supported state or property "aria-sort" value of "descending"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-sort="descending">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-none.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-none.html
new file mode 100644
index 0000000000..fce4f994d5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-none.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; supported state or property "aria-sort" value of "none"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-sort="none">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-other.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-other.html
new file mode 100644
index 0000000000..a92ba0bfc3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-columnheader-aria-sort-other.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role columnheader; supported state or property "aria-sort" value of "other"</title>
+</head>
+<body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="columnheader" aria-sort="other">Placeholder content</span>
+ <span role="columnheader">header 2</span>
+ <span role="columnheader">header 3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ <div role="row">
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ <span role="gridcell">obj3</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-both.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-both.html
new file mode 100644
index 0000000000..93df0ede04
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-both.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; supported state or property "aria-autocomplete" value of
+ "both"
+ </title>
+ </head>
+ <body>
+ <input type="text" aria-label="Tag" role="combobox"
+ aria-autocomplete="both" aria-owns="owned_listbox" aria-activedescendant="selected_option" aria-expanded="true">
+ <ul role="listbox" id="owned_listbox">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option">Zoom</li>
+ </ul>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-inline.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-inline.html
new file mode 100644
index 0000000000..cc202875c1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-inline.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; supported state or property "aria-autocomplete" value of
+ "inline"
+ </title>
+ </head>
+ <body>
+ <input type="text" aria-label="Tag" role="combobox"
+ aria-autocomplete="inline" aria-owns="owned_listbox" aria-activedescendant="selected_option" aria-expanded="true">
+ <ul role="listbox" id="owned_listbox">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option">Zoom</li>
+ </ul>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-list.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-list.html
new file mode 100644
index 0000000000..060bf24c7a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-list.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; supported state or property "aria-autocomplete" value of
+ "list"
+ </title>
+ </head>
+ <body>
+ <input type="text" aria-label="Tag" role="combobox"
+ aria-autocomplete="list" aria-owns="owned_listbox" aria-activedescendant="selected_option" aria-expanded="true">
+ <ul role="listbox" id="owned_listbox">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option">Zoom</li>
+ </ul>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-none.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-none.html
new file mode 100644
index 0000000000..33be42e05f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-combobox-aria-autocomplete-none.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role combobox; supported state or property "aria-autocomplete" value of
+ "none"
+ </title>
+ </head>
+ <body>
+ <input type="text" aria-label="Tag" role="combobox"
+ aria-autocomplete="none" aria-owns="owned_listbox" aria-activedescendant="selected_option" aria-expanded="true">
+ <ul role="listbox" id="owned_listbox">
+ <li role="option">Zebra</li>
+ <li role="option" id="selected_option">Zoom</li>
+ </ul>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-false.html
new file mode 100644
index 0000000000..98703bd1e3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role document; supported state or property "aria-expanded" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="document" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-true.html
new file mode 100644
index 0000000000..b1ebb6b404
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role document; supported state or property "aria-expanded" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="document" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-undefined.html
new file mode 100644
index 0000000000..320a98c824
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-document-aria-expanded-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role document; supported state or property "aria-expanded" value of "undefined"</title>
+ </head>
+ <body>
+ <div id="test" role="document" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-multiselectable-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-multiselectable-false.html
new file mode 100644
index 0000000000..e5f6b6342a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-multiselectable-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role grid; supported state or property "aria-multiselectable" value of
+ "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="grid" aria-multiselectable="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-multiselectable-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-multiselectable-true.html
new file mode 100644
index 0000000000..2cba1e0d87
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-multiselectable-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role grid; supported state or property "aria-multiselectable" value of
+ "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="grid" aria-multiselectable="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-readonly-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-readonly-false.html
new file mode 100644
index 0000000000..9793dfa069
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-readonly-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role grid; supported state or property "aria-readonly" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="grid" aria-readonly="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-readonly-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-readonly-true.html
new file mode 100644
index 0000000000..ff2e3b82dd
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-grid-aria-readonly-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role grid; supported state or property "aria-readonly" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="grid" aria-readonly="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-readonly-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-readonly-false.html
new file mode 100644
index 0000000000..682bd32cce
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-readonly-false.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role gridcell; supported state or property "aria-readonly" value of "false"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-readonly="false">Placeholder content</div>
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-readonly-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-readonly-true.html
new file mode 100644
index 0000000000..4d795cd2b4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-readonly-true.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role gridcell; supported state or property "aria-readonly" value of "true"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-readonly="true">Placeholder content</div>
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-required-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-required-false.html
new file mode 100644
index 0000000000..7fe356c7c9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-required-false.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role gridcell; supported state or property "aria-required" value of "false"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-required="false">Placeholder content</div>
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-required-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-required-true.html
new file mode 100644
index 0000000000..c3de53e713
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-required-true.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role gridcell; supported state or property "aria-required" value of "true"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-required="true">Placeholder content</div>
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-false.html
new file mode 100644
index 0000000000..339b0564e9
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-false.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role gridcell; supported state or property "aria-selected" value of "false"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-selected="false">Placeholder content</div>
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-true.html
new file mode 100644
index 0000000000..8a52fab7aa
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-true.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role gridcell; supported state or property "aria-selected" value of "true"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-selected="true">Placeholder content</div>
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-undefined.html
new file mode 100644
index 0000000000..d276b27c2c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-gridcell-aria-selected-undefined.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role gridcell; supported state or property "aria-selected" value of "undefined"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <div id="test" role="gridcell" aria-selected="undefined">Placeholder content</div>
+ <div id="obj1" role="gridcell">obj1</div>
+ <div id="obj2" role="gridcell">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-heading-aria-level-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-heading-aria-level-1.html
new file mode 100644
index 0000000000..a57d5d59f3
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-heading-aria-level-1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role heading; supported state or property "aria-level" value of "1"</title>
+ </head>
+ <body>
+ <div id="test" role="heading" aria-level="1">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-false.html
new file mode 100644
index 0000000000..a372b6e442
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role link; supported state or property "aria-expanded" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="link" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-true.html
new file mode 100644
index 0000000000..0dcaa32a5e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role link; supported state or property "aria-expanded" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="link" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-undefined.html
new file mode 100644
index 0000000000..cd8e03704f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-link-aria-expanded-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role link; supported state or property "aria-expanded" value of "undefined"</title>
+ </head>
+ <body>
+ <div id="test" role="link" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-multiselectable-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-multiselectable-false.html
new file mode 100644
index 0000000000..d7c66a6e3e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-multiselectable-false.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listbox; supported state or property "aria-multiselectable" value
+ of "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="listbox" aria-multiselectable="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-multiselectable-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-multiselectable-true.html
new file mode 100644
index 0000000000..e0378cecbe
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-multiselectable-true.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listbox; supported state or property "aria-multiselectable" value
+ of "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="listbox" aria-multiselectable="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-required-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-required-false.html
new file mode 100644
index 0000000000..18d6da189d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-required-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listbox; supported state or property "aria-required" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="listbox" aria-required="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-required-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-required-true.html
new file mode 100644
index 0000000000..707442f0ed
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listbox-aria-required-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listbox; supported state or property "aria-required" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="listbox" aria-required="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-level-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-level-1.html
new file mode 100644
index 0000000000..fd6146a495
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-level-1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listitem; supported state or property "aria-level" value of "1"</title>
+ </head>
+ <body>
+ <div role="list"><div id="test" role="listitem" aria-level="1">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-posinset-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-posinset-1.html
new file mode 100644
index 0000000000..3cab9141ae
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-posinset-1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listitem; supported state or property "aria-posinset" value of "1"</title>
+ </head>
+ <body>
+ <div role="list"><div id="test" role="listitem" aria-posinset="1">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-setsize-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-setsize-1.html
new file mode 100644
index 0000000000..4ef2da2d38
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-listitem-aria-setsize-1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role listitem; supported state or property "aria-setsize" value of "1"</title>
+ </head>
+ <body>
+ <div role="list"><div id="test" role="listitem" aria-setsize="1">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-false.html
new file mode 100644
index 0000000000..2bff3b29c2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role option; supported state or property "aria-checked" value of "false"</title>
+ </head>
+ <body>
+ <div role="listbox"><div id="test" role="option" aria-checked="false">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-mixed.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-mixed.html
new file mode 100644
index 0000000000..33fee796a8
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-mixed.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role option; supported state or property "aria-checked" value of "mixed"</title>
+ </head>
+ <body>
+ <div role="listbox"><div id="test" role="option" aria-checked="mixed">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-true.html
new file mode 100644
index 0000000000..49c8209952
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role option; supported state or property "aria-checked" value of "true"</title>
+ </head>
+ <body>
+ <div role="listbox"><div id="test" role="option" aria-checked="true">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-undefined.html
new file mode 100644
index 0000000000..e372ff93ae
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-checked-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role option; supported state or property "aria-checked" value of "undefined"</title>
+ </head>
+ <body>
+ <div role="listbox"><div id="test" role="option" aria-checked="undefined">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-posinset-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-posinset-1.html
new file mode 100644
index 0000000000..7fbcc50427
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-posinset-1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role option; supported state or property "aria-posinset" value of "1"</title>
+ </head>
+ <body>
+ <div role="listbox"><div id="test" role="option" aria-posinset="1">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-false.html
new file mode 100644
index 0000000000..56db6c2ae5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role option; supported state or property "aria-selected" value of "false"</title>
+ </head>
+ <body>
+ <div role="listbox"><div id="test" role="option" aria-selected="false">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-true.html
new file mode 100644
index 0000000000..eaf138f2ef
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role option; supported state or property "aria-selected" value of "true"</title>
+ </head>
+ <body>
+ <div role="listbox"><div id="test" role="option" aria-selected="true">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj1</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-undefined.html
new file mode 100644
index 0000000000..43489a0d2b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-selected-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role option; supported state or property "aria-selected" value of "undefined"</title>
+ </head>
+ <body>
+ <div role="listbox"><div id="test" role="option" aria-selected="undefined">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-setsize-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-setsize-1.html
new file mode 100644
index 0000000000..6a8b379896
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-option-aria-setsize-1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role option; supported state or property "aria-setsize" value of "1"</title>
+ </head>
+ <body>
+ <div role="listbox"><div id="test" role="option" aria-setsize="1">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-radiogroup-aria-required-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-radiogroup-aria-required-false.html
new file mode 100644
index 0000000000..fe956b50b2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-radiogroup-aria-required-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radiogroup; supported state or property "aria-required" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="radiogroup" aria-required="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-radiogroup-aria-required-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-radiogroup-aria-required-true.html
new file mode 100644
index 0000000000..6bf6b11bef
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-radiogroup-aria-required-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role radiogroup; supported state or property "aria-required" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="radiogroup" aria-required="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-level-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-level-1.html
new file mode 100644
index 0000000000..9c1ea0b174
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-level-1.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role row; supported state or property "aria-level" value of "1"</title>
+ </head>
+ <body>
+ <div role="grid"><div id="test" role="row" aria-level="1">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-false.html
new file mode 100644
index 0000000000..832fc16a1e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role row; supported state or property "aria-selected" value of "false"</title>
+ </head>
+ <body>
+ <div role="grid"><div id="test" role="row" aria-selected="false">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-true.html
new file mode 100644
index 0000000000..2977712b83
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role row; supported state or property "aria-selected" value of "true"</title>
+ </head>
+ <body>
+ <div role="grid"><div id="test" role="row" aria-selected="true">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-undefined.html
new file mode 100644
index 0000000000..cc4f6a828a
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-row-aria-selected-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role row; supported state or property "aria-selected" value of "undefined"</title>
+ </head>
+ <body>
+ <div role="grid"><div id="test" role="row" aria-selected="undefined"><div role="gridcell">Placeholder content</div></div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-ascending.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-ascending.html
new file mode 100644
index 0000000000..79f3316a9e
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-ascending.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; supported state or property "aria-sort" value of "ascending"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-sort="ascending">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-descending.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-descending.html
new file mode 100644
index 0000000000..beca847b75
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-descending.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; supported state or property "aria-sort" value of "descending"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-sort="descending">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-none.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-none.html
new file mode 100644
index 0000000000..a1d466f652
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-none.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; supported state or property "aria-sort" value of "none"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-sort="none">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-other.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-other.html
new file mode 100644
index 0000000000..6ed7626aa4
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-rowheader-aria-sort-other.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role rowheader; supported state or property "aria-sort" value of "other"</title>
+ </head>
+ <body>
+ <div role="grid">
+ <div role="row">
+ <span id="test" role="rowheader" aria-sort="other">Placeholder content</span>
+ <span role="gridcell" id="obj1">obj1</span>
+ <span role="gridcell" id="obj2">obj2</span>
+ </div>
+ <div role="row">
+ <span role="rowheader">header cell 2</span>
+ <span role="gridcell">obj1</span>
+ <span role="gridcell">obj2</span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-false.html
new file mode 100644
index 0000000000..a14c3c4382
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role separator; supported state or property "aria-expanded" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="separator" aria-expanded="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-true.html
new file mode 100644
index 0000000000..c2d399ea47
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role separator; supported state or property "aria-expanded" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="separator" aria-expanded="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-undefined.html
new file mode 100644
index 0000000000..8f350b7159
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-expanded-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role separator; supported state or property "aria-expanded" value of "undefined"</title>
+ </head>
+ <body>
+ <div id="test" role="separator" aria-expanded="undefined">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-orientation-horizontal.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-orientation-horizontal.html
new file mode 100644
index 0000000000..e888bb90e6
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-orientation-horizontal.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role separator; supported state or property "aria-orientation" value of
+ "horizontal"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="separator" aria-orientation="horizontal">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-orientation-vertical.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-orientation-vertical.html
new file mode 100644
index 0000000000..5dec81b834
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-separator-aria-orientation-vertical.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role separator; supported state or property "aria-orientation" value of
+ "vertical"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="separator" aria-orientation="vertical">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-false.html
new file mode 100644
index 0000000000..e0865918b0
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tab; supported state or property "aria-selected" value of "false"</title>
+ </head>
+ <body>
+ <div role="tablist"><div id="test" role="tab" aria-selected="false">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-true.html
new file mode 100644
index 0000000000..61c5ecedec
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tab; supported state or property "aria-selected" value of "true"</title>
+ </head>
+ <body>
+ <div role="tablist"><div id="test" role="tab" aria-selected="true">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-undefined.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-undefined.html
new file mode 100644
index 0000000000..9e7417a3c7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tab-aria-selected-undefined.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tab; supported state or property "aria-selected" value of "undefined"</title>
+ </head>
+ <body>
+ <div role="tablist"><div id="test" role="tab" aria-selected="undefined">Placeholder content</div></div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tablist-aria-level-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tablist-aria-level-1.html
new file mode 100644
index 0000000000..0e740d8fed
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tablist-aria-level-1.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tablist; supported state or property "aria-level" value of "1"</title>
+ </head>
+ <body>
+ <div id="test" role="tablist" aria-level="1">
+ <div id="obj1" role="tab">obj1</div>
+ <div role="tablist" aria-level="2">
+ <div id="obj2" role="tab">obj2</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-activedescendant-obj1.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-activedescendant-obj1.html
new file mode 100644
index 0000000000..732dfa0d74
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-activedescendant-obj1.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Test Case 234
+ </title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-activedescendant="obj1" tabindex="0">Placeholder content
+ <div id="obj1" role="button">obj1</div>
+ </div>
+ <div id="obj2">obj2</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-both.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-both.html
new file mode 100644
index 0000000000..8e6136e1eb
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-both.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role textbox; supported state or property "aria-autocomplete" value of
+ "both"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-autocomplete="both">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-inline.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-inline.html
new file mode 100644
index 0000000000..fa9e009852
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-inline.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role textbox; supported state or property "aria-autocomplete" value of
+ "inline"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-autocomplete="inline">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-list.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-list.html
new file mode 100644
index 0000000000..85d7bfa3b2
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-list.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role textbox; supported state or property "aria-autocomplete" value of
+ "list"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-autocomplete="list">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-none.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-none.html
new file mode 100644
index 0000000000..6594bd7263
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-autocomplete-none.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role textbox; supported state or property "aria-autocomplete" value of
+ "none"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-autocomplete="none">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-multiline-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-multiline-false.html
new file mode 100644
index 0000000000..6c047d141c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-multiline-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role textbox; supported state or property "aria-multiline" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-multiline="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-multiline-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-multiline-true.html
new file mode 100644
index 0000000000..8231e43bc5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-multiline-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role textbox; supported state or property "aria-multiline" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-multiline="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-readonly-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-readonly-false.html
new file mode 100644
index 0000000000..c007dab15b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-readonly-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role textbox; supported state or property "aria-readonly" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-readonly="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-readonly-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-readonly-true.html
new file mode 100644
index 0000000000..6525bc02b5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-readonly-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role textbox; supported state or property "aria-readonly" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-readonly="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-required-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-required-false.html
new file mode 100644
index 0000000000..eb496bc14b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-required-false.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role textbox; supported state or property "aria-required" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-required="false">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-required-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-required-true.html
new file mode 100644
index 0000000000..88ebdd6a25
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-textbox-aria-required-true.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role textbox; supported state or property "aria-required" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="textbox" aria-required="true">Placeholder content</div>
+ <div id="obj1">obj1</div>
+ <div id="obj2">obj2</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-multiselectable-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-multiselectable-false.html
new file mode 100644
index 0000000000..17ffdcc6fb
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-multiselectable-false.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tree; supported state or property "aria-multiselectable" value of
+ "false"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tree" aria-multiselectable="false">
+ <div role="treeitem" id="obj1">obj1</div>
+ <div role="treeitem" id="obj2">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-multiselectable-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-multiselectable-true.html
new file mode 100644
index 0000000000..9af7d0cc6c
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-multiselectable-true.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tree; supported state or property "aria-multiselectable" value of
+ "true"
+ </title>
+ </head>
+ <body>
+ <div id="test" role="tree" aria-multiselectable="true">
+ <div role="treeitem" id="obj1">obj1</div>
+ <div role="treeitem" id="obj2">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-required-false.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-required-false.html
new file mode 100644
index 0000000000..d049bf6523
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-required-false.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tree; supported state or property "aria-required" value of "false"</title>
+ </head>
+ <body>
+ <div id="test" role="tree" aria-required="false">
+ <div role="treeitem" id="obj1">obj1</div>
+ <div role="treeitem" id="obj2">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-required-true.html b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-required-true.html
new file mode 100644
index 0000000000..86fbbc1a51
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/roles-properties-supported/roles-properties-supported-tree-aria-required-true.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>&lt;div&gt; with role tree; supported state or property "aria-required" value of "true"</title>
+ </head>
+ <body>
+ <div id="test" role="tree" aria-required="true">
+ <div role="treeitem" id="obj1">obj1</div>
+ <div role="treeitem" id="obj2">obj2</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/selected-state/670.html b/testing/web-platform/tests/conformance-checkers/html-aria/selected-state/670.html
new file mode 100644
index 0000000000..de95a2e19d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/selected-state/670.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 670</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 670</h1>
+
+ <ul role="listbox">
+ <li role="option" aria-selected="true" id="ID_OPTION" tabindex="0">Option 1</li>
+ <li role="option">Option 2</li>
+ </ul>
+
+ <h2>Description</h2>
+ <p>For an element with role role "option" which is a child of an element with
+ role "listbox", and the value of the "aria-selected" attribute is equal
+ to "true".</p>
+
+ <script>
+
+ function setFocus() {
+ var node = document.getElementById('ID_OPTION');
+ node.focus();
+ }
+
+ window.addEventListener('load', setFocus);
+ </script>
+ </body>
+
+</html>
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/selected-state/671.html b/testing/web-platform/tests/conformance-checkers/html-aria/selected-state/671.html
new file mode 100644
index 0000000000..4d36b22cf1
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/selected-state/671.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 671</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 671</h1>
+
+ <ul role="listbox">
+ <li role="option" aria-selected="false" id="ID_OPTION" tabindex="0">Option 1</li>
+ <li role="option">Option 2</li>
+ </ul>
+
+ <h2>Description</h2>
+ <p>For an element with role role "option" which is a child of an element with
+ role "listbox", and the value of the "aria-selected" attribute is NOT equal
+ to "true" or the attribute is undefined.</p>
+
+
+ <script>
+
+ function setFocus() {
+ var test_node = document.getElementById('ID_OPTION');
+ test_node.focus();
+ }
+
+ window.addEventListener('load', setFocus);
+ </script>
+ </body>
+
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/selected-state/672.html b/testing/web-platform/tests/conformance-checkers/html-aria/selected-state/672.html
new file mode 100644
index 0000000000..962e6b944b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/selected-state/672.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 672</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 672</h1>
+ <ul role="listbox">
+ <li role="option" aria-selected="false" id="TEST_ID" tabindex="0">Option 1</li>
+ <li role="option">Option 2</li>
+ </ul>
+
+ <h2>Description</h2>
+ <p>For an element with role "option" which is a child of an element with role "listbox",
+ and the value of the "aria-selected" attribute changes (from "true", or to "true").</p>
+
+ <script>
+ function changeSelectedState() {
+ var test_node = document.getElementById('TEST_ID');
+ var state = test_node.getAttribute('aria-selected');
+
+ if (state === 'false') test_node.setAttribute('aria-selected', 'true');
+ else test_node.setAttribute('aria-selected', 'true');
+
+ }
+
+ function setFocus() {
+ var test_node = document.getElementById('TEST_ID');
+ test_node.focus();
+ setTimeout(changeSelectedState,1000);
+ }
+
+ window.addEventListener('load', setFocus);
+ </script>
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-1.html b/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-1.html
new file mode 100644
index 0000000000..04786b8066
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-1.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 763</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 763</h1>
+
+ <div role="listbox">
+ <div role="option" aria-setsize="3" aria-posinset="1" tabindex="-1">Option 1</div>
+ <div role="option" aria-setsize="3" aria-posinset="2" tabindex="-1" id="ID_TARGET">Option 2</div>
+ <div role="option" aria-setsize="3" aria-posinset="3" tabindex="-1">Option 3</div>
+ </div>
+
+ <h2>Description</h2>
+ <p>A div element with the role='listbox' has three child div elements each with
+ role='option' and aria-setsize='3'. The 1st child div element has aria-posinset='1',
+ the 2nd child div element has aria-posinset='2' and the 3rd child div element
+ has aria-posinset='3'.</p>
+
+
+ <h2>Expected Results</h2>
+
+ <h3>MSAA + UIA Express</h3>
+ <ul>
+ <li>role="tree": ROLE_SYSTEM_LIST</li>
+ <li>role="treeitem": ROLE_SYSTEM_LISTITEM</li>
+ <li>LegacyIAccessible.Description will be in the form X of Y,
+ where X is the value of aria-posinset and Y is the value of aria-setsize
+ </li>
+ </ul>
+
+ <h3>MSAA + IAccessible2</h3>
+ <ul>
+ <li>role="tree": ROLE_SYSTEM_LIST</li>
+ <li>role="treeitem": ROLE_SYSTEM_LISTITEM</li>
+ <li>The structure should be reflected in the accessibility tree as directed by aria-posinset.</li>
+ <li>function groupPosition() should be available and have the following results:
+ <ul>
+ <li>groupLevel: 1</li>
+ <li>similarItemsInGroup: 3</li>
+ <li>positionInGroup: aria-posinest value</li>
+ </ul>
+ </li>
+ </ul>
+
+ <h3>UIA</h3>
+ <ul>
+ <li>role="tree": List</li>
+ <li>role="treeitem": ListItem</li>
+ <li>LegacyIAccessible.Description will be in the form X of Y,
+ where X is the value of aria-posinset and Y is the value of aria-setsize</li>
+ </ul>
+
+
+ <h3>ATK/AT-SPI</h3>
+ <ul>
+ <li>role="tree": ROLE_LIST</li>
+ <li>role="treeitem": ROLE_LISTITEM</li>
+ <li>aria-setsize: not mapped to setsize: value</li>
+ <li>aria-posinset: is mapped to posinset: value</li>
+ </ul>
+
+ <h3>AXAPI</h3>
+ <ul>
+ <li>role="tree": AXList = 'list'</li>
+ <li>role="treeitem": AXGroup = 'group'</li>
+ <li>aria-setsize: is mapped to AXARIASetSize: value</li>
+ <li>aria-posinset: is mapped to AXARIAPosInSet: value</li>
+ </ul>
+
+
+ <script>
+
+ function setFocus() {
+ var node = document.getElementById('ID_TARGET');
+ node.focus();
+ }
+
+ window.addEventListener('load', setFocus);
+ </script>
+ </body>
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-5.html b/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-5.html
new file mode 100644
index 0000000000..1ee058526b
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-5.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 767</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 767</h1>
+
+ <div role="list">
+ <div role="listitem">Item 1</div>
+ <div role="listitem">Item 2</div>
+ <div role="listitem">Item 3</div>
+ <div role="listitem">Item 4</div>
+ </div>
+
+ <h2>Description</h2>
+ <p>A div element with the role='list' with four child div elements with with the role='listitem'.</p>
+
+ <h2>Expected Results</h2>
+
+ <h3>MSAA + UIA Express</h3>
+ <ul>
+ <li>role="list": ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY</li>
+ <li>role="listitem": ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY</li>
+ <li>LegacyIAccessible.Description will be in the form X of Y,
+ where X is the position in list and Y = 4</li>
+ </ul>
+
+ <h3>MSAA + IAccessible2</h3>
+ <ul>
+ <li>role="list": ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY</li>
+ <li>role="listitem": ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY</li>
+ <li>The structure should be reflected in the accessibility tree as directed by aria-posinset.</li>
+ <li>function groupPosition() should be available and have the following results:
+ <ul>
+ <li>object attributes setsize:4, posinset:1-based position in the list></li>
+ <li>groupLevel: 0 or 1</li>
+ <li>similarItemsInGroup: 4</li>
+ <li>positionInGroup: position in list</li>
+ </ul>
+ </li>
+ </ul>
+
+ <h3>UIA</h3>
+ <ul>
+ <li>role="list": List</li>
+ <li>role="listitem": Listitem</li>
+ <li>LegacyIAccessible.Description will be in the form X of Y,
+ where X is the position in list and Y = 4</li>
+ </ul>
+
+ <h3>ATK/AT-SPI</h3>
+ <ul>
+ <li>role="list": ROLE_LIST and STATE_EDITABLE is not exposed</li>
+ <li>role="listitem": ROLE_LISTITEM and STATE_EDITABLE is not exposed</li>
+ <li>object attributes setsize:4, posinset:1-based position in the list></li>
+ </ul>
+
+ <h3>AXAPI</h3>
+ <ul>
+ <li>role="list": AXList and AXContentList = 'content list'</li>
+ <li>role="listitem": AXGroup = nil</li>
+ <li>AXARIASetSize: 4</li>
+ <li>AXARIAPosInSet: 1 based position in list</li>
+ <li>AXDisclosureLevel: 0 or 1 </li>
+ </ul>
+ </body>
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-6.html b/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-6.html
new file mode 100644
index 0000000000..af8979c27d
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/setsize-posinset-level-6.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 768</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 768</h1>
+
+ <div role="list">
+ <div role="listitem" aria-level="2">Item 1</div>
+ <div role="listitem" aria-level="2">Item 2</div>
+ <div role="listitem" aria-level="2">Item 3</div>
+ <div role="listitem" aria-level="2">Item 4</div>
+ </div>
+
+ <h2>Description</h2>
+ <p>A div element with the role='list' with four child div elements with with the role='listitem' with a aria-level='2'.</p>
+
+ <h2>Expected Results</h2>
+
+ <h3>MSAA + UIA Express</h3>
+ <ul>
+ <li>role="list": ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY</li>
+ <li>role="listitem": ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY</li>
+ <li>LegacyIAccessible.Description will be in the form X of Y,
+ where X is the position in list and Y = 4</li>
+ <li>Expose level=1 in AriaProperites for list items</li>
+ </ul>
+
+ <h3>MSAA + IAccessible2</h3>
+ <ul>
+ <li>role="list": ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY</li>
+ <li>role="listitem": ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY</li>
+ <li>The structure should be reflected in the accessibility tree as directed by aria-posinset.</li>
+ <li>function groupPosition() should be available and have the following results:
+ <ul>
+ <li>groupLevel: 2</li>
+ <li>similarItemsInGroup: 4</li>
+ <li>positionInGroup: position in list</li>
+ </ul>
+ </li>
+ </ul>
+
+ <h3>UIA</h3>
+ <ul>
+ <li>role="list": List</li>
+ <li>role="listitem": Listitem</li>
+ <li>LegacyIAccessible.Description will be in the form X of Y,
+ where X is the position in list and Y = 4</li>
+ <li>Expose level=1 in AriaProperites for list items</li>
+ </ul>
+
+ <h3>ATK/AT-SPI</h3>
+ <ul>
+ <li>role="list": ROLE_LIST and STATE_EDITABLE is not exposed</li>
+ <li>role="listitem": ROLE_LISTITEM and STATE_EDITABLE is not exposed</li>
+ <li>setsize: 4</li>
+ <li>posinset: position in list</li>
+ <li>level: 2 </li>
+ </ul>
+
+ <h3>AXAPI</h3>
+ <ul>
+ <li>role="list": AXList and AXContentList = 'content list'</li>
+ <li>role="listitem": AXGroup = nil</li>
+ <li>AXARIASetSize: 4</li>
+ <li>AXARIAPosInSet: position in list</li>
+ <li>AXDisclosureLevel: 2 </li>
+ </ul>
+
+ </body>
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/testcase-769.html b/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/testcase-769.html
new file mode 100644
index 0000000000..106813d281
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/setsize-posinset-level/testcase-769.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 769</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 769</h1>
+
+ <div role="list">
+ <div role="listitem">Item 1
+ <div role="group">
+ <div role="listitem">Item 1A</div>
+ <div role="listitem">Item 1B</div>
+ </div>
+ </div>
+ <div role="listitem">Item 2
+ <div role="group">
+ <div role="listitem">Item 2A</div>
+ <div role="listitem">Item 2B</div>
+ </div>
+ </div>
+ </div>
+
+ <h2>Description</h2>
+ <p>A div element with the role='list' with two child div elements with with the role='listitem'.
+ Each of the child div element also contain a div element with the role="group" with two child
+ div elements with the role='listitem'.</p>
+
+ <h2>Expected Results</h2>
+
+ <h3>MSAA + UIA Express</h3>
+ <ul>
+ <li>role="list": ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY</li>
+ <li>role="listitem": ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY</li>
+ <li>LegacyIAccessible.Description will be in the form X of Y,
+ where X is the position in list and Y = 2 (since all lists have 2 items)</li>
+ <li>Expose level=1 in AriaProperites for list items for "Item 1" and "Item 2"</li>
+ <li>Expose level=2 in AriaProperites for list items for "Item 1A", "Item 1B", "Item 2A" and "Item 2B"</li>
+ </ul>
+
+ <h3>MSAA + IAccessible2</h3>
+ <ul>
+ <li>role="list": ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY</li>
+ <li>role="listitem": ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY</li>
+ <li>function groupPosition() should be available and have the following results:
+ <ul>
+ <li>groupLevel: 1 for "Item 1" and "Item 2" (since all lists have 2 items)</li>
+ <li>groupLevel: 2 for "Item 1A", "Item 1B", "Item 2A" and "Item 2B"</li>
+ <li>similarItemsInGroup: 2</li>
+ <li>positionInGroup: position in list</li>
+ </ul>
+ </li>
+ </ul>
+
+ <h3>UIA</h3>
+ <ul>
+ <li>role="list": List</li>
+ <li>role="listitem": Listitem</li>
+ <li>LegacyIAccessible.Description will be in the form X of Y,
+ where X is the position in list and Y = 2 (since all lists have 2 items)</li>
+ <li>Expose level=1 in AriaProperites for "Item 1" and "Item 2"</li>
+ <li>Expose level=2 in AriaProperites for "Item 1A", "Item 1B", "Item 2A" and "Item 2B"</li>
+ </ul>
+
+ <h3>ATK/AT-SPI</h3>
+ <ul>
+ <li>role="list": ROLE_LIST and STATE_EDITABLE is not exposed</li>
+ <li>role="listitem": ROLE_LISTITEM and STATE_EDITABLE is not exposed</li>
+ <li>setsize: 2 (since all lists have 2 items)</li>
+ <li>posinset: position in list</li>
+ <li>level: 1 for "Item 1" and "Item 2"</li>
+ <li>level: 2 for "Item 1A", "Item 1B", "Item 2A" and "Item 2B"</li>
+ </ul>
+
+ <h3>AXAPI</h3>
+ <ul>
+ <li>role="list": AXList and AXContentList = 'content list'</li>
+ <li>role="listitem" for "Item 1" and "Item 2": AXGroup = 'group'</li>
+ <li>role="listitem" for "Item 1A", "Item 1B", "Item 2A" and "Item 2B": AXGroup = nil</li>
+ <li>AXARIASetSize: 2 (since all lists have 2 items)</li>
+ <li>AXARIAPosInSet: position in list</li>
+ <li>AXDisclosureLevel: 1 for "Item 1" and "Item 2"</li>
+ <li>AXDisclosureLevel: 2 for "Item 1A", "Item 1B", "Item 2A" and "Item 2B"</li>
+ </ul>
+
+ </body>
+
+</html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/stability-of-dom/669.html b/testing/web-platform/tests/conformance-checkers/html-aria/stability-of-dom/669.html
new file mode 100644
index 0000000000..2f2e64fb69
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/stability-of-dom/669.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>ARIA 1.0 Test Case 669</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case 669</h1>
+
+ <ul role="listbox" id="ID_LISTBOX" tabindex="0" aria-activedescendant="ID_OPTION_1">
+ <li id="ID_OPTION_1" role="option">Option 1</li>
+ <li id="ID_OPTION_2" role="option">Option 2</li>
+ </ul>
+
+ <h2>Description</h2>
+ <p>An element with role "listbox" with two descendants having role "option"
+ and aria-activedescendant set to the id of the first option for which an
+ assistive technology or API test tool requests to move focus to option 2.</p>
+
+ <script>
+
+ function setFocus() {
+ var node = document.getElementById('ID_LISTBOX');
+ node.focus();
+ }
+
+ window.addEventListener('load', setFocus);
+ </script>
+ </body>
+
+</html>
+
+
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-A.html b/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-A.html
new file mode 100644
index 0000000000..3ba81f2c16
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-A.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html><head>
+ <title>ARIA 1.0 Test Case: Listbox role with multiseclect</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case: Listbox role with multiseclect</h1>
+
+ <div role="listbox" aria-multiselectable="true">
+ <div role="option">Option 1</div>
+ <div role="option" aria-selected="true" tabindex="-1">Option 2 (test for selected)</div>
+ <div role="option" aria-selected="false" id="ID_TARGET" tabindex="0">Option 3 (test for selected)</div>
+ <div role="option">Option 4</div>
+ </div>
+
+ <h2>Description</h2>
+ <p>A DIV element with role role "listbox" has an aria-multiselect attribute set to "true".
+ Two of the four child "div" elements with the role "option" have the "aria-selected" attribute set
+ to "true".</p>
+
+ <h2>Accessibility API Mappings</h2>
+
+ <h3>MSAA + UIA Express</h3>
+ <p>Expose <code>STATE_SYSTEM_SELECTED</code>; Expose <code>STATE_SYSTEM_SELECTABLE</code></p>
+
+ <h3>MSAA + IAccessible2</h3>
+ <p>Expose STATE_SYSTEM_SELECTED and STATE_SYSTEM_SELECTABLE for each of the elements with role option</p>
+
+ <h3>UIA</h3>
+ <p>Expose IsSelected property in SelectionItem Control Pattern. The availability of the SelectionItem Control Pattern indicates the item is selectable.</p>
+
+ <h3>ATK/AT-SPI</h3>
+ <p>Expose STATE_SELECTED on each of the elements with role option.</p>
+
+ <h3>AXAPI</h3>
+ <p>AXSelected:Yes on option 2 and 3 and AXSelected:No on option 1 and 4</p>
+
+ <script>
+
+ function setFocus() {
+ var node = document.getElementById('ID_TARGET');
+
+myVar=setTimeout(function(){var node = document.getElementById('ID_TARGET');node.setAttribute("aria-selected","true");} ,2000)
+ }
+
+ window.addEventListener('load', setFocus);
+ </script>
+
+
+
+
+</body></html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-B.html b/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-B.html
new file mode 100644
index 0000000000..6d1dcdaae7
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-B.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html><head>
+ <title>ARIA 1.0 Test Case: Listbox role with multiseclect</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case: Listbox role with multiseclect</h1>
+
+ <div role="listbox" aria-multiselectable="true">
+ <div role="option">Option 1</div>
+ <div role="option" aria-selected="true" tabindex="-1">Option 2 (test for selected)</div>
+ <div role="option" aria-selected="true" id="ID_TARGET" tabindex="0">Option 3 (test for selected)</div>
+ <div role="option">Option 4</div>
+ </div>
+
+ <h2>Description</h2>
+ <p>A DIV element with role role "listbox" has an aria-multiselect attribute set to "true".
+ Two of the four child "div" elements with the role "option" have the "aria-selected" attribute set
+ to "true".</p>
+
+ <h2>Accessibility API Mappings</h2>
+
+ <h3>MSAA + UIA Express</h3>
+ <p>Expose <code>STATE_SYSTEM_SELECTED</code>; Expose <code>STATE_SYSTEM_SELECTABLE</code></p>
+
+ <h3>MSAA + IAccessible2</h3>
+ <p>Expose STATE_SYSTEM_SELECTED and STATE_SYSTEM_SELECTABLE for each of the elements with role option</p>
+
+ <h3>UIA</h3>
+ <p>Expose IsSelected property in SelectionItem Control Pattern. The availability of the SelectionItem Control Pattern indicates the item is selectable.</p>
+
+ <h3>ATK/AT-SPI</h3>
+ <p>Expose STATE_SELECTED on each of the elements with role option.</p>
+
+ <h3>AXAPI</h3>
+ <p>AXSelected:Yes on option 2 and 3 and AXSelected:No on option 1 and 4</p>
+
+ <script>
+
+ function clearSelection() {
+ myVar=setTimeout(function(){var node = document.getElementById('ID_TARGET');node.setAttribute("aria-selected","false");} ,3000)
+ }
+
+ window.addEventListener('load', clearSelection);
+ </script>
+
+
+
+
+</body></html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-C.html b/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-C.html
new file mode 100644
index 0000000000..88eb11bb41
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-listbox-multiselectable-C.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html><head>
+ <title>ARIA 1.0 Test Case: Listbox role with multiseclect</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <style>
+ [aria-selected="true"] { font-weight: bold; }
+ </style>
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case: Listbox role with multiseclect</h1>
+
+ <div role="listbox" aria-multiselectable="true">
+ <div role="option">Option 1</div>
+ <div role="option" aria-selected="false" tabindex="-1">Option 2 (test for selected)</div>
+ <div role="option" aria-selected="false" id="ID_TARGET" tabindex="0">Option 3 (test for selected)</div>
+ <div role="option">Option 4</div>
+ </div>
+ <p><button onclick="toggleSelectedState();">Toggle Option 3 Selected State</button>
+
+ <h2>Description</h2>
+ <p>A DIV element with role role "listbox" has an aria-multiselect attribute set to "true".
+ Two of the four child "div" elements with the role "option" have the "aria-selected" attribute set
+ to "true".</p>
+
+ <h2>Accessibility API Mappings</h2>
+
+ <h3>MSAA + UIA Express</h3>
+ <p>Expose <code>STATE_SYSTEM_SELECTED</code>; Expose <code>STATE_SYSTEM_SELECTABLE</code></p>
+
+ <h3>MSAA + IAccessible2</h3>
+ <p>Expose STATE_SYSTEM_SELECTED and STATE_SYSTEM_SELECTABLE for each of the elements with role option</p>
+
+ <h3>UIA</h3>
+ <p>Expose IsSelected property in SelectionItem Control Pattern. The availability of the SelectionItem Control Pattern indicates the item is selectable.</p>
+
+ <h3>ATK/AT-SPI</h3>
+ <p>Expose STATE_SELECTED on each of the elements with role option.</p>
+
+ <h3>AXAPI</h3>
+ <p>AXSelected:Yes on option 2 and 3 and AXSelected:No on option 1 and 4</p>
+
+ <script>
+/*
+ function setSelection() {
+ var node = document.getElementById('ID_TARGET');
+ node.setAttribute("aria-selected","true");
+ }
+
+ window.addEventListener('load', setSelection);
+*/
+ function toggleSelectedState() {
+ var el = document.getElementById('ID_TARGET');
+ if (el.getAttribute('aria-selected') == 'true')
+ el.setAttribute('aria-selected', 'false');
+ else
+ el.setAttribute('aria-selected', 'true');
+ }
+
+ </script>
+
+
+
+
+</body></html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-multiselectable-D.html b/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-multiselectable-D.html
new file mode 100644
index 0000000000..290430acf5
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-multiselectable-D.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html><head>
+ <title>ARIA 1.0 Test Case: Listbox role with multiseclect</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <style>
+ div[aria-selected="true"] {color:white;background-color:black;}
+ </style>
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case: Listbox role with multiseclect</h1>
+
+ <div role="listbox" aria-label="charlotte" aria-multiselectable="true">
+ <div role="option" aria-selected="false" id="ID1" tabindex="-1" onclick="handle1(event)">Option 1 (test for click elected)</div>
+ <div role="option" aria-selected="false" id="ID2" tabindex="-1">Option 2</div>
+ <div role="option" aria-selected="false" id="ID3" onmousedown="handle2(event)">Option 3 (test for shift click selected)</div>
+ </div>
+
+ <script>
+ function handle1(e) {
+ var node=document.getElementById('ID1');
+ node.focus();
+ e.stopPropagation();
+ return false;
+ }
+ function handle2(e) {
+ shiftpressed=0;
+ shiftpressed=e.shiftKey;
+ if (shiftpressed){
+ var node=document.getElementById('ID1');
+ node.setAttribute("aria-selected", "true");
+ node=document.getElementById('ID2');
+ node.setAttribute("aria-selected", "true");
+ node=document.getElementById('ID3');
+ node.setAttribute("aria-selected", "true");
+ }
+ e.stopPropagation();
+ return false;
+ }
+ </script>
+
+</body></html>
diff --git a/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-tree-multiselectable-C.html b/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-tree-multiselectable-C.html
new file mode 100644
index 0000000000..da97b2945f
--- /dev/null
+++ b/testing/web-platform/tests/conformance-checkers/html-aria/testcases-multiselectable/testcase-tree-multiselectable-C.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html><head>
+ <title>ARIA 1.0 Test Case: Tree role with aria-multiselectable</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ </head>
+ <body>
+ <h1>ARIA 1.0 Test Case: Tree role with aria-multiselectable</h1>
+
+ <div role="tree" aria-multiselectable="true">
+ <div role="treeitem">Leaf 1
+ <div role="group">
+ <div role="treeitem" aria-selected="true">Leaf 1A (Selected)</div>
+ <div role="treeitem">Leaf 1B</div>
+ <div role="treeitem" aria-selected="false">Leaf 1C (aria-selected='false')</div>
+ </div>
+ </div>
+ <div role="treeitem" aria-selected="true">Leaf 2 (Selected)
+ <div role="group">
+ <div role="treeitem">Leaf 2A</div>
+ <div role="treeitem">Leaf 2B</div>
+ <div role="treeitem">Leaf 2C</div>
+ </div>
+ </div>
+ <div role="treeitem">Leaf 3
+ <div role="group">
+ <div role="treeitem">Leaf 3A</div>
+ <div role="treeitem" aria-selected="false">Leaf 3B (aria-selected='false')</div>
+ <div role="treeitem" aria-selected="true">Leaf 3C (Selected)</div>
+ </div>
+ </div>
+ </div>
+
+ <script>
+
+ function setFocus() {
+ var node = document.getElementById('ID_TARGET');
+ node.focus();
+ }
+
+ window.addEventListener('load', setFocus);
+ </script>
+
+
+
+
+</body></html>