diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index a2289fd..f43d72c 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -19449,11 +19449,6 @@
   @Experimental()
   TextTrack addTextTrack(String kind, [String label, String language]) native;
 
-  @DomName('HTMLMediaElement.canPlayType')
-  @DocsEditable()
-  @Unstable()
-  String canPlayType(String type, [String keySystem]) native;
-
   @DomName('HTMLMediaElement.load')
   @DocsEditable()
   void load() native;
@@ -19525,6 +19520,11 @@
   // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#dom-keyadded
   @Experimental()
   ElementStream<MediaKeyEvent> get onNeedKey => needKeyEvent.forElement(this);
+
+  @DomName('HTMLMediaElement.canPlayType')
+  @DocsEditable()
+  @Unstable()
+  String canPlayType(String type, [String keySystem]) native;
 }
 // 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
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 601400b..232de55 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -21059,8 +21059,6 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
 
 @DocsEditable()
 @DomName('HTMLMediaElement')
@@ -21383,13 +21381,6 @@
     return _blink.BlinkHTMLMediaElement.instance.addTextTrack_Callback_1_(this, kind);
   }
 
-  String canPlayType(String type, [String keySystem]) {
-    if (keySystem != null) {
-      return _blink.BlinkHTMLMediaElement.instance.canPlayType_Callback_2_(this, type, keySystem);
-    }
-    return _blink.BlinkHTMLMediaElement.instance.canPlayType_Callback_1_(this, type);
-  }
-
   @DomName('HTMLMediaElement.load')
   @DocsEditable()
   void load() => _blink.BlinkHTMLMediaElement.instance.load_Callback_0_(this);
@@ -21461,6 +21452,15 @@
   @Experimental()
   ElementStream<MediaKeyEvent> get onNeedKey => needKeyEvent.forElement(this);
 
+  @DomName('HTMLMediaElement.canPlayType')
+  @DocsEditable()
+  @Unstable()
+  String canPlayType(String type, [String keySystem]) {
+    if (keySystem != null) {
+      return _blink.BlinkHTMLMediaElement.instance.canPlayType_Callback_2_(this, type, keySystem);
+    }
+    return _blink.BlinkHTMLMediaElement.instance.canPlayType_Callback_2_(this, type, null);
+  }
 }
 // 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
@@ -31426,10 +31426,10 @@
     if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
       return _blink.BlinkURL.instance.createObjectURL_Callback_1_(blob_OR_source_OR_stream);
     }
-    if ((blob_OR_source_OR_stream is MediaStream)) {
+    if ((blob_OR_source_OR_stream is MediaSource)) {
       return _blink.BlinkURL.instance.createObjectURL_Callback_1_(blob_OR_source_OR_stream);
     }
-    if ((blob_OR_source_OR_stream is MediaSource)) {
+    if ((blob_OR_source_OR_stream is MediaStream)) {
       return _blink.BlinkURL.instance.createObjectURL_Callback_1_(blob_OR_source_OR_stream);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
diff --git a/tests/html/audioelement_test.dart b/tests/html/audioelement_test.dart
index 02c8935..9957ff7 100644
--- a/tests/html/audioelement_test.dart
+++ b/tests/html/audioelement_test.dart
@@ -18,4 +18,11 @@
       expect(audio is AudioElement, isTrue);
       expect(audio.src, contains('IntentionallyMissingFileURL'));
     });
+
+  test('canPlayTypeTest', () {
+      var audio = new AudioElement();
+      var canPlay = audio.canPlayType("audio/mp4");
+      expect(canPlay, isNotNull);
+      expect(canPlay is String, isTrue);
+    });
 }
diff --git a/tools/VERSION b/tools/VERSION
index 5ec591b..b192111 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 8
 PATCH 0
 PRERELEASE 4
-PRERELEASE_PATCH 5
+PRERELEASE_PATCH 6
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 60845a4..f8d5cad 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -708,6 +708,7 @@
     'HTMLLinkElement.rev',
     'HTMLLinkElement.target',
     'HTMLMarqueeElement.*',
+    'HTMLMediaElement.canPlayType',
     'HTMLMenuElement.compact',
     'HTMLMetaElement.scheme',
     'HTMLOListElement.compact',
