Revert "Prerender: Fix prerender new content timeout start timing"

This reverts commit ff97f6bc463f127de6b8f0f266165176a02d66c2.

Reason for revert: Breaks BFCache

Original change's description:
> Prerender: Fix prerender new content timeout start timing
>
> Prior to this change, we'd start the new content timeout timer in
> DidNavigate. For pre-render this meant starting the timer before
> activation. When activated, WasShown is called which reset the
> fallback surface if the was a timer running. This caused us to clear
> the graphics output immediately on activation and show blank. Without
> prerender, we would still show the fallback content for the timeout
> duration.
>
> With this patch we separate DidNavigate from creating the timer. We
> conditionally create the timer RenderFrameHostManager::CommitPending
> after the show call
>
> R=​rakina@chromium.org, jonross@chromium.org
>
> Bug: 1423006
> Change-Id: I1cd3f48837085346935ff5d307ebe8dc79dbe5f8
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4418087
> Code-Coverage: Findit <findit-for-me@appspot.gserviceaccount.com>
> Reviewed-by: Rakina Zata Amni <rakina@chromium.org>
> Reviewed-by: Khushal Sagar <khushalsagar@chromium.org>
> Reviewed-by: Jonathan Ross <jonross@chromium.org>
> Commit-Queue: Vladimir Levin <vmpstr@chromium.org>
> Reviewed-by: Bo Liu <boliu@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#1132606}

Bug: 1423006
Change-Id: Idef95225b0d85a68ae11c0943d5ccfe19a905db9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4450847
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Vladimir Levin <vmpstr@chromium.org>
Commit-Queue: Vladimir Levin <vmpstr@chromium.org>
Reviewed-by: Jonathan Ross <jonross@chromium.org>
Owners-Override: Dave Tapuska <dtapuska@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1132678}
diff --git a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
index 5a2eb2e..23c7f0c9 100644
--- a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
+++ b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
@@ -116,16 +116,9 @@
 
 #if BUILDFLAG(IS_ANDROID)
 #include "base/android/build_info.h"
-#include "content/browser/renderer_host/render_widget_host_view_android.h"
 #include "third_party/blink/public/mojom/remote_objects/remote_objects.mojom.h"
-#include "ui/android/delegated_frame_host_android.h"
 #endif  // BUILDFLAG(IS_ANDROID)
 
