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

Unified Diff: content/browser/renderer_host/ime_adapter_android.cc

Issue 2752113005: Let ImeAdapterAndroid have the same lifecycle as its Java peer (Closed)
Patch Set: s/isValid/mIsConnected/ 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/renderer_host/ime_adapter_android.cc
diff --git a/content/browser/renderer_host/ime_adapter_android.cc b/content/browser/renderer_host/ime_adapter_android.cc
index bb8a938a2b37f261362f96e56819d518d5ee921f..38ff4a7a8f5698c0a3f42cb4781761c9f2c60a27 100644
--- a/content/browser/renderer_host/ime_adapter_android.cc
+++ b/content/browser/renderer_host/ime_adapter_android.cc
@@ -31,6 +31,8 @@
using base::android::AttachCurrentThread;
using base::android::ConvertJavaStringToUTF16;
using base::android::JavaParamRef;
+using base::android::ScopedJavaLocalRef;
+using base::WeakPtr;
namespace content {
namespace {
@@ -63,6 +65,11 @@ bool RegisterImeAdapter(JNIEnv* env) {
return RegisterNativesImpl(env);
}
+jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
+ ImeAdapterAndroid* adapter = new ImeAdapterAndroid(env, obj);
+ return reinterpret_cast<intptr_t>(adapter);
+}
+
// Callback from Java to convert BackgroundColorSpan data to a
// blink::WebCompositionUnderline instance, and append it to |underlines_ptr|.
void AppendBackgroundColorSpan(JNIEnv*,
@@ -105,16 +112,28 @@ void AppendUnderlineSpan(JNIEnv*,
SK_ColorTRANSPARENT));
}
-ImeAdapterAndroid::ImeAdapterAndroid(RenderWidgetHostViewAndroid* rwhva)
- : rwhva_(rwhva) {
- DCHECK(rwhva_);
+ImeAdapterAndroid::ImeAdapterAndroid(JNIEnv* env,
+ const JavaParamRef<jobject>& obj) {
+ java_ime_adapter_ = JavaObjectWeakGlobalRef(env, obj);
}
-ImeAdapterAndroid::~ImeAdapterAndroid() {
+void ImeAdapterAndroid::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) {
+ delete this;
+}
+
+void ImeAdapterAndroid::SetRenderWidgetHostViewAndroid(
+ const WeakPtr<RenderWidgetHostViewAndroid> rwhva) {
+ rwhva_.reset();
+ rwhva_ = rwhva;
JNIEnv* env = AttachCurrentThread();
- base::android::ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
+ ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
if (!obj.is_null())
- Java_ImeAdapter_detach(env, obj);
+ Java_ImeAdapter_onConnectedToRenderProcess(env, obj);
+}
+
+ImeAdapterAndroid::~ImeAdapterAndroid() {
+ if (rwhva_)
+ rwhva_->ConnectImeAdapter(nullptr);
}
bool ImeAdapterAndroid::SendKeyEvent(
@@ -200,25 +219,18 @@ void ImeAdapterAndroid::FinishComposingText(JNIEnv* env,
rwhi->ImeFinishComposingText(true);
}
-void ImeAdapterAndroid::AttachImeAdapter(
- JNIEnv* env,
- const JavaParamRef<jobject>& java_object) {
- java_ime_adapter_ = JavaObjectWeakGlobalRef(env, java_object);
-}
-
void ImeAdapterAndroid::CancelComposition() {
- base::android::ScopedJavaLocalRef<jobject> obj =
- java_ime_adapter_.get(AttachCurrentThread());
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
if (!obj.is_null())
- Java_ImeAdapter_cancelComposition(AttachCurrentThread(), obj);
+ Java_ImeAdapter_cancelComposition(env, obj);
}
void ImeAdapterAndroid::FocusedNodeChanged(bool is_editable_node) {
- base::android::ScopedJavaLocalRef<jobject> obj =
- java_ime_adapter_.get(AttachCurrentThread());
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
if (!obj.is_null()) {
- Java_ImeAdapter_focusedNodeChanged(AttachCurrentThread(), obj,
- is_editable_node);
+ Java_ImeAdapter_focusedNodeChanged(env, obj, is_editable_node);
}
}
@@ -238,7 +250,7 @@ void ImeAdapterAndroid::SetEditableSelectionOffsets(
void ImeAdapterAndroid::SetCharacterBounds(
const std::vector<gfx::RectF>& character_bounds) {
JNIEnv* env = AttachCurrentThread();
- base::android::ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
+ ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
if (obj.is_null())
return;
@@ -316,11 +328,6 @@ void ImeAdapterAndroid::RequestCursorUpdate(
rwhi->GetRoutingID(), immediate_request, monitor_request));
}
-void ImeAdapterAndroid::ResetImeAdapter(JNIEnv* env,
- const JavaParamRef<jobject>&) {
- java_ime_adapter_.reset();
-}
-
RenderWidgetHostImpl* ImeAdapterAndroid::GetFocusedWidget() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
return rwhva_->GetFocusedWidget();

Powered by Google App Engine
This is Rietveld 408576698