Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(891)

Unified Diff: content/browser/android/content_view_core_impl.cc

Issue 2752113005: Let ImeAdapterAndroid have the same lifecycle as its Java peer (Closed)
Patch Set: background rwhva Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/android/content_view_core_impl.cc
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index 77e7ab21d9e105d10ec7a6a437e25efc27bd1061..7dbc2779dd4069768116331b5d81b572f2d02c8a 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -29,6 +29,7 @@
#include "content/browser/frame_host/interstitial_page_impl.h"
#include "content/browser/media/media_web_contents_observer.h"
#include "content/browser/renderer_host/compositor_impl_android.h"
+#include "content/browser/renderer_host/ime_adapter_android.h"
#include "content/browser/renderer_host/input/web_input_event_builders_android.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
@@ -209,13 +210,16 @@ ContentViewCoreImpl::ContentViewCoreImpl(
JNIEnv* env,
const JavaRef<jobject>& obj,
WebContents* web_contents,
+ ImeAdapterAndroid* ime_adapter,
float dpi_scale,
const JavaRef<jobject>& java_bridge_retained_object_set)
: WebContentsObserver(web_contents),
java_ref_(env, obj),
web_contents_(static_cast<WebContentsImpl*>(web_contents)),
+ ime_adapter_(ime_adapter),
boliu 2017/03/24 17:13:16 this is backwards If CVC owns ime adapter, then C
Jinsuk Kim 2017/03/27 03:19:33 Assuming that 'creator should be owner' should hol
page_scale_(1),
dpi_scale_(dpi_scale),
+ active_rwhva_(nullptr),
device_orientation_(0),
accessibility_enabled_(false) {
GetViewAndroid()->SetLayer(cc::Layer::Create());
@@ -327,6 +331,7 @@ void ContentViewCoreImpl::InitWebContents() {
}
void ContentViewCoreImpl::RenderViewReady() {
+ active_rwhva_ = GetRenderWidgetHostViewAndroid();
boliu 2017/03/24 17:13:16 need to update this in RenderViewHostChanged as we
Jinsuk Kim 2017/03/27 03:19:33 Done.
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
if (!obj.is_null())
@@ -368,6 +373,19 @@ void ContentViewCoreImpl::RenderViewHostChanged(RenderViewHost* old_host,
SetAccessibilityEnabledInternal(accessibility_enabled_);
}
+void ContentViewCoreImpl::DidAttachInterstitialPage() {
boliu 2017/03/24 17:13:16 should this stuff live in the ImeAdapter instead?
Jinsuk Kim 2017/03/27 03:19:33 Nice. IAA being WebContentsObserver helps decouple
+ if (active_rwhva_)
+ active_rwhva_->ConnectImeAdapter(nullptr);
+ active_rwhva_ = GetRenderWidgetHostViewAndroid();
+}
+
+void ContentViewCoreImpl::DidDetachInterstitialPage() {
+ RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
+ if (rwhv)
+ rwhv->ConnectImeAdapter(ime_adapter());
+ active_rwhva_ = rwhv;
+}
+
RenderWidgetHostViewAndroid*
ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() const {
RenderWidgetHostView* rwhv = NULL;
@@ -1132,25 +1150,7 @@ void ContentViewCoreImpl::WasResized(JNIEnv* env,
SendScreenRectsAndResizeWidget();
}
-long ContentViewCoreImpl::GetNativeImeAdapter(
- JNIEnv* env,
- const JavaParamRef<jobject>& obj) {
- RenderWidgetHostViewAndroid* rwhva = GetRenderWidgetHostViewAndroid();
- if (!rwhva)
- return 0;
- return rwhva->GetNativeImeAdapter();
-}
-
-void ContentViewCoreImpl::ForceUpdateImeAdapter(long native_ime_adapter) {
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (obj.is_null())
- return;
- Java_ContentViewCore_forceUpdateImeAdapter(env, obj, native_ime_adapter);
-}
-
-void ContentViewCoreImpl::UpdateImeAdapter(long native_ime_adapter,
- int text_input_type,
+void ContentViewCoreImpl::UpdateImeAdapter(int text_input_type,
int text_input_flags,
int text_input_mode,
const std::string& text,
@@ -1167,9 +1167,9 @@ void ContentViewCoreImpl::UpdateImeAdapter(long native_ime_adapter,
ScopedJavaLocalRef<jstring> jstring_text = ConvertUTF8ToJavaString(env, text);
Java_ContentViewCore_updateImeAdapter(
- env, obj, native_ime_adapter, text_input_type, text_input_flags,
- text_input_mode, jstring_text, selection_start, selection_end,
- composition_start, composition_end, show_ime_if_needed, reply_to_request);
+ env, obj, text_input_type, text_input_flags, text_input_mode,
+ jstring_text, selection_start, selection_end, composition_start,
+ composition_end, show_ime_if_needed, reply_to_request);
}
void ContentViewCoreImpl::SetAccessibilityEnabled(
@@ -1376,7 +1376,8 @@ jlong Init(JNIEnv* env,
const JavaParamRef<jobject>& jweb_contents,
const JavaParamRef<jobject>& jview_android_delegate,
jlong jwindow_android,
- jfloat dipScale,
+ jlong jime_adapter,
+ jfloat dip_scale,
const JavaParamRef<jobject>& retained_objects_set) {
WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
WebContents::FromJavaWebContents(jweb_contents));
@@ -1391,9 +1392,10 @@ jlong Init(JNIEnv* env,
DCHECK(window_android);
window_android->AddChild(view_android);
- // TODO: pass dipScale.
ContentViewCoreImpl* view = new ContentViewCoreImpl(
- env, obj, web_contents, dipScale, retained_objects_set);
+ env, obj, web_contents,
+ reinterpret_cast<ImeAdapterAndroid*>(jime_adapter), dip_scale,
+ retained_objects_set);
return reinterpret_cast<intptr_t>(view);
}

Powered by Google App Engine
This is Rietveld 408576698