| 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/child_frame.h" |
| 15 #include "android_webview/browser/deferred_gpu_command_service.h" | 15 #include "android_webview/browser/deferred_gpu_command_service.h" |
| 16 #include "android_webview/browser/net_disk_cache_remover.h" | 16 #include "android_webview/browser/net_disk_cache_remover.h" |
| 17 #include "android_webview/browser/render_thread_manager.h" |
| 17 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele
gate.h" | 18 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele
gate.h" |
| 18 #include "android_webview/browser/scoped_app_gl_state_restore.h" | 19 #include "android_webview/browser/scoped_app_gl_state_restore.h" |
| 19 #include "android_webview/browser/shared_renderer_state.h" | |
| 20 #include "android_webview/common/aw_hit_test_data.h" | 20 #include "android_webview/common/aw_hit_test_data.h" |
| 21 #include "android_webview/common/aw_switches.h" | 21 #include "android_webview/common/aw_switches.h" |
| 22 #include "android_webview/common/devtools_instrumentation.h" | 22 #include "android_webview/common/devtools_instrumentation.h" |
| 23 #include "android_webview/native/aw_autofill_client.h" | 23 #include "android_webview/native/aw_autofill_client.h" |
| 24 #include "android_webview/native/aw_browser_dependency_factory.h" | 24 #include "android_webview/native/aw_browser_dependency_factory.h" |
| 25 #include "android_webview/native/aw_contents_client_bridge.h" | 25 #include "android_webview/native/aw_contents_client_bridge.h" |
| 26 #include "android_webview/native/aw_contents_io_thread_client_impl.h" | 26 #include "android_webview/native/aw_contents_io_thread_client_impl.h" |
| 27 #include "android_webview/native/aw_contents_lifecycle_notifier.h" | 27 #include "android_webview/native/aw_contents_lifecycle_notifier.h" |
| 28 #include "android_webview/native/aw_message_port_service_impl.h" | 28 #include "android_webview/native/aw_message_port_service_impl.h" |
| 29 #include "android_webview/native/aw_pdf_exporter.h" | 29 #include "android_webview/native/aw_pdf_exporter.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 using content::ContentViewCore; | 97 using content::ContentViewCore; |
| 98 using content::WebContents; | 98 using content::WebContents; |
| 99 | 99 |
| 100 extern "C" { | 100 extern "C" { |
| 101 static AwDrawGLFunction DrawGLFunction; | 101 static AwDrawGLFunction DrawGLFunction; |
| 102 static void DrawGLFunction(long view_context, | 102 static void DrawGLFunction(long view_context, |
| 103 AwDrawGLInfo* draw_info, | 103 AwDrawGLInfo* draw_info, |
| 104 void* spare) { | 104 void* spare) { |
| 105 // |view_context| is the value that was returned from the java | 105 // |view_context| is the value that was returned from the java |
| 106 // AwContents.onPrepareDrawGL; this cast must match the code there. | 106 // AwContents.onPrepareDrawGL; this cast must match the code there. |
| 107 reinterpret_cast<android_webview::SharedRendererState*>(view_context) | 107 reinterpret_cast<android_webview::RenderThreadManager*>(view_context) |
| 108 ->DrawGL(draw_info); | 108 ->DrawGL(draw_info); |
| 109 } | 109 } |
| 110 } | 110 } |
| 111 | 111 |
| 112 namespace android_webview { | 112 namespace android_webview { |
| 113 | 113 |
| 114 namespace { | 114 namespace { |
| 115 | 115 |
| 116 bool g_should_download_favicons = false; | 116 bool g_should_download_favicons = false; |
| 117 | 117 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 AwBrowserPermissionRequestDelegate* AwBrowserPermissionRequestDelegate::FromID( | 174 AwBrowserPermissionRequestDelegate* AwBrowserPermissionRequestDelegate::FromID( |
| 175 int render_process_id, int render_frame_id) { | 175 int render_process_id, int render_frame_id) { |
| 176 AwContents* aw_contents = AwContents::FromWebContents( | 176 AwContents* aw_contents = AwContents::FromWebContents( |
| 177 content::WebContents::FromRenderFrameHost( | 177 content::WebContents::FromRenderFrameHost( |
| 178 content::RenderFrameHost::FromID(render_process_id, | 178 content::RenderFrameHost::FromID(render_process_id, |
| 179 render_frame_id))); | 179 render_frame_id))); |
| 180 return aw_contents; | 180 return aw_contents; |
| 181 } | 181 } |
| 182 | 182 |
| 183 AwContents::AwContents(std::unique_ptr<WebContents> web_contents) | 183 AwContents::AwContents(std::unique_ptr<WebContents> web_contents) |
| 184 : shared_renderer_state_( | 184 : render_thread_manager_( |
| 185 this, | 185 this, |
| 186 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), | 186 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), |
| 187 browser_view_renderer_( | 187 browser_view_renderer_( |
| 188 this, | 188 this, |
| 189 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), | 189 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
| 190 base::CommandLine::ForCurrentProcess()->HasSwitch( | 190 base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 191 switches::kDisablePageVisibility)), | 191 switches::kDisablePageVisibility)), |
| 192 web_contents_(std::move(web_contents)), | 192 web_contents_(std::move(web_contents)), |
| 193 renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()) { | 193 renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()) { |
| 194 base::subtle::NoBarrier_AtomicIncrement(&g_instance_count, 1); | 194 base::subtle::NoBarrier_AtomicIncrement(&g_instance_count, 1); |
| 195 browser_view_renderer_.SetSharedRendererState(&shared_renderer_state_); | 195 browser_view_renderer_.SetRenderThreadManager(&render_thread_manager_); |
| 196 icon_helper_.reset(new IconHelper(web_contents_.get())); | 196 icon_helper_.reset(new IconHelper(web_contents_.get())); |
| 197 icon_helper_->SetListener(this); | 197 icon_helper_->SetListener(this); |
| 198 web_contents_->SetUserData(android_webview::kAwContentsUserDataKey, | 198 web_contents_->SetUserData(android_webview::kAwContentsUserDataKey, |
| 199 new AwContentsUserData(this)); | 199 new AwContentsUserData(this)); |
| 200 browser_view_renderer_.RegisterWithWebContents(web_contents_.get()); | 200 browser_view_renderer_.RegisterWithWebContents(web_contents_.get()); |
| 201 render_view_host_ext_.reset( | 201 render_view_host_ext_.reset( |
| 202 new AwRenderViewHostExt(this, web_contents_.get())); | 202 new AwRenderViewHostExt(this, web_contents_.get())); |
| 203 | 203 |
| 204 permission_request_handler_.reset( | 204 permission_request_handler_.reset( |
| 205 new PermissionRequestHandler(this, web_contents_.get())); | 205 new PermissionRequestHandler(this, web_contents_.get())); |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 } | 359 } |
| 360 | 360 |
| 361 // static | 361 // static |
| 362 jint GetNativeInstanceCount(JNIEnv* env, const JavaParamRef<jclass>&) { | 362 jint GetNativeInstanceCount(JNIEnv* env, const JavaParamRef<jclass>&) { |
| 363 return base::subtle::NoBarrier_Load(&g_instance_count); | 363 return base::subtle::NoBarrier_Load(&g_instance_count); |
| 364 } | 364 } |
| 365 | 365 |
| 366 jlong AwContents::GetAwDrawGLViewContext(JNIEnv* env, | 366 jlong AwContents::GetAwDrawGLViewContext(JNIEnv* env, |
| 367 const JavaParamRef<jobject>& obj) { | 367 const JavaParamRef<jobject>& obj) { |
| 368 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 368 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 369 return reinterpret_cast<intptr_t>(&shared_renderer_state_); | 369 return reinterpret_cast<intptr_t>(&render_thread_manager_); |
| 370 } | 370 } |
| 371 | 371 |
| 372 namespace { | 372 namespace { |
| 373 void DocumentHasImagesCallback(const ScopedJavaGlobalRef<jobject>& message, | 373 void DocumentHasImagesCallback(const ScopedJavaGlobalRef<jobject>& message, |
| 374 bool has_images) { | 374 bool has_images) { |
| 375 Java_AwContents_onDocumentHasImagesResponse(AttachCurrentThread(), | 375 Java_AwContents_onDocumentHasImagesResponse(AttachCurrentThread(), |
| 376 has_images, | 376 has_images, |
| 377 message.obj()); | 377 message.obj()); |
| 378 } | 378 } |
| 379 } // namespace | 379 } // namespace |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 888 const JavaParamRef<jobject>& obj, | 888 const JavaParamRef<jobject>& obj, |
| 889 int w, | 889 int w, |
| 890 int h) { | 890 int h) { |
| 891 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 891 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 892 browser_view_renderer_.OnAttachedToWindow(w, h); | 892 browser_view_renderer_.OnAttachedToWindow(w, h); |
| 893 } | 893 } |
| 894 | 894 |
| 895 void AwContents::OnDetachedFromWindow(JNIEnv* env, | 895 void AwContents::OnDetachedFromWindow(JNIEnv* env, |
| 896 const JavaParamRef<jobject>& obj) { | 896 const JavaParamRef<jobject>& obj) { |
| 897 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 897 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 898 shared_renderer_state_.DeleteHardwareRendererOnUI(); | 898 render_thread_manager_.DeleteHardwareRendererOnUI(); |
| 899 browser_view_renderer_.OnDetachedFromWindow(); | 899 browser_view_renderer_.OnDetachedFromWindow(); |
| 900 } | 900 } |
| 901 | 901 |
| 902 bool AwContents::IsVisible(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 902 bool AwContents::IsVisible(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 903 return browser_view_renderer_.IsClientVisible(); | 903 return browser_view_renderer_.IsClientVisible(); |
| 904 } | 904 } |
| 905 | 905 |
| 906 void AwContents::DetachFunctorFromView() { | 906 void AwContents::DetachFunctorFromView() { |
| 907 JNIEnv* env = AttachCurrentThread(); | 907 JNIEnv* env = AttachCurrentThread(); |
| 908 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 908 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1235 // it does not indicate memory pressure, but merely that the app is | 1235 // it does not indicate memory pressure, but merely that the app is |
| 1236 // backgrounded. | 1236 // backgrounded. |
| 1237 if (level < TRIM_MEMORY_RUNNING_LOW || level == TRIM_MEMORY_UI_HIDDEN) | 1237 if (level < TRIM_MEMORY_RUNNING_LOW || level == TRIM_MEMORY_UI_HIDDEN) |
| 1238 return; | 1238 return; |
| 1239 | 1239 |
| 1240 // Do not release resources on view we expect to get DrawGL soon. | 1240 // Do not release resources on view we expect to get DrawGL soon. |
| 1241 if (level < TRIM_MEMORY_BACKGROUND && visible) | 1241 if (level < TRIM_MEMORY_BACKGROUND && visible) |
| 1242 return; | 1242 return; |
| 1243 | 1243 |
| 1244 if (level >= TRIM_MEMORY_MODERATE) | 1244 if (level >= TRIM_MEMORY_MODERATE) |
| 1245 shared_renderer_state_.DeleteHardwareRendererOnUI(); | 1245 render_thread_manager_.DeleteHardwareRendererOnUI(); |
| 1246 | 1246 |
| 1247 browser_view_renderer_.TrimMemory(); | 1247 browser_view_renderer_.TrimMemory(); |
| 1248 } | 1248 } |
| 1249 | 1249 |
| 1250 // TODO(sgurun) add support for posting a frame whose name is known (only | 1250 // TODO(sgurun) add support for posting a frame whose name is known (only |
| 1251 // main frame is supported at this time, see crbug.com/389721) | 1251 // main frame is supported at this time, see crbug.com/389721) |
| 1252 void AwContents::PostMessageToFrame(JNIEnv* env, | 1252 void AwContents::PostMessageToFrame(JNIEnv* env, |
| 1253 const JavaParamRef<jobject>& obj, | 1253 const JavaParamRef<jobject>& obj, |
| 1254 const JavaParamRef<jstring>& frame_name, | 1254 const JavaParamRef<jstring>& frame_name, |
| 1255 const JavaParamRef<jstring>& message, | 1255 const JavaParamRef<jstring>& message, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1312 const JavaParamRef<jobject>& obj) { | 1312 const JavaParamRef<jobject>& obj) { |
| 1313 web_contents_->ResumeLoadingCreatedWebContents(); | 1313 web_contents_->ResumeLoadingCreatedWebContents(); |
| 1314 } | 1314 } |
| 1315 | 1315 |
| 1316 void SetShouldDownloadFavicons(JNIEnv* env, | 1316 void SetShouldDownloadFavicons(JNIEnv* env, |
| 1317 const JavaParamRef<jclass>& jclazz) { | 1317 const JavaParamRef<jclass>& jclazz) { |
| 1318 g_should_download_favicons = true; | 1318 g_should_download_favicons = true; |
| 1319 } | 1319 } |
| 1320 | 1320 |
| 1321 } // namespace android_webview | 1321 } // namespace android_webview |
| OLD | NEW |