-#if defined(USE_AURA)
-#include "content/browser/renderer_host/delegated_frame_host.h"
-#include "content/browser/renderer_host/render_widget_host_view_aura.h"
-#endif  // defined(USE_AURA)
-
 namespace content {
 namespace {
 
@@ -7907,88 +7900,6 @@
   EXPECT_EQ(expected_ftn, activated_rfh->owner_);
 }
 
-IN_PROC_BROWSER_TEST_F(RenderFrameHostImplPrerenderBrowserTest,
-                       NewContentTimeoutIsNotSetInPrerender) {
-  GURL url_a = embedded_test_server()->GetURL("/title1.html");
-  GURL prerender_url = embedded_test_server()->GetURL("/title2.html");
-  EXPECT_TRUE(NavigateToURL(shell(), url_a));
-
-  // Load a page in the prerender.
-  int host_id = prerender_helper().AddPrerender(prerender_url);
-  RenderFrameHostImpl* prerender_frame_host = static_cast<RenderFrameHostImpl*>(
-      prerender_helper().GetPrerenderedMainFrameHost(host_id));
-  EXPECT_TRUE(prerender_frame_host);
-  RenderWidgetHostImpl* prerender_rwhi = RenderWidgetHostImpl::From(
-      prerender_frame_host->GetView()->GetRenderWidgetHost());
-  EXPECT_FALSE(prerender_rwhi->IsContentRenderingTimeoutRunning());
-
-  // Activate the prerendered page.
-  prerender_helper().NavigatePrimaryPage(prerender_url);
-
-  RenderFrameHostImpl* activated_rfh = web_contents()->GetPrimaryMainFrame();
-  RenderWidgetHostImpl* activated_rwhi = RenderWidgetHostImpl::From(
-      activated_rfh->GetView()->GetRenderWidgetHost());
-  EXPECT_EQ(activated_rwhi, prerender_rwhi);
-  EXPECT_TRUE(activated_rwhi->IsContentRenderingTimeoutRunning());
-}
-
-// TODO(vmpstr): Android takes the new timeout timer from the fallback render
-// widget host impl. This causes us to clear the surface on showing it. See
-// crbug.com/1423006 for the investigation.
-#if BUILDFLAG(IS_ANDROID)
-IN_PROC_BROWSER_TEST_F(RenderFrameHostImplPrerenderBrowserTest,
-                       DISABLED_ActivationSurfaceRangeIncludesFallback) {
-#else
-IN_PROC_BROWSER_TEST_F(RenderFrameHostImplPrerenderBrowserTest,
-                       ActivationSurfaceRangeIncludesFallback) {
-#endif
-  GURL url_a = embedded_test_server()->GetURL("/title1.html");
-  GURL prerender_url = embedded_test_server()->GetURL("/title2.html");
-  EXPECT_TRUE(NavigateToURL(shell(), url_a));
-
-  // Load a page in the prerender.
-  prerender_helper().AddPrerender(prerender_url);
-
-  RenderWidgetHostViewBase* initial_view =
-      RenderWidgetHostImpl::From(web_contents()
-                                     ->GetPrimaryMainFrame()
-                                     ->GetView()
-                                     ->GetRenderWidgetHost())
-          ->GetView();
-
-  viz::SurfaceId initial_surface_id = initial_view->GetCurrentSurfaceId();
-  EXPECT_TRUE(initial_surface_id.is_valid());
-
-  // Activate the prerendered page.
-  prerender_helper().NavigatePrimaryPage(prerender_url);
-
-  RenderWidgetHostViewBase* activated_view =
-      RenderWidgetHostImpl::From(web_contents()
-                                     ->GetPrimaryMainFrame()
-                                     ->GetView()
-                                     ->GetRenderWidgetHost())
-          ->GetView();
-
-  EXPECT_NE(activated_view, initial_view);
-
-#if defined(USE_AURA)
-  DelegatedFrameHost* activated_dfh =
-      static_cast<RenderWidgetHostViewAura*>(activated_view)
-          ->GetDelegatedFrameHostForTesting();
-  viz::SurfaceId fallback_surface_id =
-      activated_dfh->GetFallbackSurfaceIdForTesting();
-  EXPECT_TRUE(initial_surface_id.IsSameOrNewerThan(fallback_surface_id));
-#elif BUILDFLAG(IS_ANDROID)
-  ui::DelegatedFrameHostAndroid* activated_dfh =
-      static_cast<RenderWidgetHostViewAndroid*>(activated_view)
-          ->delegated_frame_host_for_testing();
-  viz::SurfaceId fallback_surface_id =
-      activated_dfh->GetFallbackSurfaceIdForTesting();
-  EXPECT_TRUE(initial_surface_id.IsSameOrNewerThan(fallback_surface_id))
-      << initial_surface_id.ToString() << " " << fallback_surface_id.ToString();
-#endif
-}
-
 using RenderFrameHostImplDeathTest = RenderFrameHostImplBrowserTest;
 
 IN_PROC_BROWSER_TEST_F(RenderFrameHostImplDeathTest,
diff --git a/content/browser/renderer_host/render_frame_host_manager.cc b/content/browser/renderer_host/render_frame_host_manager.cc
index a583bb2..b51154d 100644
--- a/content/browser/renderer_host/render_frame_host_manager.cc
+++ b/content/browser/renderer_host/render_frame_host_manager.cc
@@ -678,20 +678,6 @@
     // where a RenderFrameHost is swapped in.
     if (!frame_tree_node_->frame_tree().IsHidden())
       render_frame_host_->GetView()->Show();
-
-    // TODO(crbug.com/1434403): For same RenderFrameHost, it isn't clear
-    // whether we should start the new content timer, but to be safe, we start
-    // it here. The TODO here is to remove this call when we can.
-    //
-    // Note that this is only OK to do for non-prerender. For prerendering path,
-    // setting this timeout is incorrect because it causes a clear of graphical
-    // output on prerender activation.
-    if (render_frame_host_->lifecycle_state() !=
-        LifecycleStateImpl::kPrerendering) {
-      static_cast<RenderWidgetHostImpl*>(
-          render_frame_host_->GetView()->GetRenderWidgetHost())
-          ->StartNewContentRenderingTimeout();
-    }
   }
 
   // If we are navigating away from a Page that has a form data associated with
@@ -4200,11 +4186,8 @@
 
   // Make the new view show the contents of old view until it has something
   // useful to show.
-  bool needs_new_content_timeout = false;
-  if (is_main_frame && old_view && old_view != new_view) {
+  if (is_main_frame && old_view && old_view != new_view)
     new_view->TakeFallbackContentFrom(old_view);
-    needs_new_content_timeout = true;
-  }
 
   // The RenderViewHost keeps track of the main RenderFrameHost routing id.
   // If this is committing a main frame navigation, update it and set the
@@ -4338,11 +4321,6 @@
     }
   }
 
-  if (needs_new_content_timeout) {
-    static_cast<RenderWidgetHostImpl*>(new_view->GetRenderWidgetHost())
-        ->StartNewContentRenderingTimeout();
-  }
-
   // The process will no longer try to exit, so we can decrement the count.
   render_frame_host_->GetProcess()->RemovePendingView();
 
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 17d81f31..f6c7102 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -1452,14 +1452,12 @@
   if (view_)
     view_->DidNavigate();
 
