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

Side by Side Diff: src/inspector/injected-script-source.js

Issue 2767323002: [inspector] better isArrayLike for injected-script-source.js (Closed)
Patch Set: addressed comments Created 3 years, 9 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
« no previous file with comments | « no previous file | src/inspector/injected_script_externs.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 107
108 /** 108 /**
109 * FireBug's array detection. 109 * FireBug's array detection.
110 * @param {*} obj 110 * @param {*} obj
111 * @return {boolean} 111 * @return {boolean}
112 */ 112 */
113 function isArrayLike(obj) 113 function isArrayLike(obj)
114 { 114 {
115 if (typeof obj !== "object") 115 if (typeof obj !== "object")
116 return false; 116 return false;
117 try { 117 var splice = InjectedScriptHost.getProperty(obj, "splice");
118 if (typeof obj.splice === "function") { 118 if (typeof splice === "function") {
119 if (!InjectedScriptHost.objectHasOwnProperty(/** @type {!Object} */ (obj), "length")) 119 if (!InjectedScriptHost.objectHasOwnProperty(/** @type {!Object} */ (obj ), "length"))
120 return false; 120 return false;
121 var len = obj.length; 121 var len = InjectedScriptHost.getProperty(obj, "length");
122 return typeof len === "number" && isUInt32(len); 122 return typeof len === "number" && isUInt32(len);
123 }
124 } catch (e) {
125 } 123 }
126 return false; 124 return false;
127 } 125 }
128 126
129 /** 127 /**
130 * @param {number} a 128 * @param {number} a
131 * @param {number} b 129 * @param {number} b
132 * @return {number} 130 * @return {number}
133 */ 131 */
134 function max(a, b) 132 function max(a, b)
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 * @param {!Object} object 383 * @param {!Object} object
386 * @param {!function(!Array<!Object>, !Object)} addPropertyIfNeeded 384 * @param {!function(!Array<!Object>, !Object)} addPropertyIfNeeded
387 * @param {boolean=} ownProperties 385 * @param {boolean=} ownProperties
388 * @param {boolean=} accessorPropertiesOnly 386 * @param {boolean=} accessorPropertiesOnly
389 * @param {?Array<string>=} propertyNamesOnly 387 * @param {?Array<string>=} propertyNamesOnly
390 * @return {!Array<!Object>} 388 * @return {!Array<!Object>}
391 */ 389 */
392 _propertyDescriptors: function(object, addPropertyIfNeeded, ownProperties, a ccessorPropertiesOnly, propertyNamesOnly) 390 _propertyDescriptors: function(object, addPropertyIfNeeded, ownProperties, a ccessorPropertiesOnly, propertyNamesOnly)
393 { 391 {
394 var descriptors = []; 392 var descriptors = [];
395 descriptors.__proto__ = null; 393 InjectedScriptHost.nullifyPrototype(descriptors);
396 var propertyProcessed = { __proto__: null }; 394 var propertyProcessed = { __proto__: null };
397 var subtype = InjectedScriptHost.subtype(object); 395 var subtype = InjectedScriptHost.subtype(object);
398 396
399 /** 397 /**
400 * @param {!Object} o 398 * @param {!Object} o
401 * @param {!Array<string|number|symbol>=} properties 399 * @param {!Array<string|number|symbol>=} properties
402 * @param {number=} objectLength 400 * @param {number=} objectLength
403 * @return {boolean} 401 * @return {boolean}
404 */ 402 */
405 function process(o, properties, objectLength) 403 function process(o, properties, objectLength)
(...skipping 10 matching lines...) Expand all
416 name = /** @type {string} */ (injectedScript._describe(prope rty)); 414 name = /** @type {string} */ (injectedScript._describe(prope rty));
417 else 415 else
418 name = typeof property === "number" ? ("" + property) : /** @type {string} */(property); 416 name = typeof property === "number" ? ("" + property) : /** @type {string} */(property);
419 417
420 if (subtype === "internal#scopeList" && name === "length") 418 if (subtype === "internal#scopeList" && name === "length")
421 continue; 419 continue;
422 420
423 var descriptor; 421 var descriptor;
424 try { 422 try {
425 descriptor = Object.getOwnPropertyDescriptor(o, property); 423 descriptor = Object.getOwnPropertyDescriptor(o, property);
424 InjectedScriptHost.nullifyPrototype(descriptor);
426 var isAccessorProperty = descriptor && ("get" in descriptor || "set" in descriptor); 425 var isAccessorProperty = descriptor && ("get" in descriptor || "set" in descriptor);
427 if (accessorPropertiesOnly && !isAccessorProperty) 426 if (accessorPropertiesOnly && !isAccessorProperty)
428 continue; 427 continue;
429 if (descriptor && "get" in descriptor && "set" in descriptor && name !== "__proto__" && 428 if (descriptor && "get" in descriptor && "set" in descriptor && name !== "__proto__" &&
430 InjectedScriptHost.formatAccessorsAsProperties(objec t, descriptor.get) && 429 InjectedScriptHost.formatAccessorsAsProperties(objec t, descriptor.get) &&
431 !doesAttributeHaveObservableSideEffectOnGet(object, name)) { 430 !doesAttributeHaveObservableSideEffectOnGet(object, name)) {
432 descriptor.value = object[property]; 431 descriptor.value = object[property];
433 descriptor.isOwn = true; 432 descriptor.isOwn = true;
434 delete descriptor.get; 433 delete descriptor.get;
435 delete descriptor.set; 434 delete descriptor.set;
436 } 435 }
437 } catch (e) { 436 } catch (e) {
438 if (accessorPropertiesOnly) 437 if (accessorPropertiesOnly)
439 continue; 438 continue;
440 descriptor = { value: e, wasThrown: true }; 439 descriptor = { value: e, wasThrown: true, __proto__: null };
441 } 440 }
442 441
443 // Not all bindings provide proper descriptors. Fall back to the non-configurable, non-enumerable, 442 // Not all bindings provide proper descriptors. Fall back to the non-configurable, non-enumerable,
444 // non-writable property. 443 // non-writable property.
445 if (!descriptor) { 444 if (!descriptor) {
446 try { 445 try {
447 descriptor = { value: o[property], writable: false }; 446 descriptor = { value: o[property], writable: false, __pr oto__: null };
448 } catch (e) { 447 } catch (e) {
449 // Silent catch. 448 // Silent catch.
450 continue; 449 continue;
451 } 450 }
452 } 451 }
453 452
454 descriptor.name = name; 453 descriptor.name = name;
455 if (o === object) 454 if (o === object)
456 descriptor.isOwn = true; 455 descriptor.isOwn = true;
457 if (isSymbol(property)) 456 if (isSymbol(property))
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 return string.substr(0, leftHalf) + "\u2026" + string.substr(string. length - rightHalf, rightHalf); 1085 return string.substr(0, leftHalf) + "\u2026" + string.substr(string. length - rightHalf, rightHalf);
1087 } 1086 }
1088 return string.substr(0, maxLength) + "\u2026"; 1087 return string.substr(0, maxLength) + "\u2026";
1089 }, 1088 },
1090 1089
1091 __proto__: null 1090 __proto__: null
1092 } 1091 }
1093 1092
1094 return injectedScript; 1093 return injectedScript;
1095 }) 1094 })
OLDNEW
« no previous file with comments | « no previous file | src/inspector/injected_script_externs.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698