diff --git a/analysis_options.yaml b/analysis_options.yaml
index a92f9fb..4bd9407 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -7,7 +7,7 @@
 #  - "sort_constructors_first" disabled (because we have private fake
 #     constructors),
 #  - "prefer_final_fields" disabled (because we do weird things with
-#    private fields, especially on the Window object):
+#    private fields, especially on the PlatformDispatcher object):
 
 analyzer:
   enable-experiment:
diff --git a/common/settings.h b/common/settings.h
index c956423..e408454 100644
--- a/common/settings.h
+++ b/common/settings.h
@@ -221,11 +221,11 @@
   FrameRasterizedCallback frame_rasterized_callback;
 
   // This data will be available to the isolate immediately on launch via the
-  // Window.getPersistentIsolateData callback. This is meant for information
-  // that the isolate cannot request asynchronously (platform messages can be
-  // used for that purpose). This data is held for the lifetime of the shell and
-  // is available on isolate restarts in the shell instance. Due to this,
-  // the buffer must be as small as possible.
+  // PlatformDispatcher.getPersistentIsolateData callback. This is meant for
+  // information that the isolate cannot request asynchronously (platform
+  // messages can be used for that purpose). This data is held for the lifetime
+  // of the shell and is available on isolate restarts in the shell instance.
+  // Due to this, the buffer must be as small as possible.
   std::shared_ptr<const fml::Mapping> persistent_isolate_data;
 
   /// Max size of old gen heap size in MB, or 0 for unlimited, -1 for default
diff --git a/lib/ui/window.dart b/lib/ui/window.dart
index 7c8e514..f4795b0 100644
--- a/lib/ui/window.dart
+++ b/lib/ui/window.dart
@@ -795,220 +795,6 @@
   int get hashCode => _index.hashCode;
 }
 
