Version 1.22.0-dev.10.6

Cherry-pick 7 commits fixing dev_compiler issues
diff --git a/pkg/dev_compiler/lib/js/amd/dart_sdk.js b/pkg/dev_compiler/lib/js/amd/dart_sdk.js
index b612e9f..152b38d 100644
--- a/pkg/dev_compiler/lib/js/amd/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/amd/dart_sdk.js
@@ -1127,6 +1127,14 @@
   dart.getType = function(obj) {
     return obj == null ? core.Object : obj.__proto__.constructor;
   };
+  dart.isJsInterop = function(obj) {
+    if (typeof obj === "function") {
+      return dart._getRuntimeType(obj) == null;
+    }
+    if (typeof obj !== "object") return false;
+    if (dart.getExtensionType(obj) != null) return false;
+    return !(obj instanceof core.Object);
+  };
   dart.getMethodType = function(type, name) {
     let sigObj = type[dart._methodSig];
     if (sigObj === void 0) return void 0;
@@ -1135,7 +1143,8 @@
   dart.getFieldType = function(type, name) {
     let sigObj = type[dart._fieldSig];
     if (sigObj === void 0) return void 0;
-    return sigObj[name];
+    let fieldType = sigObj[name];
+    return fieldType instanceof Array ? fieldType[0] : fieldType;
   };
   dart.getSetterType = function(type, name) {
     let sigObj = type[dart._setterSig];
@@ -1922,9 +1931,42 @@
       let type = dart.getType(obj);
       if (dart.test(dart.hasField(type, f)) || dart.test(dart.hasGetter(type, f))) return obj[f];
       if (dart.test(dart.hasMethod(type, f))) return dart.bind(obj, f, void 0);
+      if (dart.test(dart.isJsInterop(obj))) return obj[f];
     }
     return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [], {isGetter: true}));
   };
+  dart.dloadMirror = function(obj, field) {
+    let f = dart._canonicalMember(obj, field);
+    dart._trackCall(obj);
+    if (f != null) {
+      let type = dart.getType(obj);
+      if (dart.test(dart.hasField(type, f)) || dart.test(dart.hasGetter(type, f))) return obj[f];
+      if (dart.test(dart.hasMethod(type, f))) return dart.bind(obj, f, void 0);
+    }
+    return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [], {isGetter: true}));
+  };
+  dart._stripGenericArguments = function(type) {
+    let genericClass = dart.getGenericClass(type);
+    if (genericClass != null) return genericClass();
+    return type;
+  };
+  dart.dputMirror = function(obj, field, value) {
+    let f = dart._canonicalMember(obj, field);
+    dart._trackCall(obj);
+    if (f != null) {
+      let objType = dart.getType(obj);
+      let setterType = dart.getSetterType(objType, f);
+      if (setterType != void 0) {
+        return obj[f] = dart.check(value, dart._stripGenericArguments(setterType.args[0]));
+      } else {
+        let fieldType = dart.getFieldType(objType, f);
+        if (fieldType != void 0) {
+          return obj[f] = dart.check(value, dart._stripGenericArguments(fieldType));
+        }
+      }
+    }
+    return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [value], {isSetter: true}));
+  };
   dart.dput = function(obj, field, value) {
     let f = dart._canonicalMember(obj, field);
     dart._trackCall(obj);
@@ -1932,15 +1974,14 @@
       let objType = dart.getType(obj);
       let setterType = dart.getSetterType(objType, f);
       if (setterType != void 0) {
-        if (dart.test(dart.instanceOfOrNull(value, setterType.args[0]))) {
-          return obj[f] = value;
-        }
+        return obj[f] = dart.check(value, setterType.args[0]);
       } else {
         let fieldType = dart.getFieldType(objType, f);
         if (fieldType != void 0) {
-          if (dart.test(dart.instanceOfOrNull(value, fieldType))) {
-            return obj[f] = value;
-          }
+          return obj[f] = dart.check(value, fieldType);
+        }
+        if (dart.test(dart.isJsInterop(obj))) {
+          return obj[f] = value;
         }
       }
     }
