RenderViewHostChanged in WebContentsView

https://crrev.com/c/1112950 didn't quite fix one of the reported bugs
https://crbug.com/854499 about webview not getting key input. This CL
aims to address it by replacing WebContentsView::RenderFrameSwappedIn
with WCV::RenderViewHostChanged, and letting WebContentsImpl call it
upon NotifyViewSwapped.

Verified, with the change above, that updating focus/native view tree
takes effect as expected:
 - Build/install webview apk: ninja -C out/Default webview_system_apk
 - Open Gmail or Amazon app
 - Go to account creation page
 - Verify that click on input form brings up keyboard, and letters
   can be typed in

Bug: 860173, 860235
Change-Id: Iaf2013bcb2990b70ba8197eee86f0ababca54088
Reviewed-on: https://chromium-review.googlesource.com/1126580
Reviewed-by: Charlie Reis <[email protected]>
Commit-Queue: Jinsuk Kim <[email protected]>
Cr-Commit-Position: refs/heads/master@{#574040}
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index c6c9a6e1..58eedf0d 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -4985,6 +4985,8 @@
   for (auto& observer : observers_)
     observer.RenderViewHostChanged(old_host, new_host);
 
+  view_->RenderViewHostChanged(old_host, new_host);
+
   // Ensure that the associated embedder gets cleared after a RenderViewHost
   // gets swapped, so we don't reuse the same embedder next time a
   // RenderViewHost is attached to this WebContents.
@@ -5006,8 +5008,6 @@
 #endif
   for (auto& observer : observers_)
     observer.RenderFrameHostChanged(old_host, new_host);
-
-  view_->RenderFrameSwappedIn(old_host, new_host, is_main_frame);
 }
 
 // TODO(avi): Remove this entire function because this notification is already
diff --git a/content/browser/web_contents/web_contents_view.h b/content/browser/web_contents/web_contents_view.h
index 50047c0..41e44d5d 100644
--- a/content/browser/web_contents/web_contents_view.h
+++ b/content/browser/web_contents/web_contents_view.h
@@ -15,7 +15,6 @@
 #include "ui/gfx/native_widget_types.h"
 
 namespace content {
-class RenderFrameHost;
 class RenderViewHost;
 class RenderWidgetHost;
 class RenderWidgetHostViewBase;
@@ -114,11 +113,10 @@
   // Invoked when the WebContents is notified that the RenderView is ready.
   virtual void RenderViewReady() = 0;
 
-  // Invoked when the WebContents is notified that the RenderFrame has been
-  // swapped in.
-  virtual void RenderFrameSwappedIn(RenderFrameHost* old_host,
-                                    RenderFrameHost* new_host,
-                                    bool is_main_frame) = 0;
+  // Invoked when the WebContents is notified that the RenderViewHost has been
+  // changed.
+  virtual void RenderViewHostChanged(RenderViewHost* old_host,
+                                     RenderViewHost* new_host) = 0;
 
   // Invoked to enable/disable overscroll gesture navigation.
   virtual void SetOverscrollControllerEnabled(bool enabled) = 0;
diff --git a/content/browser/web_contents/web_contents_view_android.cc b/content/browser/web_contents/web_contents_view_android.cc
index 98234b0..8990bc7 100644
--- a/content/browser/web_contents/web_contents_view_android.cc
+++ b/content/browser/web_contents/web_contents_view_android.cc
@@ -279,21 +279,17 @@
   web_contents_->OnScreenOrientationChange();
 }
 