-/// A soon-to-be deprecated class that is wholly replaced by
-/// [SingletonFlutterWindow].
-///
-/// This class will be removed once the framework no longer refers to it.
-// In order for the documentation build to succeed, this interface duplicates
-// all of the methods with documentation, overrides them, and calls the super
-// implementation. Once this merges into the framework and the framework
-// references to it can be updated, this class will be removed entirely.
-class Window extends SingletonFlutterWindow {
-  Window._(Object windowId, PlatformDispatcher platformDispatcher)
-      : super._(windowId, platformDispatcher);
-
-  @override
-  // ignore: unnecessary_overrides
-  double get devicePixelRatio => super.devicePixelRatio;
-
-  @override
-  // ignore: unnecessary_overrides
-  Rect get physicalGeometry => super.physicalGeometry;
-
-  @override
-  // ignore: unnecessary_overrides
-  Size get physicalSize => super.physicalSize;
-
-  @override
-  // ignore: unnecessary_overrides
-  WindowPadding get viewInsets => super.viewInsets;
-
-  @override
-  // ignore: unnecessary_overrides
-  WindowPadding get viewPadding => super.viewPadding;
-
-  @override
-  // ignore: unnecessary_overrides
-  WindowPadding get systemGestureInsets => super.systemGestureInsets;
-
-  @override
-  // ignore: unnecessary_overrides
-  WindowPadding get padding => super.padding;
-
-  @override
-  // ignore: unnecessary_overrides
-  void render(Scene scene) => super.render(scene);
-
-  @override
-  // ignore: unnecessary_overrides
-  VoidCallback? get onMetricsChanged => super.onMetricsChanged;
-  @override
-  // ignore: unnecessary_overrides
-  set onMetricsChanged(VoidCallback? callback) {
-    super.onMetricsChanged = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  Locale get locale => super.locale;
-
-  @override
-  // ignore: unnecessary_overrides
-  List<Locale> get locales => super.locales;
-
-  @override
-  // ignore: unnecessary_overrides
-  Locale? computePlatformResolvedLocale(List<Locale> supportedLocales) {
-    return super.computePlatformResolvedLocale(supportedLocales);
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  VoidCallback? get onLocaleChanged => super.onLocaleChanged;
-  @override
-  // ignore: unnecessary_overrides
-  set onLocaleChanged(VoidCallback? callback) {
-    super.onLocaleChanged = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  String get initialLifecycleState => super.initialLifecycleState;
-
-  @override
-  // ignore: unnecessary_overrides
-  double get textScaleFactor => super.textScaleFactor;
-
-  @override
-  // ignore: unnecessary_overrides
-  bool get alwaysUse24HourFormat => super.alwaysUse24HourFormat;
-
-  @override
-  // ignore: unnecessary_overrides
-  VoidCallback? get onTextScaleFactorChanged => super.onTextScaleFactorChanged;
-  @override
-  // ignore: unnecessary_overrides
-  set onTextScaleFactorChanged(VoidCallback? callback) {
-    super.onTextScaleFactorChanged = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  Brightness get platformBrightness => super.platformBrightness;
-
-  @override
-  // ignore: unnecessary_overrides
-  VoidCallback? get onPlatformBrightnessChanged => super.onPlatformBrightnessChanged;
-  @override
-  // ignore: unnecessary_overrides
-  set onPlatformBrightnessChanged(VoidCallback? callback) {
-    super.onPlatformBrightnessChanged = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  FrameCallback? get onBeginFrame => super.onBeginFrame;
-  @override
-  // ignore: unnecessary_overrides
-  set onBeginFrame(FrameCallback? callback) {
-    super.onBeginFrame = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  VoidCallback? get onDrawFrame => super.onDrawFrame;
-  @override
-  // ignore: unnecessary_overrides
-  set onDrawFrame(VoidCallback? callback) {
-    super.onDrawFrame = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  TimingsCallback? get onReportTimings => super.onReportTimings;
-  @override
-  // ignore: unnecessary_overrides
-  set onReportTimings(TimingsCallback? callback) {
-    super.onReportTimings = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  PointerDataPacketCallback? get onPointerDataPacket => super.onPointerDataPacket;
-  @override
-  // ignore: unnecessary_overrides
-  set onPointerDataPacket(PointerDataPacketCallback? callback) {
-    super.onPointerDataPacket = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  String get defaultRouteName => super.defaultRouteName;
-
-  @override
-  // ignore: unnecessary_overrides
-  void scheduleFrame() => super.scheduleFrame();
-
-  @override
-  // ignore: unnecessary_overrides
-  bool get semanticsEnabled => super.semanticsEnabled;
-
-  @override
-  // ignore: unnecessary_overrides
-  VoidCallback? get onSemanticsEnabledChanged => super.onSemanticsEnabledChanged;
-  @override
-  // ignore: unnecessary_overrides
-  set onSemanticsEnabledChanged(VoidCallback? callback) {
-    super.onSemanticsEnabledChanged = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  SemanticsActionCallback? get onSemanticsAction => super.onSemanticsAction;
-  @override
-  // ignore: unnecessary_overrides
-  set onSemanticsAction(SemanticsActionCallback? callback) {
-    super.onSemanticsAction = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  AccessibilityFeatures get accessibilityFeatures => super.accessibilityFeatures;
-
-  @override
-  // ignore: unnecessary_overrides
-  VoidCallback? get onAccessibilityFeaturesChanged =>
-      super.onAccessibilityFeaturesChanged;
-  @override
-  // ignore: unnecessary_overrides
-  set onAccessibilityFeaturesChanged(VoidCallback? callback) {
-    super.onAccessibilityFeaturesChanged = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  void updateSemantics(SemanticsUpdate update) => super.updateSemantics(update);
-
-  @override
-  // ignore: unnecessary_overrides
-  void sendPlatformMessage(String name, ByteData? data, PlatformMessageResponseCallback? callback) {
-    super.sendPlatformMessage(name, data, callback);
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  PlatformMessageCallback? get onPlatformMessage => super.onPlatformMessage;
-  @override
-  // ignore: unnecessary_overrides
-  set onPlatformMessage(PlatformMessageCallback? callback) {
-    super.onPlatformMessage = callback;
-  }
-
-  @override
-  // ignore: unnecessary_overrides
-  void setIsolateDebugName(String name) => super.setIsolateDebugName(name);
-}
-
 /// Describes the contrast of a theme or color palette.
 enum Brightness {
   /// The color is dark and will require a light text color to achieve readable
@@ -1053,4 +839,4 @@
 /// * [PlatformDispatcher.views], contains the current list of Flutter windows
 ///   belonging to the application, including top level application windows like
 ///   this one.
-final Window window = Window._(0, PlatformDispatcher.instance);
+final SingletonFlutterWindow window = SingletonFlutterWindow._(0, PlatformDispatcher.instance);
diff --git a/lib/web_ui/lib/src/engine/dom_renderer.dart b/lib/web_ui/lib/src/engine/dom_renderer.dart
index d650614..af01cbc 100644
--- a/lib/web_ui/lib/src/engine/dom_renderer.dart
+++ b/lib/web_ui/lib/src/engine/dom_renderer.dart
@@ -478,8 +478,8 @@
   ///
   /// When there is a text editing going on in mobile devices, do not change
   /// the physicalSize, change the [window.viewInsets]. See:
-  /// https://api.flutter.dev/flutter/dart-ui/Window/viewInsets.html
-  /// https://api.flutter.dev/flutter/dart-ui/Window/physicalSize.html
+  /// https://api.flutter.dev/flutter/dart-ui/FlutterView/viewInsets.html
+  /// https://api.flutter.dev/flutter/dart-ui/FlutterView/physicalSize.html
   ///
   /// Note: always check for rotations for a mobile device. Update the physical
   /// size if the change is caused by a rotation.
diff --git a/lib/web_ui/lib/src/engine/html/scene_builder.dart b/lib/web_ui/lib/src/engine/html/scene_builder.dart
index 80cf5ed..03d4701 100644
--- a/lib/web_ui/lib/src/engine/html/scene_builder.dart
+++ b/lib/web_ui/lib/src/engine/html/scene_builder.dart
@@ -307,13 +307,12 @@
   ///  - 0x08: visualizeEngineStatistics - graph UI thread frame times
   /// Set enabledOptions to 0x0F to enable all the currently defined features.
   ///
-  /// The "UI thread" is the thread that includes all the execution of
-  /// the main Dart isolate (the isolate that can call
-  /// [Window.render]). The UI thread frame time is the total time
-  /// spent executing the [Window.onBeginFrame] callback. The "raster
-  /// thread" is the thread (running on the CPU) that subsequently
-  /// processes the [Scene] provided by the Dart code to turn it into
-  /// GPU commands and send it to the GPU.
+  /// The "UI thread" is the thread that includes all the execution of the main
+  /// Dart isolate (the isolate that can call [FlutterView.render]). The UI
+  /// thread frame time is the total time spent executing the
+  /// [FlutterView.onBeginFrame] callback. The "raster thread" is the thread
+  /// (running on the CPU) that subsequently processes the [Scene] provided by
+  /// the Dart code to turn it into GPU commands and send it to the GPU.
   ///
   /// See also the [PerformanceOverlayOption] enum in the rendering library.
   /// for more details.
@@ -522,7 +521,7 @@
   ///
   /// Returns a [Scene] containing the objects that have been added to
   /// this scene builder. The [Scene] can then be displayed on the
-  /// screen with [Window.render].
+  /// screen with [FlutterView.render].
   ///
   /// After calling this function, the scene builder object is invalid and
   /// cannot be used further.
diff --git a/lib/web_ui/lib/src/engine/platform_dispatcher.dart b/lib/web_ui/lib/src/engine/platform_dispatcher.dart
index d196ef5..78e9124 100644
--- a/lib/web_ui/lib/src/engine/platform_dispatcher.dart
+++ b/lib/web_ui/lib/src/engine/platform_dispatcher.dart
@@ -174,7 +174,7 @@
   /// rasterized frames.
   ///
   /// It's preferred to use [SchedulerBinding.addTimingsCallback] than to use
-  /// [Window.onReportTimings] directly because
+  /// [PlatformDispatcher.onReportTimings] directly because
   /// [SchedulerBinding.addTimingsCallback] allows multiple callbacks.
   ///
   /// This can be used to see if the application has missed frames (through
diff --git a/lib/web_ui/lib/src/engine/semantics/semantics.dart b/lib/web_ui/lib/src/engine/semantics/semantics.dart
index 226d9a4..1d511e5 100644
--- a/lib/web_ui/lib/src/engine/semantics/semantics.dart
+++ b/lib/web_ui/lib/src/engine/semantics/semantics.dart
@@ -1265,11 +1265,11 @@
 
   final SemanticsHelper semanticsHelper = SemanticsHelper();
 
-  /// Whether the user has requested that [updateSemantics] be called when
-  /// the semantic contents of window changes.
+  /// Whether the user has requested that [updateSemantics] be called when the
+  /// semantic contents of window changes.
   ///
-  /// The [ui.Window.onSemanticsEnabledChanged] callback is called whenever this
-  /// value changes.
+  /// The [ui.PlatformDispatcher.onSemanticsEnabledChanged] callback is called
+  /// whenever this value changes.
   ///
   /// This is separate from accessibility [mode], which controls how gestures
   /// are interpreted when this value is true.
diff --git a/lib/web_ui/lib/src/engine/window.dart b/lib/web_ui/lib/src/engine/window.dart
index 78defa3..0557acd 100644
--- a/lib/web_ui/lib/src/engine/window.dart
+++ b/lib/web_ui/lib/src/engine/window.dart
@@ -22,10 +22,8 @@
   _customUrlStrategy = strategy;
 }
 
-/// The Web implementation of [ui.Window].
-// TODO(gspencergoog): Once the framework no longer uses ui.Window, make this extend
-// ui.SingletonFlutterWindow instead.
-class EngineFlutterWindow extends ui.Window {
+/// The Web implementation of [ui.SingletonFlutterWindow].
+class EngineFlutterWindow extends ui.SingletonFlutterWindow {
   EngineFlutterWindow(this._windowId, this.platformDispatcher) {
     final EnginePlatformDispatcher engineDispatcher = platformDispatcher as EnginePlatformDispatcher;
     engineDispatcher._windows[_windowId] = this;
@@ -245,7 +243,7 @@
       : const HashUrlStrategy();
 }
 
-/// The Web implementation of [ui.Window].
+/// The Web implementation of [ui.SingletonFlutterWindow].
 class EngineSingletonFlutterWindow extends EngineFlutterWindow {
   EngineSingletonFlutterWindow(Object windowId, ui.PlatformDispatcher platformDispatcher) : super(windowId, platformDispatcher);
 
diff --git a/lib/web_ui/lib/src/ui/window.dart b/lib/web_ui/lib/src/ui/window.dart
index 9966ef3..6fc8b90 100644
--- a/lib/web_ui/lib/src/ui/window.dart
+++ b/lib/web_ui/lib/src/ui/window.dart
@@ -124,138 +124,6 @@
   void setIsolateDebugName(String name) => PlatformDispatcher.instance.setIsolateDebugName(name);
 }
 
-// This class will go away entirely once references to it are removed from the
-// framework. The many explicit overrides are an artifact of needing to add the
-// same overrides to the one in dart:ui in order to get dartdoc to find the docs
-// for them.
-abstract class Window extends SingletonFlutterWindow {
-  @override
-  double get devicePixelRatio;
-
-  @override
-  Rect get physicalGeometry;
-
-  @override
-  Size get physicalSize;
-
-  @override
-  WindowPadding get viewInsets;
-
-  @override
-  WindowPadding get viewPadding;
-
-  @override
-  WindowPadding get systemGestureInsets;
-
-  @override
-  WindowPadding get padding;
-
-  @override
-  void render(Scene scene);
-
-  @override
-  VoidCallback? get onMetricsChanged;
-  @override
-  set onMetricsChanged(VoidCallback? callback);
-
-  @override
-  Locale? get locale => super.locale;
-
-  @override
-  List<Locale>? get locales => super.locales;
-
-  @override
-  Locale? computePlatformResolvedLocale(List<Locale> supportedLocales);
-
-  @override
-  VoidCallback? get onLocaleChanged;
-  @override
-  set onLocaleChanged(VoidCallback? callback);
-
-  @override
-  String get initialLifecycleState;
-
-  @override
-  double get textScaleFactor;
-
-  @override
-  bool get alwaysUse24HourFormat;
-
-  @override
-  VoidCallback? get onTextScaleFactorChanged;
-  @override
-  set onTextScaleFactorChanged(VoidCallback? callback);
-
-  @override
-  Brightness get platformBrightness;
-
-  @override
-  VoidCallback? get onPlatformBrightnessChanged;
-  @override
-  set onPlatformBrightnessChanged(VoidCallback? callback);
-
-  @override
-  FrameCallback? get onBeginFrame;
-  @override
-  set onBeginFrame(FrameCallback? callback);
-
-  @override
-  VoidCallback? get onDrawFrame;
-  @override
-  set onDrawFrame(VoidCallback? callback);
-
-  @override
-  TimingsCallback? get onReportTimings;
-  @override
-  set onReportTimings(TimingsCallback? callback);
-
-  @override
-  PointerDataPacketCallback? get onPointerDataPacket;
-  @override
-  set onPointerDataPacket(PointerDataPacketCallback? callback);
-
-  @override
-  String get defaultRouteName;
-
-  @override
-  void scheduleFrame();
-
-  @override
-  bool get semanticsEnabled;
-
-  @override
-  VoidCallback? get onSemanticsEnabledChanged;
-  @override
-  set onSemanticsEnabledChanged(VoidCallback? callback);
-
-  @override
-  SemanticsActionCallback? get onSemanticsAction;
-  @override
-  set onSemanticsAction(SemanticsActionCallback? callback);
-
-  @override
-  AccessibilityFeatures get accessibilityFeatures;
-
-  @override
-  VoidCallback? get onAccessibilityFeaturesChanged;
-  @override
-  set onAccessibilityFeaturesChanged(VoidCallback? callback);
-
-  @override
-  void updateSemantics(SemanticsUpdate update);
-
-  @override
-  void sendPlatformMessage(String name, ByteData? data, PlatformMessageResponseCallback? callback);
-
-  @override
-  PlatformMessageCallback? get onPlatformMessage;
-  @override
-  set onPlatformMessage(PlatformMessageCallback? callback);
-
-  @override
-  void setIsolateDebugName(String name);
-}
-
 class AccessibilityFeatures {
   const AccessibilityFeatures._(this._index);
 
@@ -368,4 +236,4 @@
   }
 }
 
-Window get window => engine.window;
+SingletonFlutterWindow get window => engine.window;
diff --git a/lib/web_ui/test/engine/window_test.dart b/lib/web_ui/test/engine/window_test.dart
index e61c9f1..04ae422 100644
--- a/lib/web_ui/test/engine/window_test.dart
+++ b/lib/web_ui/test/engine/window_test.dart
@@ -271,7 +271,7 @@
     expect(responded, true);
   });
 
-  test('Window implements locale, locales, and locale change notifications', () async {
+  test('SingletonFlutterWindow implements locale, locales, and locale change notifications', () async {
     // This will count how many times we notified about locale changes.
     int localeChangedCount = 0;
     window.onLocaleChanged = () {
