+2012-11-12 Erik Arvidsson <arv@chromium.org>
+
+ Replace DOMException TYPE_MISMATCH_ERR with TypeError
+ https://bugs.webkit.org/show_bug.cgi?id=101604
+
+ Reviewed by Adam Barth.
+
+ Update the tests to test for TypeError instead of DOMException with the TYPE_MISMATCH_ERR code.
+
+ * canvas/philip/tests/2d.drawImage.null.html:
+ * canvas/philip/tests/2d.imageData.put.null.html:
+ * canvas/philip/tests/2d.pattern.image.null.html:
+ * editing/selection/extend-expected.txt:
+ * fast/dom/Geolocation/argument-types-expected.txt:
+ * fast/dom/Geolocation/not-enough-arguments-expected.txt:
+ * fast/dom/Geolocation/script-tests/argument-types.js:
+ * fast/dom/HTMLSelectElement/select-selectedIndex-expected.txt:
+ * fast/dom/HTMLSelectElement/select-selectedIndex-multiple-expected.txt:
+ * fast/js/select-options-add-expected.txt:
+ * fast/mediastream/RTCIceCandidate-expected.txt:
+ * fast/mediastream/RTCPeerConnection-expected.txt:
+ * fast/mediastream/RTCSessionDescription-expected.txt:
+ * fast/mediastream/SessionDescription-expected.txt:
+ * fast/mediastream/peerconnection-addstream-expected.txt:
+ * fast/mediastream/peerconnection-iceoptions-expected.txt:
+ * fast/mediastream/peerconnection-iceoptions.html:
+ * fast/mediastream/peerconnection-removestream-expected.txt:
+ * media/encrypted-media/encrypted-media-syntax.html:
+ * media/video-test.js:
+ * platform/chromium/fast/dynamic/insertAdjacentElement-expected.txt:
+ * security/crypto-random-values-types-expected.txt:
+ * svg/dom/SVGTransformList-expected.txt:
+
2012-11-12 Joshua Bell <jsbell@chromium.org>
IndexedDB: storage/indexeddb/cursor-prev-no-duplicate.html is flaky
try { var _thrown = false;
ctx.drawImage(null, 0, 0);
-} catch (e) { if (e.code != DOMException.TYPE_MISMATCH_ERR) _fail("Failed assertion: expected exception of type TYPE_MISMATCH_ERR, got: "+e.message); _thrown = true; } finally { _assert(_thrown, "should throw exception of type TYPE_MISMATCH_ERR: ctx.drawImage(null, 0, 0)"); }
+} catch (e) { if (e.name != "TypeError") _fail("Failed assertion: expected exception of type TypeError, got: "+e.name); _thrown = true; } finally { _assert(_thrown, "should throw exception of type TypeError: ctx.drawImage(null, 0, 0)"); }
});
try { var _thrown = false;
ctx.putImageData(null, 0, 0);
-} catch (e) { if (e.code != DOMException.TYPE_MISMATCH_ERR) _fail("Failed assertion: expected exception of type TYPE_MISMATCH_ERR, got: "+e.message); _thrown = true; } finally { _assert(_thrown, "should throw exception of type TYPE_MISMATCH_ERR: ctx.putImageData(null, 0, 0)"); }
+} catch (e) { if (e.name != "TypeError") _fail("Failed assertion: expected exception of type TypeError, got: "+e.name); _thrown = true; } finally { _assert(_thrown, "should throw exception of type TypeError: ctx.putImageData(null, 0, 0)"); }
});
try { var _thrown = false;
ctx.createPattern(null, 'repeat');
-} catch (e) { if (e.code != DOMException.TYPE_MISMATCH_ERR) _fail("Failed assertion: expected exception of type TYPE_MISMATCH_ERR, got: "+e.message); _thrown = true; } finally { _assert(_thrown, "should throw exception of type TYPE_MISMATCH_ERR: ctx.createPattern(null, 'repeat')"); }
+} catch (e) { if (e.name != "TypeError") _fail("Failed assertion: expected exception of type TypeError, got: "+e.name); _thrown = true; } finally { _assert(_thrown, "should throw exception of type TypeError: ctx.createPattern(null, 'repeat')"); }
});
Success: s.extend(span2.firstChild, -1) raised Error: INDEX_SIZE_ERR: DOM Exception 1.
Success: window.getSelection() is b.
Success: window.getSelection() is arbaz.
-Success: s.extend() raised Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-Success: s.extend(null, 0) raised Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+Success: s.extend() raised TypeError: Type error.
+Success: s.extend(null, 0) raised TypeError: Type error.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS navigator.geolocation.getCurrentPosition() threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(undefined) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(null) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition({}) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(objectThrowingException) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS navigator.geolocation.getCurrentPosition() threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(undefined) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(null) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition({}) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(objectThrowingException) threw exception TypeError: Type error.
PASS navigator.geolocation.getCurrentPosition(emptyFunction) did not throw exception.
PASS navigator.geolocation.getCurrentPosition(Math.abs) did not throw exception.
PASS navigator.geolocation.getCurrentPosition(testRunner.setGeolocationPermission) did not throw exception.
-PASS navigator.geolocation.getCurrentPosition(true) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(42) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(Infinity) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(-Infinity) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition("string") threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS navigator.geolocation.getCurrentPosition(true) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(42) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(Infinity) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(-Infinity) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition("string") threw exception TypeError: Type error.
PASS navigator.geolocation.getCurrentPosition(emptyFunction, undefined) did not throw exception.
PASS navigator.geolocation.getCurrentPosition(emptyFunction, null) did not throw exception.
-PASS navigator.geolocation.getCurrentPosition(emptyFunction, {}) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(emptyFunction, objectThrowingException) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS navigator.geolocation.getCurrentPosition(emptyFunction, {}) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(emptyFunction, objectThrowingException) threw exception TypeError: Type error.
PASS navigator.geolocation.getCurrentPosition(emptyFunction, emptyFunction) did not throw exception.
PASS navigator.geolocation.getCurrentPosition(emptyFunction, Math.abs) did not throw exception.
PASS navigator.geolocation.getCurrentPosition(emptyFunction, testRunner.setGeolocationPermission) did not throw exception.
-PASS navigator.geolocation.getCurrentPosition(emptyFunction, true) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(emptyFunction, 42) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(emptyFunction, Infinity) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(emptyFunction, -Infinity) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS navigator.geolocation.getCurrentPosition(emptyFunction, "string") threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS navigator.geolocation.getCurrentPosition(emptyFunction, true) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(emptyFunction, 42) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(emptyFunction, Infinity) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(emptyFunction, -Infinity) threw exception TypeError: Type error.
+PASS navigator.geolocation.getCurrentPosition(emptyFunction, "string") threw exception TypeError: Type error.
PASS navigator.geolocation.getCurrentPosition(emptyFunction, undefined, undefined) did not throw exception.
PASS navigator.geolocation.getCurrentPosition(emptyFunction, undefined, null) did not throw exception.
PASS navigator.geolocation.getCurrentPosition(emptyFunction, undefined, {}) did not throw exception.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS window.navigator.geolocation.getCurrentPosition() threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS window.navigator.geolocation.watchPosition() threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS window.navigator.geolocation.getCurrentPosition() threw exception TypeError: Type error.
+PASS window.navigator.geolocation.watchPosition() threw exception TypeError: Type error.
PASS window.navigator.geolocation.clearWatch() threw exception TypeError: Not enough arguments.
PASS successfullyParsed is true
function test(expression, expressionShouldThrow, expectedException) {
if (expressionShouldThrow) {
if (expectedException)
- shouldThrow(expression, '(function() { return "' + expectedException + '"; })();');
+ shouldThrow(expression, '"' + expectedException + '"');
else
- shouldThrow(expression, '(function() { return "Error: TYPE_MISMATCH_ERR: DOM Exception 17"; })();');
+ shouldThrow(expression, '"TypeError: Type error"');
} else {
shouldNotThrow(expression);
}
PASS mySelect.options.length is 10
PASS mySelect.selectedIndex is -1
19) trying to set an element that's not an option: select element
-PASS mySelect.options[10] = mySelect; threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS mySelect.options[10] = mySelect; threw exception TypeError: Type error.
PASS mySelect.options.length is 10
PASS mySelect.selectedIndex is -1
20) trying to set a option element using an invalid index: negative infinity
PASS mySelect.options.length is 10
PASS mySelect.selectedIndex is 0
19) trying to set an element that's not an option: select element
-PASS mySelect.options[10] = mySelect; threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS mySelect.options[10] = mySelect; threw exception TypeError: Type error.
PASS mySelect.options.length is 10
PASS mySelect.selectedIndex is 0
20) trying to set a option element using an invalid index: negative infinity
PASS select1.options[2].textContent is 'C'
1.4 Add a non-Option element
-PASS select1.options.add(option1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select1.options.add(option1) threw exception TypeError: Type error.
PASS select1.options.length is 3
PASS select1.selectedIndex is 0
1.5 Add a non-element (string)
-PASS select1.options.add(option1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select1.options.add(option1) threw exception TypeError: Type error.
PASS select1.options.length is 3
PASS select1.selectedIndex is 0
1.6 Add a non-element (number)
-PASS select1.options.add(option1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select1.options.add(option1) threw exception TypeError: Type error.
PASS select1.options.length is 3
PASS select1.selectedIndex is 0
1.7 Add a non-element (boolean)
-PASS select1.options.add(option1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select1.options.add(option1) threw exception TypeError: Type error.
PASS select1.options.length is 3
PASS select1.selectedIndex is 0
1.8 Add undefined
-PASS select1.options.add(option1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select1.options.add(option1) threw exception TypeError: Type error.
PASS select1.options.length is 3
PASS select1.selectedIndex is 0
1.9 Add null
-PASS select1.options.add(option1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select1.options.add(option1) threw exception TypeError: Type error.
PASS select1.options.length is 3
PASS select1.selectedIndex is 0
1.10 Add negative infinity
-PASS select1.options.add(option1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select1.options.add(option1) threw exception TypeError: Type error.
PASS select1.options.length is 3
PASS select1.selectedIndex is 0
1.11 Add NaN
-PASS select1.options.add(option1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select1.options.add(option1) threw exception TypeError: Type error.
PASS select1.options.length is 3
PASS select1.selectedIndex is 0
1.12 Add positive infinity
-PASS select1.options.add(option1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select1.options.add(option1) threw exception TypeError: Type error.
PASS select1.options.length is 3
PASS select1.selectedIndex is 0
PASS select2.selectedIndex is 1
2.9 Add an Option at index -Infinity
-PASS select2.options.add(option2, -1/0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, -1/0) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.10 Add an Option at index NaN
-PASS select2.options.add(option2, 0/0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 0/0) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.11 Add an Option at index Infinity
-PASS select2.options.add(option2, 1/0) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 1/0) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.12 Add a non-Option element
-PASS select2.options.add(option2, 1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 1) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.13 Add a non-element (string)
-PASS select2.options.add(option2, 1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 1) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.14 Add a non-element (number)
-PASS select2.options.add(option2, 1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 1) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.15 Add a non-element (boolean)
-PASS select2.options.add(option2, 1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 1) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.16 Add undefined
-PASS select2.options.add(option2, 1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 1) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.17 Add null
-PASS select2.options.add(option2, 1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 1) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.18 Add negative infinity
-PASS select2.options.add(option2, 1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 1) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.19 Add NaN
-PASS select2.options.add(option2, 1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 1) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
2.20 Add positive infinity
-PASS select2.options.add(option2, 1) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS select2.options.add(option2, 1) threw exception TypeError: Type error.
PASS select2.options.length is 7
PASS select2.selectedIndex is 1
PASS candidate.candidate is "foo"
PASS candidate.sdpMid is "bar"
PASS candidate.sdpMLineIndex is 6
-PASS new RTCIceCandidate({}); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS new RTCIceCandidate({}); threw exception TypeError: Type error.
PASS new RTCIceCandidate(5); threw exception TypeError: Not an object..
PASS new RTCIceCandidate("foobar"); threw exception TypeError: Not an object..
PASS new RTCIceCandidate(candidate:""); threw exception SyntaxError: Unexpected token :.
PASS new webkitRTCPeerConnection({iceServers:[{url:'stun:foo.com'}]}, null); did not throw exception.
PASS new webkitRTCPeerConnection({iceServers:[{url:'turn:foo.com', credential:'x'}]}, null); did not throw exception.
PASS new webkitRTCPeerConnection({iceServers:[{url:'turn:foo.com', credential:'x'},{url:'stun:bar.com'}]}, null); did not throw exception.
-PASS new webkitRTCPeerConnection({fooServers:[]}, null); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS new webkitRTCPeerConnection({iceServers:true}, null); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS new webkitRTCPeerConnection({iceServers:[1, 2, 3]}, null); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS new webkitRTCPeerConnection({iceServers:[{}]}, null); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS new webkitRTCPeerConnection({iceServers:[{url:'foo'}]}, null); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS new webkitRTCPeerConnection({fooServers:[]}, null); threw exception TypeError: Type error.
+PASS new webkitRTCPeerConnection({iceServers:true}, null); threw exception TypeError: Type error.
+PASS new webkitRTCPeerConnection({iceServers:[1, 2, 3]}, null); threw exception TypeError: Type error.
+PASS new webkitRTCPeerConnection({iceServers:[{}]}, null); threw exception TypeError: Type error.
+PASS new webkitRTCPeerConnection({iceServers:[{url:'foo'}]}, null); threw exception TypeError: Type error.
PASS new webkitRTCPeerConnection(null, {mandatory:{valid_and_supported_1:1}}); did not throw exception.
PASS new webkitRTCPeerConnection(null, {mandatory:{valid_and_supported_1:1, valid_and_supported_2:1}}); did not throw exception.
PASS new webkitRTCPeerConnection(null, {optional:[{valid_and_supported_1:0}]}); did not throw exception.
PASS new webkitRTCPeerConnection(null, {mandatory:{invalid:1}}); threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
PASS new webkitRTCPeerConnection(null, {mandatory:{valid_but_unsupported_1:1}}); threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
PASS new webkitRTCPeerConnection(null, {mandatory:{valid_but_unsupported_1:1, valid_and_supported_1:1}}); threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
-PASS new webkitRTCPeerConnection(null, {optional:{valid_and_supported_1:0}}); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS new webkitRTCPeerConnection(null, {optional:[{valid_and_supported_1:0,valid_and_supported_2:0}]}); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS new webkitRTCPeerConnection(null, {optional:{valid_and_supported_1:0}}); threw exception TypeError: Type error.
+PASS new webkitRTCPeerConnection(null, {optional:[{valid_and_supported_1:0,valid_and_supported_2:0}]}); threw exception TypeError: Type error.
PASS new webkitRTCPeerConnection(null, {optional:[{invalid:0}]}); threw exception Error: NOT_SUPPORTED_ERR: DOM Exception 9.
-PASS new webkitRTCPeerConnection(null, {valid_and_supported_1:1}); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS new webkitRTCPeerConnection(null, {valid_but_unsupported_1:1}); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS new webkitRTCPeerConnection(null, {valid_and_supported_2:1, mandatory:{valid_and_supported_1:1}}); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS new webkitRTCPeerConnection(null, {valid_and_supported_1:1}); threw exception TypeError: Type error.
+PASS new webkitRTCPeerConnection(null, {valid_but_unsupported_1:1}); threw exception TypeError: Type error.
+PASS new webkitRTCPeerConnection(null, {valid_and_supported_2:1, mandatory:{valid_and_supported_1:1}}); threw exception TypeError: Type error.
PASS successfullyParsed is true
TEST COMPLETE
PASS sessionDescription = new RTCSessionDescription(initializer); did not throw exception.
PASS sessionDescription.type is "offer"
PASS sessionDescription.sdp is "foobar"
-PASS new RTCSessionDescription({}); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS new RTCSessionDescription({}); threw exception TypeError: Type error.
PASS new RTCSessionDescription(5); threw exception TypeError: Not an object..
PASS new RTCSessionDescription('foobar'); threw exception TypeError: Not an object..
-PASS new RTCSessionDescription({type:'foobar', sdp:'x'}); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS new RTCSessionDescription({type:'offer', sdp:''}); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS new RTCSessionDescription({type:'foobar', sdp:'x'}); threw exception TypeError: Type error.
+PASS new RTCSessionDescription({type:'offer', sdp:''}); threw exception TypeError: Type error.
PASS new RTCSessionDescription({type:'offer', sdp:'x'}); did not throw exception.
PASS new RTCSessionDescription({type:'answer', sdp:'x'}); did not throw exception.
PASS new RTCSessionDescription({type:'pranswer', sdp:'x'}); did not throw exception.
TEST(video.webkitAddKey('webkit-org.w3.clearkey', undefined)) THROWS(DOMException.SYNTAX_ERR) OK
0-length key is caught before load state is checked.
-TEST(video.webkitAddKey('webkit-org.w3.clearkey', new Uint8Array())) THROWS(DOMException.TYPE_MISMATCH_ERR) OK
+TEST(video.webkitAddKey('webkit-org.w3.clearkey', new Uint8Array())) THROWS('TypeError') OK
Key system validity is not checked before loading.
TEST(video.webkitGenerateKeyRequest('com.example.invalid')) THROWS(DOMException.INVALID_STATE_ERR) OK
testException("video.webkitAddKey('webkit-org.w3.clearkey', undefined)", "DOMException.SYNTAX_ERR");
consoleWrite("<br>0-length key is caught before load state is checked.");
- testException("video.webkitAddKey('webkit-org.w3.clearkey', new Uint8Array())", "DOMException.TYPE_MISMATCH_ERR");
+ testError("video.webkitAddKey('webkit-org.w3.clearkey', new Uint8Array())", "'TypeError'");
consoleWrite("<br>Key system validity is not checked before loading.");
testException("video.webkitGenerateKeyRequest('com.example.invalid')", "DOMException.INVALID_STATE_ERR");
}
}
+function testError(testString, errorName)
+{
+ try {
+ eval(testString);
+ } catch (ex) {
+ logResult(ex.name == eval(errorName), "TEST(" + testString + ") THROWS("+errorName+")");
+ }
+}
+
var testEnded = false;
function endTest()
Caught expected exception: Error: NOT_SUPPORTED_ERR: DOM Exception 9
-Caught expected exception: Error: TYPE_MISMATCH_ERR: DOM Exception 17
+Caught expected exception: TypeError: Type error
1 (black) 2 (green) 3 (green) 4 (black)
PASS
PASS crypto.getRandomValues(new Int16Array(3)) is undefined.
PASS crypto.getRandomValues(new Uint32Array(3)) is undefined.
PASS crypto.getRandomValues(new Int32Array(3)) is undefined.
-PASS crypto.getRandomValues(new Float32Array(3)) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS crypto.getRandomValues(new Float32Array(3)) threw exception TypeError: Type error.
PASS successfullyParsed is true
TEST COMPLETE
PASS transform.createSVGTransformFromMatrix('aString') threw exception TypeError: Type error.
PASS transform.createSVGTransformFromMatrix(1) threw exception TypeError: Type error.
PASS transform.createSVGTransformFromMatrix(true) threw exception TypeError: Type error.
-PASS transform.createSVGTransformFromMatrix(undefined) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS transform.createSVGTransformFromMatrix(null) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS transform.createSVGTransformFromMatrix(undefined) threw exception TypeError: Type error.
+PASS transform.createSVGTransformFromMatrix(null) threw exception TypeError: Type error.
PASS successfullyParsed is true
TEST COMPLETE
+2012-11-12 Erik Arvidsson <arv@chromium.org>
+
+ Replace DOMException TYPE_MISMATCH_ERR with TypeError
+ https://bugs.webkit.org/show_bug.cgi?id=101604
+
+ Reviewed by Adam Barth.
+
+ DOMException.TYPE_MISMATCH_ERR is deprecated in favor of using TypeError.
+
+ We have historically used TYPE_MISMATCH_ERR as a blanket DOMException code when
+ the spec mandates TypeError being thrown.
+
+ Updated existing tests.
+
+ * Modules/mediastream/MediaConstraintsImpl.cpp:
+ * Modules/mediastream/MediaStreamTrackList.cpp:
+ * Modules/mediastream/PeerConnection00.cpp:
+ * Modules/mediastream/RTCDataChannel.cpp:
+ * Modules/mediastream/RTCIceCandidate.cpp:
+ * Modules/mediastream/RTCPeerConnection.cpp:
+ * Modules/mediastream/RTCSessionDescription.cpp:
+ * Modules/mediastream/SessionDescription.cpp:
+ * bindings/js/CallbackFunction.cpp:
+ * bindings/js/JSCustomXPathNSResolver.cpp:
+ * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
+ * bindings/js/JSHTMLSelectElementCustom.cpp:
+ * bindings/js/JSMutationObserverCustom.cpp:
+ * bindings/js/JSSQLResultSetRowListCustom.cpp:
+ * bindings/js/JSSQLTransactionCustom.cpp:
+ * bindings/js/JSSQLTransactionSyncCustom.cpp:
+ * bindings/scripts/CodeGeneratorJS.pm:
+ * bindings/scripts/CodeGeneratorObjC.pm:
+ * bindings/scripts/CodeGeneratorV8.pm:
+ * bindings/v8/V8Callback.h:
+ * bindings/v8/V8Collection.cpp:
+ * bindings/v8/custom/V8DocumentCustom.cpp:
+ * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
+ * bindings/v8/custom/V8MutationObserverCustom.cpp:
+ * bindings/v8/custom/V8SQLTransactionCustom.cpp:
+ * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
+ * dom/DOMCoreException.idl:
+ * html/HTMLElement.cpp:
+ * html/HTMLMediaElement.cpp:
+ * html/HTMLOptionsCollection.cpp:
+ * html/canvas/CanvasRenderingContext2D.cpp:
+ * page/Crypto.cpp:
+ * page/DOMSelection.cpp:
+ * svg/properties/SVGTransformListPropertyTearOff.h:
+
2012-11-12 Joshua Bell <jsbell@chromium.org>
IndexedDB: Use sequence<> instead of DOMString[] in IDL
{
RefPtr<MediaConstraintsImpl> object = adoptRef(new MediaConstraintsImpl());
if (!object->initialize(constraints)) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
return object.release();
RefPtr<MediaStreamTrack> track = prpTrack;
if (!track) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
RefPtr<MediaStreamTrack> track = prpTrack;
if (!track) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
else if (binaryType == "arraybuffer")
m_binaryType = BinaryTypeArrayBuffer;
else
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
}
void RTCDataChannel::send(const String& data, ExceptionCode& ec)
String candidate;
bool ok = dictionary.get("candidate", candidate);
if (!ok || !candidate.length()) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
ArrayValue iceServers;
bool ok = configuration.get("iceServers", iceServers);
if (!ok || iceServers.isUndefinedOrNull()) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
size_t numberOfServers;
ok = iceServers.length(numberOfServers);
if (!ok) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
Dictionary iceServer;
ok = iceServers.get(i, iceServer);
if (!ok) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
String urlString, credential;
ok = iceServer.get("url", urlString);
if (!ok) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
KURL url(KURL(), urlString);
if (!url.isValid() || !(url.protocolIs("turn") || url.protocolIs("stun"))) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
}
if (!successCallback) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
}
if (!successCallback) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
RefPtr<RTCSessionDescription> sessionDescription = prpSessionDescription;
if (!sessionDescription) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
RefPtr<RTCSessionDescription> sessionDescription = prpSessionDescription;
if (!sessionDescription) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
}
if (!iceCandidate) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
RefPtr<MediaStream> stream = prpStream;
if (!stream) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
}
if (!stream) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
String type;
bool ok = dictionary.get("type", type);
if (!ok || !verifyType(type)) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
String sdp;
ok = dictionary.get("sdp", sdp);
if (!ok || sdp.isEmpty()) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
if (verifyType(type))
m_descriptor->setType(type);
else
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
}
const String& RTCSessionDescription::sdp() const
JSC::CallData callData;
if (getCallData(value, callData) == JSC::CallTypeNone) {
- setDOMException(exec, TYPE_MISMATCH_ERR);
+ setDOMException(exec, NATIVE_TYPE_ERR);
return false;
}
JSObject* resolverObject = value.getObject();
if (!resolverObject) {
- setDOMException(exec, TYPE_MISMATCH_ERR);
+ setDOMException(exec, NATIVE_TYPE_ERR);
return 0;
}
if (exec->hadException())
return jsUndefined();
if (!ok)
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
else
imp->add(option, index, ec);
}
ExceptionCode ec = 0;
HTMLOptionElement* option = toHTMLOptionElement(value);
if (!option)
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
else
select->setOption(index, option, ec);
setDOMException(exec, ec);
JSObject* object = exec->argument(0).getObject();
if (!object) {
- setDOMException(exec, TYPE_MISMATCH_ERR);
+ setDOMException(exec, NATIVE_TYPE_ERR);
return JSValue::encode(jsUndefined());
}
bool indexOk;
int index = finiteInt32Value(exec->argument(0), exec, indexOk);
if (!indexOk) {
- setDOMException(exec, TYPE_MISMATCH_ERR);
+ setDOMException(exec, NATIVE_TYPE_ERR);
return jsUndefined();
}
if (index < 0 || (unsigned)index >= m_impl->length()) {
if (!exec->argument(1).isUndefinedOrNull()) {
JSObject* object = exec->argument(1).getObject();
if (!object) {
- setDOMException(exec, TYPE_MISMATCH_ERR);
+ setDOMException(exec, NATIVE_TYPE_ERR);
return jsUndefined();
}
if (!exec->argument(2).isUndefinedOrNull()) {
JSObject* object = exec->argument(2).getObject();
if (!object) {
- setDOMException(exec, TYPE_MISMATCH_ERR);
+ setDOMException(exec, NATIVE_TYPE_ERR);
return jsUndefined();
}
if (!exec->argument(3).isUndefinedOrNull()) {
JSObject* object = exec->argument(3).getObject();
if (!object) {
- setDOMException(exec, TYPE_MISMATCH_ERR);
+ setDOMException(exec, NATIVE_TYPE_ERR);
return jsUndefined();
}
if (!exec->argument(1).isUndefinedOrNull()) {
JSObject* object = exec->argument(1).getObject();
if (!object) {
- setDOMException(exec, TYPE_MISMATCH_ERR);
+ setDOMException(exec, NATIVE_TYPE_ERR);
return jsUndefined();
}
if ($codeGenerator->IsSVGTypeNeedingTearOff($argType) and not $implClassName =~ /List$/) {
push(@$outputArray, " if (!$name) {\n");
- push(@$outputArray, " setDOMException(exec, TYPE_MISMATCH_ERR);\n");
+ push(@$outputArray, " setDOMException(exec, NATIVE_TYPE_ERR);\n");
push(@$outputArray, " return JSValue::encode(jsUndefined());\n");
push(@$outputArray, " }\n");
}
$implIncludes{"ExceptionCode.h"} = 1;
push(@functionContent, " $idlTypeWithNamespace* ${paramName}Core = $implGetter;\n");
push(@functionContent, " if (!${paramName}Core) {\n");
- push(@functionContent, " WebCore::ExceptionCode ec = WebCore::TYPE_MISMATCH_ERR;\n");
+ push(@functionContent, " WebCore::ExceptionCode ec = WebCore::NATIVE_TYPE_ERR;\n");
push(@functionContent, " $exceptionRaiseOnError\n");
if ($returnType eq "void") {
push(@functionContent, " return;\n");
} elsif ($codeGenerator->IsSVGTypeNeedingTearOff($parameter->type) and not $implClassName =~ /List$/) {
push @arguments, "$paramName->propertyReference()";
$result .= $indent . "if (!$paramName)\n";
- $result .= $indent . " return setDOMException(WebCore::TYPE_MISMATCH_ERR, args.GetIsolate());\n";
+ $result .= $indent . " return setDOMException(WebCore::NATIVE_TYPE_ERR, args.GetIsolate());\n";
} elsif ($parameter->type eq "SVGMatrix" and $implClassName eq "SVGTransformList") {
push @arguments, "$paramName.get()";
} else {
if (!value->IsFunction()) {
succeeded = false;
- setDOMException(TYPE_MISMATCH_ERR, isolate);
+ setDOMException(NATIVE_TYPE_ERR, isolate);
return 0;
}
ExceptionCode ec = 0;
- // Check that the value is an HTMLOptionElement. If not, throw a TYPE_MISMATCH_ERR DOMException.
+ // Check that the value is an HTMLOptionElement. If not, throw a TypeError.
if (!V8HTMLOptionElement::HasInstance(value)) {
- setDOMException(TYPE_MISMATCH_ERR, isolate);
+ setDOMException(NATIVE_TYPE_ERR, isolate);
return value;
}
RefPtr<XPathNSResolver> resolver = toXPathNSResolver(args[2]);
if (!resolver && !args[2]->IsNull() && !args[2]->IsUndefined())
- return setDOMException(TYPE_MISMATCH_ERR, args.GetIsolate());
+ return setDOMException(NATIVE_TYPE_ERR, args.GetIsolate());
int type = toInt32(args[3]);
RefPtr<XPathResult> inResult;
{
INC_STATS("DOM.HTMLOptionsCollection.add()");
if (!V8HTMLOptionElement::HasInstance(args[0]))
- return setDOMException(TYPE_MISMATCH_ERR, args.GetIsolate());
+ return setDOMException(NATIVE_TYPE_ERR, args.GetIsolate());
HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(args.Holder());
HTMLOptionElement* option = V8HTMLOptionElement::toNative(v8::Handle<v8::Object>(v8::Handle<v8::Object>::Cast(args[0])));
return v8::Undefined();
if (!ok)
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
else
imp->add(option, index, ec);
}
v8::Local<v8::Value> arg = args[0];
if (!arg->IsObject())
- return setDOMException(TYPE_MISMATCH_ERR, args.GetIsolate());
+ return setDOMException(NATIVE_TYPE_ERR, args.GetIsolate());
ScriptExecutionContext* context = getScriptExecutionContext();
if (args.Length() > 1 && !isUndefinedOrNull(args[1])) {
if (!args[1]->IsObject())
- return setDOMException(TYPE_MISMATCH_ERR, args.GetIsolate());
+ return setDOMException(NATIVE_TYPE_ERR, args.GetIsolate());
uint32_t sqlArgsLength = 0;
v8::Local<v8::Object> sqlArgsObject = args[1]->ToObject();
RefPtr<SQLStatementCallback> callback;
if (args.Length() > 2 && !isUndefinedOrNull(args[2])) {
if (!args[2]->IsObject())
- return setDOMException(TYPE_MISMATCH_ERR, args.GetIsolate());
+ return setDOMException(NATIVE_TYPE_ERR, args.GetIsolate());
callback = V8SQLStatementCallback::create(args[2], scriptExecutionContext);
}
RefPtr<SQLStatementErrorCallback> errorCallback;
if (args.Length() > 3 && !isUndefinedOrNull(args[3])) {
if (!args[3]->IsObject())
- return setDOMException(TYPE_MISMATCH_ERR, args.GetIsolate());
+ return setDOMException(NATIVE_TYPE_ERR, args.GetIsolate());
errorCallback = V8SQLStatementErrorCallback::create(args[3], scriptExecutionContext);
}
if (args.Length() > 1 && !isUndefinedOrNull(args[1])) {
if (!args[1]->IsObject())
- return setDOMException(TYPE_MISMATCH_ERR, args.GetIsolate());
+ return setDOMException(NATIVE_TYPE_ERR, args.GetIsolate());
uint32_t sqlArgsLength = 0;
v8::Local<v8::Object> sqlArgsObject = args[1]->ToObject();
// Introduced in DOM Level 3:
const unsigned short VALIDATION_ERR = 16;
// Introduced in DOM Level 3:
+ // Deprecated in DOM Living Standard
const unsigned short TYPE_MISMATCH_ERR = 17;
// Introduced as an XHR extension:
const unsigned short SECURITY_ERR = 18;
Element* HTMLElement::insertAdjacentElement(const String& where, Element* newChild, ExceptionCode& ec)
{
if (!newChild) {
- // IE throws COM Exception E_INVALIDARG; this is the best DOM exception alternative.
- ec = TYPE_MISMATCH_ERR;
+ // IE throws an Error with the message "Invalid argument.".
+ ec = NATIVE_TYPE_ERR;
return 0;
}
}
if (!key->length()) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
HTMLOptionElement* newOption = element.get();
if (!newOption) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
void CanvasRenderingContext2D::drawImage(HTMLImageElement* image, float x, float y, ExceptionCode& ec)
{
if (!image) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
LayoutSize s = size(image);
float x, float y, float width, float height, ExceptionCode& ec)
{
if (!image) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
LayoutSize s = size(image);
void CanvasRenderingContext2D::drawImage(HTMLImageElement* image, const FloatRect& srcRect, const FloatRect& dstRect, const CompositeOperator& op, ExceptionCode& ec)
{
if (!image) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
const FloatRect& dstRect, ExceptionCode& ec)
{
if (!sourceCanvas) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
void CanvasRenderingContext2D::drawImage(HTMLVideoElement* video, float x, float y, ExceptionCode& ec)
{
if (!video) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
IntSize s = size(video);
float x, float y, float width, float height, ExceptionCode& ec)
{
if (!video) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
IntSize s = size(video);
ExceptionCode& ec)
{
if (!video) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
const String& repetitionType, ExceptionCode& ec)
{
if (!image) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
bool repeatX, repeatY;
const String& repetitionType, ExceptionCode& ec)
{
if (!canvas) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
if (!canvas->width() || !canvas->height()) {
void CanvasRenderingContext2D::putImageData(ImageData* data, float dx, float dy, ExceptionCode& ec)
{
if (!data) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
putImageData(data, dx, dy, 0, 0, data->width(), data->height(), ec);
void CanvasRenderingContext2D::webkitPutImageDataHD(ImageData* data, float dx, float dy, ExceptionCode& ec)
{
if (!data) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
webkitPutImageDataHD(data, dx, dy, 0, 0, data->width(), data->height(), ec);
float dirtyWidth, float dirtyHeight, ExceptionCode& ec)
{
if (!data) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
if (!isfinite(dx) || !isfinite(dy) || !isfinite(dirtyX) || !isfinite(dirtyY) || !isfinite(dirtyWidth) || !isfinite(dirtyHeight)) {
{
#if USE(OS_RANDOMNESS)
if (!array || !isIntegerArray(array)) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
if (array->byteLength() > 65536) {
return;
if (!node) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return;
}
{
ASSERT(m_values);
if (!matrix) {
- ec = TYPE_MISMATCH_ERR;
+ ec = NATIVE_TYPE_ERR;
return 0;
}
return SVGPropertyTearOff<SVGTransform>::create(m_values->createSVGTransformFromMatrix(matrix->propertyReference()));