-void WebContentsViewAndroid::RenderFrameSwappedIn(RenderFrameHost* old_host,
-                                                  RenderFrameHost* new_host,
-                                                  bool is_main_frame) {
-  if (!is_main_frame)
-    return;
-
+void WebContentsViewAndroid::RenderViewHostChanged(RenderViewHost* old_host,
+                                                   RenderViewHost* new_host) {
   if (old_host) {
-    auto* rwhv = old_host->GetView();
+    auto* rwhv = old_host->GetWidget()->GetView();
     if (rwhv && rwhv->GetNativeView()) {
       static_cast<RenderWidgetHostViewAndroid*>(rwhv)->UpdateNativeViewTree(
           nullptr);
     }
   }
 
-  auto* rwhv = new_host->GetView();
+  auto* rwhv = new_host->GetWidget()->GetView();
   if (rwhv && rwhv->GetNativeView()) {
     static_cast<RenderWidgetHostViewAndroid*>(rwhv)->UpdateNativeViewTree(
         GetNativeView());
diff --git a/content/browser/web_contents/web_contents_view_android.h b/content/browser/web_contents/web_contents_view_android.h
index 9c8ebbc..088fedea 100644
--- a/content/browser/web_contents/web_contents_view_android.h
+++ b/content/browser/web_contents/web_contents_view_android.h
@@ -81,9 +81,8 @@
   void SetPageTitle(const base::string16& title) override;
   void RenderViewCreated(RenderViewHost* host) override;
   void RenderViewReady() override;
-  void RenderFrameSwappedIn(RenderFrameHost* old_host,
-                            RenderFrameHost* new_host,
-                            bool is_main_frame) override;
+  void RenderViewHostChanged(RenderViewHost* old_host,
+                             RenderViewHost* new_host) override;
   void SetOverscrollControllerEnabled(bool enabled) override;
 
   // Backend implementation of RenderViewHostDelegateView.
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index 4a373e27..713b179 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -845,9 +845,8 @@
 
 void WebContentsViewAura::RenderViewReady() {}
 
-void WebContentsViewAura::RenderFrameSwappedIn(RenderFrameHost* old_host,
-                                               RenderFrameHost* new_host,
-                                               bool is_main_frame) {}
+void WebContentsViewAura::RenderViewHostChanged(RenderViewHost* old_host,
+                                                RenderViewHost* new_host) {}
 
 void WebContentsViewAura::SetOverscrollControllerEnabled(bool enabled) {
   RenderWidgetHostViewAura* view =
diff --git a/content/browser/web_contents/web_contents_view_aura.h b/content/browser/web_contents/web_contents_view_aura.h
index 96f23b8..058f3e0 100644
--- a/content/browser/web_contents/web_contents_view_aura.h
+++ b/content/browser/web_contents/web_contents_view_aura.h
@@ -120,9 +120,8 @@
   void SetPageTitle(const base::string16& title) override;
   void RenderViewCreated(RenderViewHost* host) override;
   void RenderViewReady() override;
-  void RenderFrameSwappedIn(RenderFrameHost* old_host,
-                            RenderFrameHost* new_host,
-                            bool is_main_frame) override;
+  void RenderViewHostChanged(RenderViewHost* old_host,
+                             RenderViewHost* new_host) override;
   void SetOverscrollControllerEnabled(bool enabled) override;
 
   // Overridden from RenderViewHostDelegateView:
diff --git a/content/browser/web_contents/web_contents_view_child_frame.cc b/content/browser/web_contents/web_contents_view_child_frame.cc
index 345059d..688540c 100644
--- a/content/browser/web_contents/web_contents_view_child_frame.cc
+++ b/content/browser/web_contents/web_contents_view_child_frame.cc
@@ -101,9 +101,9 @@
 
 void WebContentsViewChildFrame::RenderViewReady() {}
 
-void WebContentsViewChildFrame::RenderFrameSwappedIn(RenderFrameHost* old_host,
-                                                     RenderFrameHost* new_host,
-                                                     bool is_main_frame) {}
+void WebContentsViewChildFrame::RenderViewHostChanged(
+    RenderViewHost* old_host,
+    RenderViewHost* new_host) {}
 
 void WebContentsViewChildFrame::SetOverscrollControllerEnabled(bool enabled) {
   // This is managed by the outer view.
diff --git a/content/browser/web_contents/web_contents_view_child_frame.h b/content/browser/web_contents/web_contents_view_child_frame.h
index b5b3a22..e5485f56 100644
--- a/content/browser/web_contents/web_contents_view_child_frame.h
+++ b/content/browser/web_contents/web_contents_view_child_frame.h
@@ -46,9 +46,8 @@
   void SetPageTitle(const base::string16& title) override;
   void RenderViewCreated(RenderViewHost* host) override;
   void RenderViewReady() override;
-  void RenderFrameSwappedIn(RenderFrameHost* old_host,
-                            RenderFrameHost* new_host,
-                            bool is_main_frame) override;
+  void RenderViewHostChanged(RenderViewHost* old_host,
+                             RenderViewHost* new_host) override;
   void SetOverscrollControllerEnabled(bool enabled) override;
 #if defined(OS_MACOSX)
   void SetAllowOtherViews(bool allow) override;
diff --git a/content/browser/web_contents/web_contents_view_guest.cc b/content/browser/web_contents/web_contents_view_guest.cc
index 2b272b7f..44c68ed 100644
--- a/content/browser/web_contents/web_contents_view_guest.cc
+++ b/content/browser/web_contents/web_contents_view_guest.cc
@@ -167,10 +167,9 @@
   platform_view_->RenderViewReady();
 }
 
-void WebContentsViewGuest::RenderFrameSwappedIn(RenderFrameHost* old_host,
-                                                RenderFrameHost* new_host,
-                                                bool is_main_frame) {
-  platform_view_->RenderFrameSwappedIn(old_host, new_host, is_main_frame);
+void WebContentsViewGuest::RenderViewHostChanged(RenderViewHost* old_host,
+                                                 RenderViewHost* new_host) {
+  platform_view_->RenderViewHostChanged(old_host, new_host);
 }
 
 void WebContentsViewGuest::SetOverscrollControllerEnabled(bool enabled) {
diff --git a/content/browser/web_contents/web_contents_view_guest.h b/content/browser/web_contents/web_contents_view_guest.h
index 6f65cc8..9e3511a 100644
--- a/content/browser/web_contents/web_contents_view_guest.h
+++ b/content/browser/web_contents/web_contents_view_guest.h
@@ -64,9 +64,8 @@
   void SetPageTitle(const base::string16& title) override;
   void RenderViewCreated(RenderViewHost* host) override;
   void RenderViewReady() override;
-  void RenderFrameSwappedIn(RenderFrameHost* old_host,
-                            RenderFrameHost* new_host,
-                            bool is_main_frame) override;
+  void RenderViewHostChanged(RenderViewHost* old_host,
+                             RenderViewHost* new_host) override;
   void SetOverscrollControllerEnabled(bool enabled) override;
 #if defined(OS_MACOSX)
   void SetAllowOtherViews(bool allow) override;
diff --git a/content/browser/web_contents/web_contents_view_mac.h b/content/browser/web_contents/web_contents_view_mac.h
index 15f03ba..cf3305f9 100644
--- a/content/browser/web_contents/web_contents_view_mac.h
+++ b/content/browser/web_contents/web_contents_view_mac.h
@@ -99,9 +99,8 @@
   void SetPageTitle(const base::string16& title) override;
   void RenderViewCreated(RenderViewHost* host) override;
   void RenderViewReady() override;
-  void RenderFrameSwappedIn(RenderFrameHost* old_host,
-                            RenderFrameHost* new_host,
-                            bool is_main_frame) override;
+  void RenderViewHostChanged(RenderViewHost* old_host,
+                             RenderViewHost* new_host) override;
   void SetOverscrollControllerEnabled(bool enabled) override;
   bool IsEventTracking() const override;
   void CloseTabAfterEventTracking() override;
diff --git a/content/browser/web_contents/web_contents_view_mac.mm b/content/browser/web_contents/web_contents_view_mac.mm
index 4da80f3..38ba439 100644
--- a/content/browser/web_contents/web_contents_view_mac.mm
+++ b/content/browser/web_contents/web_contents_view_mac.mm
@@ -425,9 +425,8 @@
 
 void WebContentsViewMac::RenderViewReady() {}
 
-void WebContentsViewMac::RenderFrameSwappedIn(RenderFrameHost* old_host,
-                                              RenderFrameHost* new_host,
-                                              bool is_main_frame) {}
+void WebContentsViewMac::RenderViewHostChanged(RenderViewHost* old_host,
+                                               RenderViewHost* new_host) {}
 
 void WebContentsViewMac::SetOverscrollControllerEnabled(bool enabled) {
 }