Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: third_party/WebKit/LayoutTests/custom-elements/spec/report-the-exception.html

Issue 2443543002: createElement should not transmit exceptions but report them. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <title>Custom Elements: report the exception</title> 2 <title>Custom Elements: report the exception</title>
3 <script src="../../resources/testharness.js"></script> 3 <script src="../../resources/testharness.js"></script>
4 <script src="../../resources/testharnessreport.js"></script> 4 <script src="../../resources/testharnessreport.js"></script>
5 <script src="resources/custom-elements-helpers.js"></script> 5 <script src="resources/custom-elements-helpers.js"></script>
6 <body> 6 <body>
7 <!-- 7 <!--
8 The spec has two places where it says to [report the exception]: 8 The spec has two places where it says to [report the exception]:
9 9
10 1. In [create an element for a token], step 7. 10 1. In [create an element for a token], step 6.1
11 This can occur only when [create an element] is invoked from 11 This can occur when [create an element] is invoked from
12 [create an element for a token] with the synchronous custom elements flag 12 [create an element for a token] with the synchronous custom elements flag
13 set. The document parser uses this algorithm. 13 set, or from createElement.
14 2. In [invoke custom element reactions], step 2.1. 14 2. In [invoke custom element reactions], step 2.1.
15 15
16 There are different code paths when: 16 There are different code paths when:
17 1. Author script throws an exception that is rethrown. 17 1. Author script throws an exception that is rethrown.
18 2. The user agent throws an exception. 18 2. The user agent throws an exception.
19 19
20 This test contains 4 tests for the combination of the above 2x2. 20 This test contains tests for the combination of the above 2x2.
21 21
22 [create an element]: https://dom.spec.whatwg.org/#concept-create-element 22 [create an element]: https://dom.spec.whatwg.org/#concept-create-element
23 [create an element for a token]: https://html.spec.whatwg.org/multipage/syntax.h tml#create-an-element-for-the-token 23 [create an element for a token]: https://html.spec.whatwg.org/multipage/syntax.h tml#create-an-element-for-the-token
24 [invoke custom element reactions]: https://html.spec.whatwg.org/multipage/script ing.html#invoke-custom-element-reactions 24 [invoke custom element reactions]: https://html.spec.whatwg.org/multipage/script ing.html#invoke-custom-element-reactions
25 [report the exception]: https://html.spec.whatwg.org/multipage/webappapis.html#r eport-the-exception 25 [report the exception]: https://html.spec.whatwg.org/multipage/webappapis.html#r eport-the-exception
26 --> 26 -->
27 <template id="constructor-throws"> 27 <template id="constructor-throws">
28 <script> 28 <script>
29 'use strict'; 29 'use strict';
30 window.errors = []; 30 window.errors = [];
(...skipping 17 matching lines...) Expand all
48 const error = new Error(rethrowErrorMessage); 48 const error = new Error(rethrowErrorMessage);
49 error.name = rethrowErrorName; 49 error.name = rethrowErrorName;
50 throw error; 50 throw error;
51 } 51 }
52 }); 52 });
53 </script> 53 </script>
54 </template> 54 </template>
55 <template id="instantiate"> 55 <template id="instantiate">
56 <a-a></a-a> 56 <a-a></a-a>
57 </template> 57 </template>
58 <template id="createElement">
59 <script>
60 window.e = document.createElement('a-a');
61 </script>
62 </template>
58 <script> 63 <script>
59 'use strict'; 64 'use strict';
60 const rethrowErrorName = 'rethrown'; 65 const rethrowErrorName = 'rethrown';
61 const rethrowErrorMessage = 'check this is rethrown'; 66 const rethrowErrorMessage = 'check this is rethrown';
62 67
63 function assert_not_muted_error_event(error) { 68 function assert_not_muted_error_event(error) {
64 assert_not_equals(error, undefined, 'should fire error event'); 69 assert_not_equals(error, undefined, 'should fire error event');
65 // Report an error, 6. If script has muted errors, ... 70 // Report an error, 6. If script has muted errors, ...
66 // https://html.spec.whatwg.org/multipage/webappapis.html#report-the-error 71 // https://html.spec.whatwg.org/multipage/webappapis.html#report-the-error
67 assert_false(error.event === 'Script error.' 72 assert_false(error.event === 'Script error.'
68 && error.source === '' && error.lineno === 0 && error.colno === 0 73 && error.source === '' && error.lineno === 0 && error.colno === 0
69 && error.error === null, 74 && error.error === null,
70 'the error should not be muted.'); 75 'the error should not be muted.');
71 assert_false(!error.event, 'event (1st arg) should not be null'); 76 assert_false(!error.event, 'event (1st arg) should not be null');
72 assert_false(!error.source, 'source (2nd arg) should not be null'); 77 assert_false(!error.source, 'source (2nd arg) should not be null');
73 // The spec doesn't define valid values for lineno/colno. 78 // The spec doesn't define valid values for lineno/colno.
74 assert_false(!error.error, 'error (5th arg) should not be null'); 79 assert_false(!error.error, 'error (5th arg) should not be null');
75 } 80 }
76 81
77 function assert_rethrown_error_event(error) { 82 function assert_reported_error_event(error) {
78 assert_not_muted_error_event(error); 83 assert_not_muted_error_event(error);
79 assert_equals(error.error.name, rethrowErrorName); 84 assert_equals(error.error.name, rethrowErrorName);
80 assert_equals(error.error.message, rethrowErrorMessage); 85 assert_equals(error.error.message, rethrowErrorMessage);
81 } 86 }
82 87
83 const constructor_throws = 88 const constructor_throws =
84 document.getElementById('constructor-throws').innerHTML; 89 document.getElementById('constructor-throws').innerHTML;
85 const instantiate = document.getElementById('instantiate').innerHTML; 90 const instantiate = document.getElementById('instantiate').innerHTML;
91 const create_element = document.getElementById('createElement').innerHTML;
86 92
87 test_with_window((w) => { 93 test_with_window((w) => {
88 assert_rethrown_error_event(w.errors[0]); 94 assert_reported_error_event(w.errors[0]);
89 }, 'Document parser invokes the constructor that throws', 95 }, 'Document parser invokes the constructor that throws',
90 constructor_throws + instantiate); 96 constructor_throws + instantiate);
91 97
92 test_with_window((w) => { 98 test_with_window((w) => {
93 w.document.body.innerHTML = instantiate; 99 w.document.body.innerHTML = instantiate;
94 assert_rethrown_error_event(w.errors[0]); 100 assert_reported_error_event(w.errors[0]);
95 }, 'Upgrade reaction invokes the constructor that throws', 101 }, 'Upgrade reaction invokes the constructor that throws',
96 constructor_throws); 102 constructor_throws);
103
104 test_with_window((w) => {
105 assert_reported_error_event(w.errors[0]);
106 assert_true(
107 w.e instanceof w.HTMLUnknownElement,
108 'the created element should be HTMLUnknownElement');
109 }, 'createElement invokes the constructor that throws',
110 constructor_throws + create_element);
97 </script> 111 </script>
98 112
99 <!-- 113 <!--
100 Test when JavaScript returns without throwing errors, but the result is invalid 114 Test when JavaScript returns without throwing errors, but the result is invalid
101 and thus UA should [report the exception]. 115 and thus UA should [report the exception].
102 --> 116 -->
103 <template id="constructor-returns-bad-object"> 117 <template id="constructor-returns-bad-object">
104 <script> 118 <script>
105 'use strict'; 119 'use strict';
106 window.errors = []; 120 window.errors = [];
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 161
148 test_with_window((w) => { 162 test_with_window((w) => {
149 // "upgrade an element" 10, throw an InvalidStateError DOMException. 163 // "upgrade an element" 10, throw an InvalidStateError DOMException.
150 // https://html.spec.whatwg.org/multipage/scripting.html#upgrades 164 // https://html.spec.whatwg.org/multipage/scripting.html#upgrades
151 w.document.body.innerHTML = instantiate; 165 w.document.body.innerHTML = instantiate;
152 assert_invalid_state_dom_error_event(w.errors[0]); 166 assert_invalid_state_dom_error_event(w.errors[0]);
153 }, 'Upgrade reaction invokes the constructor that returns a bad object', 167 }, 'Upgrade reaction invokes the constructor that returns a bad object',
154 constructor_returns_bad_object); 168 constructor_returns_bad_object);
155 </script> 169 </script>
156 </body> 170 </body>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698