@@ -13639,11 +13680,11 @@
     }
   });
   _js_mirrors._dload = function(obj, name) {
-    return _js_mirrors._dart.dload(obj, name);
+    return _js_mirrors._dart.dloadMirror(obj, name);
   };
   dart.lazyFn(_js_mirrors._dload, () => dynamicAndStringTodynamic());
   _js_mirrors._dput = function(obj, name, val) {
-    _js_mirrors._dart.dput(obj, name, val);
+    _js_mirrors._dart.dputMirror(obj, name, val);
   };
   dart.lazyFn(_js_mirrors._dput, () => dynamicAndStringAnddynamicTovoid());
   _js_mirrors._dcall = function(obj, args) {
@@ -34445,18 +34486,7 @@
       return new core._StringStackTrace(stackTraceString);
     }
     static get current() {
-      if (Error.captureStackTrace != null) {
-        let error = new Error();
-        Error.captureStackTrace(error);
-        return _js_helper.getTraceFromException(error);
-      }
-      try {
-        dart.throw('');
-      } catch (_) {
-        let stackTrace = dart.stackTrace(_);
-        return stackTrace;
-      }
-
+      return _js_helper.getTraceFromException(new Error());
     }
   };
   dart.setSignature(core.StackTrace, {
@@ -55637,10 +55667,10 @@
       return html$.Event._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new Event(type, eventInitDict);
+      return new self.Event(type, eventInitDict);
     }
     static _create_2(type) {
-      return new Event(type);
+      return new self.Event(type);
     }
     get [dartx.bubbles]() {
       return this.bubbles;
@@ -58347,10 +58377,10 @@
       return html$.AnimationEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new AnimationEvent(type, eventInitDict);
+      return new self.AnimationEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new AnimationEvent(type);
+      return new self.AnimationEvent(type);
     }
     get [dartx.animationName]() {
       return this.animationName;
@@ -58392,10 +58422,10 @@
       return html$.AnimationPlayerEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new AnimationPlayerEvent(type, eventInitDict);
+      return new self.AnimationPlayerEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new AnimationPlayerEvent(type);
+      return new self.AnimationPlayerEvent(type);
     }
     get [dartx.currentTime]() {
       return this.currentTime;
@@ -58632,10 +58662,10 @@
       return html$.ApplicationCacheErrorEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ApplicationCacheErrorEvent(type, eventInitDict);
+      return new self.ApplicationCacheErrorEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ApplicationCacheErrorEvent(type);
+      return new self.ApplicationCacheErrorEvent(type);
     }
     get [dartx.message]() {
       return this.message;
@@ -59336,10 +59366,10 @@
       return html$.AutocompleteErrorEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new AutocompleteErrorEvent(type, eventInitDict);
+      return new self.AutocompleteErrorEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new AutocompleteErrorEvent(type);
+      return new self.AutocompleteErrorEvent(type);
     }
     get [dartx.reason]() {
       return this.reason;
@@ -59487,10 +59517,10 @@
       return html$.BeforeInstallPromptEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new BeforeInstallPromptEvent(type, eventInitDict);
+      return new self.BeforeInstallPromptEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new BeforeInstallPromptEvent(type);
+      return new self.BeforeInstallPromptEvent(type);
     }
     get [dartx.platforms]() {
       return this.platforms;
@@ -61061,7 +61091,7 @@
       return html$.CircularGeofencingRegion._create_1(init_1);
     }
     static _create_1(init) {
-      return new CircularGeofencingRegion(init);
+      return new self.CircularGeofencingRegion(init);
     }
     get [dartx.latitude]() {
       return this.latitude;
@@ -61223,10 +61253,10 @@
       return html$.CloseEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new CloseEvent(type, eventInitDict);
+      return new self.CloseEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new CloseEvent(type);
+      return new self.CloseEvent(type);
     }
     get [dartx.code]() {
       return this.code;
@@ -61307,10 +61337,10 @@
       return html$.UIEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new UIEvent(type, eventInitDict);
+      return new self.UIEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new UIEvent(type);
+      return new self.UIEvent(type);
     }
     get [_charCode]() {
       return this.charCode;
@@ -61389,10 +61419,10 @@
       return html$.CompositionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new CompositionEvent(type, eventInitDict);
+      return new self.CompositionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new CompositionEvent(type);
+      return new self.CompositionEvent(type);
     }
     get [dartx.data]() {
       return this.data;
@@ -61431,7 +61461,7 @@
       return html$.CompositorProxy._create_1(element, attributeArray);
     }
     static _create_1(element, attributeArray) {
-      return new CompositorProxy(element, attributeArray);
+      return new self.CompositorProxy(element, attributeArray);
     }
     get [dartx.opacity]() {
       return this.opacity;
@@ -61497,7 +61527,7 @@
       return html$.CompositorWorker._create_1(scriptUrl);
     }
     static _create_1(scriptUrl) {
-      return new CompositorWorker(scriptUrl);
+      return new self.CompositorWorker(scriptUrl);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -69121,10 +69151,10 @@
       return html$.CustomEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new CustomEvent(type, eventInitDict);
+      return new self.CustomEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new CustomEvent(type);
+      return new self.CustomEvent(type);
     }
     get [_detail]() {
       return html_common.convertNativeToDart_SerializedScriptValue(this[_get__detail]);
@@ -69439,10 +69469,10 @@
       return html$.DefaultSessionStartEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new DefaultSessionStartEvent(type, eventInitDict);
+      return new self.DefaultSessionStartEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new DefaultSessionStartEvent(type);
+      return new self.DefaultSessionStartEvent(type);
     }
     get [dartx.session]() {
       return this.session;
@@ -69592,10 +69622,10 @@
       return html$.DeviceLightEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new DeviceLightEvent(type, eventInitDict);
+      return new self.DeviceLightEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new DeviceLightEvent(type);
+      return new self.DeviceLightEvent(type);
     }
     get [dartx.value]() {
       return this.value;
@@ -73009,10 +73039,10 @@
       return html$.ErrorEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ErrorEvent(type, eventInitDict);
+      return new self.ErrorEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ErrorEvent(type);
+      return new self.ErrorEvent(type);
     }
     get [dartx.colno]() {
       return this.colno;
@@ -73076,10 +73106,10 @@
       return html$.EventSource._create_2(url);
     }
     static _create_1(url, eventSourceInitDict) {
-      return new EventSource(url, eventSourceInitDict);
+      return new self.EventSource(url, eventSourceInitDict);
     }
     static _create_2(url) {
-      return new EventSource(url);
+      return new self.EventSource(url);
     }
     get [dartx.readyState]() {
       return this.readyState;
@@ -73201,10 +73231,10 @@
       return html$.ExtendableEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ExtendableEvent(type, eventInitDict);
+      return new self.ExtendableEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ExtendableEvent(type);
+      return new self.ExtendableEvent(type);
     }
     [dartx.waitUntil](...args) {
       return this.waitUntil.apply(this, args);
@@ -73236,7 +73266,7 @@
       return html$.FederatedCredential._create_1(data_1);
     }
     static _create_1(data) {
-      return new FederatedCredential(data);
+      return new self.FederatedCredential(data);
     }
     get [dartx.protocol]() {
       return this.protocol;
@@ -73276,10 +73306,10 @@
       return html$.FetchEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new FetchEvent(type, eventInitDict);
+      return new self.FetchEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new FetchEvent(type);
+      return new self.FetchEvent(type);
     }
     get [dartx.isReload]() {
       return this.isReload;
@@ -73423,10 +73453,10 @@
       return html$.File._create_2(fileBits, fileName);
     }
     static _create_1(fileBits, fileName, options) {
-      return new File(fileBits, fileName, options);
+      return new self.File(fileBits, fileName, options);
     }
     static _create_2(fileBits, fileName) {
-      return new File(fileBits, fileName);
+      return new self.File(fileBits, fileName);
     }
     get [dartx.lastModified]() {
       return this.lastModified;
@@ -73650,7 +73680,7 @@
       return html$.FileReader._create_1();
     }
     static _create_1() {
-      return new FileReader();
+      return new self.FileReader();
     }
     get [dartx.error]() {
       return this.error;
@@ -73934,10 +73964,10 @@
       return html$.FocusEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new FocusEvent(type, eventInitDict);
+      return new self.FocusEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new FocusEvent(type);
+      return new self.FocusEvent(type);
     }
     get [dartx.relatedTarget]() {
       return html$._convertNativeToDart_EventTarget(this[_get_relatedTarget]);
@@ -73985,10 +74015,10 @@
       return html$.FontFace._create_2(family, source);
     }
     static _create_1(family, source, descriptors) {
-      return new FontFace(family, source, descriptors);
+      return new self.FontFace(family, source, descriptors);
     }
     static _create_2(family, source) {
-      return new FontFace(family, source);
+      return new self.FontFace(family, source);
     }
     get [dartx.family]() {
       return this.family;
@@ -74159,10 +74189,10 @@
       return html$.FormData._create_2();
     }
     static _create_1(form) {
-      return new FormData(form);
+      return new self.FormData(form);
     }
     static _create_2() {
-      return new FormData();
+      return new self.FormData();
     }
     static get supported() {
       return !!window.FormData;
@@ -74453,10 +74483,10 @@
       return html$.GamepadEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new GamepadEvent(type, eventInitDict);
+      return new self.GamepadEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new GamepadEvent(type);
+      return new self.GamepadEvent(type);
     }
     get [dartx.gamepad]() {
       return this.gamepad;
@@ -75303,7 +75333,7 @@
       let oldUrl = opts && 'oldUrl' in opts ? opts.oldUrl : null;
       let newUrl = opts && 'newUrl' in opts ? opts.newUrl : null;
       let options = dart.map({canBubble: canBubble, cancelable: cancelable, oldURL: oldUrl, newURL: newUrl}, core.String, core.Object);
-      return new HashChangeEvent(type, html_common.convertDartToNative_Dictionary(options));
+      return new self.HashChangeEvent(type, html_common.convertDartToNative_Dictionary(options));
     }
     static _(type, eventInitDict) {
       if (eventInitDict === void 0) eventInitDict = null;
@@ -75314,10 +75344,10 @@
       return html$.HashChangeEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new HashChangeEvent(type, eventInitDict);
+      return new self.HashChangeEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new HashChangeEvent(type);
+      return new self.HashChangeEvent(type);
     }
     static get supported() {
       return html_common.Device.isEventTypeSupported('HashChangeEvent');
@@ -75392,16 +75422,16 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1() {
-      return new Headers();
+      return new self.Headers();
     }
     static _create_2(input) {
-      return new Headers(input);
+      return new self.Headers(input);
     }
     static _create_3(input) {
-      return new Headers(input);
+      return new self.Headers(input);
     }
     static _create_4(input) {
-      return new Headers(input);
+      return new self.Headers(input);
     }
   };
   dart.setSignature(html$.Headers, {
@@ -76422,13 +76452,13 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1(data_OR_sw, sh_OR_sw) {
-      return new ImageData(data_OR_sw, sh_OR_sw);
+      return new self.ImageData(data_OR_sw, sh_OR_sw);
     }
     static _create_2(data_OR_sw, sh_OR_sw) {
-      return new ImageData(data_OR_sw, sh_OR_sw);
+      return new self.ImageData(data_OR_sw, sh_OR_sw);
     }
     static _create_3(data_OR_sw, sh_OR_sw, sh) {
-      return new ImageData(data_OR_sw, sh_OR_sw, sh);
+      return new self.ImageData(data_OR_sw, sh_OR_sw, sh);
     }
     get [dartx.data]() {
       return this.data;
@@ -76627,10 +76657,10 @@
       return html$.InputDevice._create_2();
     }
     static _create_1(deviceInitDict) {
-      return new InputDevice(deviceInitDict);
+      return new self.InputDevice(deviceInitDict);
     }
     static _create_2() {
-      return new InputDevice();
+      return new self.InputDevice();
     }
     get [dartx.firesTouchEvents]() {
       return this.firesTouchEvents;
@@ -78348,10 +78378,10 @@
       return html$.KeyboardEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new KeyboardEvent(type, eventInitDict);
+      return new self.KeyboardEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new KeyboardEvent(type);
+      return new self.KeyboardEvent(type);
     }
     get [dartx.altKey]() {
       return this.altKey;
@@ -78449,13 +78479,13 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1(target, keyframes) {
-      return new KeyframeEffect(target, keyframes);
+      return new self.KeyframeEffect(target, keyframes);
     }
     static _create_2(target, keyframes, timing) {
-      return new KeyframeEffect(target, keyframes, timing);
+      return new self.KeyframeEffect(target, keyframes, timing);
     }
     static _create_3(target, keyframes, timing) {
-      return new KeyframeEffect(target, keyframes, timing);
+      return new self.KeyframeEffect(target, keyframes, timing);
     }
   };
   dart.setSignature(html$.KeyframeEffect, {
@@ -78995,7 +79025,7 @@
       return html$.MediaController._create_1();
     }
     static _create_1() {
-      return new MediaController();
+      return new self.MediaController();
     }
     get [dartx.buffered]() {
       return this.buffered;
@@ -79161,10 +79191,10 @@
       return html$.MediaEncryptedEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaEncryptedEvent(type, eventInitDict);
+      return new self.MediaEncryptedEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaEncryptedEvent(type);
+      return new self.MediaEncryptedEvent(type);
     }
     get [dartx.initData]() {
       return this.initData;
@@ -79274,10 +79304,10 @@
       return html$.MediaKeyEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaKeyEvent(type, eventInitDict);
+      return new self.MediaKeyEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaKeyEvent(type);
+      return new self.MediaKeyEvent(type);
     }
     get [dartx.defaultUrl]() {
       return this.defaultURL;
@@ -79339,10 +79369,10 @@
       return html$.MediaKeyMessageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaKeyMessageEvent(type, eventInitDict);
+      return new self.MediaKeyMessageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaKeyMessageEvent(type);
+      return new self.MediaKeyMessageEvent(type);
     }
     get [dartx.message]() {
       return this.message;
@@ -79605,10 +79635,10 @@
       return html$.MediaQueryListEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaQueryListEvent(type, eventInitDict);
+      return new self.MediaQueryListEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaQueryListEvent(type);
+      return new self.MediaQueryListEvent(type);
     }
     get [dartx.matches]() {
       return this.matches;
@@ -79645,7 +79675,7 @@
       return html$.MediaSession._create_1();
     }
     static _create_1() {
-      return new MediaSession();
+      return new self.MediaSession();
     }
     [dartx.activate](...args) {
       return this.activate.apply(this, args);
@@ -79684,7 +79714,7 @@
       return html$.MediaSource._create_1();
     }
     static _create_1() {
-      return new MediaSource();
+      return new self.MediaSource();
     }
     static get supported() {
       return !!window.MediaSource;
@@ -79773,13 +79803,13 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1() {
-      return new MediaStream();
+      return new self.MediaStream();
     }
     static _create_2(stream_OR_tracks) {
-      return new MediaStream(stream_OR_tracks);
+      return new self.MediaStream(stream_OR_tracks);
     }
     static _create_3(stream_OR_tracks) {
-      return new MediaStream(stream_OR_tracks);
+      return new self.MediaStream(stream_OR_tracks);
     }
     get [dartx.active]() {
       return this.active;
@@ -79897,10 +79927,10 @@
       return html$.MediaStreamEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaStreamEvent(type, eventInitDict);
+      return new self.MediaStreamEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaStreamEvent(type);
+      return new self.MediaStreamEvent(type);
     }
     static get supported() {
       return html_common.Device.isEventTypeSupported('MediaStreamEvent');
@@ -80245,7 +80275,7 @@
         source = html$.window;
       }
       if (!dart.test(html_common.Device.isIE)) {
-        return new MessageEvent(type, {bubbles: canBubble, cancelable: cancelable, data: data, origin: origin, lastEventId: lastEventId, source: source, ports: messagePorts});
+        return new self.MessageEvent(type, {bubbles: canBubble, cancelable: cancelable, data: data, origin: origin, lastEventId: lastEventId, source: source, ports: messagePorts});
       }
       let event = html$.MessageEvent._check(html$.document[_createEvent]("MessageEvent"));
       event[_initMessageEvent](type, canBubble, cancelable, data, origin, lastEventId, source, messagePorts);
@@ -80266,10 +80296,10 @@
       return html$.MessageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MessageEvent(type, eventInitDict);
+      return new self.MessageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MessageEvent(type);
+      return new self.MessageEvent(type);
     }
     get [dartx.lastEventId]() {
       return this.lastEventId;
@@ -80984,10 +81014,10 @@
       return html$.MouseEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MouseEvent(type, eventInitDict);
+      return new self.MouseEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MouseEvent(type);
+      return new self.MouseEvent(type);
     }
     get [dartx.altKey]() {
       return this.altKey;
@@ -82184,10 +82214,10 @@
       return html$.Notification._create_2(title);
     }
     static _create_1(title, options) {
-      return new Notification(title, options);
+      return new self.Notification(title, options);
     }
     static _create_2(title) {
-      return new Notification(title);
+      return new self.Notification(title);
     }
     static get supported() {
       return !!window.Notification;
@@ -82316,10 +82346,10 @@
       return html$.NotificationEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new NotificationEvent(type, eventInitDict);
+      return new self.NotificationEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new NotificationEvent(type);
+      return new self.NotificationEvent(type);
     }
     get [dartx.notification]() {
       return this.notification;
@@ -82816,10 +82846,10 @@
       return html$.PageTransitionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PageTransitionEvent(type, eventInitDict);
+      return new self.PageTransitionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PageTransitionEvent(type);
+      return new self.PageTransitionEvent(type);
     }
     get [dartx.persisted]() {
       return this.persisted;
@@ -82934,13 +82964,13 @@
       return html$.PasswordCredential._create_3(id, password);
     }
     static _create_1(id, password, name, iconURL) {
-      return new PasswordCredential(id, password, name, iconURL);
+      return new self.PasswordCredential(id, password, name, iconURL);
     }
     static _create_2(id, password, name) {
-      return new PasswordCredential(id, password, name);
+      return new self.PasswordCredential(id, password, name);
     }
     static _create_3(id, password) {
-      return new PasswordCredential(id, password);
+      return new self.PasswordCredential(id, password);
     }
     get [dartx.formData]() {
       return this.formData;
@@ -83490,7 +83520,7 @@
       return html$.PeriodicSyncEvent._create_1(type, init_1);
     }
     static _create_1(type, init) {
-      return new PeriodicSyncEvent(type, init);
+      return new self.PeriodicSyncEvent(type, init);
     }
     get [dartx.registration]() {
       return this.registration;
@@ -83853,10 +83883,10 @@
       return html$.PointerEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PointerEvent(type, eventInitDict);
+      return new self.PointerEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PointerEvent(type);
+      return new self.PointerEvent(type);
     }
     get [dartx.height]() {
       return this.height;
@@ -83921,10 +83951,10 @@
       return html$.PopStateEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PopStateEvent(type, eventInitDict);
+      return new self.PopStateEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PopStateEvent(type);
+      return new self.PopStateEvent(type);
     }
     get [dartx.state]() {
       return html_common.convertNativeToDart_SerializedScriptValue(this[_get_state]);
@@ -84241,10 +84271,10 @@
       return html$.ProgressEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ProgressEvent(type, eventInitDict);
+      return new self.ProgressEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ProgressEvent(type);
+      return new self.ProgressEvent(type);
     }
     get [dartx.lengthComputable]() {
       return this.lengthComputable;
@@ -84290,10 +84320,10 @@
       return html$.PromiseRejectionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PromiseRejectionEvent(type, eventInitDict);
+      return new self.PromiseRejectionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PromiseRejectionEvent(type);
+      return new self.PromiseRejectionEvent(type);
     }
     get [dartx.promise]() {
       return this.promise;
@@ -84334,10 +84364,10 @@
       return html$.PushEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PushEvent(type, eventInitDict);
+      return new self.PushEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PushEvent(type);
+      return new self.PushEvent(type);
     }
     get [dartx.data]() {
       return this.data;
@@ -84428,7 +84458,7 @@
       return html$.PushMessageData._create_1(message);
     }
     static _create_1(message) {
-      return new PushMessageData(message);
+      return new self.PushMessageData(message);
     }
     [dartx.arrayBuffer](...args) {
       return this.arrayBuffer.apply(this, args);
@@ -84825,10 +84855,10 @@
       return html$.RelatedEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new RelatedEvent(type, eventInitDict);
+      return new self.RelatedEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new RelatedEvent(type);
+      return new self.RelatedEvent(type);
     }
     get [dartx.relatedTarget]() {
       return html$._convertNativeToDart_EventTarget(this[_get_relatedTarget]);
@@ -85897,31 +85927,31 @@
       return html$.ScrollState._create_9();
     }
     static _create_1(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding);
     }
     static _create_2(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning);
     }
     static _create_3(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase);
     }
     static _create_4(deltaX, deltaY, deltaGranularity, velocityX, velocityY) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY);
     }
     static _create_5(deltaX, deltaY, deltaGranularity, velocityX) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX);
     }
     static _create_6(deltaX, deltaY, deltaGranularity) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity);
     }
     static _create_7(deltaX, deltaY) {
-      return new ScrollState(deltaX, deltaY);
+      return new self.ScrollState(deltaX, deltaY);
     }
     static _create_8(deltaX) {
-      return new ScrollState(deltaX);
+      return new self.ScrollState(deltaX);
     }
     static _create_9() {
-      return new ScrollState();
+      return new self.ScrollState();
     }
     get [dartx.deltaGranularity]() {
       return this.deltaGranularity;
@@ -86014,10 +86044,10 @@
       return html$.SecurityPolicyViolationEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new SecurityPolicyViolationEvent(type, eventInitDict);
+      return new self.SecurityPolicyViolationEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new SecurityPolicyViolationEvent(type);
+      return new self.SecurityPolicyViolationEvent(type);
     }
     get [dartx.blockedUri]() {
       return this.blockedURI;
@@ -86555,10 +86585,10 @@
       return html$.ServicePortConnectEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ServicePortConnectEvent(type, eventInitDict);
+      return new self.ServicePortConnectEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ServicePortConnectEvent(type);
+      return new self.ServicePortConnectEvent(type);
     }
     get [dartx.origin]() {
       return this.origin;
@@ -86721,10 +86751,10 @@
       return html$.ServiceWorkerMessageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ServiceWorkerMessageEvent(type, eventInitDict);
+      return new self.ServiceWorkerMessageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ServiceWorkerMessageEvent(type);
+      return new self.ServiceWorkerMessageEvent(type);
     }
     get [dartx.lastEventId]() {
       return this.lastEventId;
@@ -87036,10 +87066,10 @@
       return html$.SharedWorker._create_2(scriptURL);
     }
     static _create_1(scriptURL, name) {
-      return new SharedWorker(scriptURL, name);
+      return new self.SharedWorker(scriptURL, name);
     }
     static _create_2(scriptURL) {
-      return new SharedWorker(scriptURL);
+      return new self.SharedWorker(scriptURL);
     }
     get [dartx.port]() {
       return this.port;
@@ -87395,7 +87425,7 @@
       return html$.SpeechGrammar._create_1();
     }
     static _create_1() {
-      return new SpeechGrammar();
+      return new self.SpeechGrammar();
     }
     get [dartx.src]() {
       return this.src;
@@ -87444,7 +87474,7 @@
       return html$.SpeechGrammarList._create_1();
     }
     static _create_1() {
-      return new SpeechGrammarList();
+      return new self.SpeechGrammarList();
     }
     get [dartx.length]() {
       return this.length;
@@ -87754,10 +87784,10 @@
       return html$.SpeechRecognitionError._create_2(type);
     }
     static _create_1(type, initDict) {
-      return new SpeechRecognitionError(type, initDict);
+      return new self.SpeechRecognitionError(type, initDict);
     }
     static _create_2(type) {
-      return new SpeechRecognitionError(type);
+      return new self.SpeechRecognitionError(type);
     }
     get [dartx.error]() {
       return this.error;
@@ -87801,10 +87831,10 @@
       return html$.SpeechRecognitionEvent._create_2(type);
     }
     static _create_1(type, initDict) {
-      return new SpeechRecognitionEvent(type, initDict);
+      return new self.SpeechRecognitionEvent(type, initDict);
     }
     static _create_2(type) {
-      return new SpeechRecognitionEvent(type);
+      return new self.SpeechRecognitionEvent(type);
     }
     get [dartx.emma]() {
       return this.emma;
@@ -87980,10 +88010,10 @@
       return html$.SpeechSynthesisUtterance._create_2();
     }
     static _create_1(text) {
-      return new SpeechSynthesisUtterance(text);
+      return new self.SpeechSynthesisUtterance(text);
     }
     static _create_2() {
-      return new SpeechSynthesisUtterance();
+      return new self.SpeechSynthesisUtterance();
     }
     get [dartx.lang]() {
       return this.lang;
@@ -88358,10 +88388,10 @@
       return html$.StorageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new StorageEvent(type, eventInitDict);
+      return new self.StorageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new StorageEvent(type);
+      return new self.StorageEvent(type);
     }
     get [dartx.key]() {
       return this.key;
@@ -88546,7 +88576,7 @@
       return html$.SyncEvent._create_1(type, init_1);
     }
     static _create_1(type, init) {
-      return new SyncEvent(type, init);
+      return new self.SyncEvent(type, init);
     }
     get [dartx.registration]() {
       return this.registration;
@@ -90174,10 +90204,10 @@
       return html$.TrackDefault._create_2(type, language, label, kinds_1);
     }
     static _create_1(type, language, label, kinds, byteStreamTrackID) {
-      return new TrackDefault(type, language, label, kinds, byteStreamTrackID);
+      return new self.TrackDefault(type, language, label, kinds, byteStreamTrackID);
     }
     static _create_2(type, language, label, kinds) {
-      return new TrackDefault(type, language, label, kinds);
+      return new self.TrackDefault(type, language, label, kinds);
     }
     get [dartx.byteStreamTrackID]() {
       return this.byteStreamTrackID;
@@ -90230,10 +90260,10 @@
       return html$.TrackDefaultList._create_2();
     }
     static _create_1(trackDefaults) {
-      return new TrackDefaultList(trackDefaults);
+      return new self.TrackDefaultList(trackDefaults);
     }
     static _create_2() {
-      return new TrackDefaultList();
+      return new self.TrackDefaultList();
     }
     get [dartx.length]() {
       return this.length;
@@ -90367,10 +90397,10 @@
       return html$.TrackEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new TrackEvent(type, eventInitDict);
+      return new self.TrackEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new TrackEvent(type);
+      return new self.TrackEvent(type);
     }
     get [dartx.track]() {
       return this.track;
@@ -90407,10 +90437,10 @@
       return html$.TransitionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new TransitionEvent(type, eventInitDict);
+      return new self.TransitionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new TransitionEvent(type);
+      return new self.TransitionEvent(type);
     }
     get [dartx.elapsedTime]() {
       return this.elapsedTime;
@@ -90981,10 +91011,10 @@
       return html$.VRFieldOfView._create_2();
     }
     static _create_1(fov) {
-      return new VRFieldOfView(fov);
+      return new self.VRFieldOfView(fov);
     }
     static _create_2() {
-      return new VRFieldOfView();
+      return new self.VRFieldOfView();
     }
     get [dartx.downDegrees]() {
       return this.downDegrees;
@@ -91602,10 +91632,10 @@
       return html$.WebSocket._create_2(url);
     }
     static _create_1(url, protocols) {
-      return new WebSocket(url, protocols);
+      return new self.WebSocket(url, protocols);
     }
     static _create_2(url) {
-      return new WebSocket(url);
+      return new self.WebSocket(url);
     }
     static get supported() {
       return typeof window.WebSocket != "undefined";
@@ -91763,7 +91793,7 @@
       if (view == null) {
         view = html$.window;
       }
-      return new WheelEvent(type, html_common.convertDartToNative_Dictionary(options));
+      return new self.WheelEvent(type, html_common.convertDartToNative_Dictionary(options));
     }
     static _(type, eventInitDict) {
       if (eventInitDict === void 0) eventInitDict = null;
@@ -91774,10 +91804,10 @@
       return html$.WheelEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new WheelEvent(type, eventInitDict);
+      return new self.WheelEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new WheelEvent(type);
+      return new self.WheelEvent(type);
     }
     get [_deltaX]() {
       return this.deltaX;
@@ -93370,7 +93400,7 @@
       return html$.Worker._create_1(scriptUrl);
     }
     static _create_1(scriptUrl) {
-      return new Worker(scriptUrl);
+      return new self.Worker(scriptUrl);
     }
     static get supported() {
       return typeof window.Worker != "undefined";
@@ -93525,7 +93555,7 @@
       return html$.XPathEvaluator._create_1();
     }
     static _create_1() {
-      return new XPathEvaluator();
+      return new self.XPathEvaluator();
     }
     [dartx.createExpression](...args) {
       return this.createExpression.apply(this, args);
@@ -107797,7 +107827,7 @@
       return web_audio.OfflineAudioContext._create_1(numberOfChannels, numberOfFrames, sampleRate);
     }
     static _create_1(numberOfChannels, numberOfFrames, sampleRate) {
-      return new OfflineAudioContext(numberOfChannels, numberOfFrames, sampleRate);
+      return new self.OfflineAudioContext(numberOfChannels, numberOfFrames, sampleRate);
     }
   };
   dart.setSignature(web_audio.OfflineAudioContext, {
diff --git a/pkg/dev_compiler/lib/js/common/dart_sdk.js b/pkg/dev_compiler/lib/js/common/dart_sdk.js
index a35267b..6e91b7b 100644
--- a/pkg/dev_compiler/lib/js/common/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/common/dart_sdk.js
@@ -1127,6 +1127,14 @@
   dart.getType = function(obj) {
     return obj == null ? core.Object : obj.__proto__.constructor;
   };
+  dart.isJsInterop = function(obj) {
+    if (typeof obj === "function") {
+      return dart._getRuntimeType(obj) == null;
+    }
+    if (typeof obj !== "object") return false;
+    if (dart.getExtensionType(obj) != null) return false;
+    return !(obj instanceof core.Object);
+  };
   dart.getMethodType = function(type, name) {
     let sigObj = type[dart._methodSig];
     if (sigObj === void 0) return void 0;
@@ -1135,7 +1143,8 @@
   dart.getFieldType = function(type, name) {
     let sigObj = type[dart._fieldSig];
     if (sigObj === void 0) return void 0;
-    return sigObj[name];
+    let fieldType = sigObj[name];
+    return fieldType instanceof Array ? fieldType[0] : fieldType;
   };
   dart.getSetterType = function(type, name) {
     let sigObj = type[dart._setterSig];
@@ -1922,9 +1931,42 @@
       let type = dart.getType(obj);
       if (dart.test(dart.hasField(type, f)) || dart.test(dart.hasGetter(type, f))) return obj[f];
       if (dart.test(dart.hasMethod(type, f))) return dart.bind(obj, f, void 0);
+      if (dart.test(dart.isJsInterop(obj))) return obj[f];
     }
     return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [], {isGetter: true}));
   };
+  dart.dloadMirror = function(obj, field) {
+    let f = dart._canonicalMember(obj, field);
+    dart._trackCall(obj);
+    if (f != null) {
+      let type = dart.getType(obj);
+      if (dart.test(dart.hasField(type, f)) || dart.test(dart.hasGetter(type, f))) return obj[f];
+      if (dart.test(dart.hasMethod(type, f))) return dart.bind(obj, f, void 0);
+    }
+    return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [], {isGetter: true}));
+  };
+  dart._stripGenericArguments = function(type) {
+    let genericClass = dart.getGenericClass(type);
+    if (genericClass != null) return genericClass();
+    return type;
+  };
+  dart.dputMirror = function(obj, field, value) {
+    let f = dart._canonicalMember(obj, field);
+    dart._trackCall(obj);
+    if (f != null) {
+      let objType = dart.getType(obj);
+      let setterType = dart.getSetterType(objType, f);
+      if (setterType != void 0) {
+        return obj[f] = dart.check(value, dart._stripGenericArguments(setterType.args[0]));
+      } else {
+        let fieldType = dart.getFieldType(objType, f);
+        if (fieldType != void 0) {
+          return obj[f] = dart.check(value, dart._stripGenericArguments(fieldType));
+        }
+      }
+    }
+    return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [value], {isSetter: true}));
+  };
   dart.dput = function(obj, field, value) {
     let f = dart._canonicalMember(obj, field);
     dart._trackCall(obj);
@@ -1932,15 +1974,14 @@
       let objType = dart.getType(obj);
       let setterType = dart.getSetterType(objType, f);
       if (setterType != void 0) {
-        if (dart.test(dart.instanceOfOrNull(value, setterType.args[0]))) {
-          return obj[f] = value;
-        }
+        return obj[f] = dart.check(value, setterType.args[0]);
       } else {
         let fieldType = dart.getFieldType(objType, f);
         if (fieldType != void 0) {
-          if (dart.test(dart.instanceOfOrNull(value, fieldType))) {
-            return obj[f] = value;
-          }
+          return obj[f] = dart.check(value, fieldType);
+        }
+        if (dart.test(dart.isJsInterop(obj))) {
+          return obj[f] = value;
         }
       }
     }
