Index: chrome/renderer/resources/extensions/utils.js |
diff --git a/chrome/renderer/resources/extensions/utils.js b/chrome/renderer/resources/extensions/utils.js |
index ed35e15f9fcf11e06d2a2a5792ff35c4a580d03a..50134eadb569f2b40a5ebb3c6f033eae1b1efa28 100644 |
--- a/chrome/renderer/resources/extensions/utils.js |
+++ b/chrome/renderer/resources/extensions/utils.js |
@@ -4,10 +4,20 @@ |
var chrome = requireNative('chrome').GetChrome(); |
-function forEach(dict, f) { |
- for (var key in dict) { |
- if (dict.hasOwnProperty(key)) |
- f(key, dict[key]); |
+function forEach(obj, f, self) { |
+ // For arrays, make sure the indices are numbers not strings - and in that |
+ // case this method can be more efficient by assuming the array isn't sparse. |
+ // |
+ // Note: not (instanceof Array) because the array might come from a different |
+ // context than our own. |
+ if (obj.constructor && obj.constructor.name == 'Array') { |
+ for (var i = 0; i < obj.length; i++) |
+ f.call(self, i, obj[i]); |
+ } else { |
+ for (var key in obj) { |
+ if (obj.hasOwnProperty(key)) |
+ f.call(self, key, obj[key]); |
+ } |
} |
} |