| 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();
|
|
|