@@ -13639,11 +13680,11 @@
     }
   });
   _js_mirrors._dload = function(obj, name) {
-    return _js_mirrors._dart.dload(obj, name);
+    return _js_mirrors._dart.dloadMirror(obj, name);
   };
   dart.lazyFn(_js_mirrors._dload, () => dynamicAndStringTodynamic());
   _js_mirrors._dput = function(obj, name, val) {
-    _js_mirrors._dart.dput(obj, name, val);
+    _js_mirrors._dart.dputMirror(obj, name, val);
   };
   dart.lazyFn(_js_mirrors._dput, () => dynamicAndStringAnddynamicTovoid());
   _js_mirrors._dcall = function(obj, args) {
@@ -34445,18 +34486,7 @@
       return new core._StringStackTrace(stackTraceString);
     }
     static get current() {
-      if (Error.captureStackTrace != null) {
-        let error = new Error();
-        Error.captureStackTrace(error);
-        return _js_helper.getTraceFromException(error);
-      }
-      try {
-        dart.throw('');
-      } catch (_) {
-        let stackTrace = dart.stackTrace(_);
-        return stackTrace;
-      }
-
+      return _js_helper.getTraceFromException(new Error());
     }
   };
   dart.setSignature(core.StackTrace, {
@@ -55637,10 +55667,10 @@
       return html$.Event._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new Event(type, eventInitDict);
+      return new self.Event(type, eventInitDict);
     }
     static _create_2(type) {
-      return new Event(type);
+      return new self.Event(type);
     }
     get [dartx.bubbles]() {
       return this.bubbles;
@@ -58347,10 +58377,10 @@
       return html$.AnimationEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new AnimationEvent(type, eventInitDict);
+      return new self.AnimationEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new AnimationEvent(type);
+      return new self.AnimationEvent(type);
     }
     get [dartx.animationName]() {
       return this.animationName;
@@ -58392,10 +58422,10 @@
       return html$.AnimationPlayerEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new AnimationPlayerEvent(type, eventInitDict);
+      return new self.AnimationPlayerEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new AnimationPlayerEvent(type);
+      return new self.AnimationPlayerEvent(type);
     }
     get [dartx.currentTime]() {
       return this.currentTime;
@@ -58632,10 +58662,10 @@
       return html$.ApplicationCacheErrorEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ApplicationCacheErrorEvent(type, eventInitDict);
+      return new self.ApplicationCacheErrorEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ApplicationCacheErrorEvent(type);
+      return new self.ApplicationCacheErrorEvent(type);
     }
     get [dartx.message]() {
       return this.message;
@@ -59336,10 +59366,10 @@
       return html$.AutocompleteErrorEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new AutocompleteErrorEvent(type, eventInitDict);
+      return new self.AutocompleteErrorEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new AutocompleteErrorEvent(type);
+      return new self.AutocompleteErrorEvent(type);
     }
     get [dartx.reason]() {
       return this.reason;
@@ -59487,10 +59517,10 @@
       return html$.BeforeInstallPromptEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new BeforeInstallPromptEvent(type, eventInitDict);
+      return new self.BeforeInstallPromptEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new BeforeInstallPromptEvent(type);
+      return new self.BeforeInstallPromptEvent(type);
     }
     get [dartx.platforms]() {
       return this.platforms;
@@ -61061,7 +61091,7 @@
       return html$.CircularGeofencingRegion._create_1(init_1);
     }
     static _create_1(init) {
-      return new CircularGeofencingRegion(init);
+      return new self.CircularGeofencingRegion(init);
     }
     get [dartx.latitude]() {
       return this.latitude;
@@ -61223,10 +61253,10 @@
       return html$.CloseEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new CloseEvent(type, eventInitDict);
+      return new self.CloseEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new CloseEvent(type);
+      return new self.CloseEvent(type);
     }
     get [dartx.code]() {
       return this.code;
@@ -61307,10 +61337,10 @@
       return html$.UIEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new UIEvent(type, eventInitDict);
+      return new self.UIEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new UIEvent(type);
+      return new self.UIEvent(type);
     }
     get [_charCode]() {
       return this.charCode;
@@ -61389,10 +61419,10 @@
       return html$.CompositionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new CompositionEvent(type, eventInitDict);
+      return new self.CompositionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new CompositionEvent(type);
+      return new self.CompositionEvent(type);
     }
     get [dartx.data]() {
       return this.data;
@@ -61431,7 +61461,7 @@
       return html$.CompositorProxy._create_1(element, attributeArray);
     }
     static _create_1(element, attributeArray) {
-      return new CompositorProxy(element, attributeArray);
+      return new self.CompositorProxy(element, attributeArray);
     }
     get [dartx.opacity]() {
       return this.opacity;
@@ -61497,7 +61527,7 @@
       return html$.CompositorWorker._create_1(scriptUrl);
     }
     static _create_1(scriptUrl) {
-      return new CompositorWorker(scriptUrl);
+      return new self.CompositorWorker(scriptUrl);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -69121,10 +69151,10 @@
       return html$.CustomEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new CustomEvent(type, eventInitDict);
+      return new self.CustomEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new CustomEvent(type);
+      return new self.CustomEvent(type);
     }
     get [_detail]() {
       return html_common.convertNativeToDart_SerializedScriptValue(this[_get__detail]);
@@ -69439,10 +69469,10 @@
       return html$.DefaultSessionStartEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new DefaultSessionStartEvent(type, eventInitDict);
+      return new self.DefaultSessionStartEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new DefaultSessionStartEvent(type);
+      return new self.DefaultSessionStartEvent(type);
     }
     get [dartx.session]() {
       return this.session;
@@ -69592,10 +69622,10 @@
       return html$.DeviceLightEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new DeviceLightEvent(type, eventInitDict);
+      return new self.DeviceLightEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new DeviceLightEvent(type);
+      return new self.DeviceLightEvent(type);
     }
     get [dartx.value]() {
       return this.value;
@@ -73009,10 +73039,10 @@
       return html$.ErrorEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ErrorEvent(type, eventInitDict);
+      return new self.ErrorEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ErrorEvent(type);
+      return new self.ErrorEvent(type);
     }
     get [dartx.colno]() {
       return this.colno;
@@ -73076,10 +73106,10 @@
       return html$.EventSource._create_2(url);
     }
     static _create_1(url, eventSourceInitDict) {
-      return new EventSource(url, eventSourceInitDict);
+      return new self.EventSource(url, eventSourceInitDict);
     }
     static _create_2(url) {
-      return new EventSource(url);
+      return new self.EventSource(url);
     }
     get [dartx.readyState]() {
       return this.readyState;
@@ -73201,10 +73231,10 @@
       return html$.ExtendableEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ExtendableEvent(type, eventInitDict);
+      return new self.ExtendableEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ExtendableEvent(type);
+      return new self.ExtendableEvent(type);
     }
     [dartx.waitUntil](...args) {
       return this.waitUntil.apply(this, args);
@@ -73236,7 +73266,7 @@
       return html$.FederatedCredential._create_1(data_1);
     }
     static _create_1(data) {
-      return new FederatedCredential(data);
+      return new self.FederatedCredential(data);
     }
     get [dartx.protocol]() {
       return this.protocol;
@@ -73276,10 +73306,10 @@
       return html$.FetchEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new FetchEvent(type, eventInitDict);
+      return new self.FetchEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new FetchEvent(type);
+      return new self.FetchEvent(type);
     }
     get [dartx.isReload]() {
       return this.isReload;
@@ -73423,10 +73453,10 @@
       return html$.File._create_2(fileBits, fileName);
     }
     static _create_1(fileBits, fileName, options) {
-      return new File(fileBits, fileName, options);
+      return new self.File(fileBits, fileName, options);
     }
     static _create_2(fileBits, fileName) {
-      return new File(fileBits, fileName);
+      return new self.File(fileBits, fileName);
     }
     get [dartx.lastModified]() {
       return this.lastModified;
@@ -73650,7 +73680,7 @@
       return html$.FileReader._create_1();
     }
     static _create_1() {
-      return new FileReader();
+      return new self.FileReader();
     }
     get [dartx.error]() {
       return this.error;
@@ -73934,10 +73964,10 @@
       return html$.FocusEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new FocusEvent(type, eventInitDict);
+      return new self.FocusEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new FocusEvent(type);
+      return new self.FocusEvent(type);
     }
     get [dartx.relatedTarget]() {
       return html$._convertNativeToDart_EventTarget(this[_get_relatedTarget]);
@@ -73985,10 +74015,10 @@
       return html$.FontFace._create_2(family, source);
     }
     static _create_1(family, source, descriptors) {
-      return new FontFace(family, source, descriptors);
+      return new self.FontFace(family, source, descriptors);
     }
     static _create_2(family, source) {
-      return new FontFace(family, source);
+      return new self.FontFace(family, source);
     }
     get [dartx.family]() {
       return this.family;
@@ -74159,10 +74189,10 @@
       return html$.FormData._create_2();
     }
     static _create_1(form) {
-      return new FormData(form);
+      return new self.FormData(form);
     }
     static _create_2() {
-      return new FormData();
+      return new self.FormData();
     }
     static get supported() {
       return !!window.FormData;
@@ -74453,10 +74483,10 @@
       return html$.GamepadEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new GamepadEvent(type, eventInitDict);
+      return new self.GamepadEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new GamepadEvent(type);
+      return new self.GamepadEvent(type);
     }
     get [dartx.gamepad]() {
       return this.gamepad;
@@ -75303,7 +75333,7 @@
       let oldUrl = opts && 'oldUrl' in opts ? opts.oldUrl : null;
       let newUrl = opts && 'newUrl' in opts ? opts.newUrl : null;
       let options = dart.map({canBubble: canBubble, cancelable: cancelable, oldURL: oldUrl, newURL: newUrl}, core.String, core.Object);
-      return new HashChangeEvent(type, html_common.convertDartToNative_Dictionary(options));
+      return new self.HashChangeEvent(type, html_common.convertDartToNative_Dictionary(options));
     }
     static _(type, eventInitDict) {
       if (eventInitDict === void 0) eventInitDict = null;
@@ -75314,10 +75344,10 @@
       return html$.HashChangeEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new HashChangeEvent(type, eventInitDict);
+      return new self.HashChangeEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new HashChangeEvent(type);
+      return new self.HashChangeEvent(type);
     }
     static get supported() {
       return html_common.Device.isEventTypeSupported('HashChangeEvent');
@@ -75392,16 +75422,16 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1() {
-      return new Headers();
+      return new self.Headers();
     }
     static _create_2(input) {
-      return new Headers(input);
+      return new self.Headers(input);
     }
     static _create_3(input) {
-      return new Headers(input);
+      return new self.Headers(input);
     }
     static _create_4(input) {
-      return new Headers(input);
+      return new self.Headers(input);
     }
   };
   dart.setSignature(html$.Headers, {
@@ -76422,13 +76452,13 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1(data_OR_sw, sh_OR_sw) {
-      return new ImageData(data_OR_sw, sh_OR_sw);
+      return new self.ImageData(data_OR_sw, sh_OR_sw);
     }
     static _create_2(data_OR_sw, sh_OR_sw) {
-      return new ImageData(data_OR_sw, sh_OR_sw);
+      return new self.ImageData(data_OR_sw, sh_OR_sw);
     }
     static _create_3(data_OR_sw, sh_OR_sw, sh) {
-      return new ImageData(data_OR_sw, sh_OR_sw, sh);
+      return new self.ImageData(data_OR_sw, sh_OR_sw, sh);
     }
     get [dartx.data]() {
       return this.data;
@@ -76627,10 +76657,10 @@
       return html$.InputDevice._create_2();
     }
     static _create_1(deviceInitDict) {
-      return new InputDevice(deviceInitDict);
+      return new self.InputDevice(deviceInitDict);
     }
     static _create_2() {
-      return new InputDevice();
+      return new self.InputDevice();
     }
     get [dartx.firesTouchEvents]() {
       return this.firesTouchEvents;
@@ -78348,10 +78378,10 @@
       return html$.KeyboardEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new KeyboardEvent(type, eventInitDict);
+      return new self.KeyboardEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new KeyboardEvent(type);
+      return new self.KeyboardEvent(type);
     }
     get [dartx.altKey]() {
       return this.altKey;
@@ -78449,13 +78479,13 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1(target, keyframes) {
-      return new KeyframeEffect(target, keyframes);
+      return new self.KeyframeEffect(target, keyframes);
     }
     static _create_2(target, keyframes, timing) {
-      return new KeyframeEffect(target, keyframes, timing);
+      return new self.KeyframeEffect(target, keyframes, timing);
     }
     static _create_3(target, keyframes, timing) {
-      return new KeyframeEffect(target, keyframes, timing);
+      return new self.KeyframeEffect(target, keyframes, timing);
     }
   };
   dart.setSignature(html$.KeyframeEffect, {
@@ -78995,7 +79025,7 @@
       return html$.MediaController._create_1();
     }
     static _create_1() {
-      return new MediaController();
+      return new self.MediaController();
     }
     get [dartx.buffered]() {
       return this.buffered;
@@ -79161,10 +79191,10 @@
       return html$.MediaEncryptedEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaEncryptedEvent(type, eventInitDict);
+      return new self.MediaEncryptedEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaEncryptedEvent(type);
+      return new self.MediaEncryptedEvent(type);
     }
     get [dartx.initData]() {
       return this.initData;
@@ -79274,10 +79304,10 @@
       return html$.MediaKeyEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaKeyEvent(type, eventInitDict);
+      return new self.MediaKeyEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaKeyEvent(type);
+      return new self.MediaKeyEvent(type);
     }
     get [dartx.defaultUrl]() {
       return this.defaultURL;
@@ -79339,10 +79369,10 @@
       return html$.MediaKeyMessageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaKeyMessageEvent(type, eventInitDict);
+      return new self.MediaKeyMessageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaKeyMessageEvent(type);
+      return new self.MediaKeyMessageEvent(type);
     }
     get [dartx.message]() {
       return this.message;
@@ -79605,10 +79635,10 @@
       return html$.MediaQueryListEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaQueryListEvent(type, eventInitDict);
+      return new self.MediaQueryListEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaQueryListEvent(type);
+      return new self.MediaQueryListEvent(type);
     }
     get [dartx.matches]() {
       return this.matches;
@@ -79645,7 +79675,7 @@
       return html$.MediaSession._create_1();
     }
     static _create_1() {
-      return new MediaSession();
+      return new self.MediaSession();
     }
     [dartx.activate](...args) {
       return this.activate.apply(this, args);
@@ -79684,7 +79714,7 @@
       return html$.MediaSource._create_1();
     }
     static _create_1() {
-      return new MediaSource();
+      return new self.MediaSource();
     }
     static get supported() {
       return !!window.MediaSource;
@@ -79773,13 +79803,13 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1() {
-      return new MediaStream();
+      return new self.MediaStream();
     }
     static _create_2(stream_OR_tracks) {
-      return new MediaStream(stream_OR_tracks);
+      return new self.MediaStream(stream_OR_tracks);
     }
     static _create_3(stream_OR_tracks) {
-      return new MediaStream(stream_OR_tracks);
+      return new self.MediaStream(stream_OR_tracks);
     }
     get [dartx.active]() {
       return this.active;
@@ -79897,10 +79927,10 @@
       return html$.MediaStreamEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaStreamEvent(type, eventInitDict);
+      return new self.MediaStreamEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaStreamEvent(type);
+      return new self.MediaStreamEvent(type);
     }
     static get supported() {
       return html_common.Device.isEventTypeSupported('MediaStreamEvent');
@@ -80245,7 +80275,7 @@
         source = html$.window;
       }
       if (!dart.test(html_common.Device.isIE)) {
-        return new MessageEvent(type, {bubbles: canBubble, cancelable: cancelable, data: data, origin: origin, lastEventId: lastEventId, source: source, ports: messagePorts});
+        return new self.MessageEvent(type, {bubbles: canBubble, cancelable: cancelable, data: data, origin: origin, lastEventId: lastEventId, source: source, ports: messagePorts});
       }
       let event = html$.MessageEvent._check(html$.document[_createEvent]("MessageEvent"));
       event[_initMessageEvent](type, canBubble, cancelable, data, origin, lastEventId, source, messagePorts);
@@ -80266,10 +80296,10 @@
       return html$.MessageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MessageEvent(type, eventInitDict);
+      return new self.MessageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MessageEvent(type);
+      return new self.MessageEvent(type);
     }
     get [dartx.lastEventId]() {
       return this.lastEventId;
@@ -80984,10 +81014,10 @@
       return html$.MouseEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MouseEvent(type, eventInitDict);
+      return new self.MouseEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MouseEvent(type);
+      return new self.MouseEvent(type);
     }
     get [dartx.altKey]() {
       return this.altKey;
@@ -82184,10 +82214,10 @@
       return html$.Notification._create_2(title);
     }
     static _create_1(title, options) {
-      return new Notification(title, options);
+      return new self.Notification(title, options);
     }
     static _create_2(title) {
-      return new Notification(title);
+      return new self.Notification(title);
     }
     static get supported() {
       return !!window.Notification;
@@ -82316,10 +82346,10 @@
       return html$.NotificationEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new NotificationEvent(type, eventInitDict);
+      return new self.NotificationEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new NotificationEvent(type);
+      return new self.NotificationEvent(type);
     }
     get [dartx.notification]() {
       return this.notification;
@@ -82816,10 +82846,10 @@
       return html$.PageTransitionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PageTransitionEvent(type, eventInitDict);
+      return new self.PageTransitionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PageTransitionEvent(type);
+      return new self.PageTransitionEvent(type);
     }
     get [dartx.persisted]() {
       return this.persisted;
@@ -82934,13 +82964,13 @@
       return html$.PasswordCredential._create_3(id, password);
     }
     static _create_1(id, password, name, iconURL) {
-      return new PasswordCredential(id, password, name, iconURL);
+      return new self.PasswordCredential(id, password, name, iconURL);
     }
     static _create_2(id, password, name) {
-      return new PasswordCredential(id, password, name);
+      return new self.PasswordCredential(id, password, name);
     }
     static _create_3(id, password) {
-      return new PasswordCredential(id, password);
+      return new self.PasswordCredential(id, password);
     }
     get [dartx.formData]() {
       return this.formData;
@@ -83490,7 +83520,7 @@
       return html$.PeriodicSyncEvent._create_1(type, init_1);
     }
     static _create_1(type, init) {
-      return new PeriodicSyncEvent(type, init);
+      return new self.PeriodicSyncEvent(type, init);
     }
     get [dartx.registration]() {
       return this.registration;
@@ -83853,10 +83883,10 @@
       return html$.PointerEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PointerEvent(type, eventInitDict);
+      return new self.PointerEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PointerEvent(type);
+      return new self.PointerEvent(type);
     }
     get [dartx.height]() {
       return this.height;
@@ -83921,10 +83951,10 @@
       return html$.PopStateEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PopStateEvent(type, eventInitDict);
+      return new self.PopStateEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PopStateEvent(type);
+      return new self.PopStateEvent(type);
     }
     get [dartx.state]() {
       return html_common.convertNativeToDart_SerializedScriptValue(this[_get_state]);
@@ -84241,10 +84271,10 @@
       return html$.ProgressEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ProgressEvent(type, eventInitDict);
+      return new self.ProgressEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ProgressEvent(type);
+      return new self.ProgressEvent(type);
     }
     get [dartx.lengthComputable]() {
       return this.lengthComputable;
@@ -84290,10 +84320,10 @@
       return html$.PromiseRejectionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PromiseRejectionEvent(type, eventInitDict);
+      return new self.PromiseRejectionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PromiseRejectionEvent(type);
+      return new self.PromiseRejectionEvent(type);
     }
     get [dartx.promise]() {
       return this.promise;
@@ -84334,10 +84364,10 @@
       return html$.PushEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PushEvent(type, eventInitDict);
+      return new self.PushEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PushEvent(type);
+      return new self.PushEvent(type);
     }
     get [dartx.data]() {
       return this.data;
@@ -84428,7 +84458,7 @@
       return html$.PushMessageData._create_1(message);
     }
     static _create_1(message) {
-      return new PushMessageData(message);
+      return new self.PushMessageData(message);
     }
     [dartx.arrayBuffer](...args) {
       return this.arrayBuffer.apply(this, args);
@@ -84825,10 +84855,10 @@
       return html$.RelatedEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new RelatedEvent(type, eventInitDict);
+      return new self.RelatedEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new RelatedEvent(type);
+      return new self.RelatedEvent(type);
     }
     get [dartx.relatedTarget]() {
       return html$._convertNativeToDart_EventTarget(this[_get_relatedTarget]);
@@ -85897,31 +85927,31 @@
       return html$.ScrollState._create_9();
     }
     static _create_1(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding);
     }
     static _create_2(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning);
     }
     static _create_3(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase);
     }
     static _create_4(deltaX, deltaY, deltaGranularity, velocityX, velocityY) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY);
     }
     static _create_5(deltaX, deltaY, deltaGranularity, velocityX) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX);
     }
     static _create_6(deltaX, deltaY, deltaGranularity) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity);
     }
     static _create_7(deltaX, deltaY) {
-      return new ScrollState(deltaX, deltaY);
+      return new self.ScrollState(deltaX, deltaY);
     }
     static _create_8(deltaX) {
-      return new ScrollState(deltaX);
+      return new self.ScrollState(deltaX);
     }
     static _create_9() {
-      return new ScrollState();
+      return new self.ScrollState();
     }
     get [dartx.deltaGranularity]() {
       return this.deltaGranularity;
@@ -86014,10 +86044,10 @@
       return html$.SecurityPolicyViolationEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new SecurityPolicyViolationEvent(type, eventInitDict);
+      return new self.SecurityPolicyViolationEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new SecurityPolicyViolationEvent(type);
+      return new self.SecurityPolicyViolationEvent(type);
     }
     get [dartx.blockedUri]() {
       return this.blockedURI;
@@ -86555,10 +86585,10 @@
       return html$.ServicePortConnectEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ServicePortConnectEvent(type, eventInitDict);
+      return new self.ServicePortConnectEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ServicePortConnectEvent(type);
+      return new self.ServicePortConnectEvent(type);
     }
     get [dartx.origin]() {
       return this.origin;
@@ -86721,10 +86751,10 @@
       return html$.ServiceWorkerMessageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ServiceWorkerMessageEvent(type, eventInitDict);
+      return new self.ServiceWorkerMessageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ServiceWorkerMessageEvent(type);
+      return new self.ServiceWorkerMessageEvent(type);
     }
     get [dartx.lastEventId]() {
       return this.lastEventId;
@@ -87036,10 +87066,10 @@
       return html$.SharedWorker._create_2(scriptURL);
     }
     static _create_1(scriptURL, name) {
-      return new SharedWorker(scriptURL, name);
+      return new self.SharedWorker(scriptURL, name);
     }
     static _create_2(scriptURL) {
-      return new SharedWorker(scriptURL);
+      return new self.SharedWorker(scriptURL);
     }
     get [dartx.port]() {
       return this.port;
@@ -87395,7 +87425,7 @@
       return html$.SpeechGrammar._create_1();
     }
     static _create_1() {
-      return new SpeechGrammar();
+      return new self.SpeechGrammar();
     }
     get [dartx.src]() {
       return this.src;
@@ -87444,7 +87474,7 @@
       return html$.SpeechGrammarList._create_1();
     }
     static _create_1() {
-      return new SpeechGrammarList();
+      return new self.SpeechGrammarList();
     }
     get [dartx.length]() {
       return this.length;
@@ -87754,10 +87784,10 @@
       return html$.SpeechRecognitionError._create_2(type);
     }
     static _create_1(type, initDict) {
-      return new SpeechRecognitionError(type, initDict);
+      return new self.SpeechRecognitionError(type, initDict);
     }
     static _create_2(type) {
-      return new SpeechRecognitionError(type);
+      return new self.SpeechRecognitionError(type);
     }
     get [dartx.error]() {
       return this.error;
@@ -87801,10 +87831,10 @@
       return html$.SpeechRecognitionEvent._create_2(type);
     }
     static _create_1(type, initDict) {
-      return new SpeechRecognitionEvent(type, initDict);
+      return new self.SpeechRecognitionEvent(type, initDict);
     }
     static _create_2(type) {
-      return new SpeechRecognitionEvent(type);
+      return new self.SpeechRecognitionEvent(type);
     }
     get [dartx.emma]() {
       return this.emma;
@@ -87980,10 +88010,10 @@
       return html$.SpeechSynthesisUtterance._create_2();
     }
     static _create_1(text) {
-      return new SpeechSynthesisUtterance(text);
+      return new self.SpeechSynthesisUtterance(text);
     }
     static _create_2() {
-      return new SpeechSynthesisUtterance();
+      return new self.SpeechSynthesisUtterance();
     }
     get [dartx.lang]() {
       return this.lang;
@@ -88358,10 +88388,10 @@
       return html$.StorageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new StorageEvent(type, eventInitDict);
+      return new self.StorageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new StorageEvent(type);
+      return new self.StorageEvent(type);
     }
     get [dartx.key]() {
       return this.key;
@@ -88546,7 +88576,7 @@
       return html$.SyncEvent._create_1(type, init_1);
     }
     static _create_1(type, init) {
-      return new SyncEvent(type, init);
+      return new self.SyncEvent(type, init);
     }
     get [dartx.registration]() {
       return this.registration;
@@ -90174,10 +90204,10 @@
       return html$.TrackDefault._create_2(type, language, label, kinds_1);
     }
     static _create_1(type, language, label, kinds, byteStreamTrackID) {
-      return new TrackDefault(type, language, label, kinds, byteStreamTrackID);
+      return new self.TrackDefault(type, language, label, kinds, byteStreamTrackID);
     }
     static _create_2(type, language, label, kinds) {
-      return new TrackDefault(type, language, label, kinds);
+      return new self.TrackDefault(type, language, label, kinds);
     }
     get [dartx.byteStreamTrackID]() {
       return this.byteStreamTrackID;
@@ -90230,10 +90260,10 @@
       return html$.TrackDefaultList._create_2();
     }
     static _create_1(trackDefaults) {
-      return new TrackDefaultList(trackDefaults);
+      return new self.TrackDefaultList(trackDefaults);
     }
     static _create_2() {
-      return new TrackDefaultList();
+      return new self.TrackDefaultList();
     }
     get [dartx.length]() {
       return this.length;
@@ -90367,10 +90397,10 @@
       return html$.TrackEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new TrackEvent(type, eventInitDict);
+      return new self.TrackEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new TrackEvent(type);
+      return new self.TrackEvent(type);
     }
     get [dartx.track]() {
       return this.track;
@@ -90407,10 +90437,10 @@
       return html$.TransitionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new TransitionEvent(type, eventInitDict);
+      return new self.TransitionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new TransitionEvent(type);
+      return new self.TransitionEvent(type);
     }
     get [dartx.elapsedTime]() {
       return this.elapsedTime;
@@ -90981,10 +91011,10 @@
       return html$.VRFieldOfView._create_2();
     }
     static _create_1(fov) {
-      return new VRFieldOfView(fov);
+      return new self.VRFieldOfView(fov);
     }
     static _create_2() {
-      return new VRFieldOfView();
+      return new self.VRFieldOfView();
     }
     get [dartx.downDegrees]() {
       return this.downDegrees;
@@ -91602,10 +91632,10 @@
       return html$.WebSocket._create_2(url);
     }
     static _create_1(url, protocols) {
-      return new WebSocket(url, protocols);
+      return new self.WebSocket(url, protocols);
     }
     static _create_2(url) {
-      return new WebSocket(url);
+      return new self.WebSocket(url);
     }
     static get supported() {
       return typeof window.WebSocket != "undefined";
@@ -91763,7 +91793,7 @@
       if (view == null) {
         view = html$.window;
       }
-      return new WheelEvent(type, html_common.convertDartToNative_Dictionary(options));
+      return new self.WheelEvent(type, html_common.convertDartToNative_Dictionary(options));
     }
     static _(type, eventInitDict) {
       if (eventInitDict === void 0) eventInitDict = null;
@@ -91774,10 +91804,10 @@
       return html$.WheelEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new WheelEvent(type, eventInitDict);
+      return new self.WheelEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new WheelEvent(type);
+      return new self.WheelEvent(type);
     }
     get [_deltaX]() {
       return this.deltaX;
@@ -93370,7 +93400,7 @@
       return html$.Worker._create_1(scriptUrl);
     }
     static _create_1(scriptUrl) {
-      return new Worker(scriptUrl);
+      return new self.Worker(scriptUrl);
     }
     static get supported() {
       return typeof window.Worker != "undefined";
@@ -93525,7 +93555,7 @@
       return html$.XPathEvaluator._create_1();
     }
     static _create_1() {
-      return new XPathEvaluator();
+      return new self.XPathEvaluator();
     }
     [dartx.createExpression](...args) {
       return this.createExpression.apply(this, args);
@@ -107797,7 +107827,7 @@
       return web_audio.OfflineAudioContext._create_1(numberOfChannels, numberOfFrames, sampleRate);
     }
     static _create_1(numberOfChannels, numberOfFrames, sampleRate) {
-      return new OfflineAudioContext(numberOfChannels, numberOfFrames, sampleRate);
+      return new self.OfflineAudioContext(numberOfChannels, numberOfFrames, sampleRate);
     }
   };
   dart.setSignature(web_audio.OfflineAudioContext, {
diff --git a/pkg/dev_compiler/lib/js/es6/dart_sdk.js b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
index a7fbad0..9f9e9f3 100644
--- a/pkg/dev_compiler/lib/js/es6/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
@@ -1125,6 +1125,14 @@
 dart.getType = function(obj) {
   return obj == null ? core.Object : obj.__proto__.constructor;
 };
+dart.isJsInterop = function(obj) {
+  if (typeof obj === "function") {
+    return dart._getRuntimeType(obj) == null;
+  }
+  if (typeof obj !== "object") return false;
+  if (dart.getExtensionType(obj) != null) return false;
+  return !(obj instanceof core.Object);
+};
 dart.getMethodType = function(type, name) {
   let sigObj = type[dart._methodSig];
   if (sigObj === void 0) return void 0;
@@ -1133,7 +1141,8 @@
 dart.getFieldType = function(type, name) {
   let sigObj = type[dart._fieldSig];
   if (sigObj === void 0) return void 0;
-  return sigObj[name];
+  let fieldType = sigObj[name];
+  return fieldType instanceof Array ? fieldType[0] : fieldType;
 };
 dart.getSetterType = function(type, name) {
   let sigObj = type[dart._setterSig];
@@ -1920,9 +1929,42 @@
     let type = dart.getType(obj);
     if (dart.test(dart.hasField(type, f)) || dart.test(dart.hasGetter(type, f))) return obj[f];
     if (dart.test(dart.hasMethod(type, f))) return dart.bind(obj, f, void 0);
+    if (dart.test(dart.isJsInterop(obj))) return obj[f];
   }
   return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [], {isGetter: true}));
 };
