diff --git a/CHANGELOG.md b/CHANGELOG.md
index 011e3ca..9b56ce5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -75,6 +75,13 @@
 * Fix: Avoid exponential behaviour of error reporting from the solver.
 * Fix: Refresh binstubs after recompile in global run.
 
+## 2.9.3 - 2020-09-08
+
+This is a patch release that fixes DDC to handle a breaking change in Chrome
+(issue [#43193][]).
+
+[#43193]: https://github.com/dart-lang/sdk/issues/43193
+
 ## 2.9.2 - 2020-08-26
 
 This is a patch release that fixes transient StackOverflow exceptions when
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index cd62848..da4182e 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -191,6 +191,7 @@
         intType,
         "index",
         finalMask | hasInitializerMask,
+        /* isTopLevel = */ false,
         parent,
         charOffset,
         charOffset,
@@ -203,6 +204,7 @@
         stringType,
         "_name",
         finalMask | hasInitializerMask,
+        /* isTopLevel = */ false,
         parent,
         charOffset,
         charOffset,
@@ -234,6 +236,7 @@
         listType,
         "values",
         constMask | staticMask | hasInitializerMask,
+        /* isTopLevel = */ false,
         parent,
         charOffset,
         charOffset,
@@ -308,6 +311,7 @@
             selfType,
             name,
             constMask | staticMask | hasInitializerMask,
+            /* isTopLevel = */ false,
             parent,
             enumConstantInfo.charOffset,
             enumConstantInfo.charOffset,
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 156f55c..9f0a936 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -101,11 +101,18 @@
 
   bool hasBodyBeenBuilt = false;
 
+  // TODO(johnniwinther): [parent] is not trust-worthy for determining
+  //  properties since it is changed after the creation of the builder. For now
+  //  we require it has an argument here. A follow-up should clean up the
+  //  misuse of parent.
+  final bool isTopLevel;
+
   SourceFieldBuilder(
       this.metadata,
       this.type,
       this.name,
       this.modifiers,
+      this.isTopLevel,
       SourceLibraryBuilder libraryBuilder,
       int charOffset,
       int charEndOffset,
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index f8b81ce..6a9bacf 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -1742,7 +1742,12 @@
     if (fieldInfos == null) return;
     String documentationComment = getDocumentationComment(beginToken);
     libraryBuilder.addFields(
-        documentationComment, metadata, modifiers, type, fieldInfos);
+        documentationComment,
+        metadata,
+        modifiers,
+        /* isTopLevel = */ true,
+        type,
+        fieldInfos);
   }
 
   @override
@@ -1804,7 +1809,12 @@
     if (fieldInfos == null) return;
     String documentationComment = getDocumentationComment(beginToken);
     libraryBuilder.addFields(
-        documentationComment, metadata, modifiers, type, fieldInfos);
+        documentationComment,
+        metadata,
+        modifiers,
+        /* isTopLevel = */ false,
+        type,
+        fieldInfos);
   }
 
   List<FieldInfo> popFieldInfos(int count) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 066cf2b..6df5e4c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -747,8 +747,13 @@
     }
   }
 
