Chromium Code Reviews| Index: content/browser/android/ime_adapter_android.cc |
| diff --git a/content/browser/android/ime_adapter_android.cc b/content/browser/android/ime_adapter_android.cc |
| index 695e53727c802388abe4594840a74010db712c56..4e0a08e74410494f6cd4e2fa1afed76aa1de4e24 100644 |
| --- a/content/browser/android/ime_adapter_android.cc |
| +++ b/content/browser/android/ime_adapter_android.cc |
| @@ -14,12 +14,10 @@ |
| #include "base/android/scoped_java_ref.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/time/time.h" |
| -#include "content/browser/frame_host/interstitial_page_impl.h" |
| #include "content/browser/frame_host/render_frame_host_impl.h" |
| #include "content/browser/renderer_host/render_view_host_delegate.h" |
| #include "content/browser/renderer_host/render_widget_host_impl.h" |
| #include "content/browser/renderer_host/render_widget_host_view_android.h" |
| -#include "content/browser/web_contents/web_contents_impl.h" |
| #include "content/common/input_messages.h" |
| #include "content/common/view_messages.h" |
| #include "content/public/browser/browser_thread.h" |
| @@ -115,7 +113,7 @@ void AppendUnderlineSpan(JNIEnv*, |
| ImeAdapterAndroid::ImeAdapterAndroid(JNIEnv* env, |
| const JavaParamRef<jobject>& obj, |
| WebContents* web_contents) |
| - : WebContentsObserver(web_contents), rwhva_(nullptr) { |
| + : RenderProcessConnector(web_contents) { |
| java_ime_adapter_ = JavaObjectWeakGlobalRef(env, obj); |
| } |
| @@ -124,68 +122,24 @@ ImeAdapterAndroid::~ImeAdapterAndroid() { |
| ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env); |
| if (!obj.is_null()) |
| Java_ImeAdapter_destroy(env, obj); |
| - |
| - UpdateRenderProcessConnection(nullptr); |
| -} |
| - |
| -RenderWidgetHostViewAndroid* ImeAdapterAndroid::GetRenderWidgetHostViewAndroid() |
| - const { |
| - RenderWidgetHostView* rwhv = web_contents()->GetRenderWidgetHostView(); |
| - WebContentsImpl* web_contents_impl = |
| - static_cast<WebContentsImpl*>(web_contents()); |
| - if (web_contents_impl->ShowingInterstitialPage()) { |
| - rwhv = web_contents_impl->GetInterstitialPage() |
| - ->GetMainFrame() |
| - ->GetRenderViewHost() |
| - ->GetWidget() |
| - ->GetView(); |
| - } |
| - return static_cast<RenderWidgetHostViewAndroid*>(rwhv); |
| + UpdateRenderProcessConnection(rwhva(), nullptr); |
|
boliu
2017/04/07 18:47:10
I think RenderProcessConnector can do this part as
Jinsuk Kim
2017/04/10 05:11:47
Good catch.. done.
|
| } |
| void ImeAdapterAndroid::RenderViewReady() { |
| - UpdateRenderProcessConnection(GetRenderWidgetHostViewAndroid()); |
| - |
| + RenderProcessConnector::RenderViewReady(); |
|
boliu
2017/04/07 18:47:10
shouldn't this just be the first call of UpdateRen
Jinsuk Kim
2017/04/10 05:11:47
In the new patch it is not necessary to override |
|
| JNIEnv* env = AttachCurrentThread(); |
| ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env); |
| if (!obj.is_null()) |
| Java_ImeAdapter_onConnectedToRenderProcess(env, obj); |
| } |
| -void ImeAdapterAndroid::RenderViewHostChanged(RenderViewHost* old_host, |
| - RenderViewHost* new_host) { |
| - if (new_host) { |
| - UpdateRenderProcessConnection(static_cast<RenderWidgetHostViewAndroid*>( |
| - new_host->GetWidget()->GetView())); |
| - } else { |
| - UpdateRenderProcessConnection(nullptr); |
| - } |
| -} |
| - |
| -void ImeAdapterAndroid::DidAttachInterstitialPage() { |
| - UpdateRenderProcessConnection(GetRenderWidgetHostViewAndroid()); |
| -} |
| - |
| -void ImeAdapterAndroid::DidDetachInterstitialPage() { |
| - UpdateRenderProcessConnection(GetRenderWidgetHostViewAndroid()); |
| -} |
| - |
| -void ImeAdapterAndroid::WebContentsDestroyed() { |
| - delete this; |
| -} |
| - |
| void ImeAdapterAndroid::UpdateRenderProcessConnection( |
| + RenderWidgetHostViewAndroid* old_rwhva, |
| RenderWidgetHostViewAndroid* new_rwhva) { |
| - if (rwhva_.get() == new_rwhva) |
| - return; |
| - if (rwhva_) |
| - rwhva_->set_ime_adapter(nullptr); |
| - if (new_rwhva) { |
| + if (old_rwhva) |
| + old_rwhva->set_ime_adapter(nullptr); |
| + if (new_rwhva) |
| new_rwhva->set_ime_adapter(this); |
| - rwhva_ = new_rwhva->GetWeakPtrAndroid(); |
| - } else { |
| - rwhva_.reset(); |
| - } |
| } |
| void ImeAdapterAndroid::UpdateState(const TextInputState& state) { |
| @@ -214,12 +168,12 @@ bool ImeAdapterAndroid::SendKeyEvent( |
| int scan_code, |
| bool is_system_key, |
| int unicode_char) { |
| - if (!rwhva_) |
| + if (!rwhva()) |
| return false; |
| NativeWebKeyboardEvent event = NativeWebKeyboardEventFromKeyEvent( |
| env, original_key_event, type, modifiers, time_ms, key_code, scan_code, |
| is_system_key, unicode_char); |
| - rwhva_->SendKeyEvent(event); |
| + rwhva()->SendKeyEvent(event); |
| return true; |
| } |
| @@ -400,18 +354,18 @@ void ImeAdapterAndroid::RequestCursorUpdate( |
| RenderWidgetHostImpl* ImeAdapterAndroid::GetFocusedWidget() { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| - return rwhva_ ? rwhva_->GetFocusedWidget() : nullptr; |
| + return rwhva() ? rwhva()->GetFocusedWidget() : nullptr; |
| } |
| RenderFrameHost* ImeAdapterAndroid::GetFocusedFrame() { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| // We get the focused frame from the WebContents of the page. Although |
| - // |rwhva_->GetFocusedWidget()| does a similar thing, there is no direct way |
| + // |rwhva()->GetFocusedWidget()| does a similar thing, there is no direct way |
| // to get a RenderFrameHost from its RWH. |
| - if (!rwhva_) |
| + if (!rwhva()) |
| return nullptr; |
| RenderWidgetHostImpl* rwh = |
| - RenderWidgetHostImpl::From(rwhva_->GetRenderWidgetHost()); |
| + RenderWidgetHostImpl::From(rwhva()->GetRenderWidgetHost()); |
| if (!rwh || !rwh->delegate()) |
| return nullptr; |