OLD | NEW |
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 10 matching lines...) Expand all Loading... |
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 */ | 29 */ |
30 | 30 |
| 31 /** |
| 32 * @typedef {{object: ?WebInspector.RemoteObject, wasThrown: (boolean|undefined)
}} |
| 33 */ |
| 34 WebInspector.CallFunctionResult; |
| 35 |
31 /** | 36 /** |
32 * This may not be an interface due to "instanceof WebInspector.RemoteObject" ch
ecks in the code. | 37 * This may not be an interface due to "instanceof WebInspector.RemoteObject" ch
ecks in the code. |
33 * | 38 * |
34 * @constructor | 39 * @constructor |
35 */ | 40 */ |
36 WebInspector.RemoteObject = function() { } | 41 WebInspector.RemoteObject = function() { } |
37 | 42 |
38 WebInspector.RemoteObject.prototype = { | 43 WebInspector.RemoteObject.prototype = { |
39 | 44 |
40 /** | 45 /** |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 * @param {!RuntimeAgent.CallArgument} name | 172 * @param {!RuntimeAgent.CallArgument} name |
168 * @param {function(string=)} callback | 173 * @param {function(string=)} callback |
169 */ | 174 */ |
170 deleteProperty: function(name, callback) | 175 deleteProperty: function(name, callback) |
171 { | 176 { |
172 throw "Not implemented"; | 177 throw "Not implemented"; |
173 }, | 178 }, |
174 | 179 |
175 /** | 180 /** |
176 * @param {function(this:Object, ...)} functionDeclaration | 181 * @param {function(this:Object, ...)} functionDeclaration |
177 * @param {!Array.<!RuntimeAgent.CallArgument>=} args | 182 * @param {!Array<!RuntimeAgent.CallArgument>=} args |
178 * @param {function(?WebInspector.RemoteObject, boolean=)=} callback | 183 * @param {function(?WebInspector.RemoteObject, boolean=)=} callback |
179 */ | 184 */ |
180 callFunction: function(functionDeclaration, args, callback) | 185 callFunction: function(functionDeclaration, args, callback) |
181 { | 186 { |
182 throw "Not implemented"; | 187 throw "Not implemented"; |
183 }, | 188 }, |
184 | 189 |
185 /** | 190 /** |
186 * @param {function(this:Object, ...)} functionDeclaration | 191 * @param {function(this:Object, ...)} functionDeclaration |
187 * @param {!Array.<!RuntimeAgent.CallArgument>=} args | 192 * @param {!Array<!RuntimeAgent.CallArgument>=} args |
188 * @return {!Promise.<!{object: ?WebInspector.RemoteObject, wasThrown: (bool
ean|undefined)}>} | 193 * @return {!Promise<!WebInspector.CallFunctionResult>} |
189 */ | 194 */ |
190 callFunctionPromise: function(functionDeclaration, args) | 195 callFunctionPromise: function(functionDeclaration, args) |
191 { | 196 { |
192 return new Promise(promiseConstructor.bind(this)); | 197 return new Promise(promiseConstructor.bind(this)); |
193 | 198 |
194 /** | 199 /** |
195 * @param {function(!{object: ?WebInspector.RemoteObject, wasThrown: (bo
olean|undefined)})} success | 200 * @param {function(!WebInspector.CallFunctionResult)} success |
196 * @this {WebInspector.RemoteObject} | 201 * @this {WebInspector.RemoteObject} |
197 */ | 202 */ |
198 function promiseConstructor(success) | 203 function promiseConstructor(success) |
199 { | 204 { |
200 this.callFunction(functionDeclaration, args, callFunctionCallback.bi
nd(null, success)); | 205 this.callFunction(functionDeclaration, args, callFunctionCallback.bi
nd(null, success)); |
201 } | 206 } |
202 | 207 |
203 /** | 208 /** |
204 * @param {function(!{object: ?WebInspector.RemoteObject, wasThrown: (bo
olean|undefined)})} callback | 209 * @param {function(!WebInspector.CallFunctionResult)} callback |
205 * @param {?WebInspector.RemoteObject} object | 210 * @param {?WebInspector.RemoteObject} object |
206 * @param {boolean=} wasThrown | 211 * @param {boolean=} wasThrown |
207 */ | 212 */ |
208 function callFunctionCallback(callback, object, wasThrown) | 213 function callFunctionCallback(callback, object, wasThrown) |
209 { | 214 { |
210 callback({ | 215 callback({ |
211 object: object, | 216 object: object, |
212 wasThrown: wasThrown | 217 wasThrown: wasThrown |
213 }); | 218 }); |
214 } | 219 } |
215 }, | 220 }, |
216 | 221 |
217 /** | 222 /** |
218 * @param {function(this:Object)} functionDeclaration | 223 * @param {function(this:Object, ...)} functionDeclaration |
219 * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args | 224 * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args |
220 * @param {function(*)} callback | 225 * @param {function(*)} callback |
221 */ | 226 */ |
222 callFunctionJSON: function(functionDeclaration, args, callback) | 227 callFunctionJSON: function(functionDeclaration, args, callback) |
223 { | 228 { |
224 throw "Not implemented"; | 229 throw "Not implemented"; |
225 }, | 230 }, |
226 | 231 |
227 /** | 232 /** |
228 * @param {function(this:Object)} functionDeclaration | 233 * @param {function(this:Object, ...)} functionDeclaration |
229 * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args | 234 * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args |
230 * @return {!Promise<*>} | 235 * @return {!Promise<*>} |
231 */ | 236 */ |
232 callFunctionJSONPromise: function(functionDeclaration, args) | 237 callFunctionJSONPromise: function(functionDeclaration, args) |
233 { | 238 { |
234 return new Promise(promiseConstructor.bind(this)); | 239 return new Promise(promiseConstructor.bind(this)); |
235 | 240 |
236 /** | 241 /** |
237 * @this {WebInspector.RemoteObject} | 242 * @this {WebInspector.RemoteObject} |
238 */ | 243 */ |
(...skipping 1092 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1331 } | 1336 } |
1332 | 1337 |
1333 callback(result); | 1338 callback(result); |
1334 }, | 1339 }, |
1335 | 1340 |
1336 __proto__: WebInspector.RemoteObject.prototype | 1341 __proto__: WebInspector.RemoteObject.prototype |
1337 } | 1342 } |
1338 | 1343 |
1339 /** | 1344 /** |
1340 * @constructor | 1345 * @constructor |
| 1346 * @param {!WebInspector.RemoteObject} object |
| 1347 */ |
| 1348 WebInspector.RemoteArray = function(object) |
| 1349 { |
| 1350 this._object = object; |
| 1351 }; |
| 1352 |
| 1353 /** |
| 1354 * @param {?WebInspector.RemoteObject} object |
| 1355 * @return {!WebInspector.RemoteArray} |
| 1356 */ |
| 1357 WebInspector.RemoteArray.objectAsArray = function(object) |
| 1358 { |
| 1359 if (!object || object.subtype !== "array") |
| 1360 throw new Error("Object is empty or not an array"); |
| 1361 return new WebInspector.RemoteArray(object); |
| 1362 } |
| 1363 |
| 1364 /** |
| 1365 * @param {!Array<!WebInspector.RemoteObject>} objects |
| 1366 * @return {!Promise<!WebInspector.RemoteArray>} |
| 1367 */ |
| 1368 WebInspector.RemoteArray.createFromRemoteObjects = function(objects) |
| 1369 { |
| 1370 if (!objects.length) |
| 1371 throw new Error("Input array is empty"); |
| 1372 var objectArguments = []; |
| 1373 for (var i = 0; i < objects.length; ++i) |
| 1374 objectArguments.push(WebInspector.RemoteObject.toCallArgument(objects[i]
)) |
| 1375 return objects[0].callFunctionPromise(createArray, objectArguments).then(ret
urnRemoteArray); |
| 1376 |
| 1377 /** |
| 1378 * @return {!Array<*>} |
| 1379 */ |
| 1380 function createArray() |
| 1381 { |
| 1382 if (arguments.length > 1) |
| 1383 return new Array(arguments); |
| 1384 return [arguments[0]]; |
| 1385 } |
| 1386 |
| 1387 /** |
| 1388 * @param {!WebInspector.CallFunctionResult} result |
| 1389 * @return {!WebInspector.RemoteArray} |
| 1390 */ |
| 1391 function returnRemoteArray(result) |
| 1392 { |
| 1393 if (result.wasThrown || !result.object) |
| 1394 throw new Error("Call function throws exceptions or returns empty va
lue"); |
| 1395 return WebInspector.RemoteArray.objectAsArray(result.object); |
| 1396 } |
| 1397 } |
| 1398 |
| 1399 WebInspector.RemoteArray.prototype = { |
| 1400 /** |
| 1401 * @param {number} index |
| 1402 * @return {!Promise<!WebInspector.RemoteObject>} |
| 1403 */ |
| 1404 at: function(index) |
| 1405 { |
| 1406 if (index < 0 || index > this._object.arrayLength()) |
| 1407 throw new Error("Out of range"); |
| 1408 return this._object.callFunctionPromise(at, [WebInspector.RemoteObject.t
oCallArgument(index)]).then(assertCallFunctionResult); |
| 1409 |
| 1410 /** |
| 1411 * @suppressReceiverCheck |
| 1412 * @param {number} index |
| 1413 * @return {*} |
| 1414 * @this {!Object} |
| 1415 */ |
| 1416 function at(index) |
| 1417 { |
| 1418 return this[index]; |
| 1419 } |
| 1420 |
| 1421 /** |
| 1422 * @param {!WebInspector.CallFunctionResult} result |
| 1423 * @return {!WebInspector.RemoteObject} |
| 1424 */ |
| 1425 function assertCallFunctionResult(result) |
| 1426 { |
| 1427 if (result.wasThrown || !result.object) |
| 1428 throw new Error("Exception in callFunction or result value is em
pty"); |
| 1429 return result.object; |
| 1430 } |
| 1431 }, |
| 1432 |
| 1433 /** |
| 1434 * @return {number} |
| 1435 */ |
| 1436 length: function() |
| 1437 { |
| 1438 return this._object.arrayLength(); |
| 1439 }, |
| 1440 |
| 1441 /** |
| 1442 * @param {function(!WebInspector.RemoteObject):!Promise<T>} func |
| 1443 * @return {!Promise<!Array<T>>} |
| 1444 * @template T |
| 1445 */ |
| 1446 map: function(func) |
| 1447 { |
| 1448 var promises = []; |
| 1449 for (var i = 0; i < this.length(); ++i) |
| 1450 promises.push(this.at(i).then(func)); |
| 1451 return Promise.all(promises); |
| 1452 }, |
| 1453 |
| 1454 /** |
| 1455 * @return {!WebInspector.RemoteObject} |
| 1456 */ |
| 1457 object: function() |
| 1458 { |
| 1459 return this._object; |
| 1460 } |
| 1461 } |
| 1462 |
| 1463 /** |
| 1464 * @constructor |
| 1465 * @param {!WebInspector.RemoteObject} object |
| 1466 */ |
| 1467 WebInspector.RemoteFunction = function(object) |
| 1468 { |
| 1469 this._object = object; |
| 1470 } |
| 1471 |
| 1472 /** |
| 1473 * @param {?WebInspector.RemoteObject} object |
| 1474 * @return {!WebInspector.RemoteFunction} |
| 1475 */ |
| 1476 WebInspector.RemoteFunction.objectAsFunction = function(object) |
| 1477 { |
| 1478 if (!object || object.type !== "function") |
| 1479 throw new Error("Object is empty or not a function"); |
| 1480 return new WebInspector.RemoteFunction(object); |
| 1481 } |
| 1482 |
| 1483 WebInspector.RemoteFunction.prototype = { |
| 1484 /** |
| 1485 * @return {!Promise<!WebInspector.RemoteObject>} |
| 1486 */ |
| 1487 targetFunction: function() |
| 1488 { |
| 1489 return this._object.getOwnPropertiesPromise().then(targetFunction.bind(t
his)); |
| 1490 |
| 1491 /** |
| 1492 * @param {!{properties: ?Array<!WebInspector.RemoteObjectProperty>, int
ernalProperties: ?Array<!WebInspector.RemoteObjectProperty>}} ownProperties |
| 1493 * @return {!WebInspector.RemoteObject} |
| 1494 * @this {WebInspector.RemoteFunction} |
| 1495 */ |
| 1496 function targetFunction(ownProperties) |
| 1497 { |
| 1498 if (!ownProperties.internalProperties) |
| 1499 return this._object; |
| 1500 var internalProperties = ownProperties.internalProperties; |
| 1501 for (var property of internalProperties) { |
| 1502 if (property.name === "[[TargetFunction]]") |
| 1503 return property.value; |
| 1504 } |
| 1505 return this._object; |
| 1506 } |
| 1507 }, |
| 1508 |
| 1509 /** |
| 1510 * @return {!WebInspector.RemoteObject} |
| 1511 */ |
| 1512 object: function() |
| 1513 { |
| 1514 return this._object; |
| 1515 } |
| 1516 } |
| 1517 |
| 1518 /** |
| 1519 * @constructor |
1341 * @extends {WebInspector.LocalJSONObject} | 1520 * @extends {WebInspector.LocalJSONObject} |
1342 * @param {*} value | 1521 * @param {*} value |
1343 */ | 1522 */ |
1344 WebInspector.MapEntryLocalJSONObject = function(value) | 1523 WebInspector.MapEntryLocalJSONObject = function(value) |
1345 { | 1524 { |
1346 WebInspector.LocalJSONObject.call(this, value); | 1525 WebInspector.LocalJSONObject.call(this, value); |
1347 } | 1526 } |
1348 | 1527 |
1349 WebInspector.MapEntryLocalJSONObject.prototype = { | 1528 WebInspector.MapEntryLocalJSONObject.prototype = { |
1350 /** | 1529 /** |
1351 * @override | 1530 * @override |
1352 * @return {string} | 1531 * @return {string} |
1353 */ | 1532 */ |
1354 get description() | 1533 get description() |
1355 { | 1534 { |
1356 if (!this._cachedDescription) { | 1535 if (!this._cachedDescription) { |
1357 var children = this._children(); | 1536 var children = this._children(); |
1358 this._cachedDescription = "{" + this._formatValue(children[0].value)
+ " => " + this._formatValue(children[1].value) + "}"; | 1537 this._cachedDescription = "{" + this._formatValue(children[0].value)
+ " => " + this._formatValue(children[1].value) + "}"; |
1359 } | 1538 } |
1360 return this._cachedDescription; | 1539 return this._cachedDescription; |
1361 }, | 1540 }, |
1362 | 1541 |
1363 __proto__: WebInspector.LocalJSONObject.prototype | 1542 __proto__: WebInspector.LocalJSONObject.prototype |
1364 } | 1543 } |
OLD | NEW |