Correctly recognize emptiness of IDMap.

This prevents a leak of RenderProcessHost, and possibly other
bad bugs.

TEST=Added to base_unittests; also existing browser and unit tests.
BUG=35571

Review URL: http://codereview.chromium.org/604048

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@39084 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: 2de069ee4f16b2b5f89c0c435c0ca3788e317d5c
diff --git a/base/id_map_unittest.cc b/base/id_map_unittest.cc
index 58abf96..54475b6 100644
--- a/base/id_map_unittest.cc
+++ b/base/id_map_unittest.cc
@@ -67,10 +67,21 @@
   map.Add(&obj2);
   map.Add(&obj3);
 
-  for (IDMap<TestObject>::const_iterator iter(&map);
-       !iter.IsAtEnd(); iter.Advance()) {
-    map.Remove(iter.GetCurrentKey());
+  {
+    IDMap<TestObject>::const_iterator iter(&map);
+    while (!iter.IsAtEnd()) {
+      map.Remove(iter.GetCurrentKey());
+      iter.Advance();
+    }
+
+    // Test that while an iterator is still in scope, we get the map emptiness
+    // right (http://crbug.com/35571).
+    EXPECT_TRUE(map.IsEmpty());
+    EXPECT_EQ(0U, map.size());
   }
+
+  EXPECT_TRUE(map.IsEmpty());
+  EXPECT_EQ(0U, map.size());
 }
 
 TEST_F(IDMapTest, IteratorRemainsValidWhenRemovingOtherElements) {