-  ClearPendingUserActivation();
-}
-
-void RenderWidgetHostImpl::StartNewContentRenderingTimeout() {
-  if (!new_content_rendering_timeout_) {
+  if (!new_content_rendering_timeout_)
     return;
-  }
+
   new_content_rendering_timeout_->Start(new_content_rendering_delay_);
+
+  ClearPendingUserActivation();
 }
 
 void RenderWidgetHostImpl::ForwardMouseEvent(const WebMouseEvent& mouse_event) {
@@ -2335,9 +2333,6 @@
 
 void RenderWidgetHostImpl::GetContentRenderingTimeoutFrom(
     RenderWidgetHostImpl* other) {
-  // TODO(vmpstr): Android is the only caller of this function, and it isn't
-  // clear why we should be taking a timer from the fallback surface's timer.
-  // See crbug.com/1423006 for the investigation.
   if (other->IsContentRenderingTimeoutRunning()) {
     new_content_rendering_timeout_->Start(
         other->new_content_rendering_timeout_->GetCurrentDelay());
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index 157f6de..dd25d63 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -506,15 +506,10 @@
   // in flight change).
   bool RequestRepaintForTesting();
 
-  // Called after every cross-document navigation. Note that for prerender
-  // navigations, this is called before the renderer is shown.
-  void DidNavigate();
-
   // Called after every cross-document navigation. The displayed graphics of
   // the renderer is cleared after a certain timeout if it does not produce a
-  // new CompositorFrame after navigation. This is called after either
-  // navigation (for non-prerender pages) or activation (for prerender pages).
-  void StartNewContentRenderingTimeout();
+  // new CompositorFrame after navigation.
+  void DidNavigate();
 
   // Forwards the keyboard event with optional commands to the renderer. If
   // |key_event| is not forwarded for any reason, then |commands| are ignored.
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index 5590ad0..68d74a9 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -2245,7 +2245,6 @@
   // ClearDisplayedGraphics.
   host_->WasShown({} /* record_tab_switch_time_request */);
   host_->DidNavigate();
-  host_->StartNewContentRenderingTimeout();
   EXPECT_FALSE(host_->new_content_rendering_timeout_fired());
 
   // Hide then show. ClearDisplayedGraphics must be called.
@@ -2257,7 +2256,6 @@
   // Hide, navigate, then show. ClearDisplayedGraphics must be called.
   host_->WasHidden();
   host_->DidNavigate();
-  host_->StartNewContentRenderingTimeout();
   host_->WasShown({} /* record_tab_switch_time_request */);
   EXPECT_TRUE(host_->new_content_rendering_timeout_fired());
 }
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
index 6f0904d4..1c1d0257 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -400,10 +400,6 @@
 
   ui::Compositor* GetCompositor() override;
 
-  DelegatedFrameHost* GetDelegatedFrameHostForTesting() const {
-    return delegated_frame_host_.get();
-  }
-
  protected:
   ~RenderWidgetHostViewAura() override;
 
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 1779f0b..83b7482 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -5654,7 +5654,6 @@
   // No new LocalSurfaceId should be allocated for the first navigation and the
   // timer should not fire.
   widget_host_->DidNavigate();
-  widget_host_->StartNewContentRenderingTimeout();
   viz::LocalSurfaceId id1 = view_->GetLocalSurfaceId();
   EXPECT_EQ(id0, id1);
   {
@@ -5669,7 +5668,6 @@
 
   // Start the timer. Verify that a new LocalSurfaceId is allocated.
   widget_host_->DidNavigate();
-  widget_host_->StartNewContentRenderingTimeout();
   viz::LocalSurfaceId id2 = view_->GetLocalSurfaceId();
   EXPECT_TRUE(id2.is_valid());
   EXPECT_LT(id1.parent_sequence_number(), id2.parent_sequence_number());
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
index 7b8afe1..d83e754 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.h
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -565,8 +565,6 @@
   virtual void UnlockOrientation() {}
   virtual void SetHasPersistentVideo(bool has_persistent_video) {}
 
-  bool HasFallbackSurfaceForTesting() const { return HasFallbackSurface(); }
-
  protected:
   explicit RenderWidgetHostViewBase(RenderWidgetHost* host);
   ~RenderWidgetHostViewBase() override;
diff --git a/ui/android/delegated_frame_host_android.cc b/ui/android/delegated_frame_host_android.cc
index 775d4f4c..268170a 100644
--- a/ui/android/delegated_frame_host_android.cc
+++ b/ui/android/delegated_frame_host_android.cc
@@ -209,12 +209,6 @@
   return viz::SurfaceId(frame_sink_id_, pre_navigation_local_surface_id_);
 }
 
-viz::SurfaceId DelegatedFrameHostAndroid::GetFallbackSurfaceIdForTesting()
-    const {
-  return content_layer_->oldest_acceptable_fallback().value_or(
-      viz::SurfaceId());
-}
-
 void DelegatedFrameHostAndroid::ClearFallbackSurfaceForCommitPending() {
   const absl::optional<viz::SurfaceId> fallback_surface_id =
       content_layer_->oldest_acceptable_fallback();
diff --git a/ui/android/delegated_frame_host_android.h b/ui/android/delegated_frame_host_android.h
index 57a4bb60..8460cac 100644
--- a/ui/android/delegated_frame_host_android.h
+++ b/ui/android/delegated_frame_host_android.h
@@ -161,8 +161,6 @@
 
   void SetTopControlsVisibleHeight(float height);
 
-  viz::SurfaceId GetFallbackSurfaceIdForTesting() const;
-
  private:
   // FrameEvictorClient implementation.
   void EvictDelegatedFrame(