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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/sdk/RemoteObject.js

Issue 2605693003: DevTools: introduce object previews experiment (Closed)
Patch Set: rebase Created 3 years, 11 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 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 return 'null'; 57 return 'null';
58 58
59 var type = typeof remoteObject; 59 var type = typeof remoteObject;
60 if (type !== 'object' && type !== 'function') 60 if (type !== 'object' && type !== 'function')
61 return type; 61 return type;
62 62
63 return remoteObject.type; 63 return remoteObject.type;
64 } 64 }
65 65
66 /** 66 /**
67 * @param {string} description
68 * @return {string}
69 */
70 static arrayNameFromDescription(description) {
71 return description.replace(SDK.RemoteObject._descriptionLengthParenRegex, '' )
72 .replace(SDK.RemoteObject._descriptionLengthSquareRegex, '');
73 }
74
75 /**
67 * @param {!SDK.RemoteObject|!Protocol.Runtime.RemoteObject|!Protocol.Runtime. ObjectPreview} object 76 * @param {!SDK.RemoteObject|!Protocol.Runtime.RemoteObject|!Protocol.Runtime. ObjectPreview} object
68 * @return {number} 77 * @return {number}
69 */ 78 */
70 static arrayLength(object) { 79 static arrayLength(object) {
71 if (object.subtype !== 'array' && object.subtype !== 'typedarray') 80 if (object.subtype !== 'array' && object.subtype !== 'typedarray')
72 return 0; 81 return 0;
73 // Array lengths in V8-generated descriptions switched from square brackets to parentheses. 82 // Array lengths in V8-generated descriptions switched from square brackets to parentheses.
74 // Both formats are checked in case the front end is dealing with an old ver sion of V8. 83 // Both formats are checked in case the front end is dealing with an old ver sion of V8.
75 var matches = object.description.match(/\[([0-9]+)\]/) || object.description .match(/\(([0-9]+)\)/); 84 var parenMatches = object.description.match(SDK.RemoteObject._descriptionLen gthParenRegex);
85 var squareMatches = object.description.match(SDK.RemoteObject._descriptionLe ngthSquareRegex);
86 return parenMatches ? parseInt(parenMatches[1], 10) : (squareMatches ? parse Int(squareMatches[1], 10) : 0);
87 }
88
89 /**
90 * @param {!Protocol.Runtime.ObjectPreview} preview
91 * @return {number}
92 */
93 static mapOrSetEntriesCount(preview) {
94 if (preview.subtype !== 'map' && preview.subtype !== 'set')
95 return 0;
96 var matches = preview.description.match(SDK.RemoteObject._descriptionLengthP arenRegex);
76 if (!matches) 97 if (!matches)
77 return 0; 98 return 0;
78 return parseInt(matches[1], 10); 99 return parseInt(matches[1], 10);
79 } 100 }
80 101
81 /** 102 /**
82 * @param {!Protocol.Runtime.RemoteObject|!SDK.RemoteObject|number|string|bool ean|undefined|null} object 103 * @param {!Protocol.Runtime.RemoteObject|!SDK.RemoteObject|number|string|bool ean|undefined|null} object
83 * @return {!Protocol.Runtime.CallArgument} 104 * @return {!Protocol.Runtime.CallArgument}
84 */ 105 */
85 static toCallArgument(object) { 106 static toCallArgument(object) {
(...skipping 26 matching lines...) Expand all
112 if (typeof object.objectId !== 'undefined') 133 if (typeof object.objectId !== 'undefined')
113 return {objectId: object.objectId}; 134 return {objectId: object.objectId};
114 if (typeof object._objectId !== 'undefined') 135 if (typeof object._objectId !== 'undefined')
115 return {objectId: object._objectId}; 136 return {objectId: object._objectId};
116 137
117 return {value: object.value}; 138 return {value: object.value};
118 } 139 }
119 140
120 /** 141 /**
121 * @param {!SDK.RemoteObject} object 142 * @param {!SDK.RemoteObject} object
143 * @param {boolean} generatePreview
122 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback 144 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback
123 */ 145 */
124 static loadFromObjectPerProto(object, callback) { 146 static loadFromObjectPerProto(object, generatePreview, callback) {
125 // Combines 2 asynch calls. Doesn't rely on call-back orders (some calls may be loop-back). 147 // Combines 2 asynch calls. Doesn't rely on call-back orders (some calls may be loop-back).
126 var savedOwnProperties; 148 var savedOwnProperties;
127 var savedAccessorProperties; 149 var savedAccessorProperties;
128 var savedInternalProperties; 150 var savedInternalProperties;
129 var resultCounter = 2; 151 var resultCounter = 2;
130 152
131 function processCallback() { 153 function processCallback() {
132 if (--resultCounter) 154 if (--resultCounter)
133 return; 155 return;
134 if (savedOwnProperties && savedAccessorProperties) { 156 if (savedOwnProperties && savedAccessorProperties) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 /** 192 /**
171 * @param {?Array.<!SDK.RemoteObjectProperty>} properties 193 * @param {?Array.<!SDK.RemoteObjectProperty>} properties
172 * @param {?Array.<!SDK.RemoteObjectProperty>} internalProperties 194 * @param {?Array.<!SDK.RemoteObjectProperty>} internalProperties
173 */ 195 */
174 function ownPropertiesCallback(properties, internalProperties) { 196 function ownPropertiesCallback(properties, internalProperties) {
175 savedOwnProperties = properties; 197 savedOwnProperties = properties;
176 savedInternalProperties = internalProperties; 198 savedInternalProperties = internalProperties;
177 processCallback(); 199 processCallback();
178 } 200 }
179 201
180 object.getAllProperties(true, allAccessorPropertiesCallback); 202 object.getAllProperties(true /* accessorPropertiesOnly */, generatePreview, allAccessorPropertiesCallback);
181 object.getOwnProperties(ownPropertiesCallback); 203 object.getOwnProperties(generatePreview, ownPropertiesCallback);
182 } 204 }
183 205
184 /** 206 /**
185 * @return {?Protocol.Runtime.CustomPreview} 207 * @return {?Protocol.Runtime.CustomPreview}
186 */ 208 */
187 customPreview() { 209 customPreview() {
188 return null; 210 return null;
189 } 211 }
190 212
191 /** @return {string} */ 213 /** @return {string} */
(...skipping 17 matching lines...) Expand all
209 } 231 }
210 232
211 /** 233 /**
212 * @return {number} 234 * @return {number}
213 */ 235 */
214 arrayLength() { 236 arrayLength() {
215 throw 'Not implemented'; 237 throw 'Not implemented';
216 } 238 }
217 239
218 /** 240 /**
241 * @param {boolean} generatePreview
219 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback 242 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback
220 */ 243 */
221 getOwnProperties(callback) { 244 getOwnProperties(generatePreview, callback) {
222 throw 'Not implemented'; 245 throw 'Not implemented';
223 } 246 }
224 247
225 /** 248 /**
249 * @param {boolean} generatePreview
226 * @return {!Promise<!{properties: ?Array.<!SDK.RemoteObjectProperty>, interna lProperties: ?Array.<!SDK.RemoteObjectProperty>}>} 250 * @return {!Promise<!{properties: ?Array.<!SDK.RemoteObjectProperty>, interna lProperties: ?Array.<!SDK.RemoteObjectProperty>}>}
227 */ 251 */
228 getOwnPropertiesPromise() { 252 getOwnPropertiesPromise(generatePreview) {
229 return new Promise(promiseConstructor.bind(this)); 253 return new Promise(promiseConstructor.bind(this));
230 254
231 /** 255 /**
232 * @param {function(!{properties: ?Array.<!SDK.RemoteObjectProperty>, intern alProperties: ?Array.<!SDK.RemoteObjectProperty>})} success 256 * @param {function(!{properties: ?Array.<!SDK.RemoteObjectProperty>, intern alProperties: ?Array.<!SDK.RemoteObjectProperty>})} success
233 * @this {SDK.RemoteObject} 257 * @this {SDK.RemoteObject}
234 */ 258 */
235 function promiseConstructor(success) { 259 function promiseConstructor(success) {
236 this.getOwnProperties(getOwnPropertiesCallback.bind(null, success)); 260 this.getOwnProperties(!!generatePreview, getOwnPropertiesCallback.bind(nul l, success));
237 } 261 }
238 262
239 /** 263 /**
240 * @param {function(!{properties: ?Array.<!SDK.RemoteObjectProperty>, intern alProperties: ?Array.<!SDK.RemoteObjectProperty>})} callback 264 * @param {function(!{properties: ?Array.<!SDK.RemoteObjectProperty>, intern alProperties: ?Array.<!SDK.RemoteObjectProperty>})} callback
241 * @param {?Array.<!SDK.RemoteObjectProperty>} properties 265 * @param {?Array.<!SDK.RemoteObjectProperty>} properties
242 * @param {?Array.<!SDK.RemoteObjectProperty>} internalProperties 266 * @param {?Array.<!SDK.RemoteObjectProperty>} internalProperties
243 */ 267 */
244 function getOwnPropertiesCallback(callback, properties, internalProperties) { 268 function getOwnPropertiesCallback(callback, properties, internalProperties) {
245 callback({properties: properties, internalProperties: internalProperties}) ; 269 callback({properties: properties, internalProperties: internalProperties}) ;
246 } 270 }
247 } 271 }
248 272
249 /** 273 /**
250 * @param {boolean} accessorPropertiesOnly 274 * @param {boolean} accessorPropertiesOnly
275 * @param {boolean} generatePreview
251 * @param {function(?Array<!SDK.RemoteObjectProperty>, ?Array<!SDK.RemoteObjec tProperty>)} callback 276 * @param {function(?Array<!SDK.RemoteObjectProperty>, ?Array<!SDK.RemoteObjec tProperty>)} callback
252 */ 277 */
253 getAllProperties(accessorPropertiesOnly, callback) { 278 getAllProperties(accessorPropertiesOnly, generatePreview, callback) {
254 throw 'Not implemented'; 279 throw 'Not implemented';
255 } 280 }
256 281
257 /** 282 /**
258 * @param {boolean} accessorPropertiesOnly 283 * @param {boolean} accessorPropertiesOnly
284 * @param {boolean} generatePreview
259 * @return {!Promise<!{properties: ?Array<!SDK.RemoteObjectProperty>, internal Properties: ?Array<!SDK.RemoteObjectProperty>}>} 285 * @return {!Promise<!{properties: ?Array<!SDK.RemoteObjectProperty>, internal Properties: ?Array<!SDK.RemoteObjectProperty>}>}
260 */ 286 */
261 getAllPropertiesPromise(accessorPropertiesOnly) { 287 getAllPropertiesPromise(accessorPropertiesOnly, generatePreview) {
262 return new Promise(promiseConstructor.bind(this)); 288 return new Promise(promiseConstructor.bind(this));
263 289
264 /** 290 /**
265 * @param {function(!{properties: ?Array<!SDK.RemoteObjectProperty>, interna lProperties: ?Array.<!SDK.RemoteObjectProperty>})} success 291 * @param {function(!{properties: ?Array<!SDK.RemoteObjectProperty>, interna lProperties: ?Array.<!SDK.RemoteObjectProperty>})} success
266 * @this {SDK.RemoteObject} 292 * @this {SDK.RemoteObject}
267 */ 293 */
268 function promiseConstructor(success) { 294 function promiseConstructor(success) {
269 this.getAllProperties(accessorPropertiesOnly, getAllPropertiesCallback.bin d(null, success)); 295 this.getAllProperties(accessorPropertiesOnly, generatePreview, getAllPrope rtiesCallback.bind(null, success));
270 } 296 }
271 297
272 /** 298 /**
273 * @param {function(!{properties: ?Array<!SDK.RemoteObjectProperty>, interna lProperties: ?Array<!SDK.RemoteObjectProperty>})} callback 299 * @param {function(!{properties: ?Array<!SDK.RemoteObjectProperty>, interna lProperties: ?Array<!SDK.RemoteObjectProperty>})} callback
274 * @param {?Array<!SDK.RemoteObjectProperty>} properties 300 * @param {?Array<!SDK.RemoteObjectProperty>} properties
275 * @param {?Array<!SDK.RemoteObjectProperty>} internalProperties 301 * @param {?Array<!SDK.RemoteObjectProperty>} internalProperties
276 */ 302 */
277 function getAllPropertiesCallback(callback, properties, internalProperties) { 303 function getAllPropertiesCallback(callback, properties, internalProperties) {
278 callback({properties: properties, internalProperties: internalProperties}) ; 304 callback({properties: properties, internalProperties: internalProperties}) ;
279 } 305 }
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 513
488 /** 514 /**
489 * @return {!Protocol.Runtime.ObjectPreview|undefined} 515 * @return {!Protocol.Runtime.ObjectPreview|undefined}
490 */ 516 */
491 get preview() { 517 get preview() {
492 return this._preview; 518 return this._preview;
493 } 519 }
494 520
495 /** 521 /**
496 * @override 522 * @override
523 * @param {boolean} generatePreview
497 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback 524 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback
498 */ 525 */
499 getOwnProperties(callback) { 526 getOwnProperties(generatePreview, callback) {
500 this.doGetProperties(true, false, false, callback); 527 this.doGetProperties(true, false, generatePreview, callback);
501 } 528 }
502 529
503 /** 530 /**
504 * @override 531 * @override
505 * @param {boolean} accessorPropertiesOnly 532 * @param {boolean} accessorPropertiesOnly
533 * @param {boolean} generatePreview
506 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback 534 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback
507 */ 535 */
508 getAllProperties(accessorPropertiesOnly, callback) { 536 getAllProperties(accessorPropertiesOnly, generatePreview, callback) {
509 this.doGetProperties(false, accessorPropertiesOnly, false, callback); 537 this.doGetProperties(false, accessorPropertiesOnly, generatePreview, callbac k);
510 } 538 }
511 539
512 /** 540 /**
513 * @override 541 * @override
514 * @return {!Promise<?Array<!SDK.EventListener>>} 542 * @return {!Promise<?Array<!SDK.EventListener>>}
515 */ 543 */
516 eventListeners() { 544 eventListeners() {
517 return new Promise(eventListeners.bind(this)); 545 return new Promise(eventListeners.bind(this));
518 /** 546 /**
519 * @param {function(?)} fulfill 547 * @param {function(?)} fulfill
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
1118 * @return {boolean} 1146 * @return {boolean}
1119 */ 1147 */
1120 get hasChildren() { 1148 get hasChildren() {
1121 if ((typeof this._value !== 'object') || (this._value === null)) 1149 if ((typeof this._value !== 'object') || (this._value === null))
1122 return false; 1150 return false;
1123 return !!Object.keys(/** @type {!Object} */ (this._value)).length; 1151 return !!Object.keys(/** @type {!Object} */ (this._value)).length;
1124 } 1152 }
1125 1153
1126 /** 1154 /**
1127 * @override 1155 * @override
1156 * @param {boolean} generatePreview
1128 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback 1157 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback
1129 */ 1158 */
1130 getOwnProperties(callback) { 1159 getOwnProperties(generatePreview, callback) {
1131 callback(this._children(), null); 1160 callback(this._children(), null);
1132 } 1161 }
1133 1162
1134 /** 1163 /**
1135 * @override 1164 * @override
1136 * @param {boolean} accessorPropertiesOnly 1165 * @param {boolean} accessorPropertiesOnly
1166 * @param {boolean} generatePreview
1137 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback 1167 * @param {function(?Array.<!SDK.RemoteObjectProperty>, ?Array.<!SDK.RemoteObj ectProperty>)} callback
1138 */ 1168 */
1139 getAllProperties(accessorPropertiesOnly, callback) { 1169 getAllProperties(accessorPropertiesOnly, generatePreview, callback) {
1140 if (accessorPropertiesOnly) 1170 if (accessorPropertiesOnly)
1141 callback([], null); 1171 callback([], null);
1142 else 1172 else
1143 callback(this._children(), null); 1173 callback(this._children(), null);
1144 } 1174 }
1145 1175
1146 /** 1176 /**
1147 * @return {!Array.<!SDK.RemoteObjectProperty>} 1177 * @return {!Array.<!SDK.RemoteObjectProperty>}
1148 */ 1178 */
1149 _children() { 1179 _children() {
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
1361 static objectAsFunction(object) { 1391 static objectAsFunction(object) {
1362 if (!object || object.type !== 'function') 1392 if (!object || object.type !== 'function')
1363 throw new Error('Object is empty or not a function'); 1393 throw new Error('Object is empty or not a function');
1364 return new SDK.RemoteFunction(object); 1394 return new SDK.RemoteFunction(object);
1365 } 1395 }
1366 1396
1367 /** 1397 /**
1368 * @return {!Promise<!SDK.RemoteObject>} 1398 * @return {!Promise<!SDK.RemoteObject>}
1369 */ 1399 */
1370 targetFunction() { 1400 targetFunction() {
1371 return this._object.getOwnPropertiesPromise().then(targetFunction.bind(this) ); 1401 return this._object.getOwnPropertiesPromise(false /* generatePreview */).the n(targetFunction.bind(this));
1372 1402
1373 /** 1403 /**
1374 * @param {!{properties: ?Array<!SDK.RemoteObjectProperty>, internalProperti es: ?Array<!SDK.RemoteObjectProperty>}} ownProperties 1404 * @param {!{properties: ?Array<!SDK.RemoteObjectProperty>, internalProperti es: ?Array<!SDK.RemoteObjectProperty>}} ownProperties
1375 * @return {!SDK.RemoteObject} 1405 * @return {!SDK.RemoteObject}
1376 * @this {SDK.RemoteFunction} 1406 * @this {SDK.RemoteFunction}
1377 */ 1407 */
1378 function targetFunction(ownProperties) { 1408 function targetFunction(ownProperties) {
1379 if (!ownProperties.internalProperties) 1409 if (!ownProperties.internalProperties)
1380 return this._object; 1410 return this._object;
1381 var internalProperties = ownProperties.internalProperties; 1411 var internalProperties = ownProperties.internalProperties;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1416 } 1446 }
1417 } 1447 }
1418 1448
1419 /** 1449 /**
1420 * @return {!SDK.RemoteObject} 1450 * @return {!SDK.RemoteObject}
1421 */ 1451 */
1422 object() { 1452 object() {
1423 return this._object; 1453 return this._object;
1424 } 1454 }
1425 }; 1455 };
1456
1457 /**
1458 * @const
1459 * @type {!RegExp}
1460 */
1461 SDK.RemoteObject._descriptionLengthParenRegex = /\(([0-9]+)\)/;
1462
1463 /**
1464 * @const
1465 * @type {!RegExp}
1466 */
1467 SDK.RemoteObject._descriptionLengthSquareRegex = /\[([0-9]+)\]/;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698