Commit 02828806 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: Native ContentViewCore owns itself

This CL removes all the dependencies on ContentViewCore in native
world. Rather than WebContentsViewAndroid owning it, ContentViewCore
owns and deletes itself by way of a WebContentsObserver notification.
Also removes a few methods that are not in use any more.

Bug: 598880
Change-Id: Ib8bcfdf3cb39332ea3f0f3186c3692ce67d82704
Reviewed-on: https://chromium-review.googlesource.com/999455
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#550008}
parent 1b6a689b
...@@ -33,13 +33,6 @@ RenderWidgetHostViewAndroid* GetRenderWidgetHostViewFromHost( ...@@ -33,13 +33,6 @@ RenderWidgetHostViewAndroid* GetRenderWidgetHostViewFromHost(
host->GetWidget()->GetView()); host->GetWidget()->GetView());
} }
void SetContentViewCore(WebContents* web_contents, ContentViewCore* cvc) {
WebContentsViewAndroid* wcva = static_cast<WebContentsViewAndroid*>(
static_cast<WebContentsImpl*>(web_contents)->GetView());
DCHECK(wcva);
wcva->SetContentViewCore(cvc);
}
} // namespace } // namespace
ContentViewCore::ContentViewCore(JNIEnv* env, ContentViewCore::ContentViewCore(JNIEnv* env,
...@@ -51,7 +44,6 @@ ContentViewCore::ContentViewCore(JNIEnv* env, ...@@ -51,7 +44,6 @@ ContentViewCore::ContentViewCore(JNIEnv* env,
web_contents_(static_cast<WebContentsImpl*>(web_contents)), web_contents_(static_cast<WebContentsImpl*>(web_contents)),
dpi_scale_(dpi_scale), dpi_scale_(dpi_scale),
device_orientation_(0) { device_orientation_(0) {
GetViewAndroid()->SetLayer(cc::Layer::Create());
// Currently, the only use case we have for overriding a user agent involves // Currently, the only use case we have for overriding a user agent involves
// spoofing a desktop Linux user agent for "Request desktop site". // spoofing a desktop Linux user agent for "Request desktop site".
...@@ -62,8 +54,6 @@ ContentViewCore::ContentViewCore(JNIEnv* env, ...@@ -62,8 +54,6 @@ ContentViewCore::ContentViewCore(JNIEnv* env,
std::string spoofed_ua = std::string spoofed_ua =
BuildUserAgentFromOSAndProduct(kLinuxInfoStr, product); BuildUserAgentFromOSAndProduct(kLinuxInfoStr, product);
web_contents->SetUserAgentOverride(spoofed_ua, false); web_contents->SetUserAgentOverride(spoofed_ua, false);
InitWebContents();
} }
ContentViewCore::~ContentViewCore() { ContentViewCore::~ContentViewCore() {
...@@ -100,16 +90,7 @@ void ContentViewCore::OnJavaContentViewCoreDestroyed( ...@@ -100,16 +90,7 @@ void ContentViewCore::OnJavaContentViewCoreDestroyed(
java_ref_.reset(); java_ref_.reset();
// Java peer has gone, ContentViewCore is not functional and waits to // Java peer has gone, ContentViewCore is not functional and waits to
// be destroyed with WebContents. // be destroyed with WebContents.
// We need to reset WebContentsViewAndroid's reference, otherwise, there
// could have call in when swapping the WebContents,
// see http://crbug.com/383939 .
DCHECK(web_contents_);
SetContentViewCore(web_contents(), nullptr);
}
void ContentViewCore::InitWebContents() {
DCHECK(web_contents_); DCHECK(web_contents_);
SetContentViewCore(web_contents(), this);
} }
void ContentViewCore::RenderViewReady() { void ContentViewCore::RenderViewReady() {
...@@ -117,6 +98,10 @@ void ContentViewCore::RenderViewReady() { ...@@ -117,6 +98,10 @@ void ContentViewCore::RenderViewReady() {
SendOrientationChangeEventInternal(); SendOrientationChangeEventInternal();
} }
void ContentViewCore::WebContentsDestroyed() {
delete this;
}
void ContentViewCore::RenderViewHostChanged(RenderViewHost* old_host, void ContentViewCore::RenderViewHostChanged(RenderViewHost* old_host,
RenderViewHost* new_host) { RenderViewHost* new_host) {
if (old_host) { if (old_host) {
...@@ -147,11 +132,6 @@ RenderWidgetHostViewAndroid* ContentViewCore::GetRenderWidgetHostViewAndroid() ...@@ -147,11 +132,6 @@ RenderWidgetHostViewAndroid* ContentViewCore::GetRenderWidgetHostViewAndroid()
return static_cast<RenderWidgetHostViewAndroid*>(rwhv); return static_cast<RenderWidgetHostViewAndroid*>(rwhv);
} }
ScopedJavaLocalRef<jobject> ContentViewCore::GetJavaObject() {
JNIEnv* env = AttachCurrentThread();
return java_ref_.get(env);
}
void ContentViewCore::SendScreenRectsAndResizeWidget() { void ContentViewCore::SendScreenRectsAndResizeWidget() {
RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid();
if (view) { if (view) {
...@@ -173,10 +153,6 @@ ui::ViewAndroid* ContentViewCore::GetViewAndroid() const { ...@@ -173,10 +153,6 @@ ui::ViewAndroid* ContentViewCore::GetViewAndroid() const {
// Methods called from Java via JNI // Methods called from Java via JNI
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
WebContents* ContentViewCore::GetWebContents() const {
return web_contents_;
}
void ContentViewCore::SetFocus(JNIEnv* env, void ContentViewCore::SetFocus(JNIEnv* env,
const JavaParamRef<jobject>& obj, const JavaParamRef<jobject>& obj,
jboolean focused) { jboolean focused) {
......
...@@ -30,10 +30,6 @@ class ContentViewCore : public WebContentsObserver { ...@@ -30,10 +30,6 @@ class ContentViewCore : public WebContentsObserver {
~ContentViewCore() override; ~ContentViewCore() override;
base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
WebContents* GetWebContents() const;
ui::WindowAndroid* GetWindowAndroid() const;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Methods called from Java via JNI // Methods called from Java via JNI
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -76,22 +72,23 @@ class ContentViewCore : public WebContentsObserver { ...@@ -76,22 +72,23 @@ class ContentViewCore : public WebContentsObserver {
const base::android::JavaParamRef<jobject>& obj, const base::android::JavaParamRef<jobject>& obj,
jfloat dipScale); jfloat dipScale);
ui::ViewAndroid* GetViewAndroid() const;
private: private:
// WebContentsObserver implementation. // WebContentsObserver implementation.
void RenderViewReady() override; void RenderViewReady() override;
void RenderViewHostChanged(RenderViewHost* old_host, void RenderViewHostChanged(RenderViewHost* old_host,
RenderViewHost* new_host) override; RenderViewHost* new_host) override;
void WebContentsDestroyed() override;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Other private methods and data // Other private methods and data
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void InitWebContents();
void SendScreenRectsAndResizeWidget(); void SendScreenRectsAndResizeWidget();
ui::ViewAndroid* GetViewAndroid() const;
ui::WindowAndroid* GetWindowAndroid() const;
RenderWidgetHostViewAndroid* GetRenderWidgetHostViewAndroid() const; RenderWidgetHostViewAndroid* GetRenderWidgetHostViewAndroid() const;
// Update focus state of the RenderWidgetHostView. // Update focus state of the RenderWidgetHostView.
...@@ -100,8 +97,6 @@ class ContentViewCore : public WebContentsObserver { ...@@ -100,8 +97,6 @@ class ContentViewCore : public WebContentsObserver {
// Send device_orientation_ to renderer. // Send device_orientation_ to renderer.
void SendOrientationChangeEventInternal(); void SendOrientationChangeEventInternal();
float dpi_scale() const { return dpi_scale_; }
// A weak reference to the Java ContentViewCore object. // A weak reference to the Java ContentViewCore object.
JavaObjectWeakGlobalRef java_ref_; JavaObjectWeakGlobalRef java_ref_;
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "cc/layers/layer.h" #include "cc/layers/layer.h"
#include "content/browser/accessibility/browser_accessibility_manager_android.h" #include "content/browser/accessibility/browser_accessibility_manager_android.h"
#include "content/browser/android/content_feature_list.h" #include "content/browser/android/content_feature_list.h"
#include "content/browser/android/content_view_core.h"
#include "content/browser/android/gesture_listener_manager.h" #include "content/browser/android/gesture_listener_manager.h"
#include "content/browser/android/select_popup.h" #include "content/browser/android/select_popup.h"
#include "content/browser/android/selection/selection_popup_controller.h" #include "content/browser/android/selection/selection_popup_controller.h"
...@@ -105,32 +104,15 @@ WebContentsViewAndroid::WebContentsViewAndroid( ...@@ -105,32 +104,15 @@ WebContentsViewAndroid::WebContentsViewAndroid(
: web_contents_(web_contents), : web_contents_(web_contents),
delegate_(delegate), delegate_(delegate),
view_(this, ui::ViewAndroid::LayoutType::NORMAL), view_(this, ui::ViewAndroid::LayoutType::NORMAL),
synchronous_compositor_client_(nullptr) {} synchronous_compositor_client_(nullptr) {
view_.SetLayer(cc::Layer::Create());
}
WebContentsViewAndroid::~WebContentsViewAndroid() { WebContentsViewAndroid::~WebContentsViewAndroid() {
if (view_.GetLayer()) if (view_.GetLayer())
view_.GetLayer()->RemoveFromParent(); view_.GetLayer()->RemoveFromParent();
} }
void WebContentsViewAndroid::SetContentViewCore(ContentViewCore* cvc) {
if (content_view_core_.get() != cvc)
content_view_core_.reset(cvc);
RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
if (rwhv)
rwhv->UpdateNativeViewTree(cvc ? &view_ : nullptr);
if (web_contents_->ShowingInterstitialPage()) {
rwhv = static_cast<RenderWidgetHostViewAndroid*>(
web_contents_->GetInterstitialPage()
->GetMainFrame()
->GetRenderViewHost()
->GetWidget()
->GetView());
if (rwhv)
rwhv->UpdateNativeViewTree(cvc ? &view_ : nullptr);
}
}
void WebContentsViewAndroid::SetSelectPopup( void WebContentsViewAndroid::SetSelectPopup(
std::unique_ptr<SelectPopup> select_popup) { std::unique_ptr<SelectPopup> select_popup) {
select_popup_ = std::move(select_popup); select_popup_ = std::move(select_popup);
...@@ -180,7 +162,7 @@ WebContentsViewAndroid::GetRenderWidgetHostViewAndroid() { ...@@ -180,7 +162,7 @@ WebContentsViewAndroid::GetRenderWidgetHostViewAndroid() {
} }
gfx::NativeWindow WebContentsViewAndroid::GetTopLevelNativeWindow() const { gfx::NativeWindow WebContentsViewAndroid::GetTopLevelNativeWindow() const {
return content_view_core_ ? content_view_core_->GetWindowAndroid() : nullptr; return view_.GetWindowAndroid();
} }
void WebContentsViewAndroid::GetContainerBounds(gfx::Rect* out) const { void WebContentsViewAndroid::GetContainerBounds(gfx::Rect* out) const {
...@@ -267,9 +249,7 @@ RenderWidgetHostViewBase* WebContentsViewAndroid::CreateViewForWidget( ...@@ -267,9 +249,7 @@ RenderWidgetHostViewBase* WebContentsViewAndroid::CreateViewForWidget(
// order to paint it. See ContentView::GetRenderWidgetHostViewAndroid for an // order to paint it. See ContentView::GetRenderWidgetHostViewAndroid for an
// example of how this is achieved for InterstitialPages. // example of how this is achieved for InterstitialPages.
RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(render_widget_host); RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(render_widget_host);
gfx::NativeView native_view = content_view_core_ ? &view_ : nullptr; auto* rwhv = new RenderWidgetHostViewAndroid(rwhi, &view_);
RenderWidgetHostViewAndroid* rwhv =
new RenderWidgetHostViewAndroid(rwhi, native_view);
rwhv->SetSynchronousCompositorClient(synchronous_compositor_client_); rwhv->SetSynchronousCompositorClient(synchronous_compositor_client_);
return rwhv; return rwhv;
} }
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/geometry/rect_f.h"
namespace content { namespace content {
class ContentViewCore;
class RenderWidgetHostViewAndroid; class RenderWidgetHostViewAndroid;
class SelectPopup; class SelectPopup;
class SelectionPopupController; class SelectionPopupController;
...@@ -35,9 +34,6 @@ class WebContentsViewAndroid : public WebContentsView, ...@@ -35,9 +34,6 @@ class WebContentsViewAndroid : public WebContentsView,
WebContentsViewDelegate* delegate); WebContentsViewDelegate* delegate);
~WebContentsViewAndroid() override; ~WebContentsViewAndroid() override;
// Sets the interface to the view system.
void SetContentViewCore(ContentViewCore* content_view_core);
// Sets the object that show/hide popup view for <select> tag. // Sets the object that show/hide popup view for <select> tag.
void SetSelectPopup(std::unique_ptr<SelectPopup> select_popup); void SetSelectPopup(std::unique_ptr<SelectPopup> select_popup);
...@@ -133,9 +129,6 @@ class WebContentsViewAndroid : public WebContentsView, ...@@ -133,9 +129,6 @@ class WebContentsViewAndroid : public WebContentsView,
// The WebContents whose contents we display. // The WebContents whose contents we display.
WebContentsImpl* web_contents_; WebContentsImpl* web_contents_;
// ContentViewCore is our interface to the view system.
std::unique_ptr<ContentViewCore> content_view_core_;
// Handles "overscroll to refresh" events // Handles "overscroll to refresh" events
std::unique_ptr<ui::OverscrollRefreshHandler> overscroll_refresh_handler_; std::unique_ptr<ui::OverscrollRefreshHandler> overscroll_refresh_handler_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment