Fix generating the list of Closure Compiler externs

As of v20160315, Closure Compiler puts the browser externs in a separate
"browser/" subfolder under externs.zip. Fix ClosureJsRunner to account
for that.

Change-Id: Ie5f543da19b10828fea127a8e419bff09d9d8686
diff --git a/dev/core/src/com/google/gwt/dev/js/ClosureJsRunner.java b/dev/core/src/com/google/gwt/dev/js/ClosureJsRunner.java
index b932ac6..f50ac99 100644
--- a/dev/core/src/com/google/gwt/dev/js/ClosureJsRunner.java
+++ b/dev/core/src/com/google/gwt/dev/js/ClosureJsRunner.java
@@ -71,66 +71,66 @@
       "es6_collections.js",
 
       // Event APIs
-      "gecko_event.js",
-      "ie_event.js",
-      "w3c_device_sensor_event.js",
-      "w3c_event.js",
-      "w3c_event3.js",
-      "w3c_touch_event.js",
-      "webkit_event.js",
+      "browser/gecko_event.js",
+      "browser/ie_event.js",
+      "browser/w3c_device_sensor_event.js",
+      "browser/w3c_event.js",
+      "browser/w3c_event3.js",
+      "browser/w3c_touch_event.js",
+      "browser/webkit_event.js",
 
       // DOM apis
-      "gecko_dom.js",
-      "ie_dom.js",
-      "w3c_dom1.js",
-      "w3c_dom2.js",
-      "w3c_dom3.js",
-      "webkit_dom.js",
+      "browser/gecko_dom.js",
+      "browser/ie_dom.js",
+      "browser/w3c_dom1.js",
+      "browser/w3c_dom2.js",
+      "browser/w3c_dom3.js",
+      "browser/webkit_dom.js",
 
       // CSS apis
-      "gecko_css.js",
-      "ie_css.js",
-      "w3c_css.js",
-      "webkit_css.js",
+      "browser/gecko_css.js",
+      "browser/ie_css.js",
+      "browser/w3c_css.js",
+      "browser/webkit_css.js",
 
       // Top-level namespaces
-      "chrome.js",
-      "google.js",
+      "browser/chrome.js",
+      "browser/google.js",
 
       // Miscellaneous
-      "deprecated.js",
-      "fetchapi.js",
-      "fileapi.js",
-      "flash.js",
-      "gecko_xml.js",
-      "html5.js",
-      "ie_vml.js",
-      "intl.js",
-      "iphone.js",
-      "mediasource.js",
-      "page_visibility.js",
-      "streamsapi.js",
-      "url.js",
-      "v8.js",
-      "w3c_anim_timing.js",
-      "w3c_audio.js",
-      "w3c_batterystatus.js",
-      "w3c_css3d.js",
-      "w3c_elementtraversal.js",
-      "w3c_geolocation.js",
-      "w3c_indexeddb.js",
-      "w3c_navigation_timing.js",
-      "w3c_range.js",
-      "w3c_rtc.js",
-      "w3c_selectors.js",
-      "w3c_serviceworker.js",
-      "w3c_webcrypto.js",
-      "w3c_xml.js",
-      "webstorage.js",
-      "webkit_notifications.js",
-      "webgl.js",
-      "whatwg_encoding.js",
-      "window.js");
+      "browser/deprecated.js",
+      "browser/fetchapi.js",
+      "browser/fileapi.js",
+      "browser/flash.js",
+      "browser/gecko_xml.js",
+      "browser/html5.js",
+      "browser/ie_vml.js",
+      "browser/intl.js",
+      "browser/iphone.js",
+      "browser/mediasource.js",
+      "browser/page_visibility.js",
+      "browser/streamsapi.js",
+      "browser/url.js",
+      "browser/v8.js",
+      "browser/w3c_anim_timing.js",
+      "browser/w3c_audio.js",
+      "browser/w3c_batterystatus.js",
+      "browser/w3c_css3d.js",
+      "browser/w3c_elementtraversal.js",
+      "browser/w3c_geolocation.js",
+      "browser/w3c_indexeddb.js",
+      "browser/w3c_navigation_timing.js",
+      "browser/w3c_range.js",
+      "browser/w3c_rtc.js",
+      "browser/w3c_selectors.js",
+      "browser/w3c_serviceworker.js",
+      "browser/w3c_webcrypto.js",
+      "browser/w3c_xml.js",
+      "browser/webgl.js",
+      "browser/webkit_notifications.js",
+      "browser/webstorage.js",
+      "browser/whatwg_encoding.js",
+      "browser/window.js");
 
   /**
    * @return a mutable list
@@ -149,12 +149,14 @@
     ZipInputStream zip = new ZipInputStream(input);
     Map<String, SourceFile> externsMap = Maps.newHashMap();
     for (ZipEntry entry = null; (entry = zip.getNextEntry()) != null;) {
-      BufferedInputStream entryStream =
-          new BufferedInputStream(ByteStreams.limit(zip, entry.getSize()));
-      externsMap.put(entry.getName(), SourceFile.fromInputStream(
-      // Give the files an odd prefix, so that they do not conflict
-      // with the user's files.
-          "externs.zip//" + entry.getName(), entryStream, Charset.defaultCharset()));
+      if (!entry.isDirectory()) {
+        BufferedInputStream entryStream =
+            new BufferedInputStream(ByteStreams.limit(zip, entry.getSize()));
+        externsMap.put(entry.getName(), SourceFile.fromInputStream(
+            // Give the files an odd prefix, so that they do not conflict
+            // with the user's files.
+            "externs.zip//" + entry.getName(), entryStream, Charset.defaultCharset()));
+      }
     }
 
     Preconditions.checkState(externsMap.keySet().equals(Sets.newHashSet(DEFAULT_EXTERNS_NAMES)),