+dart.dloadMirror = function(obj, field) {
+  let f = dart._canonicalMember(obj, field);
+  dart._trackCall(obj);
+  if (f != null) {
+    let type = dart.getType(obj);
+    if (dart.test(dart.hasField(type, f)) || dart.test(dart.hasGetter(type, f))) return obj[f];
+    if (dart.test(dart.hasMethod(type, f))) return dart.bind(obj, f, void 0);
+  }
+  return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [], {isGetter: true}));
+};
+dart._stripGenericArguments = function(type) {
+  let genericClass = dart.getGenericClass(type);
+  if (genericClass != null) return genericClass();
+  return type;
+};
+dart.dputMirror = function(obj, field, value) {
+  let f = dart._canonicalMember(obj, field);
+  dart._trackCall(obj);
+  if (f != null) {
+    let objType = dart.getType(obj);
+    let setterType = dart.getSetterType(objType, f);
+    if (setterType != void 0) {
+      return obj[f] = dart.check(value, dart._stripGenericArguments(setterType.args[0]));
+    } else {
+      let fieldType = dart.getFieldType(objType, f);
+      if (fieldType != void 0) {
+        return obj[f] = dart.check(value, dart._stripGenericArguments(fieldType));
+      }
+    }
+  }
+  return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [value], {isSetter: true}));
+};
 dart.dput = function(obj, field, value) {
   let f = dart._canonicalMember(obj, field);
   dart._trackCall(obj);
@@ -1930,15 +1972,14 @@
     let objType = dart.getType(obj);
     let setterType = dart.getSetterType(objType, f);
     if (setterType != void 0) {
-      if (dart.test(dart.instanceOfOrNull(value, setterType.args[0]))) {
-        return obj[f] = value;
-      }
+      return obj[f] = dart.check(value, setterType.args[0]);
     } else {
       let fieldType = dart.getFieldType(objType, f);
       if (fieldType != void 0) {
-        if (dart.test(dart.instanceOfOrNull(value, fieldType))) {
-          return obj[f] = value;
-        }
+        return obj[f] = dart.check(value, fieldType);
+      }
+      if (dart.test(dart.isJsInterop(obj))) {
+        return obj[f] = value;
       }
     }
   }
