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) {
}