| 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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 * @template T | 142 * @template T |
| 143 */ | 143 */ |
| 144 function nullifyObjectProto(obj) | 144 function nullifyObjectProto(obj) |
| 145 { | 145 { |
| 146 if (obj && typeof obj === "object") | 146 if (obj && typeof obj === "object") |
| 147 obj.__proto__ = null; | 147 obj.__proto__ = null; |
| 148 return obj; | 148 return obj; |
| 149 } | 149 } |
| 150 | 150 |
| 151 /** | 151 /** |
| 152 * @param {*} obj | 152 * @param {number|string} obj |
| 153 * @return {boolean} | 153 * @return {boolean} |
| 154 */ | 154 */ |
| 155 function isUInt32(obj) | 155 function isUInt32(obj) |
| 156 { | 156 { |
| 157 return typeof obj === "number" && obj >>> 0 === obj && (obj > 0 || 1 / obj >
0); | 157 if (typeof obj === "number") |
| 158 return obj >>> 0 === obj && (obj > 0 || 1 / obj > 0); |
| 159 return "" + (obj >>> 0) === obj; |
| 158 } | 160 } |
| 159 | 161 |
| 160 /** | 162 /** |
| 161 * FireBug's array detection. | 163 * FireBug's array detection. |
| 162 * @param {*} obj | 164 * @param {*} obj |
| 163 * @return {boolean} | 165 * @return {boolean} |
| 164 */ | 166 */ |
| 165 function isArrayLike(obj) | 167 function isArrayLike(obj) |
| 166 { | 168 { |
| 167 if (typeof obj !== "object") | 169 if (typeof obj !== "object") |
| 168 return false; | 170 return false; |
| 169 try { | 171 try { |
| 170 if (typeof obj.splice === "function") | 172 if (typeof obj.splice === "function") { |
| 171 return isUInt32(obj.length); | 173 var len = obj.length; |
| 174 return typeof len === "number" && isUInt32(len); |
| 175 } |
| 172 } catch (e) { | 176 } catch (e) { |
| 173 } | 177 } |
| 174 return false; | 178 return false; |
| 175 } | 179 } |
| 176 | 180 |
| 177 /** | 181 /** |
| 178 * @param {number} a | 182 * @param {number} a |
| 179 * @param {number} b | 183 * @param {number} b |
| 180 * @return {number} | 184 * @return {number} |
| 181 */ | 185 */ |
| (...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1377 { | 1381 { |
| 1378 for (var descriptor of descriptors) { | 1382 for (var descriptor of descriptors) { |
| 1379 if (propertiesThreshold.indexes < 0 || propertiesThreshold.propertie
s < 0) | 1383 if (propertiesThreshold.indexes < 0 || propertiesThreshold.propertie
s < 0) |
| 1380 break; | 1384 break; |
| 1381 if (!descriptor) | 1385 if (!descriptor) |
| 1382 continue; | 1386 continue; |
| 1383 if (descriptor.wasThrown) { | 1387 if (descriptor.wasThrown) { |
| 1384 preview.lossless = false; | 1388 preview.lossless = false; |
| 1385 continue; | 1389 continue; |
| 1386 } | 1390 } |
| 1387 if (!descriptor.enumerable && !descriptor.isOwn) | |
| 1388 continue; | |
| 1389 | 1391 |
| 1390 var name = descriptor.name; | 1392 var name = descriptor.name; |
| 1391 if (name === "__proto__") | 1393 if (name === "__proto__") |
| 1392 continue; | 1394 continue; |
| 1393 if (this.subtype === "array" && name === "length") | 1395 if (this.subtype === "array" && name === "length") |
| 1394 continue; | 1396 continue; |
| 1397 if (!descriptor.enumerable && !descriptor.isOwn && !(this.subtype ==
= "array" && isUInt32(name))) |
| 1398 continue; |
| 1395 | 1399 |
| 1396 if (!("value" in descriptor)) { | 1400 if (!("value" in descriptor)) { |
| 1397 preview.lossless = false; | 1401 preview.lossless = false; |
| 1398 this._appendPropertyPreview(preview, { name: name, type: "access
or", __proto__: null }, propertiesThreshold); | 1402 this._appendPropertyPreview(preview, { name: name, type: "access
or", __proto__: null }, propertiesThreshold); |
| 1399 continue; | 1403 continue; |
| 1400 } | 1404 } |
| 1401 | 1405 |
| 1402 var value = descriptor.value; | 1406 var value = descriptor.value; |
| 1403 if (value === null) { | 1407 if (value === null) { |
| 1404 this._appendPropertyPreview(preview, { name: name, type: "object
", subtype: "null", value: "null", __proto__: null }, propertiesThreshold); | 1408 this._appendPropertyPreview(preview, { name: name, type: "object
", subtype: "null", value: "null", __proto__: null }, propertiesThreshold); |
| (...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1947 */ | 1951 */ |
| 1948 _logEvent: function(event) | 1952 _logEvent: function(event) |
| 1949 { | 1953 { |
| 1950 inspectedWindow.console.log(event.type, event); | 1954 inspectedWindow.console.log(event.type, event); |
| 1951 } | 1955 } |
| 1952 } | 1956 } |
| 1953 | 1957 |
| 1954 injectedScript._commandLineAPIImpl = new CommandLineAPIImpl(); | 1958 injectedScript._commandLineAPIImpl = new CommandLineAPIImpl(); |
| 1955 return injectedScript; | 1959 return injectedScript; |
| 1956 }) | 1960 }) |
| OLD | NEW |