Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 <android/bitmap.h> | 7 #include <android/bitmap.h> |
| 8 #include <sys/system_properties.h> | 8 #include <sys/system_properties.h> |
| 9 | 9 |
| 10 #include "android_webview/browser/aw_browser_context.h" | 10 #include "android_webview/browser/aw_browser_context.h" |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 208 SetWebContents(reinterpret_cast<content::WebContents*>(new_wc)); | 208 SetWebContents(reinterpret_cast<content::WebContents*>(new_wc)); |
| 209 } | 209 } |
| 210 | 210 |
| 211 AwContents::~AwContents() { | 211 AwContents::~AwContents() { |
| 212 DCHECK(AwContents::FromWebContents(web_contents_.get()) == this); | 212 DCHECK(AwContents::FromWebContents(web_contents_.get()) == this); |
| 213 web_contents_->RemoveUserData(kAwContentsUserDataKey); | 213 web_contents_->RemoveUserData(kAwContentsUserDataKey); |
| 214 if (find_helper_.get()) | 214 if (find_helper_.get()) |
| 215 find_helper_->SetListener(NULL); | 215 find_helper_->SetListener(NULL); |
| 216 if (icon_helper_.get()) | 216 if (icon_helper_.get()) |
| 217 icon_helper_->SetListener(NULL); | 217 icon_helper_->SetListener(NULL); |
| 218 geolocation_callbacks_.clear(); | |
|
boliu
2013/02/06 20:29:54
is this necessary?
Kristian Monsen
2013/02/08 00:07:44
When thinking about it, no. It happens automatical
| |
| 218 } | 219 } |
| 219 | 220 |
| 220 void AwContents::DrawGL(AwDrawGLInfo* draw_info) { | 221 void AwContents::DrawGL(AwDrawGLInfo* draw_info) { |
| 221 | 222 |
| 222 TRACE_EVENT0("AwContents", "AwContents::DrawGL"); | 223 TRACE_EVENT0("AwContents", "AwContents::DrawGL"); |
| 223 | 224 |
| 224 if (view_size_.IsEmpty() || !scissor_clip_layer_ || | 225 if (view_size_.IsEmpty() || !scissor_clip_layer_ || |
| 225 draw_info->mode == AwDrawGLInfo::kModeProcess) | 226 draw_info->mode == AwDrawGLInfo::kModeProcess) |
| 226 return; | 227 return; |
| 227 | 228 |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 704 jobject obj, | 705 jobject obj, |
| 705 jobject web_contents_delegate) { | 706 jobject web_contents_delegate) { |
| 706 AwContents* tab = new AwContents(env, obj, web_contents_delegate); | 707 AwContents* tab = new AwContents(env, obj, web_contents_delegate); |
| 707 return reinterpret_cast<jint>(tab); | 708 return reinterpret_cast<jint>(tab); |
| 708 } | 709 } |
| 709 | 710 |
| 710 bool RegisterAwContents(JNIEnv* env) { | 711 bool RegisterAwContents(JNIEnv* env) { |
| 711 return RegisterNativesImpl(env) >= 0; | 712 return RegisterNativesImpl(env) >= 0; |
| 712 } | 713 } |
| 713 | 714 |
| 714 void AwContents::OnGeolocationShowPrompt(int render_process_id, | 715 namespace { |
| 715 int render_view_id, | 716 |
| 716 int bridge_id, | 717 void GeolocationShowPrompt( |
| 717 const GURL& requesting_frame) { | 718 JavaObjectWeakGlobalRef java_ref, const GURL& origin) { |
| 718 JNIEnv* env = AttachCurrentThread(); | 719 JNIEnv* env = AttachCurrentThread(); |
| 719 ScopedJavaLocalRef<jstring> j_requesting_frame( | 720 ScopedJavaLocalRef<jstring> j_origin( |
| 720 ConvertUTF8ToJavaString(env, requesting_frame.spec())); | 721 ConvertUTF8ToJavaString(env,origin.spec())); |
| 721 Java_AwContents_onGeolocationPermissionsShowPrompt(env, | 722 Java_AwContents_onGeolocationPermissionsShowPrompt( |
| 722 java_ref_.get(env).obj(), render_process_id, render_view_id, bridge_id, | 723 env, java_ref.get(env).obj(), j_origin.obj()); |
| 723 j_requesting_frame.obj()); | |
| 724 } | 724 } |
| 725 | 725 |
| 726 void AwContents::OnGeolocationHidePrompt() { | 726 } |
|
boliu
2013/02/06 20:29:54
// namespace
Kristian Monsen
2013/02/08 00:07:44
Done.
| |
| 727 // TODO(kristianm): Implement this | 727 |
| 728 void AwContents::OnGeolocationShowPrompt( | |
| 729 const GURL& requesting_frame, base::Callback<void(bool)> callback) { | |
| 730 const GURL& origin = requesting_frame.GetOrigin(); | |
| 731 bool show_prompt = geolocation_callbacks_.empty(); | |
| 732 geolocation_callbacks_.push_back(OriginCallback(origin, callback)); | |
|
boliu
2013/02/06 20:29:54
So using a list means if there are multiple reques
joth
2013/02/06 22:09:51
onGeolocationPermissionsShowPrompt on java side al
| |
| 733 if (show_prompt) { | |
| 734 GeolocationShowPrompt(java_ref_, origin); | |
| 735 } | |
| 736 } | |
| 737 | |
| 738 void AwContents::InvokeGeolocationCallback( | |
| 739 JNIEnv* env, jobject obj, jboolean value, jstring origin) { | |
| 740 GURL callback_origin(base::android::ConvertJavaStringToUTF16(env, origin)); | |
| 741 if (callback_origin.GetOrigin() == geolocation_callbacks_.front().first) { | |
| 742 geolocation_callbacks_.front().second.Run(value); | |
| 743 geolocation_callbacks_.pop_front(); | |
| 744 if (!geolocation_callbacks_.empty()) { | |
| 745 GeolocationShowPrompt(java_ref_, geolocation_callbacks_.front().first); | |
| 746 } | |
| 747 } | |
| 748 } | |
| 749 | |
| 750 void AwContents::OnGeolocationHidePrompt(const GURL& origin) { | |
| 751 std::list<OriginCallback>::iterator it = geolocation_callbacks_.begin(); | |
| 752 bool removed_current_outstanding_callback = false; | |
| 753 for ( ; it != geolocation_callbacks_.end(); ++it) { | |
| 754 if ((*it).first == origin.GetOrigin()) { | |
| 755 it = geolocation_callbacks_.erase(it); | |
| 756 if (it == geolocation_callbacks_.begin()) { | |
|
joth
2013/02/06 22:09:51
'it' will be invalidated by the erase() call, so y
Kristian Monsen
2013/02/08 00:07:44
seting it to the next element after the erase, but
joth
2013/02/08 02:15:01
Right - We have upstream instrumentation tests and
| |
| 757 removed_current_outstanding_callback = true; | |
| 758 } | |
| 759 } | |
| 760 } | |
| 761 if (removed_current_outstanding_callback) { | |
|
boliu
2013/02/06 20:29:54
Can removed_current_outstanding_callback ever be f
Kristian Monsen
2013/02/08 00:07:44
Yes, if it was cancelled before the callback came
| |
| 762 JNIEnv* env = AttachCurrentThread(); | |
| 763 Java_AwContents_onGeolocationPermissionsHidePrompt( | |
| 764 env, java_ref_.get(env).obj()); | |
| 765 GeolocationShowPrompt( | |
| 766 java_ref_, geolocation_callbacks_.front().first); | |
|
boliu
2013/02/06 20:29:54
check front() is not null?
Kristian Monsen
2013/02/08 00:07:44
Good catch! Adding an empty list check.
| |
| 767 } | |
| 728 } | 768 } |
| 729 | 769 |
| 730 jint AwContents::FindAllSync(JNIEnv* env, jobject obj, jstring search_string) { | 770 jint AwContents::FindAllSync(JNIEnv* env, jobject obj, jstring search_string) { |
| 731 return GetFindHelper()->FindAllSync( | 771 return GetFindHelper()->FindAllSync( |
| 732 ConvertJavaStringToUTF16(env, search_string)); | 772 ConvertJavaStringToUTF16(env, search_string)); |
| 733 } | 773 } |
| 734 | 774 |
| 735 void AwContents::FindAllAsync(JNIEnv* env, jobject obj, jstring search_string) { | 775 void AwContents::FindAllAsync(JNIEnv* env, jobject obj, jstring search_string) { |
| 736 GetFindHelper()->FindAllAsync(ConvertJavaStringToUTF16(env, search_string)); | 776 GetFindHelper()->FindAllAsync(ConvertJavaStringToUTF16(env, search_string)); |
| 737 } | 777 } |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1076 if (!picture) { | 1116 if (!picture) { |
| 1077 render_view_host_ext_->CapturePictureSync(); | 1117 render_view_host_ext_->CapturePictureSync(); |
| 1078 picture = RendererPictureMap::GetInstance()->GetRendererPicture( | 1118 picture = RendererPictureMap::GetInstance()->GetRendererPicture( |
| 1079 web_contents_->GetRoutingID()); | 1119 web_contents_->GetRoutingID()); |
| 1080 } | 1120 } |
| 1081 | 1121 |
| 1082 return picture; | 1122 return picture; |
| 1083 } | 1123 } |
| 1084 | 1124 |
| 1085 } // namespace android_webview | 1125 } // namespace android_webview |
| OLD | NEW |