diff --git a/shell/platform/fuchsia/flutter/pointer_injector_delegate.cc b/shell/platform/fuchsia/flutter/pointer_injector_delegate.cc
index 0c682be..a1a2da8 100644
--- a/shell/platform/fuchsia/flutter/pointer_injector_delegate.cc
+++ b/shell/platform/fuchsia/flutter/pointer_injector_delegate.cc
@@ -43,118 +43,125 @@
 
   auto method = request.FindMember("method");
   if (method == request.MemberEnd() || !method->value.IsString()) {
+    FML_LOG(ERROR) << "No method found in platform message.";
     return false;
   }
 
-  if (method->value == kPointerInjectorMethodPrefix) {
-    auto args_it = request.FindMember("args");
-    if (args_it == request.MemberEnd() || !args_it->value.IsObject()) {
-      FML_LOG(ERROR) << "No arguments found.";
-      return false;
-    }
-
-    const auto& args = args_it->value;
-
-    auto view_id = args.FindMember("viewId");
-    if (!view_id->value.IsUint64()) {
-      FML_LOG(ERROR) << "Argument 'viewId' is not a uint64";
-      return false;
-    }
-    auto id = view_id->value.GetUint64();
-
-    auto phase = args.FindMember("phase");
-    if (!phase->value.IsInt()) {
-      FML_LOG(ERROR) << "Argument 'phase' is not a int";
-      return false;
-    }
-
-    auto pointer_x = args.FindMember("x");
-    if (!pointer_x->value.IsFloat() && !pointer_x->value.IsInt()) {
-      FML_LOG(ERROR) << "Argument 'Pointer.X' is not a float";
-      return false;
-    }
-
-    auto pointer_y = args.FindMember("y");
-    if (!pointer_y->value.IsFloat() && !pointer_y->value.IsInt()) {
-      FML_LOG(ERROR) << "Argument 'Pointer.Y' is not a float";
-      return false;
-    }
-
-    auto pointer_id = args.FindMember("pointerId");
-    if (!pointer_id->value.IsUint()) {
-      FML_LOG(ERROR) << "Argument 'pointerId' is not a uint32";
-      return false;
-    }
-
-    auto trace_flow_id = args.FindMember("traceFlowId");
-    if (!trace_flow_id->value.IsInt()) {
-      FML_LOG(ERROR) << "Argument 'traceFlowId' is not a int";
-      return false;
-    }
-
-    // For GFX, the viewRef for the view is provided through the platform
-    // message. For flatland, the viewRef is provided through |OnCreateView|.
-    std::optional<fuv_ViewRef> view_ref;
-    if (!is_flatland_) {
-      auto view_ref_arg = args.FindMember("viewRef");
-      if (!view_ref_arg->value.IsUint64()) {
-        FML_LOG(ERROR) << "Argument 'viewRef' is not a uint64";
-        return false;
-      }
-
-      zx_handle_t handle = view_ref_arg->value.GetUint64();
-      zx_handle_t out_handle;
-      zx_status_t status =
-          zx_handle_duplicate(handle, ZX_RIGHT_SAME_RIGHTS, &out_handle);
-      if (status != ZX_OK) {
-        FML_LOG(ERROR) << "Argument 'viewRef' is not valid";
-        return false;
-      }
-      auto ref = fuv_ViewRef({
-          .reference = zx::eventpair(out_handle),
-      });
-      view_ref = std::move(ref);
-    }
-
-    auto width = args.FindMember("logicalWidth");
-    if (!width->value.IsFloat() && !width->value.IsInt()) {
-      FML_LOG(ERROR) << "Argument 'logicalWidth' is not a float";
-      return false;
-    }
-
-    auto height = args.FindMember("logicalHeight");
-    if (!height->value.IsFloat() && !height->value.IsInt()) {
-      FML_LOG(ERROR) << "Argument 'logicalHeight' is not a float";
-      return false;
-    }
-
-    auto timestamp = args.FindMember("timestamp");
-    if (!timestamp->value.IsInt() && !timestamp->value.IsUint64()) {
-      FML_LOG(ERROR) << "Argument 'timestamp' is not a int";
-      return false;
-    }
-
-    PointerInjectorRequest request = {
-        .x = pointer_x->value.GetFloat(),
-        .y = pointer_y->value.GetFloat(),
-        .pointer_id = pointer_id->value.GetUint(),
-        .phase = static_cast<fup_EventPhase>(phase->value.GetInt()),
-        .trace_flow_id = trace_flow_id->value.GetUint64(),
-        .view_ref = std::move(view_ref),
-        .logical_size = {width->value.GetFloat(), height->value.GetFloat()},
-        .timestamp = timestamp->value.GetInt()};
-
-    // Inject the pointer event if the view has been created.
-    if (valid_views_.count(id) > 0) {
-      valid_views_.at(id).InjectEvent(std::move(request));
-      Complete(std::move(response), "[0]");
-    } else {
-      return false;
-    }
-  } else {
+  if (method->value != kPointerInjectorMethodPrefix) {
+    FML_LOG(ERROR) << "Unexpected platform message method, expected "
+                      "View.pointerinjector.inject.";
     return false;
   }
-  // All of our methods complete the platform message response.
+
+  auto args_it = request.FindMember("args");
+  if (args_it == request.MemberEnd() || !args_it->value.IsObject()) {
+    FML_LOG(ERROR) << "No arguments found in platform message's method";
+    return false;
+  }
+
+  const auto& args = args_it->value;
+
+  auto view_id = args.FindMember("viewId");
+  if (!view_id->value.IsUint64()) {
+    FML_LOG(ERROR) << "Argument 'viewId' is not a uint64";
+    return false;
+  }
+
+  auto id = view_id->value.GetUint64();
+  if (valid_views_.count(id) == 0) {
+    // A child view can get destroyed bottom-up, so the parent view may continue
+    // injecting until all view state processing "catches up". Until then, it's
+    // okay to accept a request to inject into a view that no longer exists.
+    // Doing so avoids log pollution regarding "MissingPluginException".
+    Complete(std::move(response), "[0]");
+    return true;
+  }
+
+  auto phase = args.FindMember("phase");
+  if (!phase->value.IsInt()) {
+    FML_LOG(ERROR) << "Argument 'phase' is not a int";
+    return false;
+  }
+
+  auto pointer_x = args.FindMember("x");
+  if (!pointer_x->value.IsFloat() && !pointer_x->value.IsInt()) {
+    FML_LOG(ERROR) << "Argument 'Pointer.X' is not a float";
+    return false;
+  }
+
+  auto pointer_y = args.FindMember("y");
+  if (!pointer_y->value.IsFloat() && !pointer_y->value.IsInt()) {
+    FML_LOG(ERROR) << "Argument 'Pointer.Y' is not a float";
+    return false;
+  }
+
+  auto pointer_id = args.FindMember("pointerId");
+  if (!pointer_id->value.IsUint()) {
+    FML_LOG(ERROR) << "Argument 'pointerId' is not a uint32";
+    return false;
+  }
+
+  auto trace_flow_id = args.FindMember("traceFlowId");
+  if (!trace_flow_id->value.IsInt()) {
+    FML_LOG(ERROR) << "Argument 'traceFlowId' is not a int";
+    return false;
+  }
+
+  // For GFX, the viewRef for the view is provided through the platform
+  // message. For flatland, the viewRef is provided through |OnCreateView|.
+  std::optional<fuv_ViewRef> view_ref;
+  if (!is_flatland_) {
+    auto view_ref_arg = args.FindMember("viewRef");
+    if (!view_ref_arg->value.IsUint64()) {
+      FML_LOG(ERROR) << "Argument 'viewRef' is not a uint64";
+      return false;
+    }
+
+    zx_handle_t handle = view_ref_arg->value.GetUint64();
+    zx_handle_t out_handle;
+    zx_status_t status =
+        zx_handle_duplicate(handle, ZX_RIGHT_SAME_RIGHTS, &out_handle);
+    if (status != ZX_OK) {
+      FML_LOG(ERROR) << "Argument 'viewRef' is not valid";
+      return false;
+    }
+    auto ref = fuv_ViewRef({
+        .reference = zx::eventpair(out_handle),
+    });
+    view_ref = std::move(ref);
+  }
+
+  auto width = args.FindMember("logicalWidth");
+  if (!width->value.IsFloat() && !width->value.IsInt()) {
+    FML_LOG(ERROR) << "Argument 'logicalWidth' is not a float";
+    return false;
+  }
+
+  auto height = args.FindMember("logicalHeight");
+  if (!height->value.IsFloat() && !height->value.IsInt()) {
+    FML_LOG(ERROR) << "Argument 'logicalHeight' is not a float";
+    return false;
+  }
+
+  auto timestamp = args.FindMember("timestamp");
+  if (!timestamp->value.IsInt() && !timestamp->value.IsUint64()) {
+    FML_LOG(ERROR) << "Argument 'timestamp' is not a int";
+    return false;
+  }
+
+  PointerInjectorRequest event = {
+      .x = pointer_x->value.GetFloat(),
+      .y = pointer_y->value.GetFloat(),
+      .pointer_id = pointer_id->value.GetUint(),
+      .phase = static_cast<fup_EventPhase>(phase->value.GetInt()),
+      .trace_flow_id = trace_flow_id->value.GetUint64(),
+      .view_ref = std::move(view_ref),
+      .logical_size = {width->value.GetFloat(), height->value.GetFloat()},
+      .timestamp = timestamp->value.GetInt()};
+
+  // Inject the pointer event if the view has been created.
+  valid_views_.at(id).InjectEvent(std::move(event));
+  Complete(std::move(response), "[0]");
   return true;
 }
 
