Chromium Code Reviews| 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 "android_webview/native/aw_contents.h" | 5 #include "android_webview/native/aw_contents.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "android_webview/browser/aw_browser_context.h" | 10 #include "android_webview/browser/aw_browser_context.h" |
| 11 #include "android_webview/browser/aw_browser_main_parts.h" | 11 #include "android_webview/browser/aw_browser_main_parts.h" |
| 12 #include "android_webview/browser/aw_resource_context.h" | 12 #include "android_webview/browser/aw_resource_context.h" |
| 13 #include "android_webview/browser/browser_view_renderer.h" | 13 #include "android_webview/browser/browser_view_renderer.h" |
| 14 #include "android_webview/browser/child_frame.h" | |
| 14 #include "android_webview/browser/deferred_gpu_command_service.h" | 15 #include "android_webview/browser/deferred_gpu_command_service.h" |
| 15 #include "android_webview/browser/net_disk_cache_remover.h" | 16 #include "android_webview/browser/net_disk_cache_remover.h" |
| 16 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele gate.h" | 17 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele gate.h" |
| 17 #include "android_webview/browser/scoped_app_gl_state_restore.h" | 18 #include "android_webview/browser/scoped_app_gl_state_restore.h" |
| 18 #include "android_webview/browser/shared_renderer_state.h" | 19 #include "android_webview/browser/shared_renderer_state.h" |
| 19 #include "android_webview/common/aw_hit_test_data.h" | 20 #include "android_webview/common/aw_hit_test_data.h" |
| 20 #include "android_webview/common/aw_switches.h" | 21 #include "android_webview/common/aw_switches.h" |
| 21 #include "android_webview/common/devtools_instrumentation.h" | 22 #include "android_webview/common/devtools_instrumentation.h" |
| 22 #include "android_webview/native/aw_autofill_client.h" | 23 #include "android_webview/native/aw_autofill_client.h" |
| 23 #include "android_webview/native/aw_browser_dependency_factory.h" | 24 #include "android_webview/native/aw_browser_dependency_factory.h" |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 172 AwBrowserPermissionRequestDelegate* AwBrowserPermissionRequestDelegate::FromID( | 173 AwBrowserPermissionRequestDelegate* AwBrowserPermissionRequestDelegate::FromID( |
| 173 int render_process_id, int render_frame_id) { | 174 int render_process_id, int render_frame_id) { |
| 174 AwContents* aw_contents = AwContents::FromWebContents( | 175 AwContents* aw_contents = AwContents::FromWebContents( |
| 175 content::WebContents::FromRenderFrameHost( | 176 content::WebContents::FromRenderFrameHost( |
| 176 content::RenderFrameHost::FromID(render_process_id, | 177 content::RenderFrameHost::FromID(render_process_id, |
| 177 render_frame_id))); | 178 render_frame_id))); |
| 178 return aw_contents; | 179 return aw_contents; |
| 179 } | 180 } |
| 180 | 181 |
| 181 AwContents::AwContents(scoped_ptr<WebContents> web_contents) | 182 AwContents::AwContents(scoped_ptr<WebContents> web_contents) |
| 182 : browser_view_renderer_( | 183 : shared_renderer_state_( |
| 183 this, | 184 this, BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), |
| 184 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), | 185 browser_view_renderer_( |
| 186 this, BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), | |
| 185 base::CommandLine::ForCurrentProcess()->HasSwitch( | 187 base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 186 switches::kDisablePageVisibility)), | 188 switches::kDisablePageVisibility)), |
| 187 web_contents_(std::move(web_contents)), | 189 web_contents_(std::move(web_contents)), |
| 188 renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()) { | 190 renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()) { |
| 189 base::subtle::NoBarrier_AtomicIncrement(&g_instance_count, 1); | 191 base::subtle::NoBarrier_AtomicIncrement(&g_instance_count, 1); |
| 192 browser_view_renderer_.SetSharedRendererState(&shared_renderer_state_); | |
| 190 icon_helper_.reset(new IconHelper(web_contents_.get())); | 193 icon_helper_.reset(new IconHelper(web_contents_.get())); |
| 191 icon_helper_->SetListener(this); | 194 icon_helper_->SetListener(this); |
| 192 web_contents_->SetUserData(android_webview::kAwContentsUserDataKey, | 195 web_contents_->SetUserData(android_webview::kAwContentsUserDataKey, |
| 193 new AwContentsUserData(this)); | 196 new AwContentsUserData(this)); |
| 194 browser_view_renderer_.RegisterWithWebContents(web_contents_.get()); | 197 browser_view_renderer_.RegisterWithWebContents(web_contents_.get()); |
| 195 render_view_host_ext_.reset( | 198 render_view_host_ext_.reset( |
| 196 new AwRenderViewHostExt(this, web_contents_.get())); | 199 new AwRenderViewHostExt(this, web_contents_.get())); |
| 197 | 200 |
| 198 permission_request_handler_.reset( | 201 permission_request_handler_.reset( |
| 199 new PermissionRequestHandler(this, web_contents_.get())); | 202 new PermissionRequestHandler(this, web_contents_.get())); |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 354 } | 357 } |
| 355 | 358 |
| 356 // static | 359 // static |
| 357 jint GetNativeInstanceCount(JNIEnv* env, const JavaParamRef<jclass>&) { | 360 jint GetNativeInstanceCount(JNIEnv* env, const JavaParamRef<jclass>&) { |
| 358 return base::subtle::NoBarrier_Load(&g_instance_count); | 361 return base::subtle::NoBarrier_Load(&g_instance_count); |
| 359 } | 362 } |
| 360 | 363 |
| 361 jlong AwContents::GetAwDrawGLViewContext(JNIEnv* env, | 364 jlong AwContents::GetAwDrawGLViewContext(JNIEnv* env, |
| 362 const JavaParamRef<jobject>& obj) { | 365 const JavaParamRef<jobject>& obj) { |
| 363 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 366 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 364 return reinterpret_cast<intptr_t>( | 367 return reinterpret_cast<intptr_t>(&shared_renderer_state_); |
| 365 browser_view_renderer_.GetAwDrawGLViewContext()); | |
| 366 } | 368 } |
| 367 | 369 |
| 368 namespace { | 370 namespace { |
| 369 void DocumentHasImagesCallback(const ScopedJavaGlobalRef<jobject>& message, | 371 void DocumentHasImagesCallback(const ScopedJavaGlobalRef<jobject>& message, |
| 370 bool has_images) { | 372 bool has_images) { |
| 371 Java_AwContents_onDocumentHasImagesResponse(AttachCurrentThread(), | 373 Java_AwContents_onDocumentHasImagesResponse(AttachCurrentThread(), |
| 372 has_images, | 374 has_images, |
| 373 message.obj()); | 375 message.obj()); |
| 374 } | 376 } |
| 375 } // namespace | 377 } // namespace |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 738 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 740 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 739 JNIEnv* env = AttachCurrentThread(); | 741 JNIEnv* env = AttachCurrentThread(); |
| 740 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 742 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 741 if (obj.is_null()) | 743 if (obj.is_null()) |
| 742 return; | 744 return; |
| 743 | 745 |
| 744 Java_AwContents_onReceivedTouchIconUrl( | 746 Java_AwContents_onReceivedTouchIconUrl( |
| 745 env, obj.obj(), ConvertUTF8ToJavaString(env, url).obj(), precomposed); | 747 env, obj.obj(), ConvertUTF8ToJavaString(env, url).obj(), precomposed); |
| 746 } | 748 } |
| 747 | 749 |
| 750 void AwContents::UpdateParentDrawConstraints() { | |
| 751 browser_view_renderer_.UpdateParentDrawConstraints( | |
| 752 shared_renderer_state_.GetParentDrawConstraintsOnUI()); | |
| 753 } | |
| 754 | |
| 748 bool AwContents::RequestDrawGL(bool wait_for_completion) { | 755 bool AwContents::RequestDrawGL(bool wait_for_completion) { |
| 749 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 756 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 750 JNIEnv* env = AttachCurrentThread(); | 757 JNIEnv* env = AttachCurrentThread(); |
| 751 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 758 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 752 if (obj.is_null()) | 759 if (obj.is_null()) |
| 753 return false; | 760 return false; |
| 754 return Java_AwContents_requestDrawGL(env, obj.obj(), wait_for_completion); | 761 return Java_AwContents_requestDrawGL(env, obj.obj(), wait_for_completion); |
| 755 } | 762 } |
| 756 | 763 |
| 757 void AwContents::PostInvalidate() { | 764 void AwContents::PostInvalidate() { |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 882 const JavaParamRef<jobject>& obj, | 889 const JavaParamRef<jobject>& obj, |
| 883 int w, | 890 int w, |
| 884 int h) { | 891 int h) { |
| 885 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 892 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 886 browser_view_renderer_.OnAttachedToWindow(w, h); | 893 browser_view_renderer_.OnAttachedToWindow(w, h); |
| 887 } | 894 } |
| 888 | 895 |
| 889 void AwContents::OnDetachedFromWindow(JNIEnv* env, | 896 void AwContents::OnDetachedFromWindow(JNIEnv* env, |
| 890 const JavaParamRef<jobject>& obj) { | 897 const JavaParamRef<jobject>& obj) { |
| 891 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 898 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 899 shared_renderer_state_.DeleteHardwareRendererOnUI(); | |
| 892 browser_view_renderer_.OnDetachedFromWindow(); | 900 browser_view_renderer_.OnDetachedFromWindow(); |
| 893 } | 901 } |
| 894 | 902 |
| 895 bool AwContents::IsVisible(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 903 bool AwContents::IsVisible(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 896 return browser_view_renderer_.IsClientVisible(); | 904 return browser_view_renderer_.IsClientVisible(); |
| 897 } | 905 } |
| 898 | 906 |
| 899 void AwContents::DetachFunctorFromView() { | 907 void AwContents::DetachFunctorFromView() { |
| 900 JNIEnv* env = AttachCurrentThread(); | 908 JNIEnv* env = AttachCurrentThread(); |
| 901 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 909 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 950 jint visible_bottom) { | 958 jint visible_bottom) { |
| 951 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 959 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 952 gfx::Vector2d scroll(scroll_x, scroll_y); | 960 gfx::Vector2d scroll(scroll_x, scroll_y); |
| 953 browser_view_renderer_.PrepareToDraw( | 961 browser_view_renderer_.PrepareToDraw( |
| 954 scroll, gfx::Rect(visible_left, visible_top, visible_right - visible_left, | 962 scroll, gfx::Rect(visible_left, visible_top, visible_right - visible_left, |
| 955 visible_bottom - visible_top)); | 963 visible_bottom - visible_top)); |
| 956 if (is_hardware_accelerated && browser_view_renderer_.attached_to_window() && | 964 if (is_hardware_accelerated && browser_view_renderer_.attached_to_window() && |
| 957 !g_force_auxiliary_bitmap_rendering) { | 965 !g_force_auxiliary_bitmap_rendering) { |
| 958 return browser_view_renderer_.OnDrawHardware(); | 966 return browser_view_renderer_.OnDrawHardware(); |
| 959 } | 967 } |
| 960 | |
|
boliu
2016/03/30 16:12:13
nit: don't remove empty line
Tobias Sargeant
2016/03/30 17:17:17
Done.
| |
| 961 gfx::Size view_size = browser_view_renderer_.size(); | 968 gfx::Size view_size = browser_view_renderer_.size(); |
| 962 if (view_size.IsEmpty()) { | 969 if (view_size.IsEmpty()) { |
| 963 TRACE_EVENT_INSTANT0("android_webview", "EarlyOut_EmptySize", | 970 TRACE_EVENT_INSTANT0("android_webview", "EarlyOut_EmptySize", |
| 964 TRACE_EVENT_SCOPE_THREAD); | 971 TRACE_EVENT_SCOPE_THREAD); |
| 965 return false; | 972 return false; |
| 966 } | 973 } |
| 967 | 974 |
| 968 // TODO(hush): Right now webview size is passed in as the auxiliary bitmap | 975 // TODO(hush): Right now webview size is passed in as the auxiliary bitmap |
| 969 // size, which might hurt performace (only for software draws with auxiliary | 976 // size, which might hurt performace (only for software draws with auxiliary |
| 970 // bitmap). For better performance, get global visible rect, transform it | 977 // bitmap). For better performance, get global visible rect, transform it |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1201 jboolean network_up) { | 1208 jboolean network_up) { |
| 1202 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1209 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1203 render_view_host_ext_->SetJsOnlineProperty(network_up); | 1210 render_view_host_ext_->SetJsOnlineProperty(network_up); |
| 1204 } | 1211 } |
| 1205 | 1212 |
| 1206 void AwContents::TrimMemory(JNIEnv* env, | 1213 void AwContents::TrimMemory(JNIEnv* env, |
| 1207 const JavaParamRef<jobject>& obj, | 1214 const JavaParamRef<jobject>& obj, |
| 1208 jint level, | 1215 jint level, |
| 1209 jboolean visible) { | 1216 jboolean visible) { |
| 1210 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1217 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1211 browser_view_renderer_.TrimMemory(level, visible); | 1218 // Constants from Android ComponentCallbacks2. |
| 1219 enum { | |
| 1220 TRIM_MEMORY_RUNNING_LOW = 10, | |
| 1221 TRIM_MEMORY_UI_HIDDEN = 20, | |
| 1222 TRIM_MEMORY_BACKGROUND = 40, | |
| 1223 TRIM_MEMORY_MODERATE = 60, | |
| 1224 }; | |
| 1225 | |
| 1226 // Not urgent enough. TRIM_MEMORY_UI_HIDDEN is treated specially because | |
| 1227 // it does not indicate memory pressure, but merely that the app is | |
| 1228 // backgrounded. | |
| 1229 if (level < TRIM_MEMORY_RUNNING_LOW || level == TRIM_MEMORY_UI_HIDDEN) | |
| 1230 return; | |
| 1231 | |
| 1232 // Do not release resources on view we expect to get DrawGL soon. | |
| 1233 if (level < TRIM_MEMORY_BACKGROUND && visible) | |
| 1234 return; | |
| 1235 | |
| 1236 if (level >= TRIM_MEMORY_MODERATE) | |
| 1237 shared_renderer_state_.DeleteHardwareRendererOnUI(); | |
| 1238 | |
| 1239 browser_view_renderer_.TrimMemory(); | |
| 1212 } | 1240 } |
| 1213 | 1241 |
| 1214 // TODO(sgurun) add support for posting a frame whose name is known (only | 1242 // TODO(sgurun) add support for posting a frame whose name is known (only |
| 1215 // main frame is supported at this time, see crbug.com/389721) | 1243 // main frame is supported at this time, see crbug.com/389721) |
| 1216 void AwContents::PostMessageToFrame(JNIEnv* env, | 1244 void AwContents::PostMessageToFrame(JNIEnv* env, |
| 1217 const JavaParamRef<jobject>& obj, | 1245 const JavaParamRef<jobject>& obj, |
| 1218 const JavaParamRef<jstring>& frame_name, | 1246 const JavaParamRef<jstring>& frame_name, |
| 1219 const JavaParamRef<jstring>& message, | 1247 const JavaParamRef<jstring>& message, |
| 1220 const JavaParamRef<jstring>& target_origin, | 1248 const JavaParamRef<jstring>& target_origin, |
| 1221 const JavaParamRef<jintArray>& sent_ports) { | 1249 const JavaParamRef<jintArray>& sent_ports) { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1276 const JavaParamRef<jobject>& obj) { | 1304 const JavaParamRef<jobject>& obj) { |
| 1277 web_contents_->ResumeLoadingCreatedWebContents(); | 1305 web_contents_->ResumeLoadingCreatedWebContents(); |
| 1278 } | 1306 } |
| 1279 | 1307 |
| 1280 void SetShouldDownloadFavicons(JNIEnv* env, | 1308 void SetShouldDownloadFavicons(JNIEnv* env, |
| 1281 const JavaParamRef<jclass>& jclazz) { | 1309 const JavaParamRef<jclass>& jclazz) { |
| 1282 g_should_download_favicons = true; | 1310 g_should_download_favicons = true; |
| 1283 } | 1311 } |
| 1284 | 1312 |
| 1285 } // namespace android_webview | 1313 } // namespace android_webview |
| OLD | NEW |