@@ -11,7 +11,8 @@ var redefine = require('../internals/redefine');
11
11
var hasOwn = require ( '../internals/has-own-property' ) ;
12
12
var anInstance = require ( '../internals/an-instance' ) ;
13
13
var anObject = require ( '../internals/an-object' ) ;
14
- var $toString = require ( '../internals/to-string' ) ;
14
+ var errorToString = require ( '../internals/error-to-string' ) ;
15
+ var normalizeStringArgument = require ( '../internals/normalize-string-argument' ) ;
15
16
var setToStringTag = require ( '../internals/set-to-string-tag' ) ;
16
17
var InternalStateModule = require ( '../internals/internal-state' ) ;
17
18
var DESCRIPTORS = require ( '../internals/descriptors' ) ;
@@ -22,7 +23,6 @@ var DOM_EXCEPTION = 'DOMException';
22
23
var HAS_STACK = 'stack' in Error ( DOM_EXCEPTION ) ;
23
24
var NativeDOMException = global [ DOM_EXCEPTION ] ;
24
25
var NativeDOMExceptionPrototype = NativeDOMException && NativeDOMException . prototype ;
25
- var ErrorPrototype = Error . prototype ;
26
26
var setInternalState = InternalStateModule . set ;
27
27
var getInternalState = InternalStateModule . getterFor ( DOM_EXCEPTION ) ;
28
28
@@ -54,19 +54,15 @@ var errors = {
54
54
DataCloneError : { s : DATA_CLONE_ERR , c : 25 , m : 1 }
55
55
} ;
56
56
57
- var normalize = function ( argument , $default ) {
58
- return argument === undefined ? $default : $toString ( argument ) ;
59
- } ;
60
-
61
57
var codeFor = function ( name ) {
62
58
return hasOwn ( errors , name ) && errors [ name ] . m ? errors [ name ] . c : 0 ;
63
59
} ;
64
60
65
61
var $DOMException = function DOMException ( ) {
66
62
anInstance ( this , $DOMException , DOM_EXCEPTION ) ;
67
63
var argumentsLength = arguments . length ;
68
- var message = normalize ( argumentsLength < 1 ? undefined : arguments [ 0 ] , '' ) ;
69
- var name = normalize ( argumentsLength < 2 ? undefined : arguments [ 1 ] , 'Error' ) ;
64
+ var message = normalizeStringArgument ( argumentsLength < 1 ? undefined : arguments [ 0 ] ) ;
65
+ var name = normalizeStringArgument ( argumentsLength < 2 ? undefined : arguments [ 1 ] , 'Error' ) ;
70
66
var code = codeFor ( name ) ;
71
67
setInternalState ( this , {
72
68
type : DOM_EXCEPTION ,
@@ -86,7 +82,7 @@ var $DOMException = function DOMException() {
86
82
}
87
83
} ;
88
84
89
- var $DOMExceptionPrototype = $DOMException . prototype = create ( ErrorPrototype ) ;
85
+ var $DOMExceptionPrototype = $DOMException . prototype = create ( Error . prototype ) ;
90
86
91
87
var createGetterDescriptor = function ( get ) {
92
88
return { enumerable : true , configurable : true , get : get } ;
@@ -108,19 +104,14 @@ defineProperty($DOMExceptionPrototype, 'constructor', createPropertyDescriptor(1
108
104
109
105
// FF36- DOMException is a function, but can't be constructed
110
106
var INCORRECT_CONSTRUCTOR = fails ( function ( ) {
111
- return ! new NativeDOMException ( ) ;
107
+ return ! ( new NativeDOMException ( ) instanceof Error ) ;
112
108
} ) ;
113
109
114
110
// Safari 10.1 / Deno 1.6.3- DOMException.prototype.toString bug
115
111
var INCORRECT_TO_STRING = INCORRECT_CONSTRUCTOR || fails ( function ( ) {
116
112
return String ( new DOMException ( 1 , 2 ) ) !== '2: 1' ;
117
113
} ) ;
118
114
119
- // FF10-
120
- var INCORRECT_ERROR_TO_STRING = INCORRECT_CONSTRUCTOR || fails ( function ( ) {
121
- return String ( ErrorPrototype . toString . call ( { message : 1 , name : 2 } ) ) !== '2: 1' ;
122
- } ) ;
123
-
124
115
// Deno 1.6.3- DOMException.prototype.code just missed
125
116
var INCORRECT_CODE = INCORRECT_CONSTRUCTOR || fails ( function ( ) {
126
117
return new NativeDOMException ( 1 , 'DataCloneError' ) . code !== 25 ;
@@ -142,19 +133,16 @@ $({ global: true, forced: FORCED_CONSTRUCTOR }, {
142
133
var PolyfilledDOMException = path [ DOM_EXCEPTION ] ;
143
134
var PolyfilledDOMExceptionPrototype = PolyfilledDOMException . prototype ;
144
135
145
- if ( PolyfilledDOMException !== $DOMException ? INCORRECT_TO_STRING : INCORRECT_ERROR_TO_STRING ) {
146
- redefine ( PolyfilledDOMExceptionPrototype , 'toString' , function toString ( ) {
147
- var O = anObject ( this ) ;
148
- var name = normalize ( O . name , 'Error' ) ;
149
- var message = normalize ( O . message , '' ) ;
150
- return ! name ? message : ! message ? name : name + ': ' + message ;
151
- } ) ;
152
- }
136
+ if ( NativeDOMException === PolyfilledDOMException ) {
137
+ if ( INCORRECT_TO_STRING ) {
138
+ redefine ( PolyfilledDOMExceptionPrototype , 'toString' , errorToString ) ;
139
+ }
153
140
154
- if ( PolyfilledDOMException !== $DOMException && INCORRECT_CODE && DESCRIPTORS ) {
155
- defineProperty ( PolyfilledDOMExceptionPrototype , 'code' , createGetterDescriptor ( function ( ) {
156
- return codeFor ( anObject ( this ) . name ) ;
157
- } ) ) ;
141
+ if ( INCORRECT_CODE && DESCRIPTORS ) {
142
+ defineProperty ( PolyfilledDOMExceptionPrototype , 'code' , createGetterDescriptor ( function ( ) {
143
+ return codeFor ( anObject ( this ) . name ) ;
144
+ } ) ) ;
145
+ }
158
146
}
159
147
160
148
for ( var key in errors ) if ( hasOwn ( errors , key ) ) {
0 commit comments