Tue, 06 Jan 2015 21:39:09 +0100
Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>HTML a11y spec tests</title>
5 <link id="link" rel="stylesheet" type="text/css"
6 href="chrome://mochikit/content/tests/SimpleTest/test.css" />
8 <script type="application/javascript"
9 src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
11 <script type="application/javascript"
12 src="../common.js"></script>
13 <script type="application/javascript"
14 src="../actions.js"></script>
15 <script type="application/javascript"
16 src="../role.js"></script>
17 <script type="application/javascript"
18 src="../states.js"></script>
19 <script type="application/javascript"
20 src="../attributes.js"></script>
21 <script type="application/javascript"
22 src="../relations.js"></script>
23 <script type="application/javascript"
24 src="../name.js"></script>
26 <script type="application/javascript">
27 function doTest()
28 {
29 //////////////////////////////////////////////////////////////////////////
30 // HTML:a@href
32 var obj = {
33 role: ROLE_LINK,
34 states: STATE_LINKED,
35 actions: "jump",
36 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText, nsIAccessibleHyperLink ],
37 children: [ // all kids inherits linked state and jump action
38 {
39 role: ROLE_TEXT_LEAF,
40 states: STATE_LINKED,
41 actions: "jump"
42 }
43 ]
44 };
45 testElm("a_href", obj);
47 //////////////////////////////////////////////////////////////////////////
48 // HTML:a no @href
50 obj = {
51 todo_role: ROLE_TEXT_CONTAINER,
52 absentStates: STATE_LINKED,
53 actions: null,
54 children: [
55 {
56 role: ROLE_TEXT_LEAF,
57 absentStates: STATE_LINKED,
58 actions: null
59 }
60 ]
61 };
62 testElm("a_nohref", obj);
64 //////////////////////////////////////////////////////////////////////////
65 // HTML:abbr contained by HTML:td
67 obj = {
68 role: ROLE_CELL,
69 attributes: { abbr: "WWW" },
70 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ],
71 children: [
72 {
73 role: ROLE_TEXT_CONTAINER,
74 children: [ { role: ROLE_TEXT_LEAF } ]
75 }
76 ]
77 };
78 testElm("td_abbr", obj);
80 //////////////////////////////////////////////////////////////////////////
81 // HTML:address
83 obj = {
84 todo_role: ROLE_PARAGRAPH,
85 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ],
86 };
87 testElm("address", obj);
89 //////////////////////////////////////////////////////////////////////////
90 // HTML:area@href
92 obj = {
93 role: ROLE_LINK,
94 states: STATE_LINKED,
95 actions: "jump",
96 interfaces: [ nsIAccessibleHyperLink ],
97 children: []
98 };
99 testElm(getAccessible("imgmap").firstChild, obj);
101 //////////////////////////////////////////////////////////////////////////
102 // HTML:area no @href
104 obj = {
105 todo_role: "ROLE_SHAPE",
106 absentStates: STATE_LINKED,
107 children: []
108 };
109 testElm(getAccessible("imgmap").lastChild, obj);
111 //////////////////////////////////////////////////////////////////////////
112 // HTML:article
113 obj = {
114 role: ROLE_DOCUMENT,
115 states: STATE_READONLY,
116 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ],
117 };
118 testElm("article", obj);
120 //////////////////////////////////////////////////////////////////////////
121 // HTML:aside
122 obj = {
123 role: ROLE_NOTE,
124 attributes: { "xml-roles": "complementary" },
125 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
126 };
127 testElm("aside", obj);
129 //////////////////////////////////////////////////////////////////////////
130 obj = { // HTML:audio
131 role: ROLE_GROUPING
132 };
133 testElm("audio", obj);
135 //////////////////////////////////////////////////////////////////////////
136 obj = { // HTML:b contained by paragraph
137 role: ROLE_PARAGRAPH,
138 textAttrs: {
139 0: { },
140 6: { "font-weight": kBoldFontWeight }
141 },
142 children: [
143 { role: ROLE_TEXT_LEAF }, // plain text
144 { role: ROLE_TEXT_LEAF } // HTML:b text
145 ]
146 }
147 testElm("b_container", obj);
149 //////////////////////////////////////////////////////////////////////////
150 obj = { // HTML:bdi contained by paragraph
151 role: ROLE_PARAGRAPH,
152 todo_textAttrs: {
153 0: { },
154 5: { "writing-mode": "rl" },
155 8: { }
156 },
157 children: [
158 { role: ROLE_TEXT_LEAF }, // plain text
159 { role: ROLE_TEXT_LEAF }, // HTML:bdi text
160 { role: ROLE_TEXT_LEAF } // plain text
161 ]
162 }
163 testElm("bdi_container", obj);
165 //////////////////////////////////////////////////////////////////////////
166 // HTML:bdo contained by paragraph
168 obj = {
169 role: ROLE_PARAGRAPH,
170 todo_textAttrs: {
171 0: { },
172 6: { "writing-mode": "rl" }
173 },
174 children: [
175 { role: ROLE_TEXT_LEAF }, // plain text
176 ]
177 }
178 testElm("bdo_container", obj);
180 //////////////////////////////////////////////////////////////////////////
181 // HTML:blockquote
183 obj = {
184 role: ROLE_SECTION,
185 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ],
186 children: [ { role: ROLE_PARAGRAPH } ]
187 };
188 testElm("blockquote", obj);
190 //////////////////////////////////////////////////////////////////////////
191 // HTML:br
193 obj = {
194 role: ROLE_PARAGRAPH,
195 children: [ { role: ROLE_WHITESPACE } ]
196 };
197 testElm("br_container", obj);
199 //////////////////////////////////////////////////////////////////////////
200 obj = { // HTML:button
201 role: ROLE_PUSHBUTTON,
202 absentStates: STATE_DEFAULT,
203 actions: "press",
204 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
205 };
206 testElm("button", obj);
208 //////////////////////////////////////////////////////////////////////////
209 // HTML:button@type="submit" (default button)
211 obj = {
212 role: ROLE_PUSHBUTTON,
213 states: STATE_DEFAULT,
214 actions: "press"
215 };
216 testElm("button_default", obj);
218 //////////////////////////////////////////////////////////////////////////
219 // HTML:canvas
221 obj = {
222 role: ROLE_CANVAS
223 };
224 testElm("canvas", obj);
226 //////////////////////////////////////////////////////////////////////////
227 // HTML:caption under table
229 obj = {
230 role: ROLE_TABLE,
231 relations: {
232 RELATION_LABELLED_BY: "caption"
233 },
234 interfaces: nsIAccessibleTable,
235 children: [
236 {
237 role: ROLE_CAPTION,
238 relations: {
239 RELATION_LABEL_FOR: "table"
240 },
241 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
242 },
243 { // td inside thead
244 role: ROLE_ROW,
245 children: [
246 {
247 role: ROLE_COLUMNHEADER,
248 interfaces: [ nsIAccessibleTableCell, nsIAccessibleText, nsIAccessibleHyperText ]
249 },
250 { role: ROLE_COLUMNHEADER }
251 ]
252 },
253 { // td inside tbody
254 role: ROLE_ROW,
255 children: [
256 {
257 role: ROLE_ROWHEADER,
258 interfaces: [ nsIAccessibleTableCell, nsIAccessibleText, nsIAccessibleHyperText ]
259 },
260 {
261 role: ROLE_CELL,
262 interfaces: [ nsIAccessibleTableCell, nsIAccessibleText, nsIAccessibleHyperText ]
263 }
264 ]
265 },
266 { // td inside tfoot
267 role: ROLE_ROW
268 }
269 ]
270 };
271 testElm("table", obj);
273 //////////////////////////////////////////////////////////////////////////
274 // HTML:cite contained by paragraph
276 obj = {
277 role: ROLE_PARAGRAPH,
278 textAttrs: {
279 0: { },
280 6: { "font-style": "italic" }
281 },
282 children: [
283 { role: ROLE_TEXT_LEAF }, // plain text
284 { role: ROLE_TEXT_LEAF } // HTML:cite text
285 ]
286 };
287 testElm("cite_container", obj);
289 //////////////////////////////////////////////////////////////////////////
290 // HTML:code contained by paragraph
292 obj = {
293 role: ROLE_PARAGRAPH,
294 textAttrs: {
295 0: { },
296 6: { "font-family": kMonospaceFontFamily }
297 },
298 children: [
299 { role: ROLE_TEXT_LEAF }, // plain text
300 { role: ROLE_TEXT_LEAF } // HTML:code text
301 ]
302 };
303 testElm("code_container", obj);
305 //////////////////////////////////////////////////////////////////////////
306 // HTML:col and HTML:colgroup under table
308 obj =
309 { TABLE : [
310 { ROW :[
311 { role: ROLE_CELL },
312 { role: ROLE_CELL },
313 { role: ROLE_CELL }
314 ] }
315 ] };
316 testElm("colNcolgroup_table", obj);
318 //////////////////////////////////////////////////////////////////////////
319 // HTML:data contained by paragraph
321 obj =
322 { PARAGRAPH: [
323 { TEXT_LEAF: [] } // HTML:data text
324 ] };
325 testElm("data_container", obj);
327 //////////////////////////////////////////////////////////////////////////
328 // HTML:datalist associated with input
330 todo(false, "datalist and summary tree hierarchy test missed");
332 //////////////////////////////////////////////////////////////////////////
333 // HTML:dd, HTML:dl, HTML:dd
335 obj = {
336 role: ROLE_DEFINITION_LIST,
337 states: STATE_READONLY,
338 children: [ // dl
339 {
340 role: ROLE_TERM,
341 states: STATE_READONLY,
342 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ],
343 children: [ // dt
344 { role: ROLE_TEXT_LEAF }
345 ]
346 },
347 {
348 role: ROLE_DEFINITION,
349 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ],
350 children: [ // dd
351 { role: ROLE_TEXT_LEAF }
352 ]
353 }
354 ]
355 };
356 testElm("dl", obj);
358 //////////////////////////////////////////////////////////////////////////
359 // HTML:del contained by paragraph
361 obj = {
362 role: ROLE_PARAGRAPH,
363 textAttrs: {
364 0: { },
365 6: { "text-line-through-style": "solid" }
366 },
367 children: [
368 { role: ROLE_TEXT_LEAF }, // plain text
369 { role: ROLE_TEXT_LEAF } // HTML:del text
370 ]
371 };
372 testElm("del_container", obj);
374 //////////////////////////////////////////////////////////////////////////
375 // HTML:details
377 todo(isAccessible("details"), "details element is not accessible");
379 //////////////////////////////////////////////////////////////////////////
380 // HTML:dfn contained by paragraph
382 obj = {
383 role: ROLE_PARAGRAPH,
384 textAttrs: {
385 0: { "font-style": "italic" },
386 12: { }
387 },
388 children: [
389 { role: ROLE_TEXT_LEAF }, // HTML:dfn text
390 { role: ROLE_TEXT_LEAF } // plain text
391 ]
392 };
393 testElm("dfn_container", obj);
395 //////////////////////////////////////////////////////////////////////////
396 // HTML:dialog
398 todo(isAccessible("dialog"), "dialog element is not accessible");
400 //////////////////////////////////////////////////////////////////////////
401 // HTML:div
403 obj = {
404 role: ROLE_SECTION,
405 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ],
406 children: [
407 { role: ROLE_TEXT_LEAF } // plain text
408 ]
409 };
410 testElm("div", obj);
412 //////////////////////////////////////////////////////////////////////////
413 // HTML:em in a paragraph
415 obj = {
416 role: ROLE_PARAGRAPH,
417 textAttrs: {
418 0: { },
419 6: { "font-style": "italic" }
420 },
421 children: [
422 { role: ROLE_TEXT_LEAF }, // plain text
423 { role: ROLE_TEXT_LEAF } // HTML:em text
424 ]
425 };
426 testElm("em_container", obj);
428 //////////////////////////////////////////////////////////////////////////
429 // HTML:embed (windowless and windowed plugins)
431 if (WIN) {
432 obj = {
433 role: ROLE_EMBEDDED_OBJECT,
434 states: STATE_UNAVAILABLE
435 };
437 testElm("embed_plugin_windowless", obj);
439 obj = {
440 role: ROLE_EMBEDDED_OBJECT,
441 absentStates: STATE_UNAVAILABLE
442 };
443 testElm("embed_plugin_windowed", obj);
444 }
446 //////////////////////////////////////////////////////////////////////////
447 // HTML:fieldset and HTML:legend
449 obj = {
450 role: ROLE_GROUPING,
451 relations: {
452 RELATION_LABELLED_BY: "legend"
453 },
454 children: [
455 {
456 role: ROLE_LABEL,
457 relations: {
458 RELATION_LABEL_FOR: "fieldset"
459 },
460 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
461 },
462 {
463 role: ROLE_ENTRY
464 }
465 ]
466 };
467 testElm("fieldset", obj);
469 //////////////////////////////////////////////////////////////////////////
470 // HTML:figure and HTML:figcaption
472 obj = {
473 role: ROLE_FIGURE,
474 attributes: { "xml-roles": "figure" },
475 relations: {
476 RELATION_LABELLED_BY: "figcaption"
477 },
478 children: [
479 { role: ROLE_GRAPHIC },
480 {
481 role: ROLE_CAPTION,
482 relations: {
483 RELATION_LABEL_FOR: "figure"
484 },
485 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
486 }
487 ]
488 };
489 testElm("figure", obj);
491 //////////////////////////////////////////////////////////////////////////
492 // HTML:footer
494 obj = {
495 role: ROLE_FOOTER,
496 attributes: { "xml-roles": "contentinfo" },
497 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
498 };
499 testElm("footer", obj);
501 obj = {
502 role: ROLE_FOOTER,
503 absentAttributes: { "xml-roles": "contentinfo" },
504 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
505 };
506 testElm("footer_in_article", obj);
507 testElm("footer_in_section", obj);
509 //////////////////////////////////////////////////////////////////////////
510 // HTML:form
512 obj = {
513 role: ROLE_FORM
514 };
515 testElm("form", obj);
517 //////////////////////////////////////////////////////////////////////////
518 // // HTML:frameset, HTML:frame and HTML:iframe
520 obj = {
521 INTERNAL_FRAME: [ { // HTML:iframe
522 DOCUMENT: [ {
523 INTERNAL_FRAME: [ { // HTML:frame
524 DOCUMENT: [ { role: ROLE_TEXT_LEAF} ]
525 } ]
526 } ]
527 } ]
528 };
529 testElm("frameset_container", obj);
531 //////////////////////////////////////////////////////////////////////////
532 // HTML:h1, HTML:h2, HTML:h3, HTML:h4, HTML:h5, HTML:h6
534 obj = {
535 role: ROLE_HEADING,
536 attributes: { "level": "1" },
537 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
538 };
539 testElm("h1", obj);
541 obj = {
542 role: ROLE_HEADING,
543 attributes: { "level": "2" },
544 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
545 };
546 testElm("h2", obj);
548 obj = {
549 role: ROLE_HEADING,
550 attributes: { "level": "3" },
551 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
552 };
553 testElm("h3", obj);
555 obj = {
556 role: ROLE_HEADING,
557 attributes: { "level": "4" },
558 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
559 };
560 testElm("h4", obj);
562 obj = {
563 role: ROLE_HEADING,
564 attributes: { "level": "5" },
565 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
566 };
567 testElm("h5", obj);
569 obj = {
570 role: ROLE_HEADING,
571 attributes: { "level": "6" },
572 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
573 };
574 testElm("h6", obj);
576 //////////////////////////////////////////////////////////////////////////
577 // HTML:header
579 obj = {
580 role: ROLE_HEADER,
581 attributes: { "xml-roles": "banner" },
582 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
583 };
584 testElm("header", obj);
586 obj = {
587 role: ROLE_HEADER,
588 absentAttributes: { "xml-roles": "banner" },
589 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
590 };
591 testElm("header_in_article", obj);
592 testElm("header_in_section", obj);
594 //////////////////////////////////////////////////////////////////////////
595 // HTML:hr
597 obj = {
598 role: ROLE_SEPARATOR,
599 };
600 testElm("hr", obj);
602 //////////////////////////////////////////////////////////////////////////
603 obj = { // HTML:i contained by paragraph
604 role: ROLE_PARAGRAPH,
605 textAttrs: {
606 0: { },
607 6: { "font-style": "italic" }
608 },
609 children: [
610 { role: ROLE_TEXT_LEAF }, // plain text
611 { role: ROLE_TEXT_LEAF } // HTML:i text
612 ]
613 }
614 testElm("i_container", obj);
616 //////////////////////////////////////////////////////////////////////////
617 // HTML:img
619 obj = {
620 role: ROLE_GRAPHIC,
621 interfaces: [ nsIAccessibleImage ]
622 };
623 testElm("img", obj);
625 //////////////////////////////////////////////////////////////////////////
626 // HTML:input@type="button"
628 obj = {
629 role: ROLE_PUSHBUTTON,
630 absentStates: STATE_DEFAULT
631 };
632 testElm("input_button", obj);
634 //////////////////////////////////////////////////////////////////////////
635 // HTML:input@type="checkbox"
637 obj = {
638 role: ROLE_CHECKBUTTON,
639 states: STATE_CHECKABLE,
640 absentStates: STATE_CHECKED,
641 actions: "check"
642 };
643 testElm("input_checkbox", obj);
645 obj = {
646 role: ROLE_CHECKBUTTON,
647 states: STATE_CHECKABLE | STATE_CHECKED,
648 actions: "uncheck"
649 };
650 testElm("input_checkbox_true", obj);
652 //////////////////////////////////////////////////////////////////////////
653 // HTML:input@type="file"
655 obj = {
656 TEXT_CONTAINER: [
657 { role: ROLE_PUSHBUTTON },
658 { role: ROLE_LABEL }
659 ]
660 };
661 testElm("input_file", obj);
663 //////////////////////////////////////////////////////////////////////////
664 // HTML:input@type="image"
666 obj = {
667 role: ROLE_PUSHBUTTON,
668 absentStates: STATE_DEFAULT,
669 actions: "press"
670 };
671 testElm("input_image", obj);
672 testElm("input_submit", obj);
674 obj = {
675 role: ROLE_PUSHBUTTON,
676 actions: "press",
677 states: STATE_DEFAULT
678 };
679 testElm("input_image_default", obj);
680 testElm("input_submit_default", obj);
682 //////////////////////////////////////////////////////////////////////////
683 // HTML:input@type="number" and etc
685 obj = {
686 role: ROLE_SPINBUTTON,
687 interfaces: [ nsIAccessibleValue ],
688 children: [
689 {
690 role: ROLE_ENTRY,
691 extraStates: EXT_STATE_EDITABLE | EXT_STATE_SINGLE_LINE,
692 actions: "activate",
693 interfaces: [ nsIAccessibleText, nsIAccessibleEditableText ],
694 children: [
695 { role: ROLE_TEXT_LEAF }
696 ]
697 },
698 {
699 role: ROLE_PUSHBUTTON,
700 actions: "press"
701 },
702 {
703 role: ROLE_PUSHBUTTON,
704 actions: "press"
705 }
706 ]
707 };
708 testElm("input_number", obj);
710 //////////////////////////////////////////////////////////////////////////
711 // HTML:input@type="text" and etc
713 obj = {
714 role: ROLE_ENTRY,
715 extraStates: EXT_STATE_EDITABLE | EXT_STATE_SINGLE_LINE,
716 actions: "activate",
717 interfaces: [ nsIAccessibleText, nsIAccessibleEditableText ],
718 children: [
719 { role: ROLE_TEXT_LEAF }
720 ]
721 };
722 testElm("input_email", obj);
723 testElm("input_search", obj);
724 testElm("input_tel", obj);
725 testElm("input_text", obj);
726 testElm("input_url", obj);
728 //////////////////////////////////////////////////////////////////////////
729 // HTML:input@type="password"
731 obj = {
732 role: ROLE_PASSWORD_TEXT,
733 states: STATE_PROTECTED,
734 extraStates: EXT_STATE_EDITABLE,
735 actions: "activate",
736 children: [
737 {
738 role: ROLE_TEXT_LEAF
739 }
740 ]
741 };
742 testElm("input_password", obj);
743 ok(getAccessible("input_password").firstChild.name != "44",
744 "text leaf for password shouldn't have its real value as its name!");
746 obj = {
747 role: ROLE_PASSWORD_TEXT,
748 states: STATE_PROTECTED | STATE_READONLY,
749 actions: "activate",
750 children: [
751 {
752 role: ROLE_TEXT_LEAF
753 }
754 ]
755 };
756 testElm("input_password_readonly", obj);
757 ok(getAccessible("input_password_readonly").firstChild.name != "44",
758 "text leaf for password shouldn't have its real value as its name!");
760 //////////////////////////////////////////////////////////////////////////
761 // HTML:input@type="radio"
763 obj = {
764 role: ROLE_RADIOBUTTON,
765 states: STATE_CHECKABLE,
766 absentStates: STATE_CHECKED,
767 actions: "select"
768 };
769 testElm("input_radio", obj);
771 obj = {
772 role: ROLE_RADIOBUTTON,
773 states: STATE_CHECKABLE | STATE_CHECKED,
774 actions: "select"
775 };
776 testElm("input_radio_true", obj);
778 //////////////////////////////////////////////////////////////////////////
779 // HTML:input@type="range"
781 obj = {
782 role: ROLE_SLIDER
783 };
784 testElm("input_range", obj);
786 //////////////////////////////////////////////////////////////////////////
787 // HTML:input@type="reset"
789 obj = {
790 role: ROLE_PUSHBUTTON,
791 actions: "press",
792 absentStates: STATE_DEFAULT
793 };
794 testElm("input_reset", obj);
796 //////////////////////////////////////////////////////////////////////////
797 // HTML:ins contained by paragraph
799 obj = {
800 role: ROLE_PARAGRAPH,
801 textAttrs: {
802 0: { },
803 6: { "text-underline-style": "solid" }
804 },
805 children: [
806 { role: ROLE_TEXT_LEAF }, // plain text
807 { role: ROLE_TEXT_LEAF } // HTML:ins text
808 ]
809 };
810 testElm("ins_container", obj);
812 //////////////////////////////////////////////////////////////////////////
813 // HTML:kbd contained by paragraph
815 obj = {
816 role: ROLE_PARAGRAPH,
817 textAttrs: {
818 0: { },
819 6: { "font-family": kMonospaceFontFamily }
820 },
821 children: [
822 { role: ROLE_TEXT_LEAF }, // plain text
823 { role: ROLE_TEXT_LEAF } // HTML:kbd text
824 ]
825 };
826 testElm("kbd_container", obj);
828 //////////////////////////////////////////////////////////////////////////
829 // HTML:keygen
831 obj = {
832 role: ROLE_COMBOBOX,
833 states: STATE_COLLAPSED | STATE_HASPOPUP,
834 extraStates: EXT_STATE_EXPANDABLE,
835 actions: "open",
836 children: [
837 { COMBOBOX_LIST: [
838 { role: ROLE_COMBOBOX_OPTION }, // high grade
839 { role: ROLE_COMBOBOX_OPTION } // medium grade
840 ] }
841 ]
842 };
843 testElm("keygen", obj);
845 //////////////////////////////////////////////////////////////////////////
846 // HTML:label
848 obj = {
849 role: ROLE_LABEL,
850 todo_relations: {
851 RELATION_LABEL_FOR: "label_input"
852 },
853 children: [
854 { role: ROLE_TEXT_LEAF }, // plain text
855 {
856 role: ROLE_ENTRY,
857 relations: {
858 RELATION_LABELLED_BY: "label"
859 }
860 }
861 ]
862 };
863 testElm("label", obj);
865 obj = {
866 role: ROLE_LABEL,
867 relations: {
868 RELATION_LABEL_FOR: "label_for_input"
869 }
870 };
871 testElm("label_for", obj);
873 obj = {
874 role: ROLE_ENTRY,
875 relations: {
876 RELATION_LABELLED_BY: "label_for"
877 }
878 };
879 testElm("label_for_input", obj);
881 //////////////////////////////////////////////////////////////////////////
882 // HTML:ul, HTML:ol, HTML:li
884 obj = { // ul or ol
885 role: ROLE_LIST,
886 states: STATE_READONLY,
887 children: [
888 { // li
889 role: ROLE_LISTITEM,
890 states: STATE_READONLY,
891 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
892 }
893 ]
894 };
895 testElm("ul", obj);
896 testElm("ol", obj);
898 //////////////////////////////////////////////////////////////////////////
899 // HTML:link
901 ok(!isAccessible("link"), "link element is not accessible");
903 //////////////////////////////////////////////////////////////////////////
904 // HTML:main
906 obj = {
907 todo_role: ROLE_GROUPING,
908 attributes: { "xml-roles": "main" },
909 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
910 };
911 testElm("main", obj);
913 //////////////////////////////////////////////////////////////////////////
914 // HTML:map
916 ok(!isAccessible("map_imagemap"),
917 "map element is not accessible if used as an image map");
919 obj = {
920 role: ROLE_TEXT_CONTAINER
921 };
922 testElm("map", obj);
924 //////////////////////////////////////////////////////////////////////////
925 // HTML:mark contained by paragraph
927 obj = {
928 role: ROLE_PARAGRAPH,
929 textAttrs: {
930 0: { },
931 6: { "background-color": "rgb(255, 255, 0)" }
932 },
933 children: [
934 { role: ROLE_TEXT_LEAF }, // plain text
935 { role: ROLE_TEXT_LEAF } // HTML:mark text
936 ]
937 };
938 testElm("mark_container", obj);
940 //////////////////////////////////////////////////////////////////////////
941 // HTML:math
943 obj = {
944 role: ROLE_EQUATION
945 };
946 testElm("math", obj);
948 //////////////////////////////////////////////////////////////////////////
949 // HTML:menu
951 obj = {
952 todo_role: ROLE_MENUPOPUP
953 };
954 testElm("menu", obj);
956 //////////////////////////////////////////////////////////////////////////
957 // HTML:meter
959 todo(isAccessible("meter"), "meter element is not accessible");
961 //////////////////////////////////////////////////////////////////////////
962 // HTML:nav
964 obj = {
965 role: ROLE_SECTION,
966 attributes: { "xml-roles": "navigation" },
967 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
968 };
969 testElm("nav", obj);
971 //////////////////////////////////////////////////////////////////////////
972 // HTML:object (windowless and windowed plugins) and HTML:param
974 if (WIN) {
975 obj = {
976 role: ROLE_EMBEDDED_OBJECT,
977 states: STATE_UNAVAILABLE,
978 children: [ ] // no child for HTML:param
979 };
980 testElm("object_plugin_windowless", obj);
982 obj = {
983 role: ROLE_EMBEDDED_OBJECT,
984 absentStates: STATE_UNAVAILABLE
985 };
986 testElm("object_plugin_windowed", obj);
987 }
989 //////////////////////////////////////////////////////////////////////////
990 // HTML:select, HTML:optgroup and HTML:option
992 obj = { // HMTL:select@size > 1
993 role: ROLE_LISTBOX,
994 states: STATE_FOCUSABLE,
995 absentStates: STATE_MULTISELECTABLE,
996 interfaces: [ nsIAccessibleSelectable ],
997 children: [
998 { GROUPING: [ // HTML:optgroup
999 { role: ROLE_STATICTEXT },
1000 { role: ROLE_OPTION }, // HTML:option
1001 { role: ROLE_OPTION }
1002 ] },
1003 {
1004 role: ROLE_OPTION,
1005 states: STATE_FOCUSABLE,
1006 actions: "select",
1007 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
1008 }
1009 ]
1010 };
1011 testElm("select_listbox", obj);
1013 obj = { // HTML:select@multiple
1014 role: ROLE_LISTBOX,
1015 states: STATE_FOCUSABLE | STATE_MULTISELECTABLE,
1016 children: [
1017 { role: ROLE_OPTION },
1018 { role: ROLE_OPTION },
1019 { role: ROLE_OPTION }
1020 ]
1021 };
1022 testElm("select_listbox_multiselectable", obj);
1024 obj = { // HTML:select
1025 role: ROLE_COMBOBOX,
1026 states: STATE_FOCUSABLE,
1027 children: [
1028 {
1029 role: ROLE_COMBOBOX_LIST,
1030 children: [
1031 { role: ROLE_COMBOBOX_OPTION },
1032 { role: ROLE_COMBOBOX_OPTION },
1033 { role: ROLE_COMBOBOX_OPTION }
1034 ]
1035 }
1036 ]
1037 };
1038 testElm("select_combobox", obj);
1040 //////////////////////////////////////////////////////////////////////////
1041 // HTML:output
1043 obj = {
1044 role: ROLE_SECTION,
1045 attributes: { "live": "polite" },
1046 todo_relations: {
1047 RELATION_CONTROLLED_BY: "output_input"
1048 },
1049 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
1050 };
1051 testElm("output", obj);
1053 obj = {
1054 role: ROLE_ENTRY,
1055 relations: {
1056 RELATION_CONTROLLER_FOR: "output"
1057 }
1058 };
1059 testElm("output_input", obj);
1061 //////////////////////////////////////////////////////////////////////////
1062 // HTML:pre
1064 obj = {
1065 role: ROLE_PARAGRAPH,
1066 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
1067 };
1068 testElm("pre", obj);
1070 ///////////////////////////////////////////////////////////////////////////
1071 // HTML:progress
1073 obj = {
1074 role: ROLE_PROGRESSBAR,
1075 absentStates: STATE_MIXED,
1076 interfaces: [ nsIAccessibleValue ]
1077 };
1078 testElm("progress", obj);
1080 obj = {
1081 role: ROLE_PROGRESSBAR,
1082 states: STATE_MIXED
1083 };
1084 testElm("progress_indeterminate", obj);
1086 //////////////////////////////////////////////////////////////////////////
1087 // HTML:q
1089 obj = {
1090 role: ROLE_TEXT_CONTAINER,
1091 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ],
1092 children: [
1093 { role: ROLE_STATICTEXT }, // left quote
1094 { role: ROLE_TEXT_LEAF }, // quoted text
1095 { role: ROLE_STATICTEXT } // right quote
1096 ]
1097 };
1098 testElm("q", obj);
1100 //////////////////////////////////////////////////////////////////////////
1101 // HTML:ruby
1103 todo(isAccessible("ruby"), "ruby element is not accessible");
1105 //////////////////////////////////////////////////////////////////////////
1106 // HTML:s contained by paragraph
1108 obj = {
1109 role: ROLE_PARAGRAPH,
1110 textAttrs: {
1111 0: { },
1112 6: { "text-line-through-style": "solid" }
1113 },
1114 children: [
1115 { role: ROLE_TEXT_LEAF }, // plain text
1116 { role: ROLE_TEXT_LEAF } // HTML:i text
1117 ]
1118 };
1119 testElm("s_container", obj);
1121 //////////////////////////////////////////////////////////////////////////
1122 // HTML:samp contained by paragraph
1124 obj = {
1125 role: ROLE_PARAGRAPH,
1126 children: [
1127 { role: ROLE_TEXT_LEAF }, // plain text
1128 { role: ROLE_TEXT_LEAF } // HTML:samp text
1129 ]
1130 };
1131 testElm("samp_container", obj);
1133 //////////////////////////////////////////////////////////////////////////
1134 // HTML:section
1136 obj = {
1137 role: ROLE_SECTION,
1138 attributes: { "xml-roles": "region" },
1139 interfaces: [ nsIAccessibleText, nsIAccessibleHyperText ]
1140 };
1141 testElm("section", obj);
1143 //////////////////////////////////////////////////////////////////////////
1144 // HTML:small contained by paragraph
1146 obj = {
1147 role: ROLE_PARAGRAPH,
1148 textAttrs: {
1149 0: { },
1150 6: { "font-size": "10pt" }
1151 },
1152 children: [
1153 { role: ROLE_TEXT_LEAF }, // plain text
1154 { role: ROLE_TEXT_LEAF } // HTML:small text
1155 ]
1156 };
1157 testElm("small_container", obj);
1159 //////////////////////////////////////////////////////////////////////////
1160 // HTML:source
1162 ok(!isAccessible("source"), "source element is not accessible");
1164 //////////////////////////////////////////////////////////////////////////
1165 // HTML:span
1167 ok(!isAccessible("span"), "span element is not accessible");
1169 //////////////////////////////////////////////////////////////////////////
1170 // HTML:strong contained by paragraph
1172 obj = {
1173 role: ROLE_PARAGRAPH,
1174 children: [
1175 { role: ROLE_TEXT_LEAF }, // plain text
1176 { role: ROLE_TEXT_LEAF } // HTML:strong text
1177 ]
1178 };
1179 testElm("strong_container", obj);
1181 //////////////////////////////////////////////////////////////////////////
1182 // HTML:sub contained by paragraph
1184 obj = {
1185 role: ROLE_PARAGRAPH,
1186 textAttrs: {
1187 0: { },
1188 6: { "text-position": "sub" }
1189 },
1190 children: [
1191 { role: ROLE_TEXT_LEAF }, // plain text
1192 { role: ROLE_TEXT_LEAF } // HTML:sub text
1193 ]
1194 };
1195 testElm("sub_container", obj);
1197 //////////////////////////////////////////////////////////////////////////
1198 // HTML:sup contained by paragraph
1200 obj = {
1201 role: ROLE_PARAGRAPH,
1202 textAttrs: {
1203 0: { },
1204 6: { "text-position": "super" }
1205 },
1206 children: [
1207 { role: ROLE_TEXT_LEAF }, // plain text
1208 { role: ROLE_TEXT_LEAF } // HTML:sup text
1209 ]
1210 };
1211 testElm("sup_container", obj);
1213 //////////////////////////////////////////////////////////////////////////
1214 // HTML:svg
1216 obj = {
1217 todo_role: ROLE_GRAPHIC
1218 };
1219 testElm("svg", obj);
1221 //////////////////////////////////////////////////////////////////////////
1222 // HTML:textarea
1224 obj = {
1225 role: ROLE_ENTRY,
1226 extraStates: EXT_STATE_MULTI_LINE | EXT_STATE_EDITABLE,
1227 actions: "activate",
1228 interfaces: [ nsIAccessibleText, nsIAccessibleEditableText ]
1229 };
1230 testElm("textarea", obj);
1232 //////////////////////////////////////////////////////////////////////////
1233 // HTML:time
1235 ok(!isAccessible("time"), "time element is not accessible");
1237 //////////////////////////////////////////////////////////////////////////
1238 // HTML:u contained by paragraph
1240 obj = {
1241 role: ROLE_PARAGRAPH,
1242 textAttrs: {
1243 0: { },
1244 6: { "text-underline-style" : "solid" }
1245 },
1246 children: [
1247 { role: ROLE_TEXT_LEAF }, // plain text
1248 { role: ROLE_TEXT_LEAF } // HTML:u text
1249 ]
1250 };
1251 testElm("u_container", obj);
1253 //////////////////////////////////////////////////////////////////////////
1254 // HTML:var contained by paragraph
1256 obj = {
1257 role: ROLE_PARAGRAPH,
1258 children: [
1259 { role: ROLE_TEXT_LEAF }, // plain text
1260 { role: ROLE_TEXT_LEAF }, // HTML:var text
1261 { role: ROLE_TEXT_LEAF }, // plain text
1262 { role: ROLE_TEXT_LEAF } // HTML:var text
1263 ]
1264 };
1265 testElm("var_container", obj);
1267 //////////////////////////////////////////////////////////////////////////
1268 obj = { // HTML:video
1269 role: ROLE_GROUPING
1270 };
1271 testElm("video", obj);
1273 SimpleTest.finish();
1274 }
1276 SimpleTest.waitForExplicitFinish();
1277 addA11yLoadEvent(doTest);
1278 setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);
1280 </script>
1281 </head>
1282 <body>
1284 <a target="_blank"
1285 title="Implement figure and figcaption accessibility"
1286 href="https://bugzilla.mozilla.org/show_bug.cgi?id=658272">
1287 Mozilla Bug 658272
1288 </a><br/>
1289 <p id="display"></p>
1290 <div id="content" style="display: none"></div>
1291 <pre id="test">
1292 </pre>
1294 <a id="a_href" href="www.mozilla.com">mozilla site</a>
1295 <a id="a_nohref">anchor</a>
1296 <table>
1297 <tr>
1298 <td id="td_abbr"><abbr title="World Wide Web">WWW</abbr></td>
1299 </tr>
1300 </table>
1301 <address id="address">
1302 Mozilla Foundation<br>
1303 1981 Landings Drive<br>
1304 Building K<br>
1305 Mountain View, CA 94043-0801<br>
1306 USA
1307 </address>
1309 <map name="atoz_map">
1310 <area id="area_href"
1311 href="http://www.bbc.co.uk/radio4/atoz/index.shtml#b"
1312 coords="17,0,30,14" alt="b" shape="rect">
1313 <area id="area_nohref"
1314 coords="0,0,13,14" alt="a" shape="rect">
1315 </map>
1316 <img id="imgmap" width="447" height="15"
1317 usemap="#atoz_map"
1318 src="../letters.gif">
1320 <article id="article">A document</article>
1321 <audio id="audio" controls="true">
1322 <source id="source" src="../bug461281.ogg" type="video/ogg">
1323 </audio>
1325 <aside id="aside">
1326 <p>Some content related to an <article></p>
1327 </aside>
1329 <p id="b_container">normal<b>bold</b></p>
1330 <p id="bdi_container">User <bdi>إيان</bdi>: 90 points</p>
1331 <p id="bdo_container"><bdo dir="rtl">This text will go right to left.</bdo></p>
1333 <blockquote id="blockquote" cite="http://developer.mozilla.org">
1334 <p>This is a quotation taken from the Mozilla Developer Center.</p>
1335 </blockquote>
1337 <!-- two BRs, one will be eaten -->
1338 <p id="br_container"><br><br></p>
1340 <button id="button">button</button>
1341 <form>
1342 <button id="button_default" type="submit">button</button>
1343 </form>
1345 <canvas id="canvas"></canvas>
1347 <table id="table">
1348 <caption id="caption">caption</caption>
1349 <thead>
1350 <tr>
1351 <th>col1</th><th>col2</th>
1352 </tr>
1353 </thead>
1354 <tbody>
1355 <tr>
1356 <th>col1</th><td>cell2</td>
1357 </tr>
1358 </tbody>
1359 <tfoot>
1360 <tr>
1361 <td>cell5</td><td>cell6</td>
1362 </tr>
1363 </tfoot>
1364 </table>
1366 <p id="cite_container">normal<cite>cite</cite></p>
1367 <p id="code_container">normal<code>code</code></p>
1369 <table id="colNcolgroup_table">
1370 <colgroup>
1371 <col>
1372 <col span="2">
1373 </colgroup>
1374 <tr>
1375 <td>Lime</td>
1376 <td>Lemon</td>
1377 <td>Orange</td>
1378 </tr>
1379 </table>
1381 <p id="data_container"><data value="8">Eight</data></p>
1383 <datalist id="datalist">
1384 <summary id="summary">details</summary>
1385 <option>Paris</option>
1386 <option>San Francisco</option>
1387 </datalist>
1388 <input id="autocomplete_datalist" list="datalist">
1390 <dl id="dl">
1391 <dt>item1</dt><dd>description</dd>
1392 </dl>
1394 <p id="del_container">normal<del>Removed</del></p>
1396 <details id="details" open="open">
1397 <summary>Information</summary>
1398 <p>If your browser supports this element, it should allow you to expand and collapse these details.</p>
1399 </details>
1401 <p id="dfn_container"><dfn id="def-internet">The Internet</dfn> is a global
1402 system of interconnected networks that use the Internet Protocol Suite (TCP/IP)
1403 to serve billions of users worldwide.</p>
1405 <dialog id="dialog" open="true">This is a dialog</dialog>
1407 <div id="div">div</div>
1409 <p id="em_container">normal<em>emphasis</em></p>
1411 <embed id="embed_plugin_windowless" type="application/x-test"
1412 width="300" height="300"></embed>
1413 <embed id="embed_plugin_windowed" type="application/x-test" wmode="window"
1414 width="300" height="300"></embed>
1416 <fieldset id="fieldset">
1417 <legend id="legend">legend</legend>
1418 <input />
1419 </fieldset>
1421 <figure id="figure">
1422 <img src="../moz.png" alt="An awesome picture">
1423 <figcaption id="figcaption">Caption for the awesome picture</figcaption>
1424 </figure>
1426 <footer id="footer">Some copyright info</footer>
1427 <article>
1428 <footer id="footer_in_article">Some copyright info</footer>
1429 </article>
1430 <section>
1431 <footer id="footer_in_section">Some copyright info</footer>
1432 </section>
1434 <form id="form"></form>
1436 <iframe id="frameset_container"
1437 src="data:text/html,<html><frameset><frame src='data:text/html,hi'></frame></frameset></html>">
1438 </iframe>
1440 <h1 id="h1">heading1</h1>
1441 <h2 id="h2">heading2</h2>
1442 <h3 id="h3">heading3</h3>
1443 <h4 id="h4">heading4</h4>
1444 <h5 id="h5">heading5</h5>
1445 <h6 id="h6">heading6</h6>
1447 <header id="header">A logo</header>
1448 <article>
1449 <header id="header_in_article">Not logo</header>
1450 </article>
1451 <section>
1452 <header id="header_in_section">Not logo</header>
1453 </section>
1455 <hr id="hr">
1456 <p id="i_container">normal<i>italic</i></p>
1457 <img id="img" src="../moz.png">
1459 <input id="input_button" type="button" value="Button">
1460 <input id="input_checkbox" type="checkbox">
1461 <input id="input_checkbox_true" type="checkbox" checked>
1462 <input id="input_file" type="file">
1463 <input id="input_image" type="image">
1464 <form>
1465 <input id="input_image_default" type="image">
1466 </form>
1467 <input id="input_submit" type="submit">
1468 <form>
1469 <input id="input_submit_default" type="submit">
1470 </form>
1471 <input id="input_number" type="number" value="44">
1472 <input id="input_text" type="text" value="hi">
1473 <input id="input_search" type="search" value="cats">
1474 <input id="input_email" type="email" value="me@mozilla.com">
1475 <input id="input_tel" type="tel" value="111.111.1111">
1476 <input id="input_url" type="url" value="www.mozilla.com">
1477 <input id="input_password" type="password" value="44">
1478 <input id="input_password_readonly" type="password" value="44" readonly>
1479 <input id="input_radio" type="radio">
1480 <input id="input_radio_true" type="radio" checked>
1481 <input id="input_range" type="range">
1482 <form>
1483 <input id="input_reset" type="reset">
1484 </form>
1486 <p id="ins_container">normal<ins>Inserted</ins></p>
1487 <p id="kbd_container">normal<kbd>cmd</kbd></p>
1488 <keygen id="keygen" name="RSA public key" challenge="123456789" keytype="RSA">
1490 <label id="label">label<input id="label_input"></label>
1491 <label id="label_for" for="label_for_input">label</label>
1492 <input id="label_for_input">
1494 <ul id="ul">
1495 <li>item1</li>
1496 </ul>
1497 <ol id="ol">
1498 <li>item1</li>
1499 </ol>
1501 <main id="main">main</main>
1503 <map id="map_imagemap" name="atoz_map">
1504 <area href="http://www.bbc.co.uk/radio4/atoz/index.shtml#b"
1505 coords="17,0,30,14" alt="b" shape="rect">
1506 <area href="http://www.bbc.co.uk/radio4/atoz/index.shtml#a"
1507 coords="0,0,13,14" alt="a" shape="rect">
1508 </map>
1509 <img id="imgmap" width="447" height="15"
1510 usemap="#atoz_map"
1511 src="../letters.gif">
1513 <map id="map" title="Navigation Bar" name="mapgroup">
1514 <p>
1515 [<a href="#how">Bypass navigation bar</a>]
1516 [<a href="home.html">Home</a>]
1517 </p>
1518 </map>
1520 <p id="mark_container">normal<mark>highlighted</mark></p>
1522 <math id="math">
1523 <mrow>
1524 <mrow>
1525 <msup>
1526 <mi>a</mi>
1527 <mn>2</mn>
1528 </msup>
1529 <mo>+</mo>
1530 <msup>
1531 <mi>b</mi>
1532 <mn>2</mn>
1533 </msup>
1534 </mrow>
1535 <mo>=</mo>
1536 <msup>
1537 <mi>c</mi>
1538 <mn>2</mn>
1539 </msup>
1540 </mrow>
1541 </math>
1543 <menu id="menu" type="toolbar">
1544 <li>
1545 <menu label="File">
1546 <button type="button" onclick="new()">New...</button>
1547 <button type="button" onclick="save()">Save...</button>
1548 </menu>
1549 </li>
1550 <li>
1551 <menu label="Edit">
1552 <button type="button" onclick="cut()">Cut...</button>
1553 <button type="button" onclick="copy()">Copy...</button>
1554 <button type="button" onclick="paste()">Paste...</button>
1555 </menu>
1556 </li>
1557 </menu>
1559 <meter id="meter" min="0" max="1000" low="300" high="700" value="200">200 Euro</meter>
1561 <nav id="nav">
1562 <ul>
1563 <li><a href="#">Home</a></li>
1564 <li><a href="#">About</a></li>
1565 <li><a href="#">Contact</a></li>
1566 </ul>
1567 </nav>
1569 <object id="object_plugin_windowless" type="application/x-test"
1570 width="300" height="300">
1571 <param name="foo" value="bar">
1572 </object>
1573 <object id="object_plugin_windowed" type="application/x-test" wmode="window"
1574 width="300" height="300"></object>
1576 <select id="select_listbox" size="4">
1577 <optgroup label="Colors">
1578 <option>Red</option>
1579 <option>Blue</option>
1580 </optgroup>
1581 <option>Animal</option>
1582 </select>
1584 <select id="select_listbox_multiselectable" multiple>
1585 <option>Red</option>
1586 <option>Blue</option>
1587 <option>Green</option>
1588 </select>
1590 <select id="select_combobox">
1591 <option>Red</option>
1592 <option>Blue</option>
1593 <option>Green</option>
1594 </select>
1596 <input id="output_input">
1597 <output id="output" for="output_input"></output>
1599 <pre id="pre">pre</pre>
1601 <progress id="progress" min="0" value="21" max="42"></progress>
1602 <progress id="progress_indeterminate"></progress>
1604 <q id="q" cite="http://en.wikipedia.org/wiki/Kenny_McCormick#Cultural_impact">
1605 Oh my God, they killed Kenny!
1606 </q>
1608 <ruby id="ruby">
1609 漢 <rp>(</rp><rt>Kan</rt><rp>)</rp>
1610 字 <rp>(</rp><rt>ji</rt><rp>)</rp>
1611 </ruby>
1613 <p id="s_container">normal<s>striked</s></p>
1614 <p id="samp_container">normal<samp>sample</samp></p>
1615 <section id="section">section</section>
1616 <p id="small_container">normal<small>small</small></p>
1617 <span id="span"></span>
1618 <p id="strong_container">normal<strong>strong</strong></p>
1619 <p id="sub_container">normal<sub>sub</sub></p>
1620 <p id="sup_container">normal<sup>sup</sup></p>
1622 <svg id="svg"></svg>
1623 <textarea id="textarea"></textarea>
1625 <p>The concert took place on <time id="time" datetime="2001-05-15 19:00">May 15</time></p>
1626 <p id="u_container">normal<u>underline</u></p>
1627 <p id="var_container">An equation: <var>x</var> = <var>y</var></p>
1629 <video id="video" controls="true">
1630 <source id="source" src="../bug461281.ogg" type="video/ogg">
1631 </video>
1633 </video>
1634 </body>
1635 </html>