@@ -13637,11 +13678,11 @@
   }
 });
 _js_mirrors._dload = function(obj, name) {
-  return _js_mirrors._dart.dload(obj, name);
+  return _js_mirrors._dart.dloadMirror(obj, name);
 };
 dart.lazyFn(_js_mirrors._dload, () => dynamicAndStringTodynamic());
 _js_mirrors._dput = function(obj, name, val) {
-  _js_mirrors._dart.dput(obj, name, val);
+  _js_mirrors._dart.dputMirror(obj, name, val);
 };
 dart.lazyFn(_js_mirrors._dput, () => dynamicAndStringAnddynamicTovoid());
 _js_mirrors._dcall = function(obj, args) {
@@ -34443,18 +34484,7 @@
     return new core._StringStackTrace(stackTraceString);
   }
   static get current() {
-    if (Error.captureStackTrace != null) {
-      let error = new Error();
-      Error.captureStackTrace(error);
-      return _js_helper.getTraceFromException(error);
-    }
-    try {
-      dart.throw('');
-    } catch (_) {
-      let stackTrace = dart.stackTrace(_);
-      return stackTrace;
-    }
-
+    return _js_helper.getTraceFromException(new Error());
   }
 };
 dart.setSignature(core.StackTrace, {
@@ -55635,10 +55665,10 @@
     return html.Event._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new Event(type, eventInitDict);
+    return new self.Event(type, eventInitDict);
   }
   static _create_2(type) {
-    return new Event(type);
+    return new self.Event(type);
   }
   get [dartx.bubbles]() {
     return this.bubbles;
@@ -58345,10 +58375,10 @@
     return html.AnimationEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new AnimationEvent(type, eventInitDict);
+    return new self.AnimationEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new AnimationEvent(type);
+    return new self.AnimationEvent(type);
   }
   get [dartx.animationName]() {
     return this.animationName;
@@ -58390,10 +58420,10 @@
     return html.AnimationPlayerEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new AnimationPlayerEvent(type, eventInitDict);
+    return new self.AnimationPlayerEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new AnimationPlayerEvent(type);
+    return new self.AnimationPlayerEvent(type);
   }
   get [dartx.currentTime]() {
     return this.currentTime;
@@ -58630,10 +58660,10 @@
     return html.ApplicationCacheErrorEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new ApplicationCacheErrorEvent(type, eventInitDict);
+    return new self.ApplicationCacheErrorEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new ApplicationCacheErrorEvent(type);
+    return new self.ApplicationCacheErrorEvent(type);
   }
   get [dartx.message]() {
     return this.message;
@@ -59334,10 +59364,10 @@
     return html.AutocompleteErrorEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new AutocompleteErrorEvent(type, eventInitDict);
+    return new self.AutocompleteErrorEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new AutocompleteErrorEvent(type);
+    return new self.AutocompleteErrorEvent(type);
   }
   get [dartx.reason]() {
     return this.reason;
@@ -59485,10 +59515,10 @@
     return html.BeforeInstallPromptEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new BeforeInstallPromptEvent(type, eventInitDict);
+    return new self.BeforeInstallPromptEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new BeforeInstallPromptEvent(type);
+    return new self.BeforeInstallPromptEvent(type);
   }
   get [dartx.platforms]() {
     return this.platforms;
@@ -61059,7 +61089,7 @@
     return html.CircularGeofencingRegion._create_1(init_1);
   }
   static _create_1(init) {
-    return new CircularGeofencingRegion(init);
+    return new self.CircularGeofencingRegion(init);
   }
   get [dartx.latitude]() {
     return this.latitude;
@@ -61221,10 +61251,10 @@
     return html.CloseEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new CloseEvent(type, eventInitDict);
+    return new self.CloseEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new CloseEvent(type);
+    return new self.CloseEvent(type);
   }
   get [dartx.code]() {
     return this.code;
@@ -61305,10 +61335,10 @@
     return html.UIEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new UIEvent(type, eventInitDict);
+    return new self.UIEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new UIEvent(type);
+    return new self.UIEvent(type);
   }
   get [_charCode]() {
     return this.charCode;
@@ -61387,10 +61417,10 @@
     return html.CompositionEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new CompositionEvent(type, eventInitDict);
+    return new self.CompositionEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new CompositionEvent(type);
+    return new self.CompositionEvent(type);
   }
   get [dartx.data]() {
     return this.data;
@@ -61429,7 +61459,7 @@
     return html.CompositorProxy._create_1(element, attributeArray);
   }
   static _create_1(element, attributeArray) {
-    return new CompositorProxy(element, attributeArray);
+    return new self.CompositorProxy(element, attributeArray);
   }
   get [dartx.opacity]() {
     return this.opacity;
@@ -61495,7 +61525,7 @@
     return html.CompositorWorker._create_1(scriptUrl);
   }
   static _create_1(scriptUrl) {
-    return new CompositorWorker(scriptUrl);
+    return new self.CompositorWorker(scriptUrl);
   }
   [dartx.postMessage](message, transfer) {
     if (transfer === void 0) transfer = null;
@@ -69119,10 +69149,10 @@
     return html.CustomEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new CustomEvent(type, eventInitDict);
+    return new self.CustomEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new CustomEvent(type);
+    return new self.CustomEvent(type);
   }
   get [_detail]() {
     return html_common.convertNativeToDart_SerializedScriptValue(this[_get__detail]);
@@ -69437,10 +69467,10 @@
     return html.DefaultSessionStartEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new DefaultSessionStartEvent(type, eventInitDict);
+    return new self.DefaultSessionStartEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new DefaultSessionStartEvent(type);
+    return new self.DefaultSessionStartEvent(type);
   }
   get [dartx.session]() {
     return this.session;
@@ -69590,10 +69620,10 @@
     return html.DeviceLightEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new DeviceLightEvent(type, eventInitDict);
+    return new self.DeviceLightEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new DeviceLightEvent(type);
+    return new self.DeviceLightEvent(type);
   }
   get [dartx.value]() {
     return this.value;
@@ -73007,10 +73037,10 @@
     return html.ErrorEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new ErrorEvent(type, eventInitDict);
+    return new self.ErrorEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new ErrorEvent(type);
+    return new self.ErrorEvent(type);
   }
   get [dartx.colno]() {
     return this.colno;
@@ -73074,10 +73104,10 @@
     return html.EventSource._create_2(url);
   }
   static _create_1(url, eventSourceInitDict) {
-    return new EventSource(url, eventSourceInitDict);
+    return new self.EventSource(url, eventSourceInitDict);
   }
   static _create_2(url) {
-    return new EventSource(url);
+    return new self.EventSource(url);
   }
   get [dartx.readyState]() {
     return this.readyState;
@@ -73199,10 +73229,10 @@
     return html.ExtendableEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new ExtendableEvent(type, eventInitDict);
+    return new self.ExtendableEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new ExtendableEvent(type);
+    return new self.ExtendableEvent(type);
   }
   [dartx.waitUntil](...args) {
     return this.waitUntil.apply(this, args);
@@ -73234,7 +73264,7 @@
     return html.FederatedCredential._create_1(data_1);
   }
   static _create_1(data) {
-    return new FederatedCredential(data);
+    return new self.FederatedCredential(data);
   }
   get [dartx.protocol]() {
     return this.protocol;
@@ -73274,10 +73304,10 @@
     return html.FetchEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new FetchEvent(type, eventInitDict);
+    return new self.FetchEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new FetchEvent(type);
+    return new self.FetchEvent(type);
   }
   get [dartx.isReload]() {
     return this.isReload;
@@ -73421,10 +73451,10 @@
     return html.File._create_2(fileBits, fileName);
   }
   static _create_1(fileBits, fileName, options) {
-    return new File(fileBits, fileName, options);
+    return new self.File(fileBits, fileName, options);
   }
   static _create_2(fileBits, fileName) {
-    return new File(fileBits, fileName);
+    return new self.File(fileBits, fileName);
   }
   get [dartx.lastModified]() {
     return this.lastModified;
@@ -73648,7 +73678,7 @@
     return html.FileReader._create_1();
   }
   static _create_1() {
-    return new FileReader();
+    return new self.FileReader();
   }
   get [dartx.error]() {
     return this.error;
@@ -73932,10 +73962,10 @@
     return html.FocusEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new FocusEvent(type, eventInitDict);
+    return new self.FocusEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new FocusEvent(type);
+    return new self.FocusEvent(type);
   }
   get [dartx.relatedTarget]() {
     return html._convertNativeToDart_EventTarget(this[_get_relatedTarget]);
@@ -73983,10 +74013,10 @@
     return html.FontFace._create_2(family, source);
   }
   static _create_1(family, source, descriptors) {
-    return new FontFace(family, source, descriptors);
+    return new self.FontFace(family, source, descriptors);
   }
   static _create_2(family, source) {
-    return new FontFace(family, source);
+    return new self.FontFace(family, source);
   }
   get [dartx.family]() {
     return this.family;
@@ -74157,10 +74187,10 @@
     return html.FormData._create_2();
   }
   static _create_1(form) {
-    return new FormData(form);
+    return new self.FormData(form);
   }
   static _create_2() {
-    return new FormData();
+    return new self.FormData();
   }
   static get supported() {
     return !!window.FormData;
@@ -74451,10 +74481,10 @@
     return html.GamepadEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new GamepadEvent(type, eventInitDict);
+    return new self.GamepadEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new GamepadEvent(type);
+    return new self.GamepadEvent(type);
   }
   get [dartx.gamepad]() {
     return this.gamepad;
@@ -75301,7 +75331,7 @@
     let oldUrl = opts && 'oldUrl' in opts ? opts.oldUrl : null;
     let newUrl = opts && 'newUrl' in opts ? opts.newUrl : null;
     let options = dart.map({canBubble: canBubble, cancelable: cancelable, oldURL: oldUrl, newURL: newUrl}, core.String, core.Object);
-    return new HashChangeEvent(type, html_common.convertDartToNative_Dictionary(options));
+    return new self.HashChangeEvent(type, html_common.convertDartToNative_Dictionary(options));
   }
   static _(type, eventInitDict) {
     if (eventInitDict === void 0) eventInitDict = null;
@@ -75312,10 +75342,10 @@
     return html.HashChangeEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new HashChangeEvent(type, eventInitDict);
+    return new self.HashChangeEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new HashChangeEvent(type);
+    return new self.HashChangeEvent(type);
   }
   static get supported() {
     return html_common.Device.isEventTypeSupported('HashChangeEvent');
@@ -75390,16 +75420,16 @@
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
   static _create_1() {
-    return new Headers();
+    return new self.Headers();
   }
   static _create_2(input) {
-    return new Headers(input);
+    return new self.Headers(input);
   }
   static _create_3(input) {
-    return new Headers(input);
+    return new self.Headers(input);
   }
   static _create_4(input) {
-    return new Headers(input);
+    return new self.Headers(input);
   }
 };
 dart.setSignature(html.Headers, {
@@ -76420,13 +76450,13 @@
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
   static _create_1(data_OR_sw, sh_OR_sw) {
-    return new ImageData(data_OR_sw, sh_OR_sw);
+    return new self.ImageData(data_OR_sw, sh_OR_sw);
   }
   static _create_2(data_OR_sw, sh_OR_sw) {
-    return new ImageData(data_OR_sw, sh_OR_sw);
+    return new self.ImageData(data_OR_sw, sh_OR_sw);
   }
   static _create_3(data_OR_sw, sh_OR_sw, sh) {
-    return new ImageData(data_OR_sw, sh_OR_sw, sh);
+    return new self.ImageData(data_OR_sw, sh_OR_sw, sh);
   }
   get [dartx.data]() {
     return this.data;
@@ -76625,10 +76655,10 @@
     return html.InputDevice._create_2();
   }
   static _create_1(deviceInitDict) {
-    return new InputDevice(deviceInitDict);
+    return new self.InputDevice(deviceInitDict);
   }
   static _create_2() {
-    return new InputDevice();
+    return new self.InputDevice();
   }
   get [dartx.firesTouchEvents]() {
     return this.firesTouchEvents;
@@ -78346,10 +78376,10 @@
     return html.KeyboardEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new KeyboardEvent(type, eventInitDict);
+    return new self.KeyboardEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new KeyboardEvent(type);
+    return new self.KeyboardEvent(type);
   }
   get [dartx.altKey]() {
     return this.altKey;
@@ -78447,13 +78477,13 @@
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
   static _create_1(target, keyframes) {
-    return new KeyframeEffect(target, keyframes);
+    return new self.KeyframeEffect(target, keyframes);
   }
   static _create_2(target, keyframes, timing) {
-    return new KeyframeEffect(target, keyframes, timing);
+    return new self.KeyframeEffect(target, keyframes, timing);
   }
   static _create_3(target, keyframes, timing) {
-    return new KeyframeEffect(target, keyframes, timing);
+    return new self.KeyframeEffect(target, keyframes, timing);
   }
 };
 dart.setSignature(html.KeyframeEffect, {
@@ -78993,7 +79023,7 @@
     return html.MediaController._create_1();
   }
   static _create_1() {
-    return new MediaController();
+    return new self.MediaController();
   }
   get [dartx.buffered]() {
     return this.buffered;
@@ -79159,10 +79189,10 @@
     return html.MediaEncryptedEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new MediaEncryptedEvent(type, eventInitDict);
+    return new self.MediaEncryptedEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new MediaEncryptedEvent(type);
+    return new self.MediaEncryptedEvent(type);
   }
   get [dartx.initData]() {
     return this.initData;
@@ -79272,10 +79302,10 @@
     return html.MediaKeyEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new MediaKeyEvent(type, eventInitDict);
+    return new self.MediaKeyEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new MediaKeyEvent(type);
+    return new self.MediaKeyEvent(type);
   }
   get [dartx.defaultUrl]() {
     return this.defaultURL;
@@ -79337,10 +79367,10 @@
     return html.MediaKeyMessageEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new MediaKeyMessageEvent(type, eventInitDict);
+    return new self.MediaKeyMessageEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new MediaKeyMessageEvent(type);
+    return new self.MediaKeyMessageEvent(type);
   }
   get [dartx.message]() {
     return this.message;
@@ -79603,10 +79633,10 @@
     return html.MediaQueryListEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new MediaQueryListEvent(type, eventInitDict);
+    return new self.MediaQueryListEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new MediaQueryListEvent(type);
+    return new self.MediaQueryListEvent(type);
   }
   get [dartx.matches]() {
     return this.matches;
@@ -79643,7 +79673,7 @@
     return html.MediaSession._create_1();
   }
   static _create_1() {
-    return new MediaSession();
+    return new self.MediaSession();
   }
   [dartx.activate](...args) {
     return this.activate.apply(this, args);
@@ -79682,7 +79712,7 @@
     return html.MediaSource._create_1();
   }
   static _create_1() {
-    return new MediaSource();
+    return new self.MediaSource();
   }
   static get supported() {
     return !!window.MediaSource;
@@ -79771,13 +79801,13 @@
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
   static _create_1() {
-    return new MediaStream();
+    return new self.MediaStream();
   }
   static _create_2(stream_OR_tracks) {
-    return new MediaStream(stream_OR_tracks);
+    return new self.MediaStream(stream_OR_tracks);
   }
   static _create_3(stream_OR_tracks) {
-    return new MediaStream(stream_OR_tracks);
+    return new self.MediaStream(stream_OR_tracks);
   }
   get [dartx.active]() {
     return this.active;
@@ -79895,10 +79925,10 @@
     return html.MediaStreamEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new MediaStreamEvent(type, eventInitDict);
+    return new self.MediaStreamEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new MediaStreamEvent(type);
+    return new self.MediaStreamEvent(type);
   }
   static get supported() {
     return html_common.Device.isEventTypeSupported('MediaStreamEvent');
@@ -80243,7 +80273,7 @@
       source = html.window;
     }
     if (!dart.test(html_common.Device.isIE)) {
-      return new MessageEvent(type, {bubbles: canBubble, cancelable: cancelable, data: data, origin: origin, lastEventId: lastEventId, source: source, ports: messagePorts});
+      return new self.MessageEvent(type, {bubbles: canBubble, cancelable: cancelable, data: data, origin: origin, lastEventId: lastEventId, source: source, ports: messagePorts});
     }
     let event = html.MessageEvent._check(html.document[_createEvent]("MessageEvent"));
     event[_initMessageEvent](type, canBubble, cancelable, data, origin, lastEventId, source, messagePorts);
@@ -80264,10 +80294,10 @@
     return html.MessageEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new MessageEvent(type, eventInitDict);
+    return new self.MessageEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new MessageEvent(type);
+    return new self.MessageEvent(type);
   }
   get [dartx.lastEventId]() {
     return this.lastEventId;
@@ -80982,10 +81012,10 @@
     return html.MouseEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new MouseEvent(type, eventInitDict);
+    return new self.MouseEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new MouseEvent(type);
+    return new self.MouseEvent(type);
   }
   get [dartx.altKey]() {
     return this.altKey;
@@ -82182,10 +82212,10 @@
     return html.Notification._create_2(title);
   }
   static _create_1(title, options) {
-    return new Notification(title, options);
+    return new self.Notification(title, options);
   }
   static _create_2(title) {
-    return new Notification(title);
+    return new self.Notification(title);
   }
   static get supported() {
     return !!window.Notification;
@@ -82314,10 +82344,10 @@
     return html.NotificationEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new NotificationEvent(type, eventInitDict);
+    return new self.NotificationEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new NotificationEvent(type);
+    return new self.NotificationEvent(type);
   }
   get [dartx.notification]() {
     return this.notification;
@@ -82814,10 +82844,10 @@
     return html.PageTransitionEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new PageTransitionEvent(type, eventInitDict);
+    return new self.PageTransitionEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new PageTransitionEvent(type);
+    return new self.PageTransitionEvent(type);
   }
   get [dartx.persisted]() {
     return this.persisted;
@@ -82932,13 +82962,13 @@
     return html.PasswordCredential._create_3(id, password);
   }
   static _create_1(id, password, name, iconURL) {
-    return new PasswordCredential(id, password, name, iconURL);
+    return new self.PasswordCredential(id, password, name, iconURL);
   }
   static _create_2(id, password, name) {
-    return new PasswordCredential(id, password, name);
+    return new self.PasswordCredential(id, password, name);
   }
   static _create_3(id, password) {
-    return new PasswordCredential(id, password);
+    return new self.PasswordCredential(id, password);
   }
   get [dartx.formData]() {
     return this.formData;
@@ -83488,7 +83518,7 @@
     return html.PeriodicSyncEvent._create_1(type, init_1);
   }
   static _create_1(type, init) {
-    return new PeriodicSyncEvent(type, init);
+    return new self.PeriodicSyncEvent(type, init);
   }
   get [dartx.registration]() {
     return this.registration;
@@ -83851,10 +83881,10 @@
     return html.PointerEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new PointerEvent(type, eventInitDict);
+    return new self.PointerEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new PointerEvent(type);
+    return new self.PointerEvent(type);
   }
   get [dartx.height]() {
     return this.height;
@@ -83919,10 +83949,10 @@
     return html.PopStateEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new PopStateEvent(type, eventInitDict);
+    return new self.PopStateEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new PopStateEvent(type);
+    return new self.PopStateEvent(type);
   }
   get [dartx.state]() {
     return html_common.convertNativeToDart_SerializedScriptValue(this[_get_state]);
@@ -84239,10 +84269,10 @@
     return html.ProgressEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new ProgressEvent(type, eventInitDict);
+    return new self.ProgressEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new ProgressEvent(type);
+    return new self.ProgressEvent(type);
   }
   get [dartx.lengthComputable]() {
     return this.lengthComputable;
@@ -84288,10 +84318,10 @@
     return html.PromiseRejectionEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new PromiseRejectionEvent(type, eventInitDict);
+    return new self.PromiseRejectionEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new PromiseRejectionEvent(type);
+    return new self.PromiseRejectionEvent(type);
   }
   get [dartx.promise]() {
     return this.promise;
@@ -84332,10 +84362,10 @@
     return html.PushEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new PushEvent(type, eventInitDict);
+    return new self.PushEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new PushEvent(type);
+    return new self.PushEvent(type);
   }
   get [dartx.data]() {
     return this.data;
@@ -84426,7 +84456,7 @@
     return html.PushMessageData._create_1(message);
   }
   static _create_1(message) {
-    return new PushMessageData(message);
+    return new self.PushMessageData(message);
   }
   [dartx.arrayBuffer](...args) {
     return this.arrayBuffer.apply(this, args);
@@ -84823,10 +84853,10 @@
     return html.RelatedEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new RelatedEvent(type, eventInitDict);
+    return new self.RelatedEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new RelatedEvent(type);
+    return new self.RelatedEvent(type);
   }
   get [dartx.relatedTarget]() {
     return html._convertNativeToDart_EventTarget(this[_get_relatedTarget]);
@@ -85895,31 +85925,31 @@
     return html.ScrollState._create_9();
   }
   static _create_1(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding) {
-    return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding);
+    return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding);
   }
   static _create_2(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning) {
-    return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning);
+    return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning);
   }
   static _create_3(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase) {
-    return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase);
+    return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase);
   }
   static _create_4(deltaX, deltaY, deltaGranularity, velocityX, velocityY) {
-    return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY);
+    return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY);
   }
   static _create_5(deltaX, deltaY, deltaGranularity, velocityX) {
-    return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX);
+    return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX);
   }
   static _create_6(deltaX, deltaY, deltaGranularity) {
-    return new ScrollState(deltaX, deltaY, deltaGranularity);
+    return new self.ScrollState(deltaX, deltaY, deltaGranularity);
   }
   static _create_7(deltaX, deltaY) {
-    return new ScrollState(deltaX, deltaY);
+    return new self.ScrollState(deltaX, deltaY);
   }
   static _create_8(deltaX) {
-    return new ScrollState(deltaX);
+    return new self.ScrollState(deltaX);
   }
   static _create_9() {
-    return new ScrollState();
+    return new self.ScrollState();
   }
   get [dartx.deltaGranularity]() {
     return this.deltaGranularity;
@@ -86012,10 +86042,10 @@
     return html.SecurityPolicyViolationEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new SecurityPolicyViolationEvent(type, eventInitDict);
+    return new self.SecurityPolicyViolationEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new SecurityPolicyViolationEvent(type);
+    return new self.SecurityPolicyViolationEvent(type);
   }
   get [dartx.blockedUri]() {
     return this.blockedURI;
@@ -86553,10 +86583,10 @@
     return html.ServicePortConnectEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new ServicePortConnectEvent(type, eventInitDict);
+    return new self.ServicePortConnectEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new ServicePortConnectEvent(type);
+    return new self.ServicePortConnectEvent(type);
   }
   get [dartx.origin]() {
     return this.origin;
@@ -86719,10 +86749,10 @@
     return html.ServiceWorkerMessageEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new ServiceWorkerMessageEvent(type, eventInitDict);
+    return new self.ServiceWorkerMessageEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new ServiceWorkerMessageEvent(type);
+    return new self.ServiceWorkerMessageEvent(type);
   }
   get [dartx.lastEventId]() {
     return this.lastEventId;
@@ -87034,10 +87064,10 @@
     return html.SharedWorker._create_2(scriptURL);
   }
   static _create_1(scriptURL, name) {
-    return new SharedWorker(scriptURL, name);
+    return new self.SharedWorker(scriptURL, name);
   }
   static _create_2(scriptURL) {
-    return new SharedWorker(scriptURL);
+    return new self.SharedWorker(scriptURL);
   }
   get [dartx.port]() {
     return this.port;
@@ -87393,7 +87423,7 @@
     return html.SpeechGrammar._create_1();
   }
   static _create_1() {
-    return new SpeechGrammar();
+    return new self.SpeechGrammar();
   }
   get [dartx.src]() {
     return this.src;
@@ -87442,7 +87472,7 @@
     return html.SpeechGrammarList._create_1();
   }
   static _create_1() {
-    return new SpeechGrammarList();
+    return new self.SpeechGrammarList();
   }
   get [dartx.length]() {
     return this.length;
@@ -87752,10 +87782,10 @@
     return html.SpeechRecognitionError._create_2(type);
   }
   static _create_1(type, initDict) {
-    return new SpeechRecognitionError(type, initDict);
+    return new self.SpeechRecognitionError(type, initDict);
   }
   static _create_2(type) {
-    return new SpeechRecognitionError(type);
+    return new self.SpeechRecognitionError(type);
   }
   get [dartx.error]() {
     return this.error;
@@ -87799,10 +87829,10 @@
     return html.SpeechRecognitionEvent._create_2(type);
   }
   static _create_1(type, initDict) {
-    return new SpeechRecognitionEvent(type, initDict);
+    return new self.SpeechRecognitionEvent(type, initDict);
   }
   static _create_2(type) {
-    return new SpeechRecognitionEvent(type);
+    return new self.SpeechRecognitionEvent(type);
   }
   get [dartx.emma]() {
     return this.emma;
@@ -87978,10 +88008,10 @@
     return html.SpeechSynthesisUtterance._create_2();
   }
   static _create_1(text) {
-    return new SpeechSynthesisUtterance(text);
+    return new self.SpeechSynthesisUtterance(text);
   }
   static _create_2() {
-    return new SpeechSynthesisUtterance();
+    return new self.SpeechSynthesisUtterance();
   }
   get [dartx.lang]() {
     return this.lang;
@@ -88356,10 +88386,10 @@
     return html.StorageEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new StorageEvent(type, eventInitDict);
+    return new self.StorageEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new StorageEvent(type);
+    return new self.StorageEvent(type);
   }
   get [dartx.key]() {
     return this.key;
@@ -88544,7 +88574,7 @@
     return html.SyncEvent._create_1(type, init_1);
   }
   static _create_1(type, init) {
-    return new SyncEvent(type, init);
+    return new self.SyncEvent(type, init);
   }
   get [dartx.registration]() {
     return this.registration;
@@ -90172,10 +90202,10 @@
     return html.TrackDefault._create_2(type, language, label, kinds_1);
   }
   static _create_1(type, language, label, kinds, byteStreamTrackID) {
-    return new TrackDefault(type, language, label, kinds, byteStreamTrackID);
+    return new self.TrackDefault(type, language, label, kinds, byteStreamTrackID);
   }
   static _create_2(type, language, label, kinds) {
-    return new TrackDefault(type, language, label, kinds);
+    return new self.TrackDefault(type, language, label, kinds);
   }
   get [dartx.byteStreamTrackID]() {
     return this.byteStreamTrackID;
@@ -90228,10 +90258,10 @@
     return html.TrackDefaultList._create_2();
   }
   static _create_1(trackDefaults) {
-    return new TrackDefaultList(trackDefaults);
+    return new self.TrackDefaultList(trackDefaults);
   }
   static _create_2() {
-    return new TrackDefaultList();
+    return new self.TrackDefaultList();
   }
   get [dartx.length]() {
     return this.length;
@@ -90365,10 +90395,10 @@
     return html.TrackEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new TrackEvent(type, eventInitDict);
+    return new self.TrackEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new TrackEvent(type);
+    return new self.TrackEvent(type);
   }
   get [dartx.track]() {
     return this.track;
@@ -90405,10 +90435,10 @@
     return html.TransitionEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new TransitionEvent(type, eventInitDict);
+    return new self.TransitionEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new TransitionEvent(type);
+    return new self.TransitionEvent(type);
   }
   get [dartx.elapsedTime]() {
     return this.elapsedTime;
@@ -90979,10 +91009,10 @@
     return html.VRFieldOfView._create_2();
   }
   static _create_1(fov) {
-    return new VRFieldOfView(fov);
+    return new self.VRFieldOfView(fov);
   }
   static _create_2() {
-    return new VRFieldOfView();
+    return new self.VRFieldOfView();
   }
   get [dartx.downDegrees]() {
     return this.downDegrees;
@@ -91600,10 +91630,10 @@
     return html.WebSocket._create_2(url);
   }
   static _create_1(url, protocols) {
-    return new WebSocket(url, protocols);
+    return new self.WebSocket(url, protocols);
   }
   static _create_2(url) {
-    return new WebSocket(url);
+    return new self.WebSocket(url);
   }
   static get supported() {
     return typeof window.WebSocket != "undefined";
@@ -91761,7 +91791,7 @@
     if (view == null) {
       view = html.window;
     }
-    return new WheelEvent(type, html_common.convertDartToNative_Dictionary(options));
+    return new self.WheelEvent(type, html_common.convertDartToNative_Dictionary(options));
   }
   static _(type, eventInitDict) {
     if (eventInitDict === void 0) eventInitDict = null;
@@ -91772,10 +91802,10 @@
     return html.WheelEvent._create_2(type);
   }
   static _create_1(type, eventInitDict) {
-    return new WheelEvent(type, eventInitDict);
+    return new self.WheelEvent(type, eventInitDict);
   }
   static _create_2(type) {
-    return new WheelEvent(type);
+    return new self.WheelEvent(type);
   }
   get [_deltaX]() {
     return this.deltaX;
@@ -93368,7 +93398,7 @@
     return html.Worker._create_1(scriptUrl);
   }
   static _create_1(scriptUrl) {
-    return new Worker(scriptUrl);
+    return new self.Worker(scriptUrl);
   }
   static get supported() {
     return typeof window.Worker != "undefined";
@@ -93523,7 +93553,7 @@
     return html.XPathEvaluator._create_1();
   }
   static _create_1() {
-    return new XPathEvaluator();
+    return new self.XPathEvaluator();
   }
   [dartx.createExpression](...args) {
     return this.createExpression.apply(this, args);
@@ -107795,7 +107825,7 @@
     return web_audio.OfflineAudioContext._create_1(numberOfChannels, numberOfFrames, sampleRate);
   }
   static _create_1(numberOfChannels, numberOfFrames, sampleRate) {
-    return new OfflineAudioContext(numberOfChannels, numberOfFrames, sampleRate);
+    return new self.OfflineAudioContext(numberOfChannels, numberOfFrames, sampleRate);
   }
 };
 dart.setSignature(web_audio.OfflineAudioContext, {
diff --git a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
index b313c6a..5d65992 100644
--- a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
@@ -1128,6 +1128,14 @@
   dart.getType = function(obj) {
     return obj == null ? core.Object : obj.__proto__.constructor;
   };
+  dart.isJsInterop = function(obj) {
+    if (typeof obj === "function") {
+      return dart._getRuntimeType(obj) == null;
+    }
+    if (typeof obj !== "object") return false;
+    if (dart.getExtensionType(obj) != null) return false;
+    return !(obj instanceof core.Object);
+  };
   dart.getMethodType = function(type, name) {
     let sigObj = type[dart._methodSig];
     if (sigObj === void 0) return void 0;
@@ -1136,7 +1144,8 @@
   dart.getFieldType = function(type, name) {
     let sigObj = type[dart._fieldSig];
     if (sigObj === void 0) return void 0;
-    return sigObj[name];
+    let fieldType = sigObj[name];
+    return fieldType instanceof Array ? fieldType[0] : fieldType;
   };
   dart.getSetterType = function(type, name) {
     let sigObj = type[dart._setterSig];
@@ -1923,9 +1932,42 @@
       let type = dart.getType(obj);
       if (dart.test(dart.hasField(type, f)) || dart.test(dart.hasGetter(type, f))) return obj[f];
       if (dart.test(dart.hasMethod(type, f))) return dart.bind(obj, f, void 0);
+      if (dart.test(dart.isJsInterop(obj))) return obj[f];
     }
     return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [], {isGetter: true}));
   };
