@@ -15,10 +15,6 @@ const os = require('os');
15
15
16
16
const isWindows = process . platform === 'win32' ;
17
17
18
- const kScheme = Symbol ( 'scheme' ) ;
19
- const kHost = Symbol ( 'host' ) ;
20
- const kPort = Symbol ( 'port' ) ;
21
- const kDomain = Symbol ( 'domain' ) ;
22
18
const kFormat = Symbol ( 'format' ) ;
23
19
24
20
// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object
@@ -38,62 +34,15 @@ function toUSVString(val) {
38
34
return binding . toUSVString ( str , match . index ) ;
39
35
}
40
36
41
- class OpaqueOrigin {
42
- toString ( ) {
43
- return 'null' ;
44
- }
37
+ // Refs: https://html.spec.whatwg.org/multipage/browsers.html#concept-origin-opaque
38
+ const kOpaqueOrigin = 'null' ;
45
39
46
- get effectiveDomain ( ) {
47
- return this ;
48
- }
49
- }
50
-
51
- class TupleOrigin {
52
- constructor ( scheme , host , port , domain ) {
53
- this [ kScheme ] = scheme ;
54
- this [ kHost ] = host ;
55
- this [ kPort ] = port ;
56
- this [ kDomain ] = domain ;
57
- }
58
-
59
- get scheme ( ) {
60
- return this [ kScheme ] ;
61
- }
62
-
63
- get host ( ) {
64
- return this [ kHost ] ;
65
- }
66
-
67
- get port ( ) {
68
- return this [ kPort ] ;
69
- }
70
-
71
- get domain ( ) {
72
- return this [ kDomain ] ;
73
- }
74
-
75
- get effectiveDomain ( ) {
76
- return this [ kDomain ] || this [ kHost ] ;
77
- }
78
-
79
- // https://url.spec.whatwg.org/#dom-url-origin
80
- toString ( unicode = true ) {
81
- var result = this [ kScheme ] ;
82
- result += '://' ;
83
- result += unicode ? domainToUnicode ( this [ kHost ] ) : this [ kHost ] ;
84
- if ( this [ kPort ] !== undefined && this [ kPort ] !== null )
85
- result += `:${ this [ kPort ] } ` ;
86
- return result ;
87
- }
88
-
89
- [ util . inspect . custom ] ( ) {
90
- return `TupleOrigin {
91
- scheme: ${ this [ kScheme ] } ,
92
- host: ${ this [ kHost ] } ,
93
- port: ${ this [ kPort ] } ,
94
- domain: ${ this [ kDomain ] }
95
- }` ;
96
- }
40
+ // Refs:
41
+ // - https://html.spec.whatwg.org/multipage/browsers.html#unicode-serialisation-of-an-origin
42
+ // - https://html.spec.whatwg.org/multipage/browsers.html#ascii-serialisation-of-an-origin
43
+ function serializeTupleOrigin ( scheme , host , port , unicode = true ) {
44
+ const unicodeHost = unicode ? domainToUnicode ( host ) : host ;
45
+ return `${ scheme } //${ unicodeHost } ${ port == null ? '' : `:${ port } ` } ` ;
97
46
}
98
47
99
48
// This class provides the internal state of a URL object. An instance of this
@@ -359,7 +308,27 @@ Object.defineProperties(URL.prototype, {
359
308
enumerable : true ,
360
309
configurable : true ,
361
310
get ( ) {
362
- return originFor ( this ) . toString ( ) ;
311
+ // Refs: https://url.spec.whatwg.org/#concept-url-origin
312
+ const ctx = this [ context ] ;
313
+ switch ( ctx . scheme ) {
314
+ case 'blob:' :
315
+ if ( ctx . path . length > 0 ) {
316
+ try {
317
+ return ( new URL ( ctx . path [ 0 ] ) ) . origin ;
318
+ } catch ( err ) {
319
+ // fall through... do nothing
320
+ }
321
+ }
322
+ return kOpaqueOrigin ;
323
+ case 'ftp:' :
324
+ case 'gopher:' :
325
+ case 'http:' :
326
+ case 'https:' :
327
+ case 'ws:' :
328
+ case 'wss:' :
329
+ return serializeTupleOrigin ( ctx . scheme , ctx . host , ctx . port ) ;
330
+ }
331
+ return kOpaqueOrigin ;
363
332
}
364
333
} ,
365
334
protocol : {
@@ -1274,41 +1243,6 @@ defineIDLClass(URLSearchParamsIteratorPrototype, 'URLSearchParamsIterator', {
1274
1243
}
1275
1244
} ) ;
1276
1245
1277
- function originFor ( url , base ) {
1278
- if ( url != undefined &&
1279
- ( ! url [ searchParams ] || ! url [ searchParams ] [ searchParams ] ) ) {
1280
- url = new URL ( url , base ) ;
1281
- }
1282
- var origin ;
1283
- const protocol = url . protocol ;
1284
- switch ( protocol ) {
1285
- case 'blob:' :
1286
- if ( url [ context ] . path && url [ context ] . path . length > 0 ) {
1287
- try {
1288
- return ( new URL ( url [ context ] . path [ 0 ] ) ) . origin ;
1289
- } catch ( err ) {
1290
- // fall through... do nothing
1291
- }
1292
- }
1293
- origin = new OpaqueOrigin ( ) ;
1294
- break ;
1295
- case 'ftp:' :
1296
- case 'gopher:' :
1297
- case 'http:' :
1298
- case 'https:' :
1299
- case 'ws:' :
1300
- case 'wss:' :
1301
- origin = new TupleOrigin ( protocol . slice ( 0 , - 1 ) ,
1302
- url [ context ] . host ,
1303
- url [ context ] . port ,
1304
- null ) ;
1305
- break ;
1306
- default :
1307
- origin = new OpaqueOrigin ( ) ;
1308
- }
1309
- return origin ;
1310
- }
1311
-
1312
1246
function domainToASCII ( domain ) {
1313
1247
if ( arguments . length < 1 )
1314
1248
throw new TypeError ( '"domain" argument must be specified' ) ;
0 commit comments