diff --git a/shell/platform/fuchsia/flutter/pointer_injector_delegate.h b/shell/platform/fuchsia/flutter/pointer_injector_delegate.h
index 00063c1..1e2666e 100644
--- a/shell/platform/fuchsia/flutter/pointer_injector_delegate.h
+++ b/shell/platform/fuchsia/flutter/pointer_injector_delegate.h
@@ -53,7 +53,7 @@
 
   // Closes the |fuchsia.ui.pointerinjector.Device| channel for |view_id| and
   // cleans up resources.
-  void OnDestroyView(uint64_t view_id) { valid_views_.erase(view_id); };
+  void OnDestroyView(uint64_t view_id) { valid_views_.erase(view_id); }
 
  private:
   using ViewId = int64_t;
diff --git a/shell/platform/fuchsia/flutter/pointer_injector_delegate_unittest.cc b/shell/platform/fuchsia/flutter/pointer_injector_delegate_unittest.cc
index cee930a..f38d032 100644
--- a/shell/platform/fuchsia/flutter/pointer_injector_delegate_unittest.cc
+++ b/shell/platform/fuchsia/flutter/pointer_injector_delegate_unittest.cc
@@ -378,7 +378,11 @@
         view_ref_clone = std::move(temp_ref);
       }
 
-      EXPECT_FALSE(pointer_injector_delegate_->HandlePlatformMessage(
+      // The platform message is *silently* accepted for non-existent views, in
+      // order to cleanly handle the lifecycle case where the child view is
+      // forcibly killed. By doing so, products avoid "MissingPluginException"
+      // log spam.
+      EXPECT_TRUE(pointer_injector_delegate_->HandlePlatformMessage(
           PlatformMessageBuilder()
               .SetViewId(view_id_1)
               .SetViewRefMaybe(std::move(view_ref_clone))
@@ -404,7 +408,11 @@
         view_ref_clone = std::move(temp_ref);
       }
 
-      EXPECT_FALSE(pointer_injector_delegate_->HandlePlatformMessage(
+      // The platform message is *silently* accepted for non-existent views, in
+      // order to cleanly handle the lifecycle case where the child view is
+      // forcibly killed. By doing so, products avoid "MissingPluginException"
+      // log spam.
+      EXPECT_TRUE(pointer_injector_delegate_->HandlePlatformMessage(
           PlatformMessageBuilder()
               .SetViewId(view_id_2)
               .SetViewRefMaybe(std::move(view_ref_clone))
