| OLD | NEW |
| 1 if (self.importScripts) { | 1 if (self.importScripts) { |
| 2 importScripts('../../resources/js-test.js'); | 2 importScripts('../../resources/js-test.js'); |
| 3 | 3 |
| 4 if (!self.postMessage) { | 4 if (!self.postMessage) { |
| 5 // Shared worker. Make postMessage send to the newest client, which in | 5 // Shared worker. Make postMessage send to the newest client, which in |
| 6 // our tests is the only client. | 6 // our tests is the only client. |
| 7 | 7 |
| 8 // Store messages for sending until we have somewhere to send them. | 8 // Store messages for sending until we have somewhere to send them. |
| 9 self.postMessage = function(message) { | 9 self.postMessage = function(message) { |
| 10 if (typeof self.pendingMessages === "undefined") | 10 if (typeof self.pendingMessages === "undefined") |
| 11 self.pendingMessages = []; | 11 self.pendingMessages = []; |
| 12 self.pendingMessages.push(message); | 12 self.pendingMessages.push(message); |
| 13 }; | 13 }; |
| 14 self.onconnect = function(event) { | 14 self.onconnect = function(event) { |
| 15 self.postMessage = function(message) { | 15 self.postMessage = function(message) { |
| 16 event.ports[0].postMessage(message); | 16 event.ports[0].postMessage(message); |
| 17 }; | 17 }; |
| 18 // Offload any stored messages now that someone has connected to us. | 18 // Offload any stored messages now that someone has connected to us. |
| 19 if (typeof self.pendingMessages === "undefined") | 19 if (typeof self.pendingMessages === "undefined") |
| 20 return; | 20 return; |
| 21 while (self.pendingMessages.length) | 21 while (self.pendingMessages.length) |
| 22 event.ports[0].postMessage(self.pendingMessages.shift()); | 22 event.ports[0].postMessage(self.pendingMessages.shift()); |
| 23 }; | 23 }; |
| 24 } | 24 } |
| 25 } | 25 } |
| 26 | 26 |
| 27 function isConstructor(propertyName) { | 27 // List of builtin JS constructors; Blink is not controlling what properties the
se |
| 28 // objects have, so exercising them in a Blink test doesn't make sense. |
| 29 var jsBuiltins = new Set([ |
| 30 'Array', |
| 31 'ArrayBuffer', |
| 32 'Boolean', |
| 33 'Date', |
| 34 'Error', |
| 35 'EvalError', |
| 36 'Float32Array', |
| 37 'Float64Array', |
| 38 'Function', |
| 39 'Int16Array', |
| 40 'Int32Array', |
| 41 'Int8Array', |
| 42 'Map', |
| 43 'Number', |
| 44 'Object', |
| 45 'Promise', |
| 46 'RangeError', |
| 47 'ReferenceError', |
| 48 'RegExp', |
| 49 'Set', |
| 50 'String', |
| 51 'Symbol', |
| 52 'SyntaxError', |
| 53 'TypeError', |
| 54 'Uint16Array', |
| 55 'Uint32Array', |
| 56 'Uint8Array', |
| 57 'Uint8ClampedArray', |
| 58 'URIError', |
| 59 'WeakMap', |
| 60 'WeakSet', |
| 61 ]); |
| 62 |
| 63 function isWebIDLConstructor(propertyName) { |
| 64 if (jsBuiltins.has(propertyName)) |
| 65 return false; |
| 28 var descriptor = Object.getOwnPropertyDescriptor(this, propertyName); | 66 var descriptor = Object.getOwnPropertyDescriptor(this, propertyName); |
| 29 if (descriptor.value == undefined || descriptor.value.prototype == undefined
) | 67 if (descriptor.value == undefined || descriptor.value.prototype == undefined
) |
| 30 return false; | 68 return false; |
| 31 return descriptor.writable && !descriptor.enumerable && descriptor.configura
ble; | 69 return descriptor.writable && !descriptor.enumerable && descriptor.configura
ble; |
| 32 } | 70 } |
| 33 | 71 |
| 34 // FIXME: List interfaces with NoInterfaceObject specified in their IDL file. | 72 // FIXME: List interfaces with NoInterfaceObject specified in their IDL file. |
| 35 debug('[INTERFACES]') | 73 debug('[INTERFACES]') |
| 36 var interfaceNames = Object.getOwnPropertyNames(this).filter(isConstructor); | 74 var interfaceNames = Object.getOwnPropertyNames(this).filter(isWebIDLConstructor
); |
| 37 interfaceNames.sort(); | 75 interfaceNames.sort(); |
| 38 interfaceNames.forEach(function(interfaceName) { | 76 interfaceNames.forEach(function(interfaceName) { |
| 39 debug('interface ' + interfaceName); | 77 debug('interface ' + interfaceName); |
| 40 var propertyStrings = []; | 78 var propertyStrings = []; |
| 41 var prototype = this[interfaceName].prototype; | 79 var prototype = this[interfaceName].prototype; |
| 42 Object.getOwnPropertyNames(prototype).forEach(function(propertyName) { | 80 Object.getOwnPropertyNames(prototype).forEach(function(propertyName) { |
| 43 var descriptor = Object.getOwnPropertyDescriptor(prototype, propertyName
); | 81 var descriptor = Object.getOwnPropertyDescriptor(prototype, propertyName
); |
| 44 if ('value' in descriptor) { | 82 if ('value' in descriptor) { |
| 45 var type = typeof descriptor.value === 'function' ? 'method' : 'attr
ibute'; | 83 var type = typeof descriptor.value === 'function' ? 'method' : 'attr
ibute'; |
| 46 propertyStrings.push(' ' + type + ' ' + propertyName); | 84 propertyStrings.push(' ' + type + ' ' + propertyName); |
| 47 } else { | 85 } else { |
| 48 if (descriptor.get) | 86 if (descriptor.get) |
| 49 propertyStrings.push(' getter ' + propertyName); | 87 propertyStrings.push(' getter ' + propertyName); |
| 50 if (descriptor.set) | 88 if (descriptor.set) |
| 51 propertyStrings.push(' setter ' + propertyName); | 89 propertyStrings.push(' setter ' + propertyName); |
| 52 } | 90 } |
| 53 }); | 91 }); |
| 54 propertyStrings.sort().forEach(debug); | 92 propertyStrings.sort().forEach(debug); |
| 55 }); | 93 }); |
| 56 | 94 |
| 57 if (isWorker()) | 95 if (isWorker()) |
| 58 finishJSTest(); | 96 finishJSTest(); |
| OLD | NEW |