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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 108 * FireBug's array detection. | 108 * FireBug's array detection. |
| 109 * @param {*} obj | 109 * @param {*} obj |
| 110 * @return {boolean} | 110 * @return {boolean} |
| 111 */ | 111 */ |
| 112 function isArrayLike(obj) | 112 function isArrayLike(obj) |
| 113 { | 113 { |
| 114 if (typeof obj !== "object") | 114 if (typeof obj !== "object") |
| 115 return false; | 115 return false; |
| 116 try { | 116 try { |
| 117 if (typeof obj.splice === "function") { | 117 if (typeof obj.splice === "function") { |
| 118 if (!InjectedScriptHost.suppressWarningsAndCallFunction(Object.proto type.hasOwnProperty, obj, ["length"])) | 118 if (!InjectedScriptHost.hasOwnProperty(/** @type {?Object} */ (obj), "length")) |
|
kozy
2016/07/29 22:11:55
Please align this type with externs. It's !Object
dgozman
2016/07/29 23:30:26
Done.
| |
| 119 return false; | 119 return false; |
| 120 var len = obj.length; | 120 var len = obj.length; |
| 121 return typeof len === "number" && isUInt32(len); | 121 return typeof len === "number" && isUInt32(len); |
| 122 } | 122 } |
| 123 } catch (e) { | 123 } catch (e) { |
| 124 } | 124 } |
| 125 return false; | 125 return false; |
| 126 } | 126 } |
| 127 | 127 |
| 128 /** | 128 /** |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 163 domAttributesWithObservableSideEffectOnGet["Response"]["body"] = true; | 163 domAttributesWithObservableSideEffectOnGet["Response"]["body"] = true; |
| 164 | 164 |
| 165 /** | 165 /** |
| 166 * @param {!Object} object | 166 * @param {!Object} object |
| 167 * @param {string} attribute | 167 * @param {string} attribute |
| 168 * @return {boolean} | 168 * @return {boolean} |
| 169 */ | 169 */ |
| 170 function doesAttributeHaveObservableSideEffectOnGet(object, attribute) | 170 function doesAttributeHaveObservableSideEffectOnGet(object, attribute) |
| 171 { | 171 { |
| 172 for (var interfaceName in domAttributesWithObservableSideEffectOnGet) { | 172 for (var interfaceName in domAttributesWithObservableSideEffectOnGet) { |
| 173 var isInstance = InjectedScriptHost.suppressWarningsAndCallFunction(func tion(object, interfaceName) { | 173 var interfaceFunction = inspectedGlobalObject[interfaceName]; |
| 174 return /* suppressBlacklist */ typeof inspectedGlobalObject[interfac eName] === "function" && object instanceof inspectedGlobalObject[interfaceName]; | 174 var isInstance = typeof interfaceFunction === "function" && object insta nceof interfaceFunction; |
| 175 }, null, [object, interfaceName]); | 175 if (isInstance) |
| 176 if (isInstance) { | |
| 177 return attribute in domAttributesWithObservableSideEffectOnGet[inter faceName]; | 176 return attribute in domAttributesWithObservableSideEffectOnGet[inter faceName]; |
| 178 } | |
| 179 } | 177 } |
| 180 return false; | 178 return false; |
| 181 } | 179 } |
| 182 | 180 |
| 183 /** | 181 /** |
| 184 * @constructor | 182 * @constructor |
| 185 */ | 183 */ |
| 186 var InjectedScript = function() | 184 var InjectedScript = function() |
| 187 { | 185 { |
| 188 } | 186 } |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 390 if (isSymbol(property)) | 388 if (isSymbol(property)) |
| 391 name = /** @type {string} */ (injectedScript._describe(prope rty)); | 389 name = /** @type {string} */ (injectedScript._describe(prope rty)); |
| 392 else | 390 else |
| 393 name = typeof property === "number" ? ("" + property) : /** @type {string} */(property); | 391 name = typeof property === "number" ? ("" + property) : /** @type {string} */(property); |
| 394 | 392 |
| 395 if (propertyProcessed[property]) | 393 if (propertyProcessed[property]) |
| 396 continue; | 394 continue; |
| 397 | 395 |
| 398 try { | 396 try { |
| 399 propertyProcessed[property] = true; | 397 propertyProcessed[property] = true; |
| 400 var descriptor = nullifyObjectProto(InjectedScriptHost.suppr essWarningsAndCallFunction(Object.getOwnPropertyDescriptor, Object, [o, property ])); | 398 var descriptor = nullifyObjectProto(Object.getOwnPropertyDes criptor(o, property)); |
| 401 if (descriptor) { | 399 if (descriptor) { |
| 402 if (accessorPropertiesOnly && !("get" in descriptor || " set" in descriptor)) | 400 if (accessorPropertiesOnly && !("get" in descriptor || " set" in descriptor)) |
| 403 continue; | 401 continue; |
| 404 if ("get" in descriptor && "set" in descriptor && name ! = "__proto__" && InjectedScriptHost.formatAccessorsAsProperties(object, descript or.get) && !doesAttributeHaveObservableSideEffectOnGet(object, name)) { | 402 if ("get" in descriptor && "set" in descriptor && name ! = "__proto__" && InjectedScriptHost.formatAccessorsAsProperties(object, descript or.get) && !doesAttributeHaveObservableSideEffectOnGet(object, name)) { |
| 405 descriptor.value = InjectedScriptHost.suppressWarnin gsAndCallFunction(function(attribute) { return this[attribute]; }, object, [prop erty]); | 403 descriptor.value = object[property]; |
| 406 descriptor.isOwn = true; | 404 descriptor.isOwn = true; |
| 407 delete descriptor.get; | 405 delete descriptor.get; |
| 408 delete descriptor.set; | 406 delete descriptor.set; |
| 409 } | 407 } |
| 410 } else { | 408 } else { |
| 411 // Not all bindings provide proper descriptors. Fall bac k to the writable, configurable property. | 409 // Not all bindings provide proper descriptors. Fall bac k to the writable, configurable property. |
| 412 if (accessorPropertiesOnly) | 410 if (accessorPropertiesOnly) |
| 413 continue; | 411 continue; |
| 414 try { | 412 try { |
| 415 descriptor = { name: name, value: o[property], writa ble: false, configurable: false, enumerable: false, __proto__: null }; | 413 descriptor = { name: name, value: o[property], writa ble: false, configurable: false, enumerable: false, __proto__: null }; |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 435 if (isSymbol(property)) | 433 if (isSymbol(property)) |
| 436 descriptor.symbol = property; | 434 descriptor.symbol = property; |
| 437 yield descriptor; | 435 yield descriptor; |
| 438 } | 436 } |
| 439 } | 437 } |
| 440 | 438 |
| 441 if (propertyNamesOnly) { | 439 if (propertyNamesOnly) { |
| 442 for (var i = 0; i < propertyNamesOnly.length; ++i) { | 440 for (var i = 0; i < propertyNamesOnly.length; ++i) { |
| 443 var name = propertyNamesOnly[i]; | 441 var name = propertyNamesOnly[i]; |
| 444 for (var o = object; this._isDefined(o); o = InjectedScriptHost. prototype(o)) { | 442 for (var o = object; this._isDefined(o); o = InjectedScriptHost. prototype(o)) { |
| 445 if (InjectedScriptHost.suppressWarningsAndCallFunction(Objec t.prototype.hasOwnProperty, o, [name])) { | 443 if (InjectedScriptHost.hasOwnProperty(o, name)) { |
| 446 for (var descriptor of process(o, [name])) | 444 for (var descriptor of process(o, [name])) |
| 447 yield descriptor; | 445 yield descriptor; |
| 448 break; | 446 break; |
| 449 } | 447 } |
| 450 if (ownProperties) | 448 if (ownProperties) |
| 451 break; | 449 break; |
| 452 } | 450 } |
| 453 } | 451 } |
| 454 return; | 452 return; |
| 455 } | 453 } |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 617 if (typeof obj.length === "number") | 615 if (typeof obj.length === "number") |
| 618 className += "[" + obj.length + "]"; | 616 className += "[" + obj.length + "]"; |
| 619 return className; | 617 return className; |
| 620 } | 618 } |
| 621 | 619 |
| 622 if (typeof obj === "function") | 620 if (typeof obj === "function") |
| 623 return toString(obj); | 621 return toString(obj); |
| 624 | 622 |
| 625 if (isSymbol(obj)) { | 623 if (isSymbol(obj)) { |
| 626 try { | 624 try { |
| 627 return /** @type {string} */ (InjectedScriptHost.suppressWarning sAndCallFunction(Symbol.prototype.toString, obj)) || "Symbol"; | 625 return /** @type {string} */ (obj.toString()) || "Symbol"; |
|
kozy
2016/07/29 22:11:55
please remove /** @type {string} */
dgozman
2016/07/29 23:30:26
Done.
| |
| 628 } catch (e) { | 626 } catch (e) { |
| 629 return "Symbol"; | 627 return "Symbol"; |
| 630 } | 628 } |
| 631 } | 629 } |
| 632 | 630 |
| 633 if (InjectedScriptHost.subtype(obj) === "error") { | 631 if (InjectedScriptHost.subtype(obj) === "error") { |
| 634 try { | 632 try { |
| 635 var stack = obj.stack; | 633 var stack = obj.stack; |
| 636 var message = obj.message && obj.message.length ? ": " + obj.mes sage : ""; | 634 var message = obj.message && obj.message.length ? ": " + obj.mes sage : ""; |
| 637 var firstCallFrame = /^\s+at\s/m.exec(stack); | 635 var firstCallFrame = /^\s+at\s/m.exec(stack); |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 784 } | 782 } |
| 785 | 783 |
| 786 /** | 784 /** |
| 787 * @suppressReceiverCheck | 785 * @suppressReceiverCheck |
| 788 * @param {*} object | 786 * @param {*} object |
| 789 * @param {*=} customObjectConfig | 787 * @param {*=} customObjectConfig |
| 790 * @return {*} | 788 * @return {*} |
| 791 */ | 789 */ |
| 792 function wrap(object, customObjectConfig) | 790 function wrap(object, customObjectConfig) |
| 793 { | 791 { |
| 794 return InjectedScriptHost.suppressWarningsAndCallFunction(injectedSc ript._wrapObject, injectedScript, [ object, objectGroupName, false, false, null, false, false, customObjectConfig ]); | 792 return injectedScript._wrapObject(object, objectGroupName, false, fa lse, null, false, false, customObjectConfig); |
| 795 } | 793 } |
| 796 | 794 |
| 797 try { | 795 try { |
| 798 var formatters = inspectedGlobalObject["devtoolsFormatters"]; | 796 var formatters = inspectedGlobalObject["devtoolsFormatters"]; |
| 799 if (!formatters || !isArrayLike(formatters)) | 797 if (!formatters || !isArrayLike(formatters)) |
| 800 return null; | 798 return null; |
| 801 | 799 |
| 802 for (var i = 0; i < formatters.length; ++i) { | 800 for (var i = 0; i < formatters.length; ++i) { |
| 803 try { | 801 try { |
| 804 var formatted = formatters[i].header(object, customObjectCon fig); | 802 var formatted = formatters[i].header(object, customObjectCon fig); |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1052 return string.substr(0, leftHalf) + "\u2026" + string.substr(string. length - rightHalf, rightHalf); | 1050 return string.substr(0, leftHalf) + "\u2026" + string.substr(string. length - rightHalf, rightHalf); |
| 1053 } | 1051 } |
| 1054 return string.substr(0, maxLength) + "\u2026"; | 1052 return string.substr(0, maxLength) + "\u2026"; |
| 1055 }, | 1053 }, |
| 1056 | 1054 |
| 1057 __proto__: null | 1055 __proto__: null |
| 1058 } | 1056 } |
| 1059 | 1057 |
| 1060 return injectedScript; | 1058 return injectedScript; |
| 1061 }) | 1059 }) |
| OLD | NEW |