| 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/browser/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_autofill_client.h" |
| 10 #include "android_webview/browser/aw_browser_context.h" | 11 #include "android_webview/browser/aw_browser_context.h" |
| 11 #include "android_webview/browser/aw_browser_main_parts.h" | 12 #include "android_webview/browser/aw_browser_main_parts.h" |
| 13 #include "android_webview/browser/aw_contents_client_bridge.h" |
| 14 #include "android_webview/browser/aw_contents_io_thread_client_impl.h" |
| 15 #include "android_webview/browser/aw_contents_lifecycle_notifier.h" |
| 16 #include "android_webview/browser/aw_gl_functor.h" |
| 17 #include "android_webview/browser/aw_pdf_exporter.h" |
| 18 #include "android_webview/browser/aw_picture.h" |
| 19 #include "android_webview/browser/aw_renderer_priority_manager.h" |
| 12 #include "android_webview/browser/aw_resource_context.h" | 20 #include "android_webview/browser/aw_resource_context.h" |
| 21 #include "android_webview/browser/aw_web_contents_delegate.h" |
| 13 #include "android_webview/browser/browser_view_renderer.h" | 22 #include "android_webview/browser/browser_view_renderer.h" |
| 14 #include "android_webview/browser/child_frame.h" | 23 #include "android_webview/browser/child_frame.h" |
| 15 #include "android_webview/browser/deferred_gpu_command_service.h" | 24 #include "android_webview/browser/deferred_gpu_command_service.h" |
| 25 #include "android_webview/browser/java_browser_view_renderer_helper.h" |
| 16 #include "android_webview/browser/net_disk_cache_remover.h" | 26 #include "android_webview/browser/net_disk_cache_remover.h" |
| 27 #include "android_webview/browser/permission/aw_permission_request.h" |
| 28 #include "android_webview/browser/permission/permission_request_handler.h" |
| 29 #include "android_webview/browser/permission/simple_permission_request.h" |
| 17 #include "android_webview/browser/render_thread_manager.h" | 30 #include "android_webview/browser/render_thread_manager.h" |
| 18 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele
gate.h" | 31 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele
gate.h" |
| 19 #include "android_webview/browser/scoped_app_gl_state_restore.h" | 32 #include "android_webview/browser/scoped_app_gl_state_restore.h" |
| 33 #include "android_webview/browser/state_serializer.h" |
| 20 #include "android_webview/common/aw_hit_test_data.h" | 34 #include "android_webview/common/aw_hit_test_data.h" |
| 21 #include "android_webview/common/aw_switches.h" | 35 #include "android_webview/common/aw_switches.h" |
| 22 #include "android_webview/common/devtools_instrumentation.h" | 36 #include "android_webview/common/devtools_instrumentation.h" |
| 23 #include "android_webview/native/aw_autofill_client.h" | |
| 24 #include "android_webview/native/aw_contents_client_bridge.h" | |
| 25 #include "android_webview/native/aw_contents_io_thread_client_impl.h" | |
| 26 #include "android_webview/native/aw_contents_lifecycle_notifier.h" | |
| 27 #include "android_webview/native/aw_gl_functor.h" | |
| 28 #include "android_webview/native/aw_pdf_exporter.h" | |
| 29 #include "android_webview/native/aw_picture.h" | |
| 30 #include "android_webview/native/aw_renderer_priority_manager.h" | |
| 31 #include "android_webview/native/aw_web_contents_delegate.h" | |
| 32 #include "android_webview/native/java_browser_view_renderer_helper.h" | |
| 33 #include "android_webview/native/permission/aw_permission_request.h" | |
| 34 #include "android_webview/native/permission/permission_request_handler.h" | |
| 35 #include "android_webview/native/permission/simple_permission_request.h" | |
| 36 #include "android_webview/native/state_serializer.h" | |
| 37 #include "android_webview/public/browser/draw_gl.h" | 37 #include "android_webview/public/browser/draw_gl.h" |
| 38 #include "base/android/jni_android.h" | 38 #include "base/android/jni_android.h" |
| 39 #include "base/android/jni_array.h" | 39 #include "base/android/jni_array.h" |
| 40 #include "base/android/jni_string.h" | 40 #include "base/android/jni_string.h" |
| 41 #include "base/android/locale_utils.h" | 41 #include "base/android/locale_utils.h" |
| 42 #include "base/android/scoped_java_ref.h" | 42 #include "base/android/scoped_java_ref.h" |
| 43 #include "base/atomicops.h" | 43 #include "base/atomicops.h" |
| 44 #include "base/bind.h" | 44 #include "base/bind.h" |
| 45 #include "base/callback.h" | 45 #include "base/callback.h" |
| 46 #include "base/command_line.h" | 46 #include "base/command_line.h" |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 // static | 139 // static |
| 140 AwContents* AwContents::FromWebContents(WebContents* web_contents) { | 140 AwContents* AwContents::FromWebContents(WebContents* web_contents) { |
| 141 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 141 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 142 return AwContentsUserData::GetContents(web_contents); | 142 return AwContentsUserData::GetContents(web_contents); |
| 143 } | 143 } |
| 144 | 144 |
| 145 // static | 145 // static |
| 146 AwContents* AwContents::FromID(int render_process_id, int render_view_id) { | 146 AwContents* AwContents::FromID(int render_process_id, int render_view_id) { |
| 147 content::RenderViewHost* rvh = | 147 content::RenderViewHost* rvh = |
| 148 content::RenderViewHost::FromID(render_process_id, render_view_id); | 148 content::RenderViewHost::FromID(render_process_id, render_view_id); |
| 149 if (!rvh) return NULL; | 149 if (!rvh) |
| 150 return NULL; |
| 150 content::WebContents* web_contents = | 151 content::WebContents* web_contents = |
| 151 content::WebContents::FromRenderViewHost(rvh); | 152 content::WebContents::FromRenderViewHost(rvh); |
| 152 if (!web_contents) return NULL; | 153 if (!web_contents) |
| 154 return NULL; |
| 153 return FromWebContents(web_contents); | 155 return FromWebContents(web_contents); |
| 154 } | 156 } |
| 155 | 157 |
| 156 // static | 158 // static |
| 157 void UpdateDefaultLocale(JNIEnv* env, | 159 void UpdateDefaultLocale(JNIEnv* env, |
| 158 const JavaParamRef<jclass>&, | 160 const JavaParamRef<jclass>&, |
| 159 const JavaParamRef<jstring>& locale, | 161 const JavaParamRef<jstring>& locale, |
| 160 const JavaParamRef<jstring>& locale_list) { | 162 const JavaParamRef<jstring>& locale_list) { |
| 161 g_locale = ConvertJavaStringToUTF8(env, locale); | 163 g_locale = ConvertJavaStringToUTF8(env, locale); |
| 162 g_locale_list = ConvertJavaStringToUTF8(env, locale_list); | 164 g_locale_list = ConvertJavaStringToUTF8(env, locale_list); |
| 163 } | 165 } |
| 164 | 166 |
| 165 // static | 167 // static |
| 166 std::string AwContents::GetLocale() { | 168 std::string AwContents::GetLocale() { |
| 167 return g_locale; | 169 return g_locale; |
| 168 } | 170 } |
| 169 | 171 |
| 170 // static | 172 // static |
| 171 std::string AwContents::GetLocaleList() { | 173 std::string AwContents::GetLocaleList() { |
| 172 return g_locale_list; | 174 return g_locale_list; |
| 173 } | 175 } |
| 174 | 176 |
| 175 // static | 177 // static |
| 176 AwBrowserPermissionRequestDelegate* AwBrowserPermissionRequestDelegate::FromID( | 178 AwBrowserPermissionRequestDelegate* AwBrowserPermissionRequestDelegate::FromID( |
| 177 int render_process_id, int render_frame_id) { | 179 int render_process_id, |
| 178 AwContents* aw_contents = AwContents::FromWebContents( | 180 int render_frame_id) { |
| 179 content::WebContents::FromRenderFrameHost( | 181 AwContents* aw_contents = |
| 182 AwContents::FromWebContents(content::WebContents::FromRenderFrameHost( |
| 180 content::RenderFrameHost::FromID(render_process_id, | 183 content::RenderFrameHost::FromID(render_process_id, |
| 181 render_frame_id))); | 184 render_frame_id))); |
| 182 return aw_contents; | 185 return aw_contents; |
| 183 } | 186 } |
| 184 | 187 |
| 185 // static | 188 // static |
| 186 AwSafeBrowsingUIManager::UIManagerClient* | 189 AwSafeBrowsingUIManager::UIManagerClient* |
| 187 AwSafeBrowsingUIManager::UIManagerClient::FromWebContents( | 190 AwSafeBrowsingUIManager::UIManagerClient::FromWebContents( |
| 188 WebContents* web_contents) { | 191 WebContents* web_contents) { |
| 189 return AwContents::FromWebContents(web_contents); | 192 return AwContents::FromWebContents(web_contents); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 render_frame_id); | 279 render_frame_id); |
| 277 } | 280 } |
| 278 } | 281 } |
| 279 | 282 |
| 280 void AwContents::SetSaveFormData(bool enabled) { | 283 void AwContents::SetSaveFormData(bool enabled) { |
| 281 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 284 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 282 InitAutofillIfNecessary(enabled); | 285 InitAutofillIfNecessary(enabled); |
| 283 // We need to check for the existence, since autofill_manager_delegate | 286 // We need to check for the existence, since autofill_manager_delegate |
| 284 // may not be created when the setting is false. | 287 // may not be created when the setting is false. |
| 285 if (AwAutofillClient::FromWebContents(web_contents_.get())) { | 288 if (AwAutofillClient::FromWebContents(web_contents_.get())) { |
| 286 AwAutofillClient::FromWebContents(web_contents_.get())-> | 289 AwAutofillClient::FromWebContents(web_contents_.get()) |
| 287 SetSaveFormData(enabled); | 290 ->SetSaveFormData(enabled); |
| 288 } | 291 } |
| 289 } | 292 } |
| 290 | 293 |
| 291 void AwContents::InitAutofillIfNecessary(bool enabled) { | 294 void AwContents::InitAutofillIfNecessary(bool enabled) { |
| 292 // Do not initialize if the feature is not enabled. | 295 // Do not initialize if the feature is not enabled. |
| 293 if (!enabled) | 296 if (!enabled) |
| 294 return; | 297 return; |
| 295 // Check if the autofill driver factory already exists. | 298 // Check if the autofill driver factory already exists. |
| 296 content::WebContents* web_contents = web_contents_.get(); | 299 content::WebContents* web_contents = web_contents_.get(); |
| 297 if (ContentAutofillDriverFactory::FromWebContents(web_contents)) | 300 if (ContentAutofillDriverFactory::FromWebContents(web_contents)) |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 base::FilePath target_path(ConvertJavaStringToUTF8(env, jpath)); | 447 base::FilePath target_path(ConvertJavaStringToUTF8(env, jpath)); |
| 445 web_contents_->GenerateMHTML( | 448 web_contents_->GenerateMHTML( |
| 446 content::MHTMLGenerationParams(target_path), | 449 content::MHTMLGenerationParams(target_path), |
| 447 base::Bind(&GenerateMHTMLCallback, | 450 base::Bind(&GenerateMHTMLCallback, |
| 448 ScopedJavaGlobalRef<jobject>(env, callback), target_path)); | 451 ScopedJavaGlobalRef<jobject>(env, callback), target_path)); |
| 449 } | 452 } |
| 450 | 453 |
| 451 void AwContents::CreatePdfExporter(JNIEnv* env, | 454 void AwContents::CreatePdfExporter(JNIEnv* env, |
| 452 const JavaParamRef<jobject>& obj, | 455 const JavaParamRef<jobject>& obj, |
| 453 const JavaParamRef<jobject>& pdfExporter) { | 456 const JavaParamRef<jobject>& pdfExporter) { |
| 454 pdf_exporter_.reset( | 457 pdf_exporter_.reset(new AwPdfExporter(env, pdfExporter, web_contents_.get())); |
| 455 new AwPdfExporter(env, | |
| 456 pdfExporter, | |
| 457 web_contents_.get())); | |
| 458 } | 458 } |
| 459 | 459 |
| 460 bool AwContents::OnReceivedHttpAuthRequest(const JavaRef<jobject>& handler, | 460 bool AwContents::OnReceivedHttpAuthRequest(const JavaRef<jobject>& handler, |
| 461 const std::string& host, | 461 const std::string& host, |
| 462 const std::string& realm) { | 462 const std::string& realm) { |
| 463 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 463 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 464 JNIEnv* env = AttachCurrentThread(); | 464 JNIEnv* env = AttachCurrentThread(); |
| 465 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 465 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 466 if (obj.is_null()) | 466 if (obj.is_null()) |
| 467 return false; | 467 return false; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 478 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 478 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 479 browser_view_renderer_.SetOffscreenPreRaster(enabled); | 479 browser_view_renderer_.SetOffscreenPreRaster(enabled); |
| 480 } | 480 } |
| 481 | 481 |
| 482 void AwContents::AddVisitedLinks( | 482 void AwContents::AddVisitedLinks( |
| 483 JNIEnv* env, | 483 JNIEnv* env, |
| 484 const JavaParamRef<jobject>& obj, | 484 const JavaParamRef<jobject>& obj, |
| 485 const JavaParamRef<jobjectArray>& jvisited_links) { | 485 const JavaParamRef<jobjectArray>& jvisited_links) { |
| 486 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 486 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 487 std::vector<base::string16> visited_link_strings; | 487 std::vector<base::string16> visited_link_strings; |
| 488 base::android::AppendJavaStringArrayToStringVector( | 488 base::android::AppendJavaStringArrayToStringVector(env, jvisited_links, |
| 489 env, jvisited_links, &visited_link_strings); | 489 &visited_link_strings); |
| 490 | 490 |
| 491 std::vector<GURL> visited_link_gurls; | 491 std::vector<GURL> visited_link_gurls; |
| 492 std::vector<base::string16>::const_iterator itr; | 492 std::vector<base::string16>::const_iterator itr; |
| 493 for (itr = visited_link_strings.begin(); itr != visited_link_strings.end(); | 493 for (itr = visited_link_strings.begin(); itr != visited_link_strings.end(); |
| 494 ++itr) { | 494 ++itr) { |
| 495 visited_link_gurls.push_back(GURL(*itr)); | 495 visited_link_gurls.push_back(GURL(*itr)); |
| 496 } | 496 } |
| 497 | 497 |
| 498 AwBrowserContext::FromWebContents(web_contents_.get()) | 498 AwBrowserContext::FromWebContents(web_contents_.get()) |
| 499 ->AddVisitedURLs(visited_link_gurls); | 499 ->AddVisitedURLs(visited_link_gurls); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 516 "onGeolocationPermissionsShowPrompt"); | 516 "onGeolocationPermissionsShowPrompt"); |
| 517 Java_AwContents_onGeolocationPermissionsShowPrompt(env, j_ref, j_origin); | 517 Java_AwContents_onGeolocationPermissionsShowPrompt(env, j_ref, j_origin); |
| 518 } | 518 } |
| 519 } | 519 } |
| 520 | 520 |
| 521 void ShowGeolocationPromptHelper(const JavaObjectWeakGlobalRef& java_ref, | 521 void ShowGeolocationPromptHelper(const JavaObjectWeakGlobalRef& java_ref, |
| 522 const GURL& origin) { | 522 const GURL& origin) { |
| 523 JNIEnv* env = AttachCurrentThread(); | 523 JNIEnv* env = AttachCurrentThread(); |
| 524 if (java_ref.get(env).obj()) { | 524 if (java_ref.get(env).obj()) { |
| 525 content::BrowserThread::PostTask( | 525 content::BrowserThread::PostTask( |
| 526 content::BrowserThread::UI, | 526 content::BrowserThread::UI, FROM_HERE, |
| 527 FROM_HERE, | 527 base::Bind(&ShowGeolocationPromptHelperTask, java_ref, origin)); |
| 528 base::Bind(&ShowGeolocationPromptHelperTask, | |
| 529 java_ref, | |
| 530 origin)); | |
| 531 } | 528 } |
| 532 } | 529 } |
| 533 | 530 |
| 534 } // anonymous namespace | 531 } // anonymous namespace |
| 535 | 532 |
| 536 void AwContents::ShowGeolocationPrompt(const GURL& requesting_frame, | 533 void AwContents::ShowGeolocationPrompt(const GURL& requesting_frame, |
| 537 base::Callback<void(bool)> callback) { | 534 base::Callback<void(bool)> callback) { |
| 538 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 535 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 539 | 536 |
| 540 GURL origin = requesting_frame.GetOrigin(); | 537 GURL origin = requesting_frame.GetOrigin(); |
| 541 bool show_prompt = pending_geolocation_prompts_.empty(); | 538 bool show_prompt = pending_geolocation_prompts_.empty(); |
| 542 pending_geolocation_prompts_.push_back(OriginCallback(origin, callback)); | 539 pending_geolocation_prompts_.push_back(OriginCallback(origin, callback)); |
| 543 if (show_prompt) { | 540 if (show_prompt) { |
| 544 ShowGeolocationPromptHelper(java_ref_, origin); | 541 ShowGeolocationPromptHelper(java_ref_, origin); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 if (removed_current_outstanding_callback) { | 582 if (removed_current_outstanding_callback) { |
| 586 JNIEnv* env = AttachCurrentThread(); | 583 JNIEnv* env = AttachCurrentThread(); |
| 587 ScopedJavaLocalRef<jobject> j_ref = java_ref_.get(env); | 584 ScopedJavaLocalRef<jobject> j_ref = java_ref_.get(env); |
| 588 if (j_ref.obj()) { | 585 if (j_ref.obj()) { |
| 589 devtools_instrumentation::ScopedEmbedderCallbackTask embedder_callback( | 586 devtools_instrumentation::ScopedEmbedderCallbackTask embedder_callback( |
| 590 "onGeolocationPermissionsHidePrompt"); | 587 "onGeolocationPermissionsHidePrompt"); |
| 591 Java_AwContents_onGeolocationPermissionsHidePrompt(env, j_ref); | 588 Java_AwContents_onGeolocationPermissionsHidePrompt(env, j_ref); |
| 592 } | 589 } |
| 593 if (!pending_geolocation_prompts_.empty()) { | 590 if (!pending_geolocation_prompts_.empty()) { |
| 594 ShowGeolocationPromptHelper(java_ref_, | 591 ShowGeolocationPromptHelper(java_ref_, |
| 595 pending_geolocation_prompts_.front().first); | 592 pending_geolocation_prompts_.front().first); |
| 596 } | 593 } |
| 597 } | 594 } |
| 598 } | 595 } |
| 599 | 596 |
| 600 void AwContents::OnPermissionRequest( | 597 void AwContents::OnPermissionRequest( |
| 601 base::android::ScopedJavaLocalRef<jobject> j_request, | 598 base::android::ScopedJavaLocalRef<jobject> j_request, |
| 602 AwPermissionRequest* request) { | 599 AwPermissionRequest* request) { |
| 603 DCHECK(!j_request.is_null()); | 600 DCHECK(!j_request.is_null()); |
| 604 DCHECK(request); | 601 DCHECK(request); |
| 605 | 602 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 666 void AwContents::CancelGeolocationPermissionRequests(const GURL& origin) { | 663 void AwContents::CancelGeolocationPermissionRequests(const GURL& origin) { |
| 667 JNIEnv* env = AttachCurrentThread(); | 664 JNIEnv* env = AttachCurrentThread(); |
| 668 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 665 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 669 if (obj.is_null()) | 666 if (obj.is_null()) |
| 670 return; | 667 return; |
| 671 | 668 |
| 672 if (Java_AwContents_useLegacyGeolocationPermissionAPI(env, obj)) { | 669 if (Java_AwContents_useLegacyGeolocationPermissionAPI(env, obj)) { |
| 673 HideGeolocationPrompt(origin); | 670 HideGeolocationPrompt(origin); |
| 674 return; | 671 return; |
| 675 } | 672 } |
| 676 permission_request_handler_->CancelRequest( | 673 permission_request_handler_->CancelRequest(origin, |
| 677 origin, AwPermissionRequest::Geolocation); | 674 AwPermissionRequest::Geolocation); |
| 678 } | 675 } |
| 679 | 676 |
| 680 void AwContents::RequestMIDISysexPermission( | 677 void AwContents::RequestMIDISysexPermission( |
| 681 const GURL& origin, | 678 const GURL& origin, |
| 682 const base::Callback<void(bool)>& callback) { | 679 const base::Callback<void(bool)>& callback) { |
| 683 permission_request_handler_->SendRequest( | 680 permission_request_handler_->SendRequest( |
| 684 std::unique_ptr<AwPermissionRequestDelegate>(new SimplePermissionRequest( | 681 std::unique_ptr<AwPermissionRequestDelegate>(new SimplePermissionRequest( |
| 685 origin, AwPermissionRequest::MIDISysex, callback))); | 682 origin, AwPermissionRequest::MIDISysex, callback))); |
| 686 } | 683 } |
| 687 | 684 |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 826 jfloat touch_major) { | 823 jfloat touch_major) { |
| 827 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 824 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 828 gfx::PointF touch_center(x, y); | 825 gfx::PointF touch_center(x, y); |
| 829 gfx::SizeF touch_area(touch_major, touch_major); | 826 gfx::SizeF touch_area(touch_major, touch_major); |
| 830 render_view_host_ext_->RequestNewHitTestDataAt(touch_center, touch_area); | 827 render_view_host_ext_->RequestNewHitTestDataAt(touch_center, touch_area); |
| 831 } | 828 } |
| 832 | 829 |
| 833 void AwContents::UpdateLastHitTestData(JNIEnv* env, | 830 void AwContents::UpdateLastHitTestData(JNIEnv* env, |
| 834 const JavaParamRef<jobject>& obj) { | 831 const JavaParamRef<jobject>& obj) { |
| 835 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 832 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 836 if (!render_view_host_ext_->HasNewHitTestData()) return; | 833 if (!render_view_host_ext_->HasNewHitTestData()) |
| 834 return; |
| 837 | 835 |
| 838 const AwHitTestData& data = render_view_host_ext_->GetLastHitTestData(); | 836 const AwHitTestData& data = render_view_host_ext_->GetLastHitTestData(); |
| 839 render_view_host_ext_->MarkHitTestDataRead(); | 837 render_view_host_ext_->MarkHitTestDataRead(); |
| 840 | 838 |
| 841 // Make sure to null the Java object if data is empty/invalid. | 839 // Make sure to null the Java object if data is empty/invalid. |
| 842 ScopedJavaLocalRef<jstring> extra_data_for_type; | 840 ScopedJavaLocalRef<jstring> extra_data_for_type; |
| 843 if (data.extra_data_for_type.length()) | 841 if (data.extra_data_for_type.length()) |
| 844 extra_data_for_type = ConvertUTF8ToJavaString( | 842 extra_data_for_type = |
| 845 env, data.extra_data_for_type); | 843 ConvertUTF8ToJavaString(env, data.extra_data_for_type); |
| 846 | 844 |
| 847 ScopedJavaLocalRef<jstring> href; | 845 ScopedJavaLocalRef<jstring> href; |
| 848 if (data.href.length()) | 846 if (data.href.length()) |
| 849 href = ConvertUTF16ToJavaString(env, data.href); | 847 href = ConvertUTF16ToJavaString(env, data.href); |
| 850 | 848 |
| 851 ScopedJavaLocalRef<jstring> anchor_text; | 849 ScopedJavaLocalRef<jstring> anchor_text; |
| 852 if (data.anchor_text.length()) | 850 if (data.anchor_text.length()) |
| 853 anchor_text = ConvertUTF16ToJavaString(env, data.anchor_text); | 851 anchor_text = ConvertUTF16ToJavaString(env, data.anchor_text); |
| 854 | 852 |
| 855 ScopedJavaLocalRef<jstring> img_src; | 853 ScopedJavaLocalRef<jstring> img_src; |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1171 } | 1169 } |
| 1172 | 1170 |
| 1173 namespace { | 1171 namespace { |
| 1174 void InvokeVisualStateCallback(const JavaObjectWeakGlobalRef& java_ref, | 1172 void InvokeVisualStateCallback(const JavaObjectWeakGlobalRef& java_ref, |
| 1175 jlong request_id, | 1173 jlong request_id, |
| 1176 const JavaRef<jobject>& callback, | 1174 const JavaRef<jobject>& callback, |
| 1177 bool result) { | 1175 bool result) { |
| 1178 JNIEnv* env = AttachCurrentThread(); | 1176 JNIEnv* env = AttachCurrentThread(); |
| 1179 ScopedJavaLocalRef<jobject> obj = java_ref.get(env); | 1177 ScopedJavaLocalRef<jobject> obj = java_ref.get(env); |
| 1180 if (obj.is_null()) | 1178 if (obj.is_null()) |
| 1181 return; | 1179 return; |
| 1182 Java_AwContents_invokeVisualStateCallback(env, obj, callback, request_id); | 1180 Java_AwContents_invokeVisualStateCallback(env, obj, callback, request_id); |
| 1183 } | 1181 } |
| 1184 } // namespace | 1182 } // namespace |
| 1185 | 1183 |
| 1186 void AwContents::InsertVisualStateCallback( | 1184 void AwContents::InsertVisualStateCallback( |
| 1187 JNIEnv* env, | 1185 JNIEnv* env, |
| 1188 const JavaParamRef<jobject>& obj, | 1186 const JavaParamRef<jobject>& obj, |
| 1189 jlong request_id, | 1187 jlong request_id, |
| 1190 const JavaParamRef<jobject>& callback) { | 1188 const JavaParamRef<jobject>& callback) { |
| 1191 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1189 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1289 | 1287 |
| 1290 void AwContents::SetExtraHeadersForUrl( | 1288 void AwContents::SetExtraHeadersForUrl( |
| 1291 JNIEnv* env, | 1289 JNIEnv* env, |
| 1292 const JavaParamRef<jobject>& obj, | 1290 const JavaParamRef<jobject>& obj, |
| 1293 const JavaParamRef<jstring>& url, | 1291 const JavaParamRef<jstring>& url, |
| 1294 const JavaParamRef<jstring>& jextra_headers) { | 1292 const JavaParamRef<jstring>& jextra_headers) { |
| 1295 std::string extra_headers; | 1293 std::string extra_headers; |
| 1296 if (jextra_headers) | 1294 if (jextra_headers) |
| 1297 extra_headers = ConvertJavaStringToUTF8(env, jextra_headers); | 1295 extra_headers = ConvertJavaStringToUTF8(env, jextra_headers); |
| 1298 AwResourceContext* resource_context = static_cast<AwResourceContext*>( | 1296 AwResourceContext* resource_context = static_cast<AwResourceContext*>( |
| 1299 AwBrowserContext::FromWebContents(web_contents_.get())-> | 1297 AwBrowserContext::FromWebContents(web_contents_.get()) |
| 1300 GetResourceContext()); | 1298 ->GetResourceContext()); |
| 1301 resource_context->SetExtraHeaders(GURL(ConvertJavaStringToUTF8(env, url)), | 1299 resource_context->SetExtraHeaders(GURL(ConvertJavaStringToUTF8(env, url)), |
| 1302 extra_headers); | 1300 extra_headers); |
| 1303 } | 1301 } |
| 1304 | 1302 |
| 1305 void AwContents::SetJsOnlineProperty(JNIEnv* env, | 1303 void AwContents::SetJsOnlineProperty(JNIEnv* env, |
| 1306 const JavaParamRef<jobject>& obj, | 1304 const JavaParamRef<jobject>& obj, |
| 1307 jboolean network_up) { | 1305 jboolean network_up) { |
| 1308 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1306 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1309 render_view_host_ext_->SetJsOnlineProperty(network_up); | 1307 render_view_host_ext_->SetJsOnlineProperty(network_up); |
| 1310 } | 1308 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1337 | 1335 |
| 1338 // TODO(sgurun) add support for posting a frame whose name is known (only | 1336 // TODO(sgurun) add support for posting a frame whose name is known (only |
| 1339 // main frame is supported at this time, see crbug.com/389721) | 1337 // main frame is supported at this time, see crbug.com/389721) |
| 1340 void AwContents::PostMessageToFrame(JNIEnv* env, | 1338 void AwContents::PostMessageToFrame(JNIEnv* env, |
| 1341 const JavaParamRef<jobject>& obj, | 1339 const JavaParamRef<jobject>& obj, |
| 1342 const JavaParamRef<jstring>& frame_name, | 1340 const JavaParamRef<jstring>& frame_name, |
| 1343 const JavaParamRef<jstring>& message, | 1341 const JavaParamRef<jstring>& message, |
| 1344 const JavaParamRef<jstring>& target_origin, | 1342 const JavaParamRef<jstring>& target_origin, |
| 1345 const JavaParamRef<jobjectArray>& ports) { | 1343 const JavaParamRef<jobjectArray>& ports) { |
| 1346 // Use an empty source origin for android webview. | 1344 // Use an empty source origin for android webview. |
| 1347 content::MessagePortProvider::PostMessageToFrame(web_contents_.get(), | 1345 content::MessagePortProvider::PostMessageToFrame( |
| 1348 env, | 1346 web_contents_.get(), env, nullptr, target_origin, message, ports); |
| 1349 nullptr, | |
| 1350 target_origin, | |
| 1351 message, | |
| 1352 ports); | |
| 1353 } | 1347 } |
| 1354 | 1348 |
| 1355 void AwContents::GrantFileSchemeAccesstoChildProcess( | 1349 void AwContents::GrantFileSchemeAccesstoChildProcess( |
| 1356 JNIEnv* env, | 1350 JNIEnv* env, |
| 1357 const JavaParamRef<jobject>& obj) { | 1351 const JavaParamRef<jobject>& obj) { |
| 1358 content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme( | 1352 content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme( |
| 1359 web_contents_->GetRenderProcessHost()->GetID(), url::kFileScheme); | 1353 web_contents_->GetRenderProcessHost()->GetID(), url::kFileScheme); |
| 1360 } | 1354 } |
| 1361 | 1355 |
| 1362 void AwContents::ResumeLoadingCreatedPopupWebContents( | 1356 void AwContents::ResumeLoadingCreatedPopupWebContents( |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1433 void AwContents::OnRenderProcessGone(int child_process_id) { | 1427 void AwContents::OnRenderProcessGone(int child_process_id) { |
| 1434 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1428 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1435 JNIEnv* env = AttachCurrentThread(); | 1429 JNIEnv* env = AttachCurrentThread(); |
| 1436 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 1430 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 1437 if (obj.is_null()) | 1431 if (obj.is_null()) |
| 1438 return; | 1432 return; |
| 1439 | 1433 |
| 1440 Java_AwContents_onRenderProcessGone(env, obj, child_process_id); | 1434 Java_AwContents_onRenderProcessGone(env, obj, child_process_id); |
| 1441 } | 1435 } |
| 1442 | 1436 |
| 1443 bool AwContents::OnRenderProcessGoneDetail(int child_process_id, | 1437 bool AwContents::OnRenderProcessGoneDetail(int child_process_id, bool crashed) { |
| 1444 bool crashed) { | |
| 1445 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1438 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1446 JNIEnv* env = AttachCurrentThread(); | 1439 JNIEnv* env = AttachCurrentThread(); |
| 1447 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 1440 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 1448 if (obj.is_null()) | 1441 if (obj.is_null()) |
| 1449 return false; | 1442 return false; |
| 1450 | 1443 |
| 1451 return Java_AwContents_onRenderProcessGoneDetail(env, obj, | 1444 return Java_AwContents_onRenderProcessGoneDetail(env, obj, child_process_id, |
| 1452 child_process_id, crashed); | 1445 crashed); |
| 1453 } | 1446 } |
| 1454 | 1447 |
| 1455 void AwContents::RenderProcessReady(content::RenderProcessHost* host) { | 1448 void AwContents::RenderProcessReady(content::RenderProcessHost* host) { |
| 1456 UpdateRendererPriority(); | 1449 UpdateRendererPriority(); |
| 1457 } | 1450 } |
| 1458 | 1451 |
| 1459 } // namespace android_webview | 1452 } // namespace android_webview |
| OLD | NEW |