Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(964)

Side by Side Diff: android_webview/native/aw_contents.cc

Issue 12211047: Implementing geolocation for the Android Webview (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated indenting Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 709 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 jobject obj, 720 jobject obj,
721 jobject web_contents_delegate) { 721 jobject web_contents_delegate) {
722 AwContents* tab = new AwContents(env, obj, web_contents_delegate); 722 AwContents* tab = new AwContents(env, obj, web_contents_delegate);
723 return reinterpret_cast<jint>(tab); 723 return reinterpret_cast<jint>(tab);
724 } 724 }
725 725
726 bool RegisterAwContents(JNIEnv* env) { 726 bool RegisterAwContents(JNIEnv* env) {
727 return RegisterNativesImpl(env) >= 0; 727 return RegisterNativesImpl(env) >= 0;
728 } 728 }
729 729
730 void AwContents::OnGeolocationShowPrompt(int render_process_id, 730 namespace {
731 int render_view_id, 731
732 int bridge_id, 732 void GeolocationShowPrompt(JavaObjectWeakGlobalRef java_ref,
733 const GURL& requesting_frame) { 733 const GURL& origin) {
734 JNIEnv* env = AttachCurrentThread(); 734 JNIEnv* env = AttachCurrentThread();
735 ScopedJavaLocalRef<jstring> j_requesting_frame( 735 ScopedJavaLocalRef<jstring> j_origin(
736 ConvertUTF8ToJavaString(env, requesting_frame.spec())); 736 ConvertUTF8ToJavaString(env,origin.spec()));
joth 2013/02/08 02:15:01 nit: space after comma
Kristian Monsen 2013/02/12 18:53:03 Done.
737 Java_AwContents_onGeolocationPermissionsShowPrompt(env, 737 Java_AwContents_onGeolocationPermissionsShowPrompt(env,
738 java_ref_.get(env).obj(), render_process_id, render_view_id, bridge_id, 738 java_ref.get(env).obj(),
739 j_requesting_frame.obj()); 739 j_origin.obj());
740 } 740 }
741 741
742 void AwContents::OnGeolocationHidePrompt() { 742 } // anonymous namespace
743 // TODO(kristianm): Implement this 743
744 void AwContents::OnGeolocationShowPrompt(const GURL& requesting_frame,
745 base::Callback<void(bool)> callback) {
746 const GURL& origin = requesting_frame.GetOrigin();
747 bool show_prompt = geolocation_callbacks_.empty();
748 geolocation_callbacks_.push_back(OriginCallback(origin, callback));
749 if (show_prompt) {
750 GeolocationShowPrompt(java_ref_, origin);
751 }
752 }
753
754 void AwContents::InvokeGeolocationCallback(JNIEnv* env,
755 jobject obj,
756 jboolean value,
757 jstring origin) {
758 GURL callback_origin(base::android::ConvertJavaStringToUTF16(env, origin));
759 if (callback_origin.GetOrigin() == geolocation_callbacks_.front().first) {
760 geolocation_callbacks_.front().second.Run(value);
761 geolocation_callbacks_.pop_front();
762 if (!geolocation_callbacks_.empty()) {
763 GeolocationShowPrompt(java_ref_, geolocation_callbacks_.front().first);
joth 2013/02/08 02:15:01 this could create a callstack as deep as the numbe
Kristian Monsen 2013/02/12 18:53:03 Converted showprompt into a task, that actually fo
764 }
765 }
766 }
767
768 void AwContents::OnGeolocationHidePrompt(const GURL& origin) {
769 bool removed_current_outstanding_callback = false;
770 std::list<OriginCallback>::iterator it = geolocation_callbacks_.begin();
771 for ( ; it != geolocation_callbacks_.end(); ) {
joth 2013/02/08 02:15:01 This construct has it's very own special syntax:
Kristian Monsen 2013/02/12 18:53:03 Done.
772 if ((*it).first == origin.GetOrigin()) {
773 it = geolocation_callbacks_.erase(it);
774 if (it == geolocation_callbacks_.begin()) {
joth 2013/02/08 02:15:01 you still need to make this check *prior* to updat
Kristian Monsen 2013/02/12 18:53:03 I think it should fine, I did think of that. For t
775 removed_current_outstanding_callback = true;
776 }
777 } else {
778 it++;
779 }
780 }
781
782 if (removed_current_outstanding_callback) {
783 JNIEnv* env = AttachCurrentThread();
784 Java_AwContents_onGeolocationPermissionsHidePrompt(
785 env,
786 java_ref_.get(env).obj());
787 if (!geolocation_callbacks_.empty()) {
788 GeolocationShowPrompt(java_ref_,
789 geolocation_callbacks_.front().first);
790 }
791 }
744 } 792 }
745 793
746 jint AwContents::FindAllSync(JNIEnv* env, jobject obj, jstring search_string) { 794 jint AwContents::FindAllSync(JNIEnv* env, jobject obj, jstring search_string) {
747 return GetFindHelper()->FindAllSync( 795 return GetFindHelper()->FindAllSync(
748 ConvertJavaStringToUTF16(env, search_string)); 796 ConvertJavaStringToUTF16(env, search_string));
749 } 797 }
750 798
751 void AwContents::FindAllAsync(JNIEnv* env, jobject obj, jstring search_string) { 799 void AwContents::FindAllAsync(JNIEnv* env, jobject obj, jstring search_string) {
752 GetFindHelper()->FindAllAsync(ConvertJavaStringToUTF16(env, search_string)); 800 GetFindHelper()->FindAllAsync(ConvertJavaStringToUTF16(env, search_string));
753 } 801 }
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 if (!picture) { 1143 if (!picture) {
1096 render_view_host_ext_->CapturePictureSync(); 1144 render_view_host_ext_->CapturePictureSync();
1097 picture = RendererPictureMap::GetInstance()->GetRendererPicture( 1145 picture = RendererPictureMap::GetInstance()->GetRendererPicture(
1098 web_contents_->GetRoutingID()); 1146 web_contents_->GetRoutingID());
1099 } 1147 }
1100 1148
1101 return picture; 1149 return picture;
1102 } 1150 }
1103 1151
1104 } // namespace android_webview 1152 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698