OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/content_view_core_impl.h" | 5 #include "content/browser/android/content_view_core_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
10 #include "base/android/jni_array.h" | 10 #include "base/android/jni_array.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "cc/output/begin_frame_args.h" | 22 #include "cc/output/begin_frame_args.h" |
23 #include "content/browser/accessibility/browser_accessibility_manager_android.h" | 23 #include "content/browser/accessibility/browser_accessibility_manager_android.h" |
24 #include "content/browser/accessibility/browser_accessibility_state_impl.h" | 24 #include "content/browser/accessibility/browser_accessibility_state_impl.h" |
25 #include "content/browser/android/gesture_event_type.h" | 25 #include "content/browser/android/gesture_event_type.h" |
26 #include "content/browser/android/interstitial_page_delegate_android.h" | 26 #include "content/browser/android/interstitial_page_delegate_android.h" |
27 #include "content/browser/android/java/gin_java_bridge_dispatcher_host.h" | 27 #include "content/browser/android/java/gin_java_bridge_dispatcher_host.h" |
28 #include "content/browser/android/load_url_params.h" | 28 #include "content/browser/android/load_url_params.h" |
29 #include "content/browser/frame_host/interstitial_page_impl.h" | 29 #include "content/browser/frame_host/interstitial_page_impl.h" |
30 #include "content/browser/media/media_web_contents_observer.h" | 30 #include "content/browser/media/media_web_contents_observer.h" |
31 #include "content/browser/renderer_host/compositor_impl_android.h" | 31 #include "content/browser/renderer_host/compositor_impl_android.h" |
| 32 #include "content/browser/renderer_host/ime_adapter_android.h" |
32 #include "content/browser/renderer_host/input/web_input_event_builders_android.h
" | 33 #include "content/browser/renderer_host/input/web_input_event_builders_android.h
" |
33 #include "content/browser/renderer_host/render_view_host_impl.h" | 34 #include "content/browser/renderer_host/render_view_host_impl.h" |
34 #include "content/browser/renderer_host/render_widget_host_impl.h" | 35 #include "content/browser/renderer_host/render_widget_host_impl.h" |
35 #include "content/browser/renderer_host/render_widget_host_view_android.h" | 36 #include "content/browser/renderer_host/render_widget_host_view_android.h" |
36 #include "content/browser/web_contents/web_contents_view_android.h" | 37 #include "content/browser/web_contents/web_contents_view_android.h" |
37 #include "content/common/frame_messages.h" | 38 #include "content/common/frame_messages.h" |
38 #include "content/common/input_messages.h" | 39 #include "content/common/input_messages.h" |
39 #include "content/common/view_messages.h" | 40 #include "content/common/view_messages.h" |
40 #include "content/public/browser/android/compositor.h" | 41 #include "content/public/browser/android/compositor.h" |
41 #include "content/public/browser/browser_context.h" | 42 #include "content/public/browser/browser_context.h" |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 // static | 203 // static |
203 ContentViewCore* ContentViewCore::FromWebContents( | 204 ContentViewCore* ContentViewCore::FromWebContents( |
204 content::WebContents* web_contents) { | 205 content::WebContents* web_contents) { |
205 return ContentViewCoreImpl::FromWebContents(web_contents); | 206 return ContentViewCoreImpl::FromWebContents(web_contents); |
206 } | 207 } |
207 | 208 |
208 ContentViewCoreImpl::ContentViewCoreImpl( | 209 ContentViewCoreImpl::ContentViewCoreImpl( |
209 JNIEnv* env, | 210 JNIEnv* env, |
210 const JavaRef<jobject>& obj, | 211 const JavaRef<jobject>& obj, |
211 WebContents* web_contents, | 212 WebContents* web_contents, |
| 213 ImeAdapterAndroid* ime_adapter, |
212 float dpi_scale, | 214 float dpi_scale, |
213 const JavaRef<jobject>& java_bridge_retained_object_set) | 215 const JavaRef<jobject>& java_bridge_retained_object_set) |
214 : WebContentsObserver(web_contents), | 216 : WebContentsObserver(web_contents), |
215 java_ref_(env, obj), | 217 java_ref_(env, obj), |
216 web_contents_(static_cast<WebContentsImpl*>(web_contents)), | 218 web_contents_(static_cast<WebContentsImpl*>(web_contents)), |
| 219 ime_adapter_(ime_adapter), |
217 page_scale_(1), | 220 page_scale_(1), |
218 dpi_scale_(dpi_scale), | 221 dpi_scale_(dpi_scale), |
219 device_orientation_(0), | 222 device_orientation_(0), |
220 accessibility_enabled_(false) { | 223 accessibility_enabled_(false) { |
221 GetViewAndroid()->SetLayer(cc::Layer::Create()); | 224 GetViewAndroid()->SetLayer(cc::Layer::Create()); |
222 gfx::Size physical_size( | 225 gfx::Size physical_size( |
223 Java_ContentViewCore_getPhysicalBackingWidthPix(env, obj), | 226 Java_ContentViewCore_getPhysicalBackingWidthPix(env, obj), |
224 Java_ContentViewCore_getPhysicalBackingHeightPix(env, obj)); | 227 Java_ContentViewCore_getPhysicalBackingHeightPix(env, obj)); |
225 GetViewAndroid()->GetLayer()->SetBounds(physical_size); | 228 GetViewAndroid()->GetLayer()->SetBounds(physical_size); |
226 | 229 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 364 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
362 if (!obj.is_null()) { | 365 if (!obj.is_null()) { |
363 Java_ContentViewCore_onRenderProcessChange(env, obj); | 366 Java_ContentViewCore_onRenderProcessChange(env, obj); |
364 } | 367 } |
365 } | 368 } |
366 | 369 |
367 SetFocusInternal(HasFocus()); | 370 SetFocusInternal(HasFocus()); |
368 SetAccessibilityEnabledInternal(accessibility_enabled_); | 371 SetAccessibilityEnabledInternal(accessibility_enabled_); |
369 } | 372 } |
370 | 373 |
| 374 void ContentViewCoreImpl::DidDetachInterstitialPage() { |
| 375 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); |
| 376 if (rwhv) |
| 377 rwhv->ConnectImeAdapter(ime_adapter()); |
| 378 } |
| 379 |
371 RenderWidgetHostViewAndroid* | 380 RenderWidgetHostViewAndroid* |
372 ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() const { | 381 ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() const { |
373 RenderWidgetHostView* rwhv = NULL; | 382 RenderWidgetHostView* rwhv = NULL; |
374 if (web_contents_) { | 383 if (web_contents_) { |
375 rwhv = web_contents_->GetRenderWidgetHostView(); | 384 rwhv = web_contents_->GetRenderWidgetHostView(); |
376 if (web_contents_->ShowingInterstitialPage()) { | 385 if (web_contents_->ShowingInterstitialPage()) { |
377 rwhv = web_contents_->GetInterstitialPage() | 386 rwhv = web_contents_->GetInterstitialPage() |
378 ->GetMainFrame() | 387 ->GetMainFrame() |
379 ->GetRenderViewHost() | 388 ->GetRenderViewHost() |
380 ->GetWidget() | 389 ->GetWidget() |
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1125 void ContentViewCoreImpl::WasResized(JNIEnv* env, | 1134 void ContentViewCoreImpl::WasResized(JNIEnv* env, |
1126 const JavaParamRef<jobject>& obj) { | 1135 const JavaParamRef<jobject>& obj) { |
1127 gfx::Size physical_size( | 1136 gfx::Size physical_size( |
1128 Java_ContentViewCore_getPhysicalBackingWidthPix(env, obj), | 1137 Java_ContentViewCore_getPhysicalBackingWidthPix(env, obj), |
1129 Java_ContentViewCore_getPhysicalBackingHeightPix(env, obj)); | 1138 Java_ContentViewCore_getPhysicalBackingHeightPix(env, obj)); |
1130 GetViewAndroid()->GetLayer()->SetBounds(physical_size); | 1139 GetViewAndroid()->GetLayer()->SetBounds(physical_size); |
1131 | 1140 |
1132 SendScreenRectsAndResizeWidget(); | 1141 SendScreenRectsAndResizeWidget(); |
1133 } | 1142 } |
1134 | 1143 |
1135 long ContentViewCoreImpl::GetNativeImeAdapter( | 1144 void ContentViewCoreImpl::UpdateImeAdapter(int text_input_type, |
1136 JNIEnv* env, | |
1137 const JavaParamRef<jobject>& obj) { | |
1138 RenderWidgetHostViewAndroid* rwhva = GetRenderWidgetHostViewAndroid(); | |
1139 if (!rwhva) | |
1140 return 0; | |
1141 return rwhva->GetNativeImeAdapter(); | |
1142 } | |
1143 | |
1144 void ContentViewCoreImpl::ForceUpdateImeAdapter(long native_ime_adapter) { | |
1145 JNIEnv* env = AttachCurrentThread(); | |
1146 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | |
1147 if (obj.is_null()) | |
1148 return; | |
1149 Java_ContentViewCore_forceUpdateImeAdapter(env, obj, native_ime_adapter); | |
1150 } | |
1151 | |
1152 void ContentViewCoreImpl::UpdateImeAdapter(long native_ime_adapter, | |
1153 int text_input_type, | |
1154 int text_input_flags, | 1145 int text_input_flags, |
1155 int text_input_mode, | 1146 int text_input_mode, |
1156 const std::string& text, | 1147 const std::string& text, |
1157 int selection_start, | 1148 int selection_start, |
1158 int selection_end, | 1149 int selection_end, |
1159 int composition_start, | 1150 int composition_start, |
1160 int composition_end, | 1151 int composition_end, |
1161 bool show_ime_if_needed, | 1152 bool show_ime_if_needed, |
1162 bool reply_to_request) { | 1153 bool reply_to_request) { |
1163 JNIEnv* env = AttachCurrentThread(); | 1154 JNIEnv* env = AttachCurrentThread(); |
1164 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 1155 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
1165 if (obj.is_null()) | 1156 if (obj.is_null()) |
1166 return; | 1157 return; |
1167 | 1158 |
1168 ScopedJavaLocalRef<jstring> jstring_text = ConvertUTF8ToJavaString(env, text); | 1159 ScopedJavaLocalRef<jstring> jstring_text = ConvertUTF8ToJavaString(env, text); |
1169 Java_ContentViewCore_updateImeAdapter( | 1160 Java_ContentViewCore_updateImeAdapter( |
1170 env, obj, native_ime_adapter, text_input_type, text_input_flags, | 1161 env, obj, text_input_type, text_input_flags, text_input_mode, |
1171 text_input_mode, jstring_text, selection_start, selection_end, | 1162 jstring_text, selection_start, selection_end, composition_start, |
1172 composition_start, composition_end, show_ime_if_needed, reply_to_request); | 1163 composition_end, show_ime_if_needed, reply_to_request); |
1173 } | 1164 } |
1174 | 1165 |
1175 void ContentViewCoreImpl::SetAccessibilityEnabled( | 1166 void ContentViewCoreImpl::SetAccessibilityEnabled( |
1176 JNIEnv* env, | 1167 JNIEnv* env, |
1177 const JavaParamRef<jobject>& obj, | 1168 const JavaParamRef<jobject>& obj, |
1178 bool enabled) { | 1169 bool enabled) { |
1179 SetAccessibilityEnabledInternal(enabled); | 1170 SetAccessibilityEnabledInternal(enabled); |
1180 } | 1171 } |
1181 | 1172 |
1182 void ContentViewCoreImpl::SetTextTrackSettings( | 1173 void ContentViewCoreImpl::SetTextTrackSettings( |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1369 DCHECK(wcva); | 1360 DCHECK(wcva); |
1370 wcva->SetContentViewCore(NULL); | 1361 wcva->SetContentViewCore(NULL); |
1371 } | 1362 } |
1372 | 1363 |
1373 // This is called for each ContentView. | 1364 // This is called for each ContentView. |
1374 jlong Init(JNIEnv* env, | 1365 jlong Init(JNIEnv* env, |
1375 const JavaParamRef<jobject>& obj, | 1366 const JavaParamRef<jobject>& obj, |
1376 const JavaParamRef<jobject>& jweb_contents, | 1367 const JavaParamRef<jobject>& jweb_contents, |
1377 const JavaParamRef<jobject>& jview_android_delegate, | 1368 const JavaParamRef<jobject>& jview_android_delegate, |
1378 jlong jwindow_android, | 1369 jlong jwindow_android, |
1379 jfloat dipScale, | 1370 jlong jime_adapter, |
| 1371 jfloat dip_scale, |
1380 const JavaParamRef<jobject>& retained_objects_set) { | 1372 const JavaParamRef<jobject>& retained_objects_set) { |
1381 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( | 1373 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( |
1382 WebContents::FromJavaWebContents(jweb_contents)); | 1374 WebContents::FromJavaWebContents(jweb_contents)); |
1383 CHECK(web_contents) << | 1375 CHECK(web_contents) << |
1384 "A ContentViewCoreImpl should be created with a valid WebContents."; | 1376 "A ContentViewCoreImpl should be created with a valid WebContents."; |
1385 ui::ViewAndroid* view_android = web_contents->GetView()->GetNativeView(); | 1377 ui::ViewAndroid* view_android = web_contents->GetView()->GetNativeView(); |
1386 view_android->SetDelegate(jview_android_delegate); | 1378 view_android->SetDelegate(jview_android_delegate); |
1387 view_android->SetLayout(ui::ViewAndroid::LayoutParams::MatchParent()); | 1379 view_android->SetLayout(ui::ViewAndroid::LayoutParams::MatchParent()); |
1388 | 1380 |
1389 ui::WindowAndroid* window_android = | 1381 ui::WindowAndroid* window_android = |
1390 reinterpret_cast<ui::WindowAndroid*>(jwindow_android); | 1382 reinterpret_cast<ui::WindowAndroid*>(jwindow_android); |
1391 DCHECK(window_android); | 1383 DCHECK(window_android); |
1392 window_android->AddChild(view_android); | 1384 window_android->AddChild(view_android); |
1393 | 1385 |
1394 // TODO: pass dipScale. | |
1395 ContentViewCoreImpl* view = new ContentViewCoreImpl( | 1386 ContentViewCoreImpl* view = new ContentViewCoreImpl( |
1396 env, obj, web_contents, dipScale, retained_objects_set); | 1387 env, obj, web_contents, |
| 1388 reinterpret_cast<ImeAdapterAndroid*>(jime_adapter), dip_scale, |
| 1389 retained_objects_set); |
1397 return reinterpret_cast<intptr_t>(view); | 1390 return reinterpret_cast<intptr_t>(view); |
1398 } | 1391 } |
1399 | 1392 |
1400 static ScopedJavaLocalRef<jobject> FromWebContentsAndroid( | 1393 static ScopedJavaLocalRef<jobject> FromWebContentsAndroid( |
1401 JNIEnv* env, | 1394 JNIEnv* env, |
1402 const JavaParamRef<jclass>& clazz, | 1395 const JavaParamRef<jclass>& clazz, |
1403 const JavaParamRef<jobject>& jweb_contents) { | 1396 const JavaParamRef<jobject>& jweb_contents) { |
1404 WebContents* web_contents = WebContents::FromJavaWebContents(jweb_contents); | 1397 WebContents* web_contents = WebContents::FromJavaWebContents(jweb_contents); |
1405 if (!web_contents) | 1398 if (!web_contents) |
1406 return ScopedJavaLocalRef<jobject>(); | 1399 return ScopedJavaLocalRef<jobject>(); |
1407 | 1400 |
1408 ContentViewCore* view = ContentViewCore::FromWebContents(web_contents); | 1401 ContentViewCore* view = ContentViewCore::FromWebContents(web_contents); |
1409 if (!view) | 1402 if (!view) |
1410 return ScopedJavaLocalRef<jobject>(); | 1403 return ScopedJavaLocalRef<jobject>(); |
1411 | 1404 |
1412 return view->GetJavaObject(); | 1405 return view->GetJavaObject(); |
1413 } | 1406 } |
1414 | 1407 |
1415 bool RegisterContentViewCore(JNIEnv* env) { | 1408 bool RegisterContentViewCore(JNIEnv* env) { |
1416 return RegisterNativesImpl(env); | 1409 return RegisterNativesImpl(env); |
1417 } | 1410 } |
1418 | 1411 |
1419 } // namespace content | 1412 } // namespace content |
OLD | NEW |