diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc index 082ad86152824..362d8fd35e268 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.cc +++ b/third_party/blink/renderer/core/frame/local_frame_view.cc @@ -2357,6 +2357,11 @@ bool LocalFrameView::UpdateLifecyclePhases( // Run the lifecycle updates. UpdateLifecyclePhasesInternal(target_state, reason); + if (!GetFrame().GetPage()) { + LOG(ERROR) << "POC: UpdateLifecyclePhases: detached after internal"; + return false; + } + if (target_state == DocumentLifecycle::kPaintClean) { TRACE_EVENT0("blink", "LocalFrameView::DidFinishLifecycleUpdate"); @@ -2447,6 +2452,10 @@ void LocalFrameView::UpdateLifecyclePhasesInternal( DocumentLifecycle::kVisualUpdatePending); } } + if (!GetFrame().GetPage()) { + LOG(ERROR) << "POC: local root detached during lifecycle; bailing"; + return; + } bool run_more_lifecycle_phases = RunStyleAndLayoutLifecyclePhases(target_state); if (!run_more_lifecycle_phases) { diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc index 1395aa71a377c..f8f2335a3e09a 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc @@ -1777,6 +1777,10 @@ void WebFrameWidgetImpl::UpdateLifecycle(WebLifecycleUpdate requested_update, GetPage()->UpdateLifecycle(*LocalRootImpl()->GetFrame(), requested_update, reason); + if (!LocalRootImpl()) { + LOG(ERROR) << "POC: WebFrameWidgetImpl::UpdateLifecycle: detached"; + return; + } if (requested_update != WebLifecycleUpdate::kAll) return; diff --git a/third_party/blink/renderer/platform/widget/widget_base.cc b/third_party/blink/renderer/platform/widget/widget_base.cc index 70a4733201db9..b7dcb6997c52e 100644 --- a/third_party/blink/renderer/platform/widget/widget_base.cc +++ b/third_party/blink/renderer/platform/widget/widget_base.cc @@ -177,6 +177,7 @@ WidgetBase::WidgetBase( &WidgetBase::RequestAnimationAfterDelayTimerFired) {} WidgetBase::~WidgetBase() { + LOG(ERROR) << "POC: ~WidgetBase this=" << this; // Ensure Shutdown was called. DCHECK(!layer_tree_view_); } @@ -1145,7 +1146,9 @@ void WidgetBase::UpdateVisualState() { ShouldRecordBeginMainFrameMetrics() ? DocumentUpdateReason::kBeginMainFrame : DocumentUpdateReason::kTest; + LOG(ERROR) << "POC: UpdateVisualState enter this=" << this; client_->UpdateLifecycle(WebLifecycleUpdate::kAll, lifecycle_reason); + LOG(ERROR) << "POC: UpdateVisualState after-lifecycle this=" << this; client_->SetSuppressFrameRequestsWorkaroundFor704763Only(false); }