| 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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 * @template T | 104 * @template T |
| 105 */ | 105 */ |
| 106 function nullifyObjectProto(obj) | 106 function nullifyObjectProto(obj) |
| 107 { | 107 { |
| 108 if (obj && typeof obj === "object") | 108 if (obj && typeof obj === "object") |
| 109 obj.__proto__ = null; | 109 obj.__proto__ = null; |
| 110 return obj; | 110 return obj; |
| 111 } | 111 } |
| 112 | 112 |
| 113 /** | 113 /** |
| 114 * @param {string} name | |
| 115 * @return {boolean} | |
| 116 */ | |
| 117 function isArrayIndexPropertyName(name) | |
| 118 { | |
| 119 // Array index check according to the ES5-15.4. | |
| 120 var index = name >>> 0; | |
| 121 return toString(index) === name && index !== 0xffffffff; | |
| 122 } | |
| 123 | |
| 124 /** | |
| 125 * @constructor | 114 * @constructor |
| 126 */ | 115 */ |
| 127 var InjectedScript = function() | 116 var InjectedScript = function() |
| 128 { | 117 { |
| 129 /** @type {number} */ | 118 /** @type {number} */ |
| 130 this._lastBoundObjectId = 1; | 119 this._lastBoundObjectId = 1; |
| 131 /** @type {!Object.<number, Object>} */ | 120 /** @type {!Object.<number, Object>} */ |
| 132 this._idToWrappedObject = { __proto__: null }; | 121 this._idToWrappedObject = { __proto__: null }; |
| 133 /** @type {!Object.<number, string>} */ | 122 /** @type {!Object.<number, string>} */ |
| 134 this._idToObjectGroupName = { __proto__: null }; | 123 this._idToObjectGroupName = { __proto__: null }; |
| (...skipping 924 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1059 var nameToDescriptors = { __proto__: null }; | 1048 var nameToDescriptors = { __proto__: null }; |
| 1060 for (var i = 0; i < descriptors.length; ++i) { | 1049 for (var i = 0; i < descriptors.length; ++i) { |
| 1061 var descriptor = descriptors[i]; | 1050 var descriptor = descriptors[i]; |
| 1062 nameToDescriptors["#" + descriptor.name] = descriptor; | 1051 nameToDescriptors["#" + descriptor.name] = descriptor; |
| 1063 } | 1052 } |
| 1064 descriptors = []; | 1053 descriptors = []; |
| 1065 for (var i = 0; i < firstLevelKeys.length; ++i) | 1054 for (var i = 0; i < firstLevelKeys.length; ++i) |
| 1066 descriptors.push(nameToDescriptors["#" + firstLevelKeys[i]])
; | 1055 descriptors.push(nameToDescriptors["#" + firstLevelKeys[i]])
; |
| 1067 } | 1056 } |
| 1068 | 1057 |
| 1069 var isArray = (this.subtype === "array"); | |
| 1070 for (var i = 0; i < descriptors.length; ++i) { | 1058 for (var i = 0; i < descriptors.length; ++i) { |
| 1071 if (propertiesThreshold.indexes < 0 && propertiesThreshold.prope
rties < 0) | 1059 if (propertiesThreshold.indexes < 0 || propertiesThreshold.prope
rties < 0) |
| 1072 break; | 1060 break; |
| 1073 | 1061 |
| 1074 var descriptor = descriptors[i]; | 1062 var descriptor = descriptors[i]; |
| 1075 if (!descriptor) | 1063 if (!descriptor) |
| 1076 continue; | 1064 continue; |
| 1077 if (descriptor.wasThrown) { | 1065 if (descriptor.wasThrown) { |
| 1078 preview.lossless = false; | 1066 preview.lossless = false; |
| 1079 continue; | 1067 continue; |
| 1080 } | 1068 } |
| 1069 if (!descriptor.enumerable && !descriptor.isOwn) |
| 1070 continue; |
| 1081 | 1071 |
| 1082 var name = descriptor.name; | 1072 var name = descriptor.name; |
| 1083 if (name === "__proto__") | 1073 if (name === "__proto__") |
| 1084 continue; | 1074 continue; |
| 1085 if (isArray && name === "length") | 1075 if (this.subtype === "array" && name === "length") |
| 1086 continue; | |
| 1087 | |
| 1088 var isArrayIndex = isArray && isArrayIndexPropertyName(name); | |
| 1089 if (!descriptor.enumerable && !descriptor.isOwn && !isArrayIndex
) | |
| 1090 continue; | 1076 continue; |
| 1091 | 1077 |
| 1092 if (!("value" in descriptor)) { | 1078 if (!("value" in descriptor)) { |
| 1093 preview.lossless = false; | 1079 preview.lossless = false; |
| 1094 this._appendPropertyPreview(preview, { name: name, type: "ac
cessor", __proto__: null }, propertiesThreshold); | 1080 this._appendPropertyPreview(preview, { name: name, type: "ac
cessor", __proto__: null }, propertiesThreshold); |
| 1095 continue; | 1081 continue; |
| 1096 } | 1082 } |
| 1097 | 1083 |
| 1098 var value = descriptor.value; | 1084 var value = descriptor.value; |
| 1099 if (value === null) { | 1085 if (value === null) { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1147 return preview; | 1133 return preview; |
| 1148 }, | 1134 }, |
| 1149 | 1135 |
| 1150 /** | 1136 /** |
| 1151 * @param {!RuntimeAgent.ObjectPreview} preview | 1137 * @param {!RuntimeAgent.ObjectPreview} preview |
| 1152 * @param {!Object} property | 1138 * @param {!Object} property |
| 1153 * @param {!Object} propertiesThreshold | 1139 * @param {!Object} propertiesThreshold |
| 1154 */ | 1140 */ |
| 1155 _appendPropertyPreview: function(preview, property, propertiesThreshold) | 1141 _appendPropertyPreview: function(preview, property, propertiesThreshold) |
| 1156 { | 1142 { |
| 1157 var threshold; | 1143 if (toString(property.name >>> 0) === property.name) |
| 1158 if (isArrayIndexPropertyName(property.name)) | 1144 propertiesThreshold.indexes--; |
| 1159 threshold = --propertiesThreshold.indexes; | |
| 1160 else | 1145 else |
| 1161 threshold = --propertiesThreshold.properties; | 1146 propertiesThreshold.properties--; |
| 1162 if (threshold < 0) { | 1147 if (propertiesThreshold.indexes < 0 || propertiesThreshold.properties <
0) { |
| 1163 preview.overflow = true; | 1148 preview.overflow = true; |
| 1164 preview.lossless = false; | 1149 preview.lossless = false; |
| 1165 } else { | 1150 } else { |
| 1166 preview.properties.push(property); | 1151 preview.properties.push(property); |
| 1167 } | 1152 } |
| 1168 }, | 1153 }, |
| 1169 | 1154 |
| 1170 /** | 1155 /** |
| 1171 * @param {string} string | 1156 * @param {string} string |
| 1172 * @param {number} maxLength | 1157 * @param {number} maxLength |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1580 */ | 1565 */ |
| 1581 _logEvent: function(event) | 1566 _logEvent: function(event) |
| 1582 { | 1567 { |
| 1583 inspectedWindow.console.log(event.type, event); | 1568 inspectedWindow.console.log(event.type, event); |
| 1584 } | 1569 } |
| 1585 } | 1570 } |
| 1586 | 1571 |
| 1587 injectedScript._commandLineAPIImpl = new CommandLineAPIImpl(); | 1572 injectedScript._commandLineAPIImpl = new CommandLineAPIImpl(); |
| 1588 return injectedScript; | 1573 return injectedScript; |
| 1589 }) | 1574 }) |
| OLD | NEW |