+  dart.dloadMirror = function(obj, field) {
+    let f = dart._canonicalMember(obj, field);
+    dart._trackCall(obj);
+    if (f != null) {
+      let type = dart.getType(obj);
+      if (dart.test(dart.hasField(type, f)) || dart.test(dart.hasGetter(type, f))) return obj[f];
+      if (dart.test(dart.hasMethod(type, f))) return dart.bind(obj, f, void 0);
+    }
+    return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [], {isGetter: true}));
+  };
+  dart._stripGenericArguments = function(type) {
+    let genericClass = dart.getGenericClass(type);
+    if (genericClass != null) return genericClass();
+    return type;
+  };
+  dart.dputMirror = function(obj, field, value) {
+    let f = dart._canonicalMember(obj, field);
+    dart._trackCall(obj);
+    if (f != null) {
+      let objType = dart.getType(obj);
+      let setterType = dart.getSetterType(objType, f);
+      if (setterType != void 0) {
+        return obj[f] = dart.check(value, dart._stripGenericArguments(setterType.args[0]));
+      } else {
+        let fieldType = dart.getFieldType(objType, f);
+        if (fieldType != void 0) {
+          return obj[f] = dart.check(value, dart._stripGenericArguments(fieldType));
+        }
+      }
+    }
+    return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [value], {isSetter: true}));
+  };
   dart.dput = function(obj, field, value) {
     let f = dart._canonicalMember(obj, field);
     dart._trackCall(obj);
@@ -1933,15 +1975,14 @@
       let objType = dart.getType(obj);
       let setterType = dart.getSetterType(objType, f);
       if (setterType != void 0) {
-        if (dart.test(dart.instanceOfOrNull(value, setterType.args[0]))) {
-          return obj[f] = value;
-        }
+        return obj[f] = dart.check(value, setterType.args[0]);
       } else {
         let fieldType = dart.getFieldType(objType, f);
         if (fieldType != void 0) {
-          if (dart.test(dart.instanceOfOrNull(value, fieldType))) {
-            return obj[f] = value;
-          }
+          return obj[f] = dart.check(value, fieldType);
+        }
+        if (dart.test(dart.isJsInterop(obj))) {
+          return obj[f] = value;
         }
       }
     }
