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

Side by Side Diff: third_party/WebKit/LayoutTests/resources/global-interface-listing.js

Issue 2903133003: Revert of Unify webexposed/global-interface-listing scripts (Closed)
Patch Set: Created 3 years, 7 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
(Empty)
1 // * |globalObject| should be the global (usually |this|).
2 // * |propertyNamesInGlobal| should be a list of properties captured before
3 // other scripts are loaded, using: Object.getOwnPropertyNames(this);
4 // * |outputFunc| is called back with each line of output.
5
6 function globalInterfaceListing(globalObject, propertyNamesInGlobal, outputFunc) {
7
8 // List of builtin JS constructors; Blink is not controlling what properties the se
9 // objects have, so exercising them in a Blink test doesn't make sense.
10 //
11 // If new builtins are added, please update this list along with the one in
12 // LayoutTests/http/tests/serviceworker/webexposed/resources/global-interface-li sting-worker.js
13 var jsBuiltins = new Set([
14 'Array',
15 'ArrayBuffer',
16 'Boolean',
17 'Date',
18 'Error',
19 'EvalError',
20 'Float32Array',
21 'Float64Array',
22 'Function',
23 'Infinity',
24 'Int16Array',
25 'Int32Array',
26 'Int8Array',
27 'Intl',
28 'JSON',
29 'Map',
30 'Math',
31 'NaN',
32 'Number',
33 'Object',
34 'Promise',
35 'Proxy',
36 'RangeError',
37 'ReferenceError',
38 'Reflect',
39 'RegExp',
40 'Set',
41 'String',
42 'Symbol',
43 'SyntaxError',
44 'TypeError',
45 'URIError',
46 'Uint16Array',
47 'Uint32Array',
48 'Uint8Array',
49 'Uint8ClampedArray',
50 'WeakMap',
51 'WeakSet',
52 'WebAssembly',
53 'decodeURI',
54 'decodeURIComponent',
55 'encodeURI',
56 'encodeURIComponent',
57 'escape',
58 'eval',
59 'isFinite',
60 'isNaN',
61 'parseFloat',
62 'parseInt',
63 'undefined',
64 'unescape',
65 ]);
66
67 function isWebIDLConstructor(propertyKey) {
68 if (jsBuiltins.has(propertyKey))
69 return false;
70 var descriptor = Object.getOwnPropertyDescriptor(this, propertyKey);
71 if (descriptor.value == undefined || descriptor.value.prototype == undefined )
72 return false;
73 return descriptor.writable && !descriptor.enumerable && descriptor.configura ble;
74 }
75
76 var wellKnownSymbols = new Map([
77 [Symbol.hasInstance, "@@hasInstance"],
78 [Symbol.isConcatSpreadable, "@@isConcatSpreadable"],
79 [Symbol.iterator, "@@iterator"],
80 [Symbol.match, "@@match"],
81 [Symbol.replace, "@@replace"],
82 [Symbol.search, "@@search"],
83 [Symbol.species, "@@species"],
84 [Symbol.split, "@@split"],
85 [Symbol.toPrimitive, "@@toPrimitive"],
86 [Symbol.toStringTag, "@@toStringTag"],
87 [Symbol.unscopables, "@@unscopables"]
88 ]);
89
90 function collectPropertyInfo(object, propertyKey, output) {
91 var propertyString = wellKnownSymbols.get(propertyKey) || propertyKey.toStri ng();
92 var keywords = Object.prototype.hasOwnProperty.call(object, 'prototype') ? ' static ' : '';
93 var descriptor = Object.getOwnPropertyDescriptor(object, propertyKey);
94 if ('value' in descriptor) {
95 var type = typeof descriptor.value === 'function' ? 'method' : 'attribut e';
96 output.push(' ' + keywords + type + ' ' + propertyString);
97 } else {
98 if (descriptor.get)
99 output.push(' ' + keywords + 'getter ' + propertyString);
100 if (descriptor.set)
101 output.push(' ' + keywords + 'setter ' + propertyString);
102 }
103 }
104
105 function ownEnumerableSymbols(object) {
106 return Object.getOwnPropertySymbols(object).
107 filter(function(name) {
108 return Object.getOwnPropertyDescriptor(object, name).enumerable;
109 });
110 }
111
112 function collectPropertyKeys(object) {
113 if (Object.prototype.hasOwnProperty.call(object, 'prototype')) {
114 // Skip properties that aren't static (e.g. consts), or are inherited.
115 // TODO(caitp): Don't exclude non-enumerable properties
116 var protoProperties = new Set(Object.keys(object.prototype).concat(
117 Object.keys(object.__proto__),
118 ownEnumerableSymbols(object.prototype),
119 ownEnumerableSymbols(object.__proto__)));
120 return Object.keys(object).
121 concat(ownEnumerableSymbols(object)).
122 filter(function(name) {
123 return !protoProperties.has(name);
124 });
125 }
126 return Object.getOwnPropertyNames(object).concat(Object.getOwnPropertySymbols (object));
127 }
128
129 // FIXME: List interfaces with NoInterfaceObject specified in their IDL file.
130 outputFunc('[INTERFACES]');
131 var interfaceNames = Object.getOwnPropertyNames(this).filter(isWebIDLConstructor );
132 interfaceNames.sort();
133 interfaceNames.forEach(function(interfaceName) {
134 var inheritsFrom = this[interfaceName].__proto__.name;
135 if (inheritsFrom)
136 outputFunc('interface ' + interfaceName + ' : ' + inheritsFrom);
137 else
138 outputFunc('interface ' + interfaceName);
139 // List static properties then prototype properties.
140 [this[interfaceName], this[interfaceName].prototype].forEach(function(object ) {
141 var propertyKeys = collectPropertyKeys(object);
142 var propertyStrings = [];
143 propertyKeys.forEach(function(propertyKey) {
144 collectPropertyInfo(object, propertyKey, propertyStrings);
145 });
146 propertyStrings.sort().forEach(outputFunc);
147 });
148 });
149
150 outputFunc('[GLOBAL OBJECT]');
151 var propertyStrings = [];
152 var memberNames = propertyNamesInGlobal.filter(function(propertyKey) {
153 return !jsBuiltins.has(propertyKey) && !isWebIDLConstructor(propertyKey);
154 });
155 memberNames.forEach(function(propertyKey) {
156 collectPropertyInfo(globalObject, propertyKey, propertyStrings);
157 });
158 propertyStrings.sort().forEach(outputFunc);
159
160 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698