Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2013 Google Inc. All rights reserved. | 3 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 439 * @param {boolean=} ownProperties | 439 * @param {boolean=} ownProperties |
| 440 * @param {boolean=} accessorPropertiesOnly | 440 * @param {boolean=} accessorPropertiesOnly |
| 441 * @param {?Array.<string>=} propertyNamesOnly | 441 * @param {?Array.<string>=} propertyNamesOnly |
| 442 */ | 442 */ |
| 443 _propertyDescriptors: function*(object, ownProperties, accessorPropertiesOnl y, propertyNamesOnly) | 443 _propertyDescriptors: function*(object, ownProperties, accessorPropertiesOnl y, propertyNamesOnly) |
| 444 { | 444 { |
| 445 var propertyProcessed = { __proto__: null }; | 445 var propertyProcessed = { __proto__: null }; |
| 446 | 446 |
| 447 /** | 447 /** |
| 448 * @param {?Object} o | 448 * @param {?Object} o |
| 449 * @param {!Iterable.<string|symbol>|!Array.<string|symbol>} properties | 449 * @param {!Iterable<string|symbol|number>|!Array<string|number|symbol>} properties |
| 450 */ | 450 */ |
| 451 function* process(o, properties) | 451 function* process(o, properties) |
| 452 { | 452 { |
| 453 for (var property of properties) { | 453 for (var property of properties) { |
| 454 var name; | |
| 455 if (isSymbol(property)) | |
|
pfeldman
2016/05/04 23:01:48
Are changes in this file related to your change? D
| |
| 456 name = /** @type {string} */ (injectedScript._describe(prope rty)); | |
| 457 else | |
| 458 name = typeof property === "number" ? ("" + property) : /** @type {string} */(property); | |
| 459 | |
| 454 if (propertyProcessed[property]) | 460 if (propertyProcessed[property]) |
| 455 continue; | 461 continue; |
| 456 | 462 |
| 457 var name = property; | |
| 458 if (isSymbol(property)) | |
| 459 name = /** @type {string} */ (injectedScript._describe(prope rty)); | |
| 460 | |
| 461 try { | 463 try { |
| 462 propertyProcessed[property] = true; | 464 propertyProcessed[property] = true; |
| 463 var descriptor = nullifyObjectProto(InjectedScriptHost.suppr essWarningsAndCallFunction(Object.getOwnPropertyDescriptor, Object, [o, property ])); | 465 var descriptor = nullifyObjectProto(InjectedScriptHost.suppr essWarningsAndCallFunction(Object.getOwnPropertyDescriptor, Object, [o, property ])); |
| 464 if (descriptor) { | 466 if (descriptor) { |
| 465 if (accessorPropertiesOnly && !("get" in descriptor || " set" in descriptor)) | 467 if (accessorPropertiesOnly && !("get" in descriptor || " set" in descriptor)) |
| 466 continue; | 468 continue; |
| 467 if ("get" in descriptor && "set" in descriptor && name ! = "__proto__" && InjectedScriptHost.formatAccessorsAsProperties(object) && !does AttributeHaveObservableSideEffectOnGet(object, name)) { | 469 if ("get" in descriptor && "set" in descriptor && name ! = "__proto__" && InjectedScriptHost.formatAccessorsAsProperties(object) && !does AttributeHaveObservableSideEffectOnGet(object, name)) { |
| 468 descriptor.value = InjectedScriptHost.suppressWarnin gsAndCallFunction(function(attribute) { return this[attribute]; }, object, [name ]); | 470 descriptor.value = InjectedScriptHost.suppressWarnin gsAndCallFunction(function(attribute) { return this[attribute]; }, object, [prop erty]); |
| 469 descriptor.isOwn = true; | 471 descriptor.isOwn = true; |
| 470 delete descriptor.get; | 472 delete descriptor.get; |
| 471 delete descriptor.set; | 473 delete descriptor.set; |
| 472 } | 474 } |
| 473 } else { | 475 } else { |
| 474 // Not all bindings provide proper descriptors. Fall bac k to the writable, configurable property. | 476 // Not all bindings provide proper descriptors. Fall bac k to the writable, configurable property. |
| 475 if (accessorPropertiesOnly) | 477 if (accessorPropertiesOnly) |
| 476 continue; | 478 continue; |
| 477 try { | 479 try { |
| 478 descriptor = { name: name, value: o[property], writa ble: false, configurable: false, enumerable: false, __proto__: null }; | 480 descriptor = { name: name, value: o[property], writa ble: false, configurable: false, enumerable: false, __proto__: null }; |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 494 | 496 |
| 495 descriptor.name = name; | 497 descriptor.name = name; |
| 496 if (o === object) | 498 if (o === object) |
| 497 descriptor.isOwn = true; | 499 descriptor.isOwn = true; |
| 498 if (isSymbol(property)) | 500 if (isSymbol(property)) |
| 499 descriptor.symbol = property; | 501 descriptor.symbol = property; |
| 500 yield descriptor; | 502 yield descriptor; |
| 501 } | 503 } |
| 502 } | 504 } |
| 503 | 505 |
| 504 /** | |
| 505 * @param {number} length | |
| 506 */ | |
| 507 function* arrayIndexNames(length) | |
| 508 { | |
| 509 for (var i = 0; i < length; ++i) | |
| 510 yield "" + i; | |
| 511 } | |
| 512 | |
| 513 if (propertyNamesOnly) { | 506 if (propertyNamesOnly) { |
| 514 for (var i = 0; i < propertyNamesOnly.length; ++i) { | 507 for (var i = 0; i < propertyNamesOnly.length; ++i) { |
| 515 var name = propertyNamesOnly[i]; | 508 var name = propertyNamesOnly[i]; |
| 516 for (var o = object; this._isDefined(o); o = o.__proto__) { | 509 for (var o = object; this._isDefined(o); o = InjectedScriptHost. prototype(o)) { |
| 517 if (InjectedScriptHost.suppressWarningsAndCallFunction(Objec t.prototype.hasOwnProperty, o, [name])) { | 510 if (InjectedScriptHost.suppressWarningsAndCallFunction(Objec t.prototype.hasOwnProperty, o, [name])) { |
| 518 for (var descriptor of process(o, [name])) | 511 for (var descriptor of process(o, [name])) |
| 519 yield descriptor; | 512 yield descriptor; |
| 520 break; | 513 break; |
| 521 } | 514 } |
| 522 if (ownProperties) | 515 if (ownProperties) |
| 523 break; | 516 break; |
| 524 } | 517 } |
| 525 } | 518 } |
| 526 return; | 519 return; |
| 527 } | 520 } |
| 528 | 521 |
| 529 var skipGetOwnPropertyNames; | 522 for (var o = object; this._isDefined(o); o = InjectedScriptHost.prototyp e(o)) { |
| 530 try { | 523 for (var property of process(o, InjectedScriptHost.ownPropertyNames( o))) |
| 531 skipGetOwnPropertyNames = InjectedScriptHost.isTypedArray(object) && object.length > 500000; | 524 yield property; |
| 532 } catch (e) { | |
| 533 } | |
| 534 | |
| 535 for (var o = object; this._isDefined(o); o = o.__proto__) { | |
| 536 if (skipGetOwnPropertyNames && o === object) { | |
| 537 // Avoid OOM crashes from getting all own property names of a la rge TypedArray. | |
| 538 for (var descriptor of process(o, arrayIndexNames(o.length))) | |
| 539 yield descriptor; | |
| 540 } else { | |
| 541 // First call Object.keys() to enforce ordering of the property descriptors. | |
| 542 for (var descriptor of process(o, Object.keys(/** @type {!Object } */ (o)))) | |
| 543 yield descriptor; | |
| 544 for (var descriptor of process(o, Object.getOwnPropertyNames(/** @type {!Object} */ (o)))) | |
| 545 yield descriptor; | |
| 546 } | |
| 547 if (Object.getOwnPropertySymbols) { | |
| 548 for (var descriptor of process(o, Object.getOwnPropertySymbols(/ ** @type {!Object} */ (o)))) | |
| 549 yield descriptor; | |
| 550 } | |
| 551 if (ownProperties) { | 525 if (ownProperties) { |
| 552 if (object.__proto__ && !accessorPropertiesOnly) | 526 var proto = InjectedScriptHost.prototype(o); |
| 553 yield { name: "__proto__", value: object.__proto__, writable : true, configurable: true, enumerable: false, isOwn: true, __proto__: null }; | 527 if (proto && !accessorPropertiesOnly) |
| 528 yield { name: "__proto__", value: proto, writable: true, con figurable: true, enumerable: false, isOwn: true, __proto__: null }; | |
| 554 break; | 529 break; |
| 555 } | 530 } |
| 556 } | 531 } |
| 557 }, | 532 }, |
| 558 | 533 |
| 559 /** | 534 /** |
| 560 * @param {string|undefined} objectGroupName | 535 * @param {string|undefined} objectGroupName |
| 561 * @param {*} jsonMLObject | 536 * @param {*} jsonMLObject |
| 562 * @throws {string} error message | 537 * @throws {string} error message |
| 563 */ | 538 */ |
| (...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1325 /** | 1300 /** |
| 1326 * @param {!Event} event | 1301 * @param {!Event} event |
| 1327 */ | 1302 */ |
| 1328 CommandLineAPIImpl._logEvent = function(event) | 1303 CommandLineAPIImpl._logEvent = function(event) |
| 1329 { | 1304 { |
| 1330 inspectedGlobalObject.console.log(event.type, event); | 1305 inspectedGlobalObject.console.log(event.type, event); |
| 1331 } | 1306 } |
| 1332 | 1307 |
| 1333 return injectedScript; | 1308 return injectedScript; |
| 1334 }) | 1309 }) |
| OLD | NEW |