@@ -13640,11 +13681,11 @@
     }
   });
   _js_mirrors._dload = function(obj, name) {
-    return _js_mirrors._dart.dload(obj, name);
+    return _js_mirrors._dart.dloadMirror(obj, name);
   };
   dart.lazyFn(_js_mirrors._dload, () => dynamicAndStringTodynamic());
   _js_mirrors._dput = function(obj, name, val) {
-    _js_mirrors._dart.dput(obj, name, val);
+    _js_mirrors._dart.dputMirror(obj, name, val);
   };
   dart.lazyFn(_js_mirrors._dput, () => dynamicAndStringAnddynamicTovoid());
   _js_mirrors._dcall = function(obj, args) {
@@ -34446,18 +34487,7 @@
       return new core._StringStackTrace(stackTraceString);
     }
     static get current() {
-      if (Error.captureStackTrace != null) {
-        let error = new Error();
-        Error.captureStackTrace(error);
-        return _js_helper.getTraceFromException(error);
-      }
-      try {
-        dart.throw('');
-      } catch (_) {
-        let stackTrace = dart.stackTrace(_);
-        return stackTrace;
-      }
-
+      return _js_helper.getTraceFromException(new Error());
     }
   };
   dart.setSignature(core.StackTrace, {
@@ -55638,10 +55668,10 @@
       return html$.Event._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new Event(type, eventInitDict);
+      return new self.Event(type, eventInitDict);
     }
     static _create_2(type) {
-      return new Event(type);
+      return new self.Event(type);
     }
     get [dartx.bubbles]() {
       return this.bubbles;
@@ -58348,10 +58378,10 @@
       return html$.AnimationEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new AnimationEvent(type, eventInitDict);
+      return new self.AnimationEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new AnimationEvent(type);
+      return new self.AnimationEvent(type);
     }
     get [dartx.animationName]() {
       return this.animationName;
@@ -58393,10 +58423,10 @@
       return html$.AnimationPlayerEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new AnimationPlayerEvent(type, eventInitDict);
+      return new self.AnimationPlayerEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new AnimationPlayerEvent(type);
+      return new self.AnimationPlayerEvent(type);
     }
     get [dartx.currentTime]() {
       return this.currentTime;
@@ -58633,10 +58663,10 @@
       return html$.ApplicationCacheErrorEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ApplicationCacheErrorEvent(type, eventInitDict);
+      return new self.ApplicationCacheErrorEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ApplicationCacheErrorEvent(type);
+      return new self.ApplicationCacheErrorEvent(type);
     }
     get [dartx.message]() {
       return this.message;
@@ -59337,10 +59367,10 @@
       return html$.AutocompleteErrorEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new AutocompleteErrorEvent(type, eventInitDict);
+      return new self.AutocompleteErrorEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new AutocompleteErrorEvent(type);
+      return new self.AutocompleteErrorEvent(type);
     }
     get [dartx.reason]() {
       return this.reason;
@@ -59488,10 +59518,10 @@
       return html$.BeforeInstallPromptEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new BeforeInstallPromptEvent(type, eventInitDict);
+      return new self.BeforeInstallPromptEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new BeforeInstallPromptEvent(type);
+      return new self.BeforeInstallPromptEvent(type);
     }
     get [dartx.platforms]() {
       return this.platforms;
@@ -61062,7 +61092,7 @@
       return html$.CircularGeofencingRegion._create_1(init_1);
     }
     static _create_1(init) {
-      return new CircularGeofencingRegion(init);
+      return new self.CircularGeofencingRegion(init);
     }
     get [dartx.latitude]() {
       return this.latitude;
@@ -61224,10 +61254,10 @@
       return html$.CloseEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new CloseEvent(type, eventInitDict);
+      return new self.CloseEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new CloseEvent(type);
+      return new self.CloseEvent(type);
     }
     get [dartx.code]() {
       return this.code;
@@ -61308,10 +61338,10 @@
       return html$.UIEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new UIEvent(type, eventInitDict);
+      return new self.UIEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new UIEvent(type);
+      return new self.UIEvent(type);
     }
     get [_charCode]() {
       return this.charCode;
@@ -61390,10 +61420,10 @@
       return html$.CompositionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new CompositionEvent(type, eventInitDict);
+      return new self.CompositionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new CompositionEvent(type);
+      return new self.CompositionEvent(type);
     }
     get [dartx.data]() {
       return this.data;
@@ -61432,7 +61462,7 @@
       return html$.CompositorProxy._create_1(element, attributeArray);
     }
     static _create_1(element, attributeArray) {
-      return new CompositorProxy(element, attributeArray);
+      return new self.CompositorProxy(element, attributeArray);
     }
     get [dartx.opacity]() {
       return this.opacity;
@@ -61498,7 +61528,7 @@
       return html$.CompositorWorker._create_1(scriptUrl);
     }
     static _create_1(scriptUrl) {
-      return new CompositorWorker(scriptUrl);
+      return new self.CompositorWorker(scriptUrl);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -69122,10 +69152,10 @@
       return html$.CustomEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new CustomEvent(type, eventInitDict);
+      return new self.CustomEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new CustomEvent(type);
+      return new self.CustomEvent(type);
     }
     get [_detail]() {
       return html_common.convertNativeToDart_SerializedScriptValue(this[_get__detail]);
@@ -69440,10 +69470,10 @@
       return html$.DefaultSessionStartEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new DefaultSessionStartEvent(type, eventInitDict);
+      return new self.DefaultSessionStartEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new DefaultSessionStartEvent(type);
+      return new self.DefaultSessionStartEvent(type);
     }
     get [dartx.session]() {
       return this.session;
@@ -69593,10 +69623,10 @@
       return html$.DeviceLightEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new DeviceLightEvent(type, eventInitDict);
+      return new self.DeviceLightEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new DeviceLightEvent(type);
+      return new self.DeviceLightEvent(type);
     }
     get [dartx.value]() {
       return this.value;
@@ -73010,10 +73040,10 @@
       return html$.ErrorEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ErrorEvent(type, eventInitDict);
+      return new self.ErrorEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ErrorEvent(type);
+      return new self.ErrorEvent(type);
     }
     get [dartx.colno]() {
       return this.colno;
@@ -73077,10 +73107,10 @@
       return html$.EventSource._create_2(url);
     }
     static _create_1(url, eventSourceInitDict) {
-      return new EventSource(url, eventSourceInitDict);
+      return new self.EventSource(url, eventSourceInitDict);
     }
     static _create_2(url) {
-      return new EventSource(url);
+      return new self.EventSource(url);
     }
     get [dartx.readyState]() {
       return this.readyState;
@@ -73202,10 +73232,10 @@
       return html$.ExtendableEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ExtendableEvent(type, eventInitDict);
+      return new self.ExtendableEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ExtendableEvent(type);
+      return new self.ExtendableEvent(type);
     }
     [dartx.waitUntil](...args) {
       return this.waitUntil.apply(this, args);
@@ -73237,7 +73267,7 @@
       return html$.FederatedCredential._create_1(data_1);
     }
     static _create_1(data) {
-      return new FederatedCredential(data);
+      return new self.FederatedCredential(data);
     }
     get [dartx.protocol]() {
       return this.protocol;
@@ -73277,10 +73307,10 @@
       return html$.FetchEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new FetchEvent(type, eventInitDict);
+      return new self.FetchEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new FetchEvent(type);
+      return new self.FetchEvent(type);
     }
     get [dartx.isReload]() {
       return this.isReload;
@@ -73424,10 +73454,10 @@
       return html$.File._create_2(fileBits, fileName);
     }
     static _create_1(fileBits, fileName, options) {
-      return new File(fileBits, fileName, options);
+      return new self.File(fileBits, fileName, options);
     }
     static _create_2(fileBits, fileName) {
-      return new File(fileBits, fileName);
+      return new self.File(fileBits, fileName);
     }
     get [dartx.lastModified]() {
       return this.lastModified;
@@ -73651,7 +73681,7 @@
       return html$.FileReader._create_1();
     }
     static _create_1() {
-      return new FileReader();
+      return new self.FileReader();
     }
     get [dartx.error]() {
       return this.error;
@@ -73935,10 +73965,10 @@
       return html$.FocusEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new FocusEvent(type, eventInitDict);
+      return new self.FocusEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new FocusEvent(type);
+      return new self.FocusEvent(type);
     }
     get [dartx.relatedTarget]() {
       return html$._convertNativeToDart_EventTarget(this[_get_relatedTarget]);
@@ -73986,10 +74016,10 @@
       return html$.FontFace._create_2(family, source);
     }
     static _create_1(family, source, descriptors) {
-      return new FontFace(family, source, descriptors);
+      return new self.FontFace(family, source, descriptors);
     }
     static _create_2(family, source) {
-      return new FontFace(family, source);
+      return new self.FontFace(family, source);
     }
     get [dartx.family]() {
       return this.family;
@@ -74160,10 +74190,10 @@
       return html$.FormData._create_2();
     }
     static _create_1(form) {
-      return new FormData(form);
+      return new self.FormData(form);
     }
     static _create_2() {
-      return new FormData();
+      return new self.FormData();
     }
     static get supported() {
       return !!window.FormData;
@@ -74454,10 +74484,10 @@
       return html$.GamepadEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new GamepadEvent(type, eventInitDict);
+      return new self.GamepadEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new GamepadEvent(type);
+      return new self.GamepadEvent(type);
     }
     get [dartx.gamepad]() {
       return this.gamepad;
@@ -75304,7 +75334,7 @@
       let oldUrl = opts && 'oldUrl' in opts ? opts.oldUrl : null;
       let newUrl = opts && 'newUrl' in opts ? opts.newUrl : null;
       let options = dart.map({canBubble: canBubble, cancelable: cancelable, oldURL: oldUrl, newURL: newUrl}, core.String, core.Object);
-      return new HashChangeEvent(type, html_common.convertDartToNative_Dictionary(options));
+      return new self.HashChangeEvent(type, html_common.convertDartToNative_Dictionary(options));
     }
     static _(type, eventInitDict) {
       if (eventInitDict === void 0) eventInitDict = null;
@@ -75315,10 +75345,10 @@
       return html$.HashChangeEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new HashChangeEvent(type, eventInitDict);
+      return new self.HashChangeEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new HashChangeEvent(type);
+      return new self.HashChangeEvent(type);
     }
     static get supported() {
       return html_common.Device.isEventTypeSupported('HashChangeEvent');
@@ -75393,16 +75423,16 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1() {
-      return new Headers();
+      return new self.Headers();
     }
     static _create_2(input) {
-      return new Headers(input);
+      return new self.Headers(input);
     }
     static _create_3(input) {
-      return new Headers(input);
+      return new self.Headers(input);
     }
     static _create_4(input) {
-      return new Headers(input);
+      return new self.Headers(input);
     }
   };
   dart.setSignature(html$.Headers, {
@@ -76423,13 +76453,13 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1(data_OR_sw, sh_OR_sw) {
-      return new ImageData(data_OR_sw, sh_OR_sw);
+      return new self.ImageData(data_OR_sw, sh_OR_sw);
     }
     static _create_2(data_OR_sw, sh_OR_sw) {
-      return new ImageData(data_OR_sw, sh_OR_sw);
+      return new self.ImageData(data_OR_sw, sh_OR_sw);
     }
     static _create_3(data_OR_sw, sh_OR_sw, sh) {
-      return new ImageData(data_OR_sw, sh_OR_sw, sh);
+      return new self.ImageData(data_OR_sw, sh_OR_sw, sh);
     }
     get [dartx.data]() {
       return this.data;
@@ -76628,10 +76658,10 @@
       return html$.InputDevice._create_2();
     }
     static _create_1(deviceInitDict) {
-      return new InputDevice(deviceInitDict);
+      return new self.InputDevice(deviceInitDict);
     }
     static _create_2() {
-      return new InputDevice();
+      return new self.InputDevice();
     }
     get [dartx.firesTouchEvents]() {
       return this.firesTouchEvents;
@@ -78349,10 +78379,10 @@
       return html$.KeyboardEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new KeyboardEvent(type, eventInitDict);
+      return new self.KeyboardEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new KeyboardEvent(type);
+      return new self.KeyboardEvent(type);
     }
     get [dartx.altKey]() {
       return this.altKey;
@@ -78450,13 +78480,13 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1(target, keyframes) {
-      return new KeyframeEffect(target, keyframes);
+      return new self.KeyframeEffect(target, keyframes);
     }
     static _create_2(target, keyframes, timing) {
-      return new KeyframeEffect(target, keyframes, timing);
+      return new self.KeyframeEffect(target, keyframes, timing);
     }
     static _create_3(target, keyframes, timing) {
-      return new KeyframeEffect(target, keyframes, timing);
+      return new self.KeyframeEffect(target, keyframes, timing);
     }
   };
   dart.setSignature(html$.KeyframeEffect, {
@@ -78996,7 +79026,7 @@
       return html$.MediaController._create_1();
     }
     static _create_1() {
-      return new MediaController();
+      return new self.MediaController();
     }
     get [dartx.buffered]() {
       return this.buffered;
@@ -79162,10 +79192,10 @@
       return html$.MediaEncryptedEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaEncryptedEvent(type, eventInitDict);
+      return new self.MediaEncryptedEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaEncryptedEvent(type);
+      return new self.MediaEncryptedEvent(type);
     }
     get [dartx.initData]() {
       return this.initData;
@@ -79275,10 +79305,10 @@
       return html$.MediaKeyEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaKeyEvent(type, eventInitDict);
+      return new self.MediaKeyEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaKeyEvent(type);
+      return new self.MediaKeyEvent(type);
     }
     get [dartx.defaultUrl]() {
       return this.defaultURL;
@@ -79340,10 +79370,10 @@
       return html$.MediaKeyMessageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaKeyMessageEvent(type, eventInitDict);
+      return new self.MediaKeyMessageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaKeyMessageEvent(type);
+      return new self.MediaKeyMessageEvent(type);
     }
     get [dartx.message]() {
       return this.message;
@@ -79606,10 +79636,10 @@
       return html$.MediaQueryListEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaQueryListEvent(type, eventInitDict);
+      return new self.MediaQueryListEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaQueryListEvent(type);
+      return new self.MediaQueryListEvent(type);
     }
     get [dartx.matches]() {
       return this.matches;
@@ -79646,7 +79676,7 @@
       return html$.MediaSession._create_1();
     }
     static _create_1() {
-      return new MediaSession();
+      return new self.MediaSession();
     }
     [dartx.activate](...args) {
       return this.activate.apply(this, args);
@@ -79685,7 +79715,7 @@
       return html$.MediaSource._create_1();
     }
     static _create_1() {
-      return new MediaSource();
+      return new self.MediaSource();
     }
     static get supported() {
       return !!window.MediaSource;
@@ -79774,13 +79804,13 @@
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
     static _create_1() {
-      return new MediaStream();
+      return new self.MediaStream();
     }
     static _create_2(stream_OR_tracks) {
-      return new MediaStream(stream_OR_tracks);
+      return new self.MediaStream(stream_OR_tracks);
     }
     static _create_3(stream_OR_tracks) {
-      return new MediaStream(stream_OR_tracks);
+      return new self.MediaStream(stream_OR_tracks);
     }
     get [dartx.active]() {
       return this.active;
@@ -79898,10 +79928,10 @@
       return html$.MediaStreamEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MediaStreamEvent(type, eventInitDict);
+      return new self.MediaStreamEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MediaStreamEvent(type);
+      return new self.MediaStreamEvent(type);
     }
     static get supported() {
       return html_common.Device.isEventTypeSupported('MediaStreamEvent');
@@ -80246,7 +80276,7 @@
         source = html$.window;
       }
       if (!dart.test(html_common.Device.isIE)) {
-        return new MessageEvent(type, {bubbles: canBubble, cancelable: cancelable, data: data, origin: origin, lastEventId: lastEventId, source: source, ports: messagePorts});
+        return new self.MessageEvent(type, {bubbles: canBubble, cancelable: cancelable, data: data, origin: origin, lastEventId: lastEventId, source: source, ports: messagePorts});
       }
       let event = html$.MessageEvent._check(html$.document[_createEvent]("MessageEvent"));
       event[_initMessageEvent](type, canBubble, cancelable, data, origin, lastEventId, source, messagePorts);
@@ -80267,10 +80297,10 @@
       return html$.MessageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MessageEvent(type, eventInitDict);
+      return new self.MessageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MessageEvent(type);
+      return new self.MessageEvent(type);
     }
     get [dartx.lastEventId]() {
       return this.lastEventId;
@@ -80985,10 +81015,10 @@
       return html$.MouseEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new MouseEvent(type, eventInitDict);
+      return new self.MouseEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new MouseEvent(type);
+      return new self.MouseEvent(type);
     }
     get [dartx.altKey]() {
       return this.altKey;
@@ -82185,10 +82215,10 @@
       return html$.Notification._create_2(title);
     }
     static _create_1(title, options) {
-      return new Notification(title, options);
+      return new self.Notification(title, options);
     }
     static _create_2(title) {
-      return new Notification(title);
+      return new self.Notification(title);
     }
     static get supported() {
       return !!window.Notification;
@@ -82317,10 +82347,10 @@
       return html$.NotificationEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new NotificationEvent(type, eventInitDict);
+      return new self.NotificationEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new NotificationEvent(type);
+      return new self.NotificationEvent(type);
     }
     get [dartx.notification]() {
       return this.notification;
@@ -82817,10 +82847,10 @@
       return html$.PageTransitionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PageTransitionEvent(type, eventInitDict);
+      return new self.PageTransitionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PageTransitionEvent(type);
+      return new self.PageTransitionEvent(type);
     }
     get [dartx.persisted]() {
       return this.persisted;
@@ -82935,13 +82965,13 @@
       return html$.PasswordCredential._create_3(id, password);
     }
     static _create_1(id, password, name, iconURL) {
-      return new PasswordCredential(id, password, name, iconURL);
+      return new self.PasswordCredential(id, password, name, iconURL);
     }
     static _create_2(id, password, name) {
-      return new PasswordCredential(id, password, name);
+      return new self.PasswordCredential(id, password, name);
     }
     static _create_3(id, password) {
-      return new PasswordCredential(id, password);
+      return new self.PasswordCredential(id, password);
     }
     get [dartx.formData]() {
       return this.formData;
@@ -83491,7 +83521,7 @@
       return html$.PeriodicSyncEvent._create_1(type, init_1);
     }
     static _create_1(type, init) {
-      return new PeriodicSyncEvent(type, init);
+      return new self.PeriodicSyncEvent(type, init);
     }
     get [dartx.registration]() {
       return this.registration;
@@ -83854,10 +83884,10 @@
       return html$.PointerEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PointerEvent(type, eventInitDict);
+      return new self.PointerEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PointerEvent(type);
+      return new self.PointerEvent(type);
     }
     get [dartx.height]() {
       return this.height;
@@ -83922,10 +83952,10 @@
       return html$.PopStateEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PopStateEvent(type, eventInitDict);
+      return new self.PopStateEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PopStateEvent(type);
+      return new self.PopStateEvent(type);
     }
     get [dartx.state]() {
       return html_common.convertNativeToDart_SerializedScriptValue(this[_get_state]);
@@ -84242,10 +84272,10 @@
       return html$.ProgressEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ProgressEvent(type, eventInitDict);
+      return new self.ProgressEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ProgressEvent(type);
+      return new self.ProgressEvent(type);
     }
     get [dartx.lengthComputable]() {
       return this.lengthComputable;
@@ -84291,10 +84321,10 @@
       return html$.PromiseRejectionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PromiseRejectionEvent(type, eventInitDict);
+      return new self.PromiseRejectionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PromiseRejectionEvent(type);
+      return new self.PromiseRejectionEvent(type);
     }
     get [dartx.promise]() {
       return this.promise;
@@ -84335,10 +84365,10 @@
       return html$.PushEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new PushEvent(type, eventInitDict);
+      return new self.PushEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new PushEvent(type);
+      return new self.PushEvent(type);
     }
     get [dartx.data]() {
       return this.data;
@@ -84429,7 +84459,7 @@
       return html$.PushMessageData._create_1(message);
     }
     static _create_1(message) {
-      return new PushMessageData(message);
+      return new self.PushMessageData(message);
     }
     [dartx.arrayBuffer](...args) {
       return this.arrayBuffer.apply(this, args);
@@ -84826,10 +84856,10 @@
       return html$.RelatedEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new RelatedEvent(type, eventInitDict);
+      return new self.RelatedEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new RelatedEvent(type);
+      return new self.RelatedEvent(type);
     }
     get [dartx.relatedTarget]() {
       return html$._convertNativeToDart_EventTarget(this[_get_relatedTarget]);
@@ -85898,31 +85928,31 @@
       return html$.ScrollState._create_9();
     }
     static _create_1(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning, isEnding);
     }
     static _create_2(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase, isBeginning);
     }
     static _create_3(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY, inInertialPhase);
     }
     static _create_4(deltaX, deltaY, deltaGranularity, velocityX, velocityY) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX, velocityY);
     }
     static _create_5(deltaX, deltaY, deltaGranularity, velocityX) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity, velocityX);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity, velocityX);
     }
     static _create_6(deltaX, deltaY, deltaGranularity) {
-      return new ScrollState(deltaX, deltaY, deltaGranularity);
+      return new self.ScrollState(deltaX, deltaY, deltaGranularity);
     }
     static _create_7(deltaX, deltaY) {
-      return new ScrollState(deltaX, deltaY);
+      return new self.ScrollState(deltaX, deltaY);
     }
     static _create_8(deltaX) {
-      return new ScrollState(deltaX);
+      return new self.ScrollState(deltaX);
     }
     static _create_9() {
-      return new ScrollState();
+      return new self.ScrollState();
     }
     get [dartx.deltaGranularity]() {
       return this.deltaGranularity;
@@ -86015,10 +86045,10 @@
       return html$.SecurityPolicyViolationEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new SecurityPolicyViolationEvent(type, eventInitDict);
+      return new self.SecurityPolicyViolationEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new SecurityPolicyViolationEvent(type);
+      return new self.SecurityPolicyViolationEvent(type);
     }
     get [dartx.blockedUri]() {
       return this.blockedURI;
@@ -86556,10 +86586,10 @@
       return html$.ServicePortConnectEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ServicePortConnectEvent(type, eventInitDict);
+      return new self.ServicePortConnectEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ServicePortConnectEvent(type);
+      return new self.ServicePortConnectEvent(type);
     }
     get [dartx.origin]() {
       return this.origin;
@@ -86722,10 +86752,10 @@
       return html$.ServiceWorkerMessageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new ServiceWorkerMessageEvent(type, eventInitDict);
+      return new self.ServiceWorkerMessageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new ServiceWorkerMessageEvent(type);
+      return new self.ServiceWorkerMessageEvent(type);
     }
     get [dartx.lastEventId]() {
       return this.lastEventId;
@@ -87037,10 +87067,10 @@
       return html$.SharedWorker._create_2(scriptURL);
     }
     static _create_1(scriptURL, name) {
-      return new SharedWorker(scriptURL, name);
+      return new self.SharedWorker(scriptURL, name);
     }
     static _create_2(scriptURL) {
-      return new SharedWorker(scriptURL);
+      return new self.SharedWorker(scriptURL);
     }
     get [dartx.port]() {
       return this.port;
@@ -87396,7 +87426,7 @@
       return html$.SpeechGrammar._create_1();
     }
     static _create_1() {
-      return new SpeechGrammar();
+      return new self.SpeechGrammar();
     }
     get [dartx.src]() {
       return this.src;
@@ -87445,7 +87475,7 @@
       return html$.SpeechGrammarList._create_1();
     }
     static _create_1() {
-      return new SpeechGrammarList();
+      return new self.SpeechGrammarList();
     }
     get [dartx.length]() {
       return this.length;
@@ -87755,10 +87785,10 @@
       return html$.SpeechRecognitionError._create_2(type);
     }
     static _create_1(type, initDict) {
-      return new SpeechRecognitionError(type, initDict);
+      return new self.SpeechRecognitionError(type, initDict);
     }
     static _create_2(type) {
-      return new SpeechRecognitionError(type);
+      return new self.SpeechRecognitionError(type);
     }
     get [dartx.error]() {
       return this.error;
@@ -87802,10 +87832,10 @@
       return html$.SpeechRecognitionEvent._create_2(type);
     }
     static _create_1(type, initDict) {
-      return new SpeechRecognitionEvent(type, initDict);
+      return new self.SpeechRecognitionEvent(type, initDict);
     }
     static _create_2(type) {
-      return new SpeechRecognitionEvent(type);
+      return new self.SpeechRecognitionEvent(type);
     }
     get [dartx.emma]() {
       return this.emma;
@@ -87981,10 +88011,10 @@
       return html$.SpeechSynthesisUtterance._create_2();
     }
     static _create_1(text) {
-      return new SpeechSynthesisUtterance(text);
+      return new self.SpeechSynthesisUtterance(text);
     }
     static _create_2() {
-      return new SpeechSynthesisUtterance();
+      return new self.SpeechSynthesisUtterance();
     }
     get [dartx.lang]() {
       return this.lang;
@@ -88359,10 +88389,10 @@
       return html$.StorageEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new StorageEvent(type, eventInitDict);
+      return new self.StorageEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new StorageEvent(type);
+      return new self.StorageEvent(type);
     }
     get [dartx.key]() {
       return this.key;
@@ -88547,7 +88577,7 @@
       return html$.SyncEvent._create_1(type, init_1);
     }
     static _create_1(type, init) {
-      return new SyncEvent(type, init);
+      return new self.SyncEvent(type, init);
     }
     get [dartx.registration]() {
       return this.registration;
@@ -90175,10 +90205,10 @@
       return html$.TrackDefault._create_2(type, language, label, kinds_1);
     }
     static _create_1(type, language, label, kinds, byteStreamTrackID) {
-      return new TrackDefault(type, language, label, kinds, byteStreamTrackID);
+      return new self.TrackDefault(type, language, label, kinds, byteStreamTrackID);
     }
     static _create_2(type, language, label, kinds) {
-      return new TrackDefault(type, language, label, kinds);
+      return new self.TrackDefault(type, language, label, kinds);
     }
     get [dartx.byteStreamTrackID]() {
       return this.byteStreamTrackID;
@@ -90231,10 +90261,10 @@
       return html$.TrackDefaultList._create_2();
     }
     static _create_1(trackDefaults) {
-      return new TrackDefaultList(trackDefaults);
+      return new self.TrackDefaultList(trackDefaults);
     }
     static _create_2() {
-      return new TrackDefaultList();
+      return new self.TrackDefaultList();
     }
     get [dartx.length]() {
       return this.length;
@@ -90368,10 +90398,10 @@
       return html$.TrackEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new TrackEvent(type, eventInitDict);
+      return new self.TrackEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new TrackEvent(type);
+      return new self.TrackEvent(type);
     }
     get [dartx.track]() {
       return this.track;
@@ -90408,10 +90438,10 @@
       return html$.TransitionEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new TransitionEvent(type, eventInitDict);
+      return new self.TransitionEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new TransitionEvent(type);
+      return new self.TransitionEvent(type);
     }
     get [dartx.elapsedTime]() {
       return this.elapsedTime;
@@ -90982,10 +91012,10 @@
       return html$.VRFieldOfView._create_2();
     }
     static _create_1(fov) {
-      return new VRFieldOfView(fov);
+      return new self.VRFieldOfView(fov);
     }
     static _create_2() {
-      return new VRFieldOfView();
+      return new self.VRFieldOfView();
     }
     get [dartx.downDegrees]() {
       return this.downDegrees;
@@ -91603,10 +91633,10 @@
       return html$.WebSocket._create_2(url);
     }
     static _create_1(url, protocols) {
-      return new WebSocket(url, protocols);
+      return new self.WebSocket(url, protocols);
     }
     static _create_2(url) {
-      return new WebSocket(url);
+      return new self.WebSocket(url);
     }
     static get supported() {
       return typeof window.WebSocket != "undefined";
@@ -91764,7 +91794,7 @@
       if (view == null) {
         view = html$.window;
       }
-      return new WheelEvent(type, html_common.convertDartToNative_Dictionary(options));
+      return new self.WheelEvent(type, html_common.convertDartToNative_Dictionary(options));
     }
     static _(type, eventInitDict) {
       if (eventInitDict === void 0) eventInitDict = null;
@@ -91775,10 +91805,10 @@
       return html$.WheelEvent._create_2(type);
     }
     static _create_1(type, eventInitDict) {
-      return new WheelEvent(type, eventInitDict);
+      return new self.WheelEvent(type, eventInitDict);
     }
     static _create_2(type) {
-      return new WheelEvent(type);
+      return new self.WheelEvent(type);
     }
     get [_deltaX]() {
       return this.deltaX;
@@ -93371,7 +93401,7 @@
       return html$.Worker._create_1(scriptUrl);
     }
     static _create_1(scriptUrl) {
-      return new Worker(scriptUrl);
+      return new self.Worker(scriptUrl);
     }
     static get supported() {
       return typeof window.Worker != "undefined";
@@ -93526,7 +93556,7 @@
       return html$.XPathEvaluator._create_1();
     }
     static _create_1() {
-      return new XPathEvaluator();
+      return new self.XPathEvaluator();
     }
     [dartx.createExpression](...args) {
       return this.createExpression.apply(this, args);
@@ -107798,7 +107828,7 @@
       return web_audio.OfflineAudioContext._create_1(numberOfChannels, numberOfFrames, sampleRate);
     }
     static _create_1(numberOfChannels, numberOfFrames, sampleRate) {
-      return new OfflineAudioContext(numberOfChannels, numberOfFrames, sampleRate);
+      return new self.OfflineAudioContext(numberOfChannels, numberOfFrames, sampleRate);
     }
   };
   dart.setSignature(web_audio.OfflineAudioContext, {
diff --git a/pkg/dev_compiler/lib/sdk/ddc_sdk.sum b/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
index 52d97c2..0c71c33 100644
--- a/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
+++ b/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
Binary files differ
diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
index 79ac857..76292e4 100644
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
@@ -1463,7 +1463,8 @@
     // Doing better is a bit tricky, as our current codegen strategy for the
     // mock methods encodes information about the number of arguments (and type
     // arguments) that D expects.
-    return _collectMockMethods(type).map(_implementMockMethod);
+    return _collectMockMethods(type)
+        .map((method) => _implementMockMethod(method, type));
   }
 
   /// Given a class C that implements method M from interface I, but does not
@@ -1485,7 +1486,7 @@
   ///       return core.bool.as(this.noSuchMethod(
   ///           new dart.InvocationImpl('eatFood', args)));
   ///     }
-  JS.Method _implementMockMethod(ExecutableElement method) {
+  JS.Method _implementMockMethod(ExecutableElement method, InterfaceType type) {
     var invocationProps = <JS.Property>[];
     addProperty(String name, JS.Expression value) {
       invocationProps.add(new JS.Property(js.string(name), value));
@@ -1536,8 +1537,7 @@
     // We have a similar issue with `dgsend` helpers.
     return new JS.Method(
         _declareMemberName(method,
-            useExtension:
-                _extensionTypes.isNativeClass(method.enclosingElement)),
+            useExtension: _extensionTypes.isNativeClass(type.element)),
         _makeGenericFunction(fn),
         isGetter: method is PropertyAccessorElement && method.isGetter,
         isSetter: method is PropertyAccessorElement && method.isSetter,
@@ -3707,7 +3707,7 @@
       // arg[0] is static return type, used in `RestrictedStaticTypeAnalyzer`
       var code = args[1];
       List<AstNode> templateArgs;
-      var source;
+      String source;
       if (code is StringInterpolation) {
         if (args.length > 2) {
           throw new ArgumentError(
@@ -3727,6 +3727,28 @@
         source = (code as StringLiteral).stringValue;
       }
 
+      // TODO(vsm): Constructors in dart:html and friends are trying to
+      // allocate a type defined on window/self, but this often conflicts a
+      // with the generated extenstion class in scope.  We really should
+      // qualify explicitly in dart:html itself.
+      var constructorPattern = new RegExp("new [A-Z][A-Za-z]+\\(");
+      if (constructorPattern.matchAsPrefix(source) != null) {
+        var containingClass = node.parent;
+        while (
+            containingClass != null && containingClass is! ClassDeclaration) {
+          containingClass = containingClass.parent;
+        }
+        if (containingClass is ClassDeclaration &&
+            _extensionTypes.isNativeClass(containingClass.element)) {
+          var constructorName = source.substring(4, source.indexOf('('));
+          var className = containingClass.name.name;
+          if (className == constructorName) {
+            source =
+                source.replaceFirst('new $className(', 'new self.$className(');
+          }
+        }
+      }
+
       // TODO(rnystrom): The JS() calls are almost never nested, and probably
       // really shouldn't be, but there are at least a couple of calls in the
       // HTML library where an argument to JS() is itself a JS() call. If those
diff --git a/pkg/dev_compiler/test/browser/language_tests.js b/pkg/dev_compiler/test/browser/language_tests.js
index 310242f..1bf0b53 100644
--- a/pkg/dev_compiler/test/browser/language_tests.js
+++ b/pkg/dev_compiler/test/browser/language_tests.js
@@ -387,10 +387,6 @@
       'custom_element_name_clash_test': async_unittest,
       'custom_elements_23127_test': async_unittest,
       'custom_elements_test': async_unittest,
-
-      // was https://github.com/dart-lang/sdk/issues/27578, needs triage
-      'dom_constructors_test': 'fail',
-
       'element_animate_test': 'unittest',
 
       // https://github.com/dart-lang/sdk/issues/27579.
@@ -404,18 +400,10 @@
       'element_types_test': firefox_fail,
       'event_customevent_test': async_unittest,
       'events_test': async_unittest,
-
-      // Failure: "Failed to execute 'dispatchEvent' on 'EventTarget': parameter
-      // 1 is not of type 'Event'."
-      'event_test': 'fail',
-
       'fileapi_test': async_unittest,
       'filereader_test': async_unittest,
       'fontface_loaded_test': async_unittest,
-
-      // Failed because it's expecting "Ahem" but getting null. Maybe sdk#27579?
-      'fontface_test': 'fail',
-
+      'fontface_test': firefox_fail,
       'form_data_test': async_unittest,
       'history_test': async_unittest,
       'indexeddb_1_test': async_unittest,
@@ -442,14 +430,9 @@
       // was https://github.com/dart-lang/sdk/issues/27578, needs triage
       'mediasource_test': 'fail',
       'media_stream_test': 'fail',
-      'messageevent_test': 'fail',
 
       'mutationobserver_test': async_unittest,
       'native_gc_test': async_unittest,
-
-      // was https://github.com/dart-lang/sdk/issues/27578, needs triage
-      'notification_test': 'fail',
-
       'postmessage_structured_test': async_unittest,
       'queryall_test': ['slow'], // see sdk #27794
       'request_animation_frame_test': async_unittest,
@@ -457,10 +440,6 @@
 
       // was https://github.com/dart-lang/sdk/issues/27578, needs triage
       'rtc_test': is.chrome('<=55') ? fail : pass,
-
-      // Expected 1, got null.
-      'serialized_script_value_test': 'fail',
-
       'shadow_dom_test': firefox_fail,
 
       // was https://github.com/dart-lang/sdk/issues/27578, needs triage
diff --git a/pkg/dev_compiler/test/not_yet_strong_tests.dart b/pkg/dev_compiler/test/not_yet_strong_tests.dart
index 9ca06f3..715f099 100644
--- a/pkg/dev_compiler/test/not_yet_strong_tests.dart
+++ b/pkg/dev_compiler/test/not_yet_strong_tests.dart
@@ -1200,7 +1200,6 @@
   'language/mixin_lib_extends_field_test',
   'language/mixin_lib_extends_method_test',
   'language/mixin_method_test',
-  'language/mixin_mixin_bound_test', // issue 28450
   'language/mixin_super_bound2_test_01_multi',
   'language/mixin_super_bound2_test_none_multi',
   'language/mixin_super_bound_test',
@@ -2121,7 +2120,6 @@
   'lib/mirrors/generic_class_declaration_test',
   'lib/mirrors/generic_f_bounded_mixin_application_test',
   'lib/mirrors/generic_interface_test_01_multi',
-  'lib/mirrors/generics_dynamic_test', // issue 28450
   'lib/mirrors/generics_test_01_multi',
   'lib/mirrors/get_symbol_name_no_such_method_test',
   'lib/mirrors/immutable_collections_test',
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
index 6d7a5e8..6aafacd 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
@@ -610,16 +610,6 @@
   @patch
   @NoInline()
   static StackTrace get current {
-    if (JS('', 'Error.captureStackTrace') != null) {
-      var error = JS('', 'new Error()');
-      JS('void', 'Error.captureStackTrace(#)', error);
-      return getTraceFromException(error);
-    }
-    // Fallback if Error.captureStackTrace does not exist.
-    try {
-      throw '';
-    } catch (_, stackTrace) {
-      return stackTrace;
-    }
+    return getTraceFromException(JS('', 'new Error()'));
   }
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
index 026eb9a..cdc14c1 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
@@ -203,6 +203,21 @@
   return $obj == null ? $Object : $obj.__proto__.constructor;
 })()''');
 
+bool isJsInterop(obj) {
+  if (JS('bool', 'typeof # === "function"', obj)) {
+    // A function is a Dart function if it has runtime type information.
+    return _getRuntimeType(obj) == null;
+  }
+  // Primitive types are not JS interop types.
+  if (JS('bool', 'typeof # !== "object"', obj)) return false;
+
+  // Extension types are not considered JS interop types.
+  // Note that it is still possible to call typed JS interop methods on
+  // extension types but the calls must be statically typed.
+  if (getExtensionType(obj) != null) return false;
+  return JS('bool', '!($obj instanceof $Object)');
+}
+
 /// Get the type of a method from a type using the stored signature
 getMethodType(type, name) => JS(
     '',
@@ -217,7 +232,9 @@
     '''(() => {
   let sigObj = $type[$_fieldSig];
   if (sigObj === void 0) return void 0;
-  return sigObj[$name];
+  let fieldType = sigObj[$name];
+  // workaround to handle metadata.
+  return (fieldType instanceof Array) ? fieldType[0] : fieldType;
 })()''');
 
 getSetterType(type, name) => JS(
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
index 69b01a5..68d8fd0 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
@@ -41,11 +41,71 @@
 
     if (hasField(type, f) || hasGetter(type, f)) return JS('', '#[#]', obj, f);
     if (hasMethod(type, f)) return bind(obj, f, JS('', 'void 0'));
+
+    // Always allow for JS interop objects.
+    if (isJsInterop(obj)) return JS('', '#[#]', obj, f);
   }
   return noSuchMethod(
       obj, new InvocationImpl(field, JS('', '[]'), isGetter: true));
 }
 
+// Version of dload that matches legacy mirrors behavior for JS types.
+dloadMirror(obj, field) {
+  var f = _canonicalMember(obj, field);
+
+  _trackCall(obj);
+  if (f != null) {
+    var type = getType(obj);
+
+    if (hasField(type, f) || hasGetter(type, f)) return JS('', '#[#]', obj, f);
+    if (hasMethod(type, f)) return bind(obj, f, JS('', 'void 0'));
+
+    // Do not support calls on JS interop objects to match Dart2JS behavior.
+  }
+  return noSuchMethod(
+      obj, new InvocationImpl(field, JS('', '[]'), isGetter: true));
+}
+
+_stripGenericArguments(type) {
+  var genericClass = getGenericClass(type);
+  if (genericClass != null) return JS('', '#()', genericClass);
+  return type;
+}
+
+// Version of dput that matches legacy Dart 1 type check rules and mirrors
+// behavior for JS types.
+// TODO(jacobr): remove the type checking rules workaround when mirrors based
+// PageLoader code can generate the correct reified generic types.
+dputMirror(obj, field, value) {
+  var f = _canonicalMember(obj, field);
+  _trackCall(obj);
+  if (f != null) {
+    var objType = getType(obj);
+    var setterType = getSetterType(objType, f);
+    if (JS('bool', '# != void 0', setterType)) {
+      return JS(
+          '',
+          '#[#] = #',
+          obj,
+          f,
+          check(
+              value, _stripGenericArguments(JS('', '#.args[0]', setterType))));
+    } else {
+      var fieldType = getFieldType(objType, f);
+      // TODO(jacobr): add metadata tracking which fields are final and throw
+      // if a setter is called on a final field.
+      if (JS('bool', '# != void 0', fieldType)) {
+        return JS('', '#[#] = #', obj, f,
+            check(value, _stripGenericArguments(fieldType)));
+      }
+
+      // Do not support calls on JS interop objects to match Dart2JS behavior.
+    }
+  }
+  return noSuchMethod(
+      obj, new InvocationImpl(field, JS('', '[#]', value), isSetter: true));
+}
+
 dput(obj, field, value) {
   var f = _canonicalMember(obj, field);
   _trackCall(obj);
@@ -53,21 +113,18 @@
     var objType = getType(obj);
     var setterType = getSetterType(objType, f);
     if (JS('bool', '# != void 0', setterType)) {
-      // TODO(jacobr): throw a type error instead of a NoSuchMethodError if
-      // the type of the setter doesn't match.
-      if (instanceOfOrNull(value, JS('', '#.args[0]', setterType))) {
-        return JS('', '#[#] = #', obj, f, value);
-      }
+      return JS('', '#[#] = #', obj, f,
+          check(value, JS('', '#.args[0]', setterType)));
     } else {
       var fieldType = getFieldType(objType, f);
       // TODO(jacobr): add metadata tracking which fields are final and throw
       // if a setter is called on a final field.
       if (JS('bool', '# != void 0', fieldType)) {
-        // TODO(jacobr): throw a type error instead of a NoSuchMethodError if
-        // the type of the field doesn't match.
-        if (instanceOfOrNull(value, fieldType)) {
-          return JS('', '#[#] = #', obj, f, value);
-        }
+        return JS('', '#[#] = #', obj, f, check(value, fieldType));
+      }
+      // Always allow for JS interop objects.
+      if (isJsInterop(obj)) {
+        return JS('', '#[#] = #', obj, f, value);
       }
     }
   }
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart b/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart
index 5e03059..62cb4a6 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart
@@ -45,11 +45,11 @@
 final dynamic _dart = JS('', 'dart');
 
 dynamic _dload(obj, String name) {
-  return JS('', '#.dload(#, #)', _dart, obj, name);
+  return JS('', '#.dloadMirror(#, #)', _dart, obj, name);
 }
 
 void _dput(obj, String name, val) {
-  JS('', '#.dput(#, #, #)', _dart, obj, name, val);
+  JS('', '#.dputMirror(#, #, #)', _dart, obj, name, val);
 }
 
 dynamic _dcall(obj, List args) {
diff --git a/pkg/dev_compiler/web/web_command.dart b/pkg/dev_compiler/web/web_command.dart
index 1af52ce..91a5696 100644
--- a/pkg/dev_compiler/web/web_command.dart
+++ b/pkg/dev_compiler/web/web_command.dart
@@ -207,7 +207,8 @@
           code: moduleCode, isValid: module.isValid, errors: module.errors);
     };
 
-    return allowInterop(compileFn);
+    // TODO(vsm): Cast is due to https://github.com/dart-lang/sdk/issues/28507
+    return allowInterop(compileFn) as CompileModule;
   }
 }
 
diff --git a/tests/lib_strong/html/html_mock_test.dart b/tests/lib_strong/html/html_mock_test.dart
new file mode 100644
index 0000000..9b6daf8
--- /dev/null
+++ b/tests/lib_strong/html/html_mock_test.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2017, 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.
+
+import 'dart:html';
+
+import 'package:expect/minitest.dart';
+
+class Mock {
+  noSuchMethod(Invocation i) => document;
+}
+
+@proxy
+class MockWindow extends Mock implements Window {}
+
+main() {
+  test('is', () {
+    var win = new MockWindow();
+    expect(win is Window, isTrue);
+  });
+
+  test('getter', () {
+    var win = new MockWindow();
+    expect(win.document, equals(document));
+  });
+}
diff --git a/tests/lib_strong/html/js_typed_interop_dynamic_test.dart b/tests/lib_strong/html/js_typed_interop_dynamic_test.dart
new file mode 100644
index 0000000..9c77cd8
--- /dev/null
+++ b/tests/lib_strong/html/js_typed_interop_dynamic_test.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2015, 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.
+
+@JS()
+library js_typed_interop_anonymous_test;
+
+import 'dart:html';
+import 'dart:js' as js;
+
+import 'package:js/js.dart';
+import 'package:js/js_util.dart' as js_util;
+import 'package:expect/minitest.dart';
+
+@JS()
+@anonymous
+class Literal {
+  external factory Literal({int x, String y, num z, Function foo});
+
+  external int get x;
+  external String get y;
+  external num get z;
+  external Function get foo;
+}
+
+@JS()
+@anonymous
+class FunctionWithExpando {
+  external int call();
+  external String get myExpando;
+}
+
+main() {
+  test('object', () {
+    dynamic l = new Literal(x: 3, y: 'foo', foo: allowInterop((x) => x * 2));
+    expect(l.x, equals(3));
+    expect(l.y, equals('foo'));
+    expect(l.z, isNull);
+    expect(l.foo(4), equals(8));
+  });
+
+  test('function', () {
+    // Get a JS function.
+    dynamic f = js_util.getProperty(window, 'addEventListener');
+    js_util.setProperty(f, 'myExpando', 'foo');
+    expect(f.myExpando, equals('foo'));
+  });
+
+  test('dart object', () {
+    dynamic o = new Object();
+    js_util.setProperty(o, 'x', 3);
+    expect(() => o.x, throwsNoSuchMethodError);
+    expect(() => o.foo(), throwsNoSuchMethodError);
+  });
+}
diff --git a/tools/VERSION b/tools/VERSION
index 790d464..ba3edfa 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 22
 PATCH 0
 PRERELEASE 10
-PRERELEASE_PATCH 5
+PRERELEASE_PATCH 6