diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index a5179d76064..ec0a8078043 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -18415,6 +18415,11 @@ class MessageEvent extends Event native "MessageEvent" {
if (source == null) {
source = window;
}
+ if (!Device.isIE) {
+ return JS('MessageEvent', 'new MessageEvent(#, {bubbles: #, cancelable: #, data: #, origin: #, lastEventId: #, source: #, ports: #})',
+ type, canBubble, cancelable, data, origin, lastEventId, source,
+ messagePorts);
+ }
var event = document._createEvent("MessageEvent");
event._initMessageEvent(type, canBubble, cancelable, data, origin,
lastEventId, source, messagePorts);
diff --git a/tests/html/html.status b/tests/html/html.status
index 78d0d173925..88c75015643 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -400,8 +400,6 @@ speechrecognition_test/supported: Fail
websql_test/supported: Fail
[ $runtime == ff ]
-messageevent_test: RuntimeError # Issue 15651
-serialized_script_value_test: RuntimeError # Issue 15651
client_rect_test: Fail # Issue 16890
[ $runtime == ff ]
diff --git a/tests/html/messageevent_test.dart b/tests/html/messageevent_test.dart
index a4361892452..9ef36819ffc 100644
--- a/tests/html/messageevent_test.dart
+++ b/tests/html/messageevent_test.dart
@@ -6,7 +6,7 @@ import 'dart:html';
main() {
useHtmlConfiguration();
- test('MessageEvent.initMessageEvent', () {
+ test('new MessageEvent', () {
final event = new MessageEvent('type', cancelable: true, data: 'data',
origin: 'origin', lastEventId: 'lastEventId');
diff --git a/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate b/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate
index 8a16f106de3..c4396645387 100644
--- a/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate
@@ -14,6 +14,14 @@ $(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
if (source == null) {
source = window;
}
+$if DART2JS
+ if (!Device.isIE) { // TODO: This if check should be removed once IE
+ // implements the constructor.
+ return JS('MessageEvent', 'new MessageEvent(#, {bubbles: #, cancelable: #, data: #, origin: #, lastEventId: #, source: #, ports: #})',
+ type, canBubble, cancelable, data, origin, lastEventId, source,
+ messagePorts);
+ }
+$endif
var event = document._createEvent("MessageEvent");
event._initMessageEvent(type, canBubble, cancelable, data, origin,
lastEventId, source, messagePorts);