diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index b046d1b..6ec6ed5 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -14504,7 +14504,7 @@
 
 // WARNING: Do not edit - generated code.
 
-typedef void _EntriesCallback(List<Entry> entries);
+typedef void _EntriesCallback(List entries);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -18843,7 +18843,7 @@
 // WARNING: Do not edit - generated code.
 
 typedef void IntersectionObserverCallback(
-    List<IntersectionObserverEntry> entries, IntersectionObserver observer);
+    List entries, IntersectionObserver observer);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -21179,8 +21179,7 @@
 
 // WARNING: Do not edit - generated code.
 
-typedef void MutationCallback(
-    List<MutationRecord> mutations, MutationObserver observer);
+typedef void MutationCallback(List mutations, MutationObserver observer);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -25106,7 +25105,7 @@
 // WARNING: Do not edit - generated code.
 
 typedef void ReportingObserverCallback(
-    List<_Report> reports, ReportingObserver observer);
+    List reports, ReportingObserver observer);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -25481,7 +25480,6 @@
   * Temporarily exposes _getStats and old getStats as getLegacyStats until Chrome fully supports
   * new getStats API.
   */
-  @JSName('getStats')
   Future<RtcStatsResponse> getLegacyStats([MediaStreamTrack selector]) {
     var completer = new Completer<RtcStatsResponse>();
     _getStats((value) {
diff --git a/tests/lib_2/html/callback_list_test.dart b/tests/lib_2/html/callback_list_test.dart
new file mode 100644
index 0000000..71e0902
--- /dev/null
+++ b/tests/lib_2/html/callback_list_test.dart
@@ -0,0 +1,42 @@
+library callback_list_test;
+
+import 'dart:html';
+import 'dart:async';
+
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_config.dart';
+
+var callbackDone = false;
+bool isCallbackDone() => callbackDone;
+
+Future waitUntilCallbackDone(bool test()) async {
+  var completer = new Completer();
+  check() {
+    if (test()) {
+      completer.complete();
+    } else {
+      new Timer(Duration.zero, check);
+    }
+  }
+
+  check();
+  return completer.future;
+}
+
+void main() async {
+  useHtmlConfiguration();
+  window.navigator.persistentStorage.requestQuota(1024 * 1024, _quotaHandler);
+
+  await waitUntilCallbackDone(isCallbackDone);
+  expect(true, isCallbackDone());
+}
+
+Future _quotaHandler(int byteCount) async {
+  FileSystem filesystem =
+      await window.requestFileSystem(1024 * 1024, persistent: true);
+  DirectoryEntry dir = await filesystem.root;
+  DirectoryReader dirReader = dir.createReader();
+  await dirReader.readEntries();
+  List<Entry> secondEntries = await dirReader.readEntries();
+  callbackDone = true;
+}
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index 9e3bf1c..c37cc88 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -87,7 +87,6 @@
 html/worker_test/functional: RuntimeError # Issue 32261
 
 [ $compiler == dart2js && $runtime == chrome && $strong ]
-html/fileapi_directory_reader_test: RuntimeError
 html/interactive_media_test: RuntimeError
 
 [ $compiler == dart2js && $runtime == chromeOnAndroid ]
@@ -117,6 +116,7 @@
 html/b_element_test: RuntimeError
 html/blob_constructor_test: RuntimeError
 html/cache_test: RuntimeError
+html/callback_list_test: RuntimeError
 html/callbacks_test: RuntimeError
 html/canvas_pixel_array_type_alias_test: RuntimeError
 html/canvas_test: RuntimeError
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 7b7dabf..0fcf00a 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -137,6 +137,15 @@
 # constructor creation.
 _static_classes = set(['Url'])
 
+# Callback typedefs with generic List (List<nnn>) convert to List
+_callback_list_generics_mapping = monitored.Set('systemhtml._callback_list_generics_mapping', [
+    'List<Entry>',
+    'List<IntersectionObserverEntry>',
+    'List<MutationRecord>',
+    'List<_Report>',
+])
+
+
 # Information for generating element constructors.
 #
 # TODO(sra): maybe remove all the argument complexity and use cascades.
@@ -524,10 +533,19 @@
     annotations = self._metadata.GetFormattedMetadata(self._library_name,
         self._interface)
 
+    params = info.ParametersAsDeclaration(self._DartType);
+
+    types = params.split()
+    if len(types) > 0:
+      mapType = types[0] in _callback_list_generics_mapping
+      if mapType is True:
+        types[0] = 'List'
+        params = " ".join(types)
+
     code.Emit('$(ANNOTATIONS)typedef void $NAME($PARAMS);\n',
               ANNOTATIONS=annotations,
               NAME=typedef_name,
-              PARAMS=info.ParametersAsDeclaration(self._DartType))
+              PARAMS=params)
     self._backend.GenerateCallback(info)
 
   def GenerateInterface(self):
diff --git a/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate b/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate
index 293fb19..33f503a 100644
--- a/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate
+++ b/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate
@@ -54,7 +54,6 @@
   * Temporarily exposes _getStats and old getStats as getLegacyStats until Chrome fully supports
   * new getStats API.
   */
-  @JSName('getStats')
   Future<RtcStatsResponse> getLegacyStats([MediaStreamTrack selector]) {
     var completer = new Completer<RtcStatsResponse>();
     _getStats((value) {
