Migrate from RVO::Navigate to RFO::ReadyToCommitNavigation

These two callbacks are called at approximately the same time,
and we can use the more common one (ReadyToCommitNavigation) instead
of an outlier (Navigate).

This leaves a single client of RVO::Navigate, which can be removed
in a follow up. ChromeRenderViewObserver can be removed as well.

Bug: none
Change-Id: I0e2a046f11f451c0a1e952a44a0e84236bf93c53
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1576012
Reviewed-by: Camille Lamy <clamy@chromium.org>
Reviewed-by: David Roger <droger@chromium.org>
Commit-Queue: Dmitry Gozman <dgozman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#653175}
diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn
index 44798c35..04f84d2 100644
--- a/chrome/renderer/BUILD.gn
+++ b/chrome/renderer/BUILD.gn
@@ -51,8 +51,6 @@
     "chrome_render_frame_observer.h",
     "chrome_render_thread_observer.cc",
     "chrome_render_thread_observer.h",
-    "chrome_render_view_observer.cc",
-    "chrome_render_view_observer.h",
     "content_settings_observer.cc",
     "content_settings_observer.h",
     "custom_menu_commands.h",
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 202376e..673b95d 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -46,7 +46,6 @@
 #include "chrome/renderer/benchmarking_extension.h"
 #include "chrome/renderer/chrome_render_frame_observer.h"
 #include "chrome/renderer/chrome_render_thread_observer.h"
-#include "chrome/renderer/chrome_render_view_observer.h"
 #include "chrome/renderer/content_settings_observer.h"
 #include "chrome/renderer/loadtimes_extension_bindings.h"
 #include "chrome/renderer/media/flash_embed_rewrite.h"
@@ -437,7 +436,7 @@
 void ChromeContentRendererClient::RenderFrameCreated(
     content::RenderFrame* render_frame) {
   ChromeRenderFrameObserver* render_frame_observer =
-      new ChromeRenderFrameObserver(render_frame);
+      new ChromeRenderFrameObserver(render_frame, web_cache_impl_.get());
   service_manager::BinderRegistry* registry = render_frame_observer->registry();
 
   bool should_whitelist_for_content_settings =
@@ -567,8 +566,6 @@
 void ChromeContentRendererClient::RenderViewCreated(
     content::RenderView* render_view) {
   new prerender::PrerendererClient(render_view);
-
-  new ChromeRenderViewObserver(render_view, web_cache_impl_.get());
 }
 
 SkBitmap* ChromeContentRendererClient::GetSadPluginBitmap() {
diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc
index bc5fa16..0edcddc9 100644
--- a/chrome/renderer/chrome_render_frame_observer.cc
+++ b/chrome/renderer/chrome_render_frame_observer.cc
@@ -29,6 +29,7 @@
 #include "components/crash/core/common/crash_key.h"
 #include "components/offline_pages/buildflags/buildflags.h"
 #include "components/translate/content/renderer/translate_helper.h"
+#include "components/web_cache/renderer/web_cache_impl.h"
 #include "content/public/common/bindings_policy.h"
 #include "content/public/renderer/render_frame.h"
 #include "content/public/renderer/render_view.h"
@@ -137,10 +138,12 @@
 }  // namespace
 
 ChromeRenderFrameObserver::ChromeRenderFrameObserver(
-    content::RenderFrame* render_frame)
+    content::RenderFrame* render_frame,
+    web_cache::WebCacheImpl* web_cache_impl)
     : content::RenderFrameObserver(render_frame),
       translate_helper_(nullptr),