-  void addFields(String documentationComment, List<MetadataBuilder> metadata,
-      int modifiers, TypeBuilder type, List<FieldInfo> fieldInfos) {
+  void addFields(
+      String documentationComment,
+      List<MetadataBuilder> metadata,
+      int modifiers,
+      bool isTopLevel,
+      TypeBuilder type,
+      List<FieldInfo> fieldInfos) {
     for (FieldInfo info in fieldInfos) {
       bool isConst = modifiers & constMask != 0;
       bool isFinal = modifiers & finalMask != 0;
@@ -765,8 +770,17 @@
         new Token.eof(startToken.previous.offset).setNext(startToken);
       }
       bool hasInitializer = info.initializerToken != null;
-      addField(documentationComment, metadata, modifiers, type, info.name,
-          info.charOffset, info.charEndOffset, startToken, hasInitializer,
+      addField(
+          documentationComment,
+          metadata,
+          modifiers,
+          isTopLevel,
+          type,
+          info.name,
+          info.charOffset,
+          info.charEndOffset,
+          startToken,
+          hasInitializer,
           constInitializerToken:
               potentiallyNeedInitializerInOutline ? startToken : null);
     }
@@ -1955,6 +1969,7 @@
       String documentationComment,
       List<MetadataBuilder> metadata,
       int modifiers,
+      bool isTopLevel,
       TypeBuilder type,
       String name,
       int charOffset,
@@ -2054,6 +2069,7 @@
         type,
         name,
         modifiers,
+        isTopLevel,
         this,
         charOffset,
         charEndOffset,
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
index 369a202..2e1cf37 100644
--- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
@@ -2,7 +2,7 @@
 // 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.
 
-library fasta.function_type_alias_builder;
+library fasta.source_type_alias_builder;
 
 import 'package:kernel/ast.dart'
     show
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 9c03dae..a0e7fca 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -663,6 +663,7 @@
 migration
 mime
 min
+misuse
 mixers
 mk
 mm
@@ -1250,6 +1251,7 @@
 with1
 wn
 worthwhile
+worthy
 writeln
 wrt
 wtf
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart b/pkg/front_end/testcases/static_field_lowering/enum.dart
new file mode 100644
index 0000000..b55e257
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2020, 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.
+
+enum A {
+  a,
+  b,
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect
new file mode 100644
index 0000000..b42a46f
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+enum A {
+  a,
+  b,
+}
+main() {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b42a46f
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+enum A {
+  a,
+  b,
+}
+main() {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
new file mode 100644
index 0000000..1fcfe08
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*isEnum*/  {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::A> values = #C7;
+  static const field self::A a = #C3;
+  static const field self::A b = #C6;
+  const constructor •(core::int index, core::String _name) → self::A
+    : self::A::index = index, self::A::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::A::_name};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "A.a"
+  #C3 = self::A {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "A.b"
+  #C6 = self::A {index:#C4, _name:#C5}
+  #C7 = <self::A*>[#C3, #C6]
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
new file mode 100644
index 0000000..1fcfe08
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*isEnum*/  {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::A> values = #C7;
+  static const field self::A a = #C3;
+  static const field self::A b = #C6;
+  const constructor •(core::int index, core::String _name) → self::A
+    : self::A::index = index, self::A::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::A::_name};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "A.a"
+  #C3 = self::A {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "A.b"
+  #C6 = self::A {index:#C4, _name:#C5}
+  #C7 = <self::A*>[#C3, #C6]
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart b/pkg/front_end/testcases/static_field_lowering/opt_in.dart
index 2b45286..c549cad 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart
@@ -38,6 +38,9 @@
 
   static int? staticFieldWithoutInitializer;
 
+  int nonNullableInstanceFieldWithInitializer = init(55);
+  int? nullableInstanceFieldWithInitializer = init(17);
+
   static int nonNullableStaticFieldWithInitializer1 = init(55);
   static int? nullableStaticFieldWithInitializer1 = init(17);
 
@@ -121,6 +124,11 @@
 
   throws(() => Class.nullableStaticFinalFieldWithInitializer2,
       'Read nullableStaticFinalFieldWithInitializer2');
+
+  var c = new Class();
+  expect(17, lastInit);
+  expect(55, c.nonNullableInstanceFieldWithInitializer);
+  expect(17, c.nullableInstanceFieldWithInitializer);
 }
 
 expect(expected, actual) {
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
index f578832..c20a2c2 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
@@ -22,6 +22,8 @@
 class Class {
   static const int staticConstField = 123;
   static int? staticFieldWithoutInitializer;
+  int nonNullableInstanceFieldWithInitializer = init(55);
+  int? nullableInstanceFieldWithInitializer = init(17);
   static int nonNullableStaticFieldWithInitializer1 = init(55);
   static int? nullableStaticFieldWithInitializer1 = init(17);
   static int nonNullableStaticFieldWithInitializer2 = init(55);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
index d41b0be..c292f45 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
@@ -1,6 +1,8 @@
 T init<T>(T value) {}
 
 class Class {
+  int? nullableInstanceFieldWithInitializer = init(17);
+  int nonNullableInstanceFieldWithInitializer = init(55);
   static const int staticConstField = 123;
   static final int? nullableStaticFinalFieldWithInitializer1 = init(19);
   static final int? nullableStaticFinalFieldWithInitializer2 =
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
index 39e6731..d53be31 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
@@ -6,6 +6,8 @@
 class Class extends core::Object {
   static const field core::int staticConstField = #C1;
   static field core::int? staticFieldWithoutInitializer = null;
+  field core::int nonNullableInstanceFieldWithInitializer = self::init<core::int>(55);
+  field core::int? nullableInstanceFieldWithInitializer = self::init<core::int?>(17);
   static field core::int? _#nonNullableStaticFieldWithInitializer1 = null;
   static field core::int? _#nullableStaticFieldWithInitializer1 = null;
   static field core::bool _#nullableStaticFieldWithInitializer1#isSet = false;
@@ -211,6 +213,10 @@
   self::expect(19, self::lastInit);
   self::throws(() → core::int => self::Class::nonNullableStaticFinalFieldWithInitializer2, "Read nonNullableStaticFinalFieldWithInitializer2");
   self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
+  self::Class c = new self::Class::•();
+  self::expect(17, self::lastInit);
+  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer});
+  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!expected.{core::Object::==}(actual))
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
index 39e6731..d53be31 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
@@ -6,6 +6,8 @@
 class Class extends core::Object {
   static const field core::int staticConstField = #C1;
   static field core::int? staticFieldWithoutInitializer = null;
+  field core::int nonNullableInstanceFieldWithInitializer = self::init<core::int>(55);
+  field core::int? nullableInstanceFieldWithInitializer = self::init<core::int?>(17);
   static field core::int? _#nonNullableStaticFieldWithInitializer1 = null;
   static field core::int? _#nullableStaticFieldWithInitializer1 = null;
   static field core::bool _#nullableStaticFieldWithInitializer1#isSet = false;
@@ -211,6 +213,10 @@
   self::expect(19, self::lastInit);
   self::throws(() → core::int => self::Class::nonNullableStaticFinalFieldWithInitializer2, "Read nonNullableStaticFinalFieldWithInitializer2");
   self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
+  self::Class c = new self::Class::•();
+  self::expect(17, self::lastInit);
+  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer});
+  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!expected.{core::Object::==}(actual))
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart b/pkg/front_end/testcases/static_field_lowering/opt_out.dart
index 9ccd9b4..7ca4c56 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart
@@ -30,6 +30,8 @@
 class Class {
   static const int staticConstField = 123;
 
+  int instanceFieldWithInitializer = init(55);
+
   static int staticFieldWithoutInitializer;
 
   static int staticFieldWithInitializer1 = init(55);
@@ -79,6 +81,10 @@
 
   throws(() => Class.staticFinalFieldWithInitializer2,
       'Read staticFinalFieldWithInitializer2');
+
+  var c = new Class();
+  expect(55, lastInit);
+  expect(55, c.instanceFieldWithInitializer);
 }
 
 expect(expected, actual) {
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
index e20bb46..a23e5df 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
@@ -14,6 +14,7 @@
 
 class Class {
   static const int staticConstField = 123;
+  int instanceFieldWithInitializer = init(55);
   static int staticFieldWithoutInitializer;
   static int staticFieldWithInitializer1 = init(55);
   static int staticFieldWithInitializer2 = init(55);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
index 8a89bd3..44c72d7 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
@@ -2,6 +2,7 @@
 T init<T>(T value) {}
 
 class Class {
+  int instanceFieldWithInitializer = init(55);
   static const int staticConstField = 123;
   static final int staticFinalFieldWithInitializer1 = init(73);
   static final int staticFinalFieldWithInitializer2 =
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
index 3b4d666..7fcf775 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
@@ -4,6 +4,7 @@
 
 class Class extends core::Object {
   static const field core::int* staticConstField = #C1;
+  field core::int* instanceFieldWithInitializer = self::init<core::int*>(55);
   static field core::int* staticFieldWithoutInitializer = null;
   static field core::int* staticFieldWithInitializer1 = self::init<core::int*>(55);
   static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
@@ -60,6 +61,9 @@
   self::expect(73, self::Class::staticFinalFieldWithInitializer1);
   self::expect(73, self::lastInit);
   self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
+  self::Class* c = new self::Class::•();
+  self::expect(55, self::lastInit);
+  self::expect(55, c.{self::Class::instanceFieldWithInitializer});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!expected.{core::Object::==}(actual))
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
index 3b4d666..7fcf775 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
@@ -4,6 +4,7 @@
 
 class Class extends core::Object {
   static const field core::int* staticConstField = #C1;
+  field core::int* instanceFieldWithInitializer = self::init<core::int*>(55);
   static field core::int* staticFieldWithoutInitializer = null;
   static field core::int* staticFieldWithInitializer1 = self::init<core::int*>(55);
   static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
@@ -60,6 +61,9 @@
   self::expect(73, self::Class::staticFinalFieldWithInitializer1);
   self::expect(73, self::lastInit);
   self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
+  self::Class* c = new self::Class::•();
+  self::expect(55, self::lastInit);
+  self::expect(55, c.{self::Class::instanceFieldWithInitializer});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!expected.{core::Object::==}(actual))
diff --git a/tools/VERSION b/tools/VERSION
index a5cb519..fb4ad25 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 10
 PATCH 0
-PRERELEASE 101
+PRERELEASE 102
 PRERELEASE_PATCH 0
\ No newline at end of file
