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

Side by Side Diff: content/browser/android/ime_adapter_android.cc

Issue 2792063003: Factor out RenderWidgetHostConnector (Closed)
Patch Set: test Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/ime_adapter_android.h" 5 #include "content/browser/android/ime_adapter_android.h"
6 6
7 #include <android/input.h> 7 #include <android/input.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/android/jni_android.h" 11 #include "base/android/jni_android.h"
12 #include "base/android/jni_array.h" 12 #include "base/android/jni_array.h"
13 #include "base/android/jni_string.h" 13 #include "base/android/jni_string.h"
14 #include "base/android/scoped_java_ref.h" 14 #include "base/android/scoped_java_ref.h"
15 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "base/time/time.h" 16 #include "base/time/time.h"
17 #include "content/browser/frame_host/interstitial_page_impl.h"
18 #include "content/browser/frame_host/render_frame_host_impl.h" 17 #include "content/browser/frame_host/render_frame_host_impl.h"
19 #include "content/browser/renderer_host/render_view_host_delegate.h" 18 #include "content/browser/renderer_host/render_view_host_delegate.h"
20 #include "content/browser/renderer_host/render_widget_host_impl.h" 19 #include "content/browser/renderer_host/render_widget_host_impl.h"
21 #include "content/browser/renderer_host/render_widget_host_view_android.h" 20 #include "content/browser/renderer_host/render_widget_host_view_android.h"
22 #include "content/browser/web_contents/web_contents_impl.h"
23 #include "content/common/input_messages.h" 21 #include "content/common/input_messages.h"
24 #include "content/common/view_messages.h" 22 #include "content/common/view_messages.h"
25 #include "content/public/browser/browser_thread.h" 23 #include "content/public/browser/browser_thread.h"
26 #include "content/public/browser/native_web_keyboard_event.h" 24 #include "content/public/browser/native_web_keyboard_event.h"
27 #include "content/public/browser/web_contents.h" 25 #include "content/public/browser/web_contents.h"
28 #include "jni/ImeAdapter_jni.h" 26 #include "jni/ImeAdapter_jni.h"
29 #include "third_party/WebKit/public/platform/WebInputEvent.h" 27 #include "third_party/WebKit/public/platform/WebInputEvent.h"
30 #include "third_party/WebKit/public/platform/WebTextInputType.h" 28 #include "third_party/WebKit/public/platform/WebTextInputType.h"
31 #include "third_party/WebKit/public/web/WebCompositionUnderline.h" 29 #include "third_party/WebKit/public/web/WebCompositionUnderline.h"
32 30
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 reinterpret_cast<std::vector<blink::WebCompositionUnderline>*>( 105 reinterpret_cast<std::vector<blink::WebCompositionUnderline>*>(
108 underlines_ptr); 106 underlines_ptr);
109 underlines->push_back(blink::WebCompositionUnderline( 107 underlines->push_back(blink::WebCompositionUnderline(
110 static_cast<unsigned>(start), static_cast<unsigned>(end), SK_ColorBLACK, 108 static_cast<unsigned>(start), static_cast<unsigned>(end), SK_ColorBLACK,
111 false, SK_ColorTRANSPARENT)); 109 false, SK_ColorTRANSPARENT));
112 } 110 }
113 111
114 ImeAdapterAndroid::ImeAdapterAndroid(JNIEnv* env, 112 ImeAdapterAndroid::ImeAdapterAndroid(JNIEnv* env,
115 const JavaParamRef<jobject>& obj, 113 const JavaParamRef<jobject>& obj,
116 WebContents* web_contents) 114 WebContents* web_contents)
117 : WebContentsObserver(web_contents), rwhva_(nullptr) { 115 : RenderWidgetHostConnector(web_contents) {
118 java_ime_adapter_ = JavaObjectWeakGlobalRef(env, obj); 116 java_ime_adapter_ = JavaObjectWeakGlobalRef(env, obj);
119 } 117 }
120 118
121 ImeAdapterAndroid::~ImeAdapterAndroid() { 119 ImeAdapterAndroid::~ImeAdapterAndroid() {
122 JNIEnv* env = AttachCurrentThread(); 120 JNIEnv* env = AttachCurrentThread();
123 ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env); 121 ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
124 if (!obj.is_null()) 122 if (!obj.is_null())
125 Java_ImeAdapter_destroy(env, obj); 123 Java_ImeAdapter_destroy(env, obj);
126
127 UpdateRenderProcessConnection(nullptr);
128 } 124 }
129 125
130 RenderWidgetHostViewAndroid* ImeAdapterAndroid::GetRenderWidgetHostViewAndroid() 126 void ImeAdapterAndroid::UpdateRenderProcessConnection(
131 const { 127 RenderWidgetHostViewAndroid* old_rwhva,
132 RenderWidgetHostView* rwhv = web_contents()->GetRenderWidgetHostView(); 128 RenderWidgetHostViewAndroid* new_rwhva) {
133 WebContentsImpl* web_contents_impl = 129 if (old_rwhva)
134 static_cast<WebContentsImpl*>(web_contents()); 130 old_rwhva->set_ime_adapter(nullptr);
135 if (web_contents_impl->ShowingInterstitialPage()) { 131 if (new_rwhva) {
136 rwhv = web_contents_impl->GetInterstitialPage() 132 new_rwhva->set_ime_adapter(this);
137 ->GetMainFrame() 133 rwhva_ = new_rwhva;
138 ->GetRenderViewHost() 134 if (!old_rwhva && new_rwhva) {
139 ->GetWidget() 135 JNIEnv* env = AttachCurrentThread();
140 ->GetView(); 136 ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
141 } 137 if (!obj.is_null())
142 return static_cast<RenderWidgetHostViewAndroid*>(rwhv); 138 Java_ImeAdapter_onConnectedToRenderProcess(env, obj);
143 } 139 }
144
145 void ImeAdapterAndroid::RenderViewReady() {
146 UpdateRenderProcessConnection(GetRenderWidgetHostViewAndroid());
147
148 JNIEnv* env = AttachCurrentThread();
149 ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
150 if (!obj.is_null())
151 Java_ImeAdapter_onConnectedToRenderProcess(env, obj);
152 }
153
154 void ImeAdapterAndroid::RenderViewHostChanged(RenderViewHost* old_host,
155 RenderViewHost* new_host) {
156 if (new_host) {
157 UpdateRenderProcessConnection(static_cast<RenderWidgetHostViewAndroid*>(
158 new_host->GetWidget()->GetView()));
159 } else {
160 UpdateRenderProcessConnection(nullptr);
161 } 140 }
162 } 141 }
163 142
164 void ImeAdapterAndroid::DidAttachInterstitialPage() {
165 UpdateRenderProcessConnection(GetRenderWidgetHostViewAndroid());
166 }
167
168 void ImeAdapterAndroid::DidDetachInterstitialPage() {
169 UpdateRenderProcessConnection(GetRenderWidgetHostViewAndroid());
170 }
171
172 void ImeAdapterAndroid::WebContentsDestroyed() {
173 delete this;
174 }
175
176 void ImeAdapterAndroid::UpdateRenderProcessConnection(
177 RenderWidgetHostViewAndroid* new_rwhva) {
178 if (rwhva_.get() == new_rwhva)
179 return;
180 if (rwhva_)
181 rwhva_->set_ime_adapter(nullptr);
182 if (new_rwhva) {
183 new_rwhva->set_ime_adapter(this);
184 rwhva_ = new_rwhva->GetWeakPtrAndroid();
185 } else {
186 rwhva_.reset();
187 }
188 }
189
190 bool ImeAdapterAndroid::SendKeyEvent( 143 bool ImeAdapterAndroid::SendKeyEvent(
191 JNIEnv* env, 144 JNIEnv* env,
192 const JavaParamRef<jobject>&, 145 const JavaParamRef<jobject>&,
193 const JavaParamRef<jobject>& original_key_event, 146 const JavaParamRef<jobject>& original_key_event,
194 int type, 147 int type,
195 int modifiers, 148 int modifiers,
196 jlong time_ms, 149 jlong time_ms,
197 int key_code, 150 int key_code,
198 int scan_code, 151 int scan_code,
199 bool is_system_key, 152 bool is_system_key,
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 Java_ImeAdapter_populateUnderlinesFromSpans( 371 Java_ImeAdapter_populateUnderlinesFromSpans(
419 env, obj, text, reinterpret_cast<jlong>(&underlines)); 372 env, obj, text, reinterpret_cast<jlong>(&underlines));
420 373
421 // Sort spans by |.startOffset|. 374 // Sort spans by |.startOffset|.
422 std::sort(underlines.begin(), underlines.end()); 375 std::sort(underlines.begin(), underlines.end());
423 376
424 return underlines; 377 return underlines;
425 } 378 }
426 379
427 } // namespace content 380 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698