-      phishing_classifier_(nullptr) {
+      phishing_classifier_(nullptr),
+      web_cache_impl_(web_cache_impl) {
   render_frame->GetAssociatedInterfaceRegistry()->AddInterface(
       base::Bind(&ChromeRenderFrameObserver::OnRenderFrameObserverRequest,
                  base::Unretained(this)));
@@ -377,6 +380,11 @@
 
 void ChromeRenderFrameObserver::ReadyToCommitNavigation(
     WebDocumentLoader* document_loader) {
+  // Execute cache clear operations that were postponed until a navigation
+  // event (including tab reload).
+  if (render_frame()->IsMainFrame() && web_cache_impl_)
+    web_cache_impl_->ExecutePendingClearCache();
+
   // Let translate_helper do any preparatory work for loading a URL.
   if (!translate_helper_)
     return;
diff --git a/chrome/renderer/chrome_render_frame_observer.h b/chrome/renderer/chrome_render_frame_observer.h
index 65d080f..7f4d9b27 100644
--- a/chrome/renderer/chrome_render_frame_observer.h
+++ b/chrome/renderer/chrome_render_frame_observer.h
@@ -28,12 +28,17 @@
 class TranslateHelper;
 }
 
+namespace web_cache {
+class WebCacheImpl;
+}
+
 // This class holds the Chrome specific parts of RenderFrame, and has the same
 // lifetime.
 class ChromeRenderFrameObserver : public content::RenderFrameObserver,
                                   public chrome::mojom::ChromeRenderFrame {
  public:
-  explicit ChromeRenderFrameObserver(content::RenderFrame* render_frame);
+  ChromeRenderFrameObserver(content::RenderFrame* render_frame,
+                            web_cache::WebCacheImpl* web_cache_impl);
   ~ChromeRenderFrameObserver() override;
 
   service_manager::BinderRegistry* registry() { return &registry_; }
@@ -105,6 +110,8 @@
   translate::TranslateHelper* translate_helper_;
   safe_browsing::PhishingClassifierDelegate* phishing_classifier_;
 
+  // Owned by ChromeContentRendererClient and outlive us.
+  web_cache::WebCacheImpl* web_cache_impl_;
 
 #if !defined(OS_ANDROID)
   // Save the JavaScript to preload if ExecuteWebUIJavaScript is invoked.
diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc
deleted file mode 100644
index f38858c..0000000
--- a/chrome/renderer/chrome_render_view_observer.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/renderer/chrome_render_view_observer.h"
-
-#include "components/web_cache/renderer/web_cache_impl.h"
-
-ChromeRenderViewObserver::ChromeRenderViewObserver(
-    content::RenderView* render_view,
-    web_cache::WebCacheImpl* web_cache_impl)
-    : content::RenderViewObserver(render_view),
-      web_cache_impl_(web_cache_impl) {}
-
-ChromeRenderViewObserver::~ChromeRenderViewObserver() {
-}
-
-void ChromeRenderViewObserver::Navigate(const GURL& url) {
-  // Execute cache clear operations that were postponed until a navigation
-  // event (including tab reload).
-  if (web_cache_impl_)
-    web_cache_impl_->ExecutePendingClearCache();
-}
-
-void ChromeRenderViewObserver::OnDestruct() {
-  delete this;
-}
diff --git a/chrome/renderer/chrome_render_view_observer.h b/chrome/renderer/chrome_render_view_observer.h
deleted file mode 100644
index c6090ea6..0000000
--- a/chrome/renderer/chrome_render_view_observer.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_
-#define CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_
-
-#include <string>
-
-#include "base/macros.h"
-#include "content/public/common/browser_controls_state.h"
-#include "content/public/renderer/render_view_observer.h"
-#include "url/gurl.h"
-
-namespace web_cache {
-class WebCacheImpl;
-}
-
-// This class holds the Chrome specific parts of RenderView, and has the same
-// lifetime.
-class ChromeRenderViewObserver : public content::RenderViewObserver {
- public:
-  // translate_helper can be NULL.
-  ChromeRenderViewObserver(
-      content::RenderView* render_view,
-      web_cache::WebCacheImpl* web_cache_render_thread_observer);
-  ~ChromeRenderViewObserver() override;
-
- private:
-  // RenderViewObserver implementation.
-  void Navigate(const GURL& url) override;
-  void OnDestruct() override;
-
-  // Determines if a host is in the strict security host set.
-  bool IsStrictSecurityHost(const std::string& host);
-
-  // Owned by ChromeContentRendererClient and outlive us.
-  web_cache::WebCacheImpl* web_cache_impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(ChromeRenderViewObserver);
-};
-
-#endif  // CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_