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(
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
ContentViewCore::ContentViewCore(JNIEnv* env,
......@@ -51,7 +44,6 @@ ContentViewCore::ContentViewCore(JNIEnv* env,
web_contents_(static_cast<WebContentsImpl*>(web_contents)),
dpi_scale_(dpi_scale),
device_orientation_(0) {
GetViewAndroid()->SetLayer(cc::Layer::Create());
// Currently, the only use case we have for overriding a user agent involves
// spoofing a desktop Linux user agent for "Request desktop site".
......@@ -62,8 +54,6 @@ ContentViewCore::ContentViewCore(JNIEnv* env,
std::string spoofed_ua =
BuildUserAgentFromOSAndProduct(kLinuxInfoStr, product);
web_contents->SetUserAgentOverride(spoofed_ua, false);
InitWebContents();
}
ContentViewCore::~ContentViewCore() {
......@@ -100,16 +90,7 @@ void ContentViewCore::OnJavaContentViewCoreDestroyed(
java_ref_.reset();
// Java peer has gone, ContentViewCore is not functional and waits to
// 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_);
SetContentViewCore(web_contents(), this);
}
void ContentViewCore::RenderViewReady() {
......@@ -117,6 +98,10 @@ void ContentViewCore::RenderViewReady() {
SendOrientationChangeEventInternal();
}
void ContentViewCore::WebContentsDestroyed() {
delete this;
}
void ContentViewCore::RenderViewHostChanged(RenderViewHost* old_host,
RenderViewHost* new_host) {
if (old_host) {
......@@ -147,11 +132,6 @@ RenderWidgetHostViewAndroid* ContentViewCore::GetRenderWidgetHostViewAndroid()
return static_cast<RenderWidgetHostViewAndroid*>(rwhv);
}
ScopedJavaLocalRef<jobject> ContentViewCore::GetJavaObject() {
JNIEnv* env = AttachCurrentThread();
return java_ref_.get(env);
}
void ContentViewCore::SendScreenRectsAndResizeWidget() {
RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid();
if (view) {
......@@ -173,10 +153,6 @@ ui::ViewAndroid* ContentViewCore::GetViewAndroid() const {
// Methods called from Java via JNI
// ----------------------------------------------------------------------------
WebContents* ContentViewCore::GetWebContents() const {
return web_contents_;
}
void ContentViewCore::SetFocus(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jboolean focused) {
......
......@@ -30,10 +30,6 @@ class ContentViewCore : public WebContentsObserver {
~ContentViewCore() override;
base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
WebContents* GetWebContents() const;
ui::WindowAndroid* GetWindowAndroid() const;
// --------------------------------------------------------------------------
// Methods called from Java via JNI
// --------------------------------------------------------------------------
......@@ -76,22 +72,23 @@ class ContentViewCore : public WebContentsObserver {
const base::android::JavaParamRef<jobject>& obj,
jfloat dipScale);
ui::ViewAndroid* GetViewAndroid() const;
private:
// WebContentsObserver implementation.
void RenderViewReady() override;
void RenderViewHostChanged(RenderViewHost* old_host,
RenderViewHost* new_host) override;
void WebContentsDestroyed() override;
// --------------------------------------------------------------------------
// Other private methods and data
// --------------------------------------------------------------------------
void InitWebContents();
void SendScreenRectsAndResizeWidget();
ui::ViewAndroid* GetViewAndroid() const;
ui::WindowAndroid* GetWindowAndroid() const;
RenderWidgetHostViewAndroid* GetRenderWidgetHostViewAndroid() const;
// Update focus state of the RenderWidgetHostView.
......@@ -100,8 +97,6 @@ class ContentViewCore : public WebContentsObserver {
// Send device_orientation_ to renderer.
void SendOrientationChangeEventInternal();
float dpi_scale() const { return dpi_scale_; }
// A weak reference to the Java ContentViewCore object.
JavaObjectWeakGlobalRef java_ref_;
......
......@@ -11,7 +11,6 @@
#include "cc/layers/layer.h"
#include "content/browser/accessibility/browser_accessibility_manager_android.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/select_popup.h"
#include "content/browser/android/selection/selection_popup_controller.h"
......@@ -105,32 +104,15 @@ WebContentsViewAndroid::WebContentsViewAndroid(
: web_contents_(web_contents),
delegate_(delegate),
view_(this, ui::ViewAndroid::LayoutType::NORMAL),
synchronous_compositor_client_(nullptr) {}
synchronous_compositor_client_(nullptr) {
view_.SetLayer(cc::Layer::Create());
}
WebContentsViewAndroid::~WebContentsViewAndroid() {
if (view_.GetLayer())
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(
std::unique_ptr<SelectPopup> select_popup) {
select_popup_ = std::move(select_popup);
......@@ -180,7 +162,7 @@ WebContentsViewAndroid::GetRenderWidgetHostViewAndroid() {
}
gfx::NativeWindow WebContentsViewAndroid::GetTopLevelNativeWindow() const {
return content_view_core_ ? content_view_core_->GetWindowAndroid() : nullptr;
return view_.GetWindowAndroid();
}
void WebContentsViewAndroid::GetContainerBounds(gfx::Rect* out) const {
......@@ -267,9 +249,7 @@ RenderWidgetHostViewBase* WebContentsViewAndroid::CreateViewForWidget(
// order to paint it. See ContentView::GetRenderWidgetHostViewAndroid for an
// example of how this is achieved for InterstitialPages.
RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(render_widget_host);
gfx::NativeView native_view = content_view_core_ ? &view_ : nullptr;
RenderWidgetHostViewAndroid* rwhv =
new RenderWidgetHostViewAndroid(rwhi, native_view);
auto* rwhv = new RenderWidgetHostViewAndroid(rwhi, &view_);
rwhv->SetSynchronousCompositorClient(synchronous_compositor_client_);
return rwhv;
}
......
......@@ -19,7 +19,6 @@
#include "ui/gfx/geometry/rect_f.h"
namespace content {
class ContentViewCore;
class RenderWidgetHostViewAndroid;
class SelectPopup;
class SelectionPopupController;
......@@ -35,9 +34,6 @@ class WebContentsViewAndroid : public WebContentsView,
WebContentsViewDelegate* delegate);
~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.
void SetSelectPopup(std::unique_ptr<SelectPopup> select_popup);
......@@ -133,9 +129,6 @@ class WebContentsViewAndroid : public WebContentsView,
// The WebContents whose contents we display.
WebContentsImpl* web_contents_;
// ContentViewCore is our interface to the view system.
std::unique_ptr<ContentViewCore> content_view_core_;
// Handles "overscroll to refresh" events
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