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

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

Issue 2889423003: Unify webexposed/global-interface-listing scripts (Closed)
Patch Set: Rebased Created 3 years, 6 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
1 // Run all the code in a local scope. 1 // * |globalObject| should be the global (usually |this|).
2 (function(globalObject) { 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.
3 5
4 // Save the list of property names of the global object before loading other scr ipts. 6 function globalInterfaceListing(globalObject, propertyNamesInGlobal, outputFunc) {
5 var propertyNamesInGlobal = globalObject.propertyNamesInGlobal || Object.getOwnP ropertyNames(globalObject);
6
7 if (self.importScripts) {
8 importScripts('../../resources/js-test.js');
9
10 if (!self.postMessage) {
11 // Shared worker. Make postMessage send to the newest client, which in
12 // our tests is the only client.
13
14 // Store messages for sending until we have somewhere to send them.
15 self.postMessage = function(message) {
16 if (typeof self.pendingMessages === "undefined")
17 self.pendingMessages = [];
18 self.pendingMessages.push(message);
19 };
20 self.onconnect = function(event) {
21 self.postMessage = function(message) {
22 event.ports[0].postMessage(message);
23 };
24 // Offload any stored messages now that someone has connected to us.
25 if (typeof self.pendingMessages === "undefined")
26 return;
27 while (self.pendingMessages.length)
28 event.ports[0].postMessage(self.pendingMessages.shift());
29 };
30 }
31 }
32 7
33 // List of builtin JS constructors; Blink is not controlling what properties the se 8 // List of builtin JS constructors; Blink is not controlling what properties the se
34 // objects have, so exercising them in a Blink test doesn't make sense. 9 // objects have, so exercising them in a Blink test doesn't make sense.
35 // 10 //
36 // If new builtins are added, please update this list along with the one in 11 // If new builtins are added, please update this list along with the one in
37 // LayoutTests/http/tests/serviceworker/webexposed/resources/global-interface-li sting-worker.js 12 // LayoutTests/http/tests/serviceworker/webexposed/resources/global-interface-li sting-worker.js
38 var jsBuiltins = new Set([ 13 var jsBuiltins = new Set([
39 'Array', 14 'Array',
40 'ArrayBuffer', 15 'ArrayBuffer',
41 'Boolean', 16 'Boolean',
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 } 110 }
136 111
137 function collectPropertyKeys(object) { 112 function collectPropertyKeys(object) {
138 if (Object.prototype.hasOwnProperty.call(object, 'prototype')) { 113 if (Object.prototype.hasOwnProperty.call(object, 'prototype')) {
139 // Skip properties that aren't static (e.g. consts), or are inherited. 114 // Skip properties that aren't static (e.g. consts), or are inherited.
140 // TODO(caitp): Don't exclude non-enumerable properties 115 // TODO(caitp): Don't exclude non-enumerable properties
141 var protoProperties = new Set(Object.keys(object.prototype).concat( 116 var protoProperties = new Set(Object.keys(object.prototype).concat(
142 Object.keys(object.__proto__), 117 Object.keys(object.__proto__),
143 ownEnumerableSymbols(object.prototype), 118 ownEnumerableSymbols(object.prototype),
144 ownEnumerableSymbols(object.__proto__))); 119 ownEnumerableSymbols(object.__proto__)));
145 return propertyKeys = Object.keys(object). 120 return Object.keys(object).
146 concat(ownEnumerableSymbols(object)). 121 concat(ownEnumerableSymbols(object)).
147 filter(function(name) { 122 filter(function(name) {
148 return !protoProperties.has(name); 123 return !protoProperties.has(name);
149 }); 124 });
150 } 125 }
151 return Object.getOwnPropertyNames(object).concat(Object.getOwnPropertySymbols (object)); 126 return Object.getOwnPropertyNames(object).concat(Object.getOwnPropertySymbols (object));
152 } 127 }
153 128
154 // FIXME: List interfaces with NoInterfaceObject specified in their IDL file. 129 // FIXME: List interfaces with NoInterfaceObject specified in their IDL file.
155 debug('[INTERFACES]'); 130 outputFunc('[INTERFACES]');
156 var interfaceNames = Object.getOwnPropertyNames(this).filter(isWebIDLConstructor ); 131 var interfaceNames = Object.getOwnPropertyNames(this).filter(isWebIDLConstructor );
157 interfaceNames.sort(); 132 interfaceNames.sort();
158 interfaceNames.forEach(function(interfaceName) { 133 interfaceNames.forEach(function(interfaceName) {
159 var inheritsFrom = this[interfaceName].__proto__.name; 134 var inheritsFrom = this[interfaceName].__proto__.name;
160 if (inheritsFrom) 135 if (inheritsFrom)
161 debug('interface ' + interfaceName + ' : ' + inheritsFrom); 136 outputFunc('interface ' + interfaceName + ' : ' + inheritsFrom);
162 else 137 else
163 debug('interface ' + interfaceName); 138 outputFunc('interface ' + interfaceName);
164 // List static properties then prototype properties. 139 // List static properties then prototype properties.
165 [this[interfaceName], this[interfaceName].prototype].forEach(function(object ) { 140 [this[interfaceName], this[interfaceName].prototype].forEach(function(object ) {
166 var propertyKeys = collectPropertyKeys(object); 141 var propertyKeys = collectPropertyKeys(object);
167 var propertyStrings = []; 142 var propertyStrings = [];
168 propertyKeys.forEach(function(propertyKey) { 143 propertyKeys.forEach(function(propertyKey) {
169 collectPropertyInfo(object, propertyKey, propertyStrings); 144 collectPropertyInfo(object, propertyKey, propertyStrings);
170 }); 145 });
171 propertyStrings.sort().forEach(debug); 146 propertyStrings.sort().forEach(outputFunc);
172 }); 147 });
173 }); 148 });
174 149
175 debug('[GLOBAL OBJECT]'); 150 outputFunc('[GLOBAL OBJECT]');
176 var propertyStrings = []; 151 var propertyStrings = [];
177 var memberNames = propertyNamesInGlobal.filter(function(propertyKey) { 152 var memberNames = propertyNamesInGlobal.filter(function(propertyKey) {
178 return !jsBuiltins.has(propertyKey) && !isWebIDLConstructor(propertyKey); 153 return !jsBuiltins.has(propertyKey) && !isWebIDLConstructor(propertyKey);
179 }); 154 });
180 memberNames.forEach(function(propertyKey) { 155 memberNames.forEach(function(propertyKey) {
181 collectPropertyInfo(globalObject, propertyKey, propertyStrings); 156 collectPropertyInfo(globalObject, propertyKey, propertyStrings);
182 }); 157 });
183 propertyStrings.sort().forEach(debug); 158 propertyStrings.sort().forEach(outputFunc);
184 159
185 if (isWorker()) 160 }
186 finishJSTest();
187
188 })(this); // Run all the code in a local scope.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698