Improve Map feature check.
This helps us to avoid hitting legacy Map implementations
that use different iteration protocol (i.e. Firefox 24).
Change-Id: Ie6542e4c6fba4bb23fc63c7a9bcf4f256bce73b5
diff --git a/user/super/com/google/gwt/emul/java/util/InternalJsMapFactory.java b/user/super/com/google/gwt/emul/java/util/InternalJsMapFactory.java
index e4e5598..63f98ba 100644
--- a/user/super/com/google/gwt/emul/java/util/InternalJsMapFactory.java
+++ b/user/super/com/google/gwt/emul/java/util/InternalJsMapFactory.java
@@ -25,7 +25,16 @@
private static final JavaScriptObject jsMapCtor = getJsMapConstructor();
private static native JavaScriptObject getJsMapConstructor() /*-{
- if (typeof Map === 'function' && Map.prototype.entries) {
+ // Firefox 24 & 25 throws StopIteration to signal the end of iteration.
+ function isCorrectIterationProtocol() {
+ try {
+ return new Map().entries().next().done;
+ } catch(e) {
+ return false;
+ }
+ }
+
+ if (typeof Map === 'function' && Map.prototype.entries && isCorrectIterationProtocol()) {
return Map;
} else {
return @InternalJsMapFactory::getJsMapPolyFill()();