summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--android_webview/browser/aw_browser_permission_request_delegate.h6
-rw-r--r--android_webview/browser/aw_content_browser_client.cc35
-rw-r--r--android_webview/browser/aw_contents_client_bridge_base.h6
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java7
-rw-r--r--android_webview/native/aw_contents.cc37
-rw-r--r--android_webview/native/aw_contents.h13
-rw-r--r--android_webview/native/aw_contents_client_bridge.cc31
-rw-r--r--android_webview/native/aw_contents_client_bridge.h5
-rw-r--r--android_webview/native/permission/simple_permission_request.cc (renamed from android_webview/native/permission/protected_media_id_permission_request.cc)16
-rw-r--r--android_webview/native/permission/simple_permission_request.h (renamed from android_webview/native/permission/protected_media_id_permission_request.h)22
-rw-r--r--android_webview/native/webview_native.gyp4
11 files changed, 107 insertions, 75 deletions
diff --git a/android_webview/browser/aw_browser_permission_request_delegate.h b/android_webview/browser/aw_browser_permission_request_delegate.h
index 035f0e2..501ea90 100644
--- a/android_webview/browser/aw_browser_permission_request_delegate.h
+++ b/android_webview/browser/aw_browser_permission_request_delegate.h
@@ -25,6 +25,12 @@ class AwBrowserPermissionRequestDelegate {
virtual void CancelProtectedMediaIdentifierPermissionRequests(
const GURL& origin) = 0;
+ virtual void RequestGeolocationPermission(
+ const GURL& origin,
+ const base::Callback<void(bool)>& callback) = 0;
+
+ virtual void CancelGeolocationPermissionRequests(const GURL& origin) = 0;
+
protected:
AwBrowserPermissionRequestDelegate() {}
};
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index cce4e8c..9181ce5 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -148,8 +148,19 @@ void CancelProtectedMediaIdentifierPermissionRequests(
delegate->CancelProtectedMediaIdentifierPermissionRequests(origin);
}
+void CancelGeolocationPermissionRequests(
+ int render_process_id,
+ int render_view_id,
+ const GURL& origin) {
+ AwBrowserPermissionRequestDelegate* delegate =
+ AwBrowserPermissionRequestDelegate::FromID(render_process_id,
+ render_view_id);
+ if (delegate)
+ delegate->CancelGeolocationPermissionRequests(origin);
}
+} // namespace
+
std::string AwContentBrowserClient::GetAcceptLangsImpl() {
// Start with the currnet locale.
std::string langs = l10n_util::GetDefaultLocale();
@@ -405,16 +416,24 @@ void AwContentBrowserClient::RequestGeolocationPermission(
bool user_gesture,
base::Callback<void(bool)> result_callback,
base::Closure* cancel_callback) {
- AwContentsClientBridgeBase* client =
- AwContentsClientBridgeBase::FromWebContents(web_contents);
- if (client) {
- client->RequestGeolocationPermission(
- web_contents, requesting_frame, result_callback, cancel_callback);
- } else {
- LOG(WARNING) << "Failed to find the associated bridge for geolocation "
- << "permission request.";
+ int render_process_id = web_contents->GetRenderProcessHost()->GetID();
+ int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID();
+ AwBrowserPermissionRequestDelegate* delegate =
+ AwBrowserPermissionRequestDelegate::FromID(render_process_id,
+ render_view_id);
+ if (delegate == NULL) {
+ DVLOG(0) << "Dropping GeolocationPermission request";
result_callback.Run(false);
+ return;
+ }
+
+ GURL origin = requesting_frame.GetOrigin();
+ if (cancel_callback) {
+ *cancel_callback = base::Bind(
+ CancelGeolocationPermissionRequests, render_process_id, render_view_id,
+ origin);
}
+ delegate->RequestGeolocationPermission(origin, result_callback);
}
void AwContentBrowserClient::RequestMidiSysExPermission(
diff --git a/android_webview/browser/aw_contents_client_bridge_base.h b/android_webview/browser/aw_contents_client_bridge_base.h
index 1ce1542..a24aa4b 100644
--- a/android_webview/browser/aw_contents_client_bridge_base.h
+++ b/android_webview/browser/aw_contents_client_bridge_base.h
@@ -65,12 +65,6 @@ class AwContentsClientBridgeBase {
= 0;
virtual bool ShouldOverrideUrlLoading(const base::string16& url) = 0;
-
- virtual void RequestGeolocationPermission(
- content::WebContents* web_contents,
- const GURL& requesting_frame,
- base::Callback<void(bool)> result_callback,
- base::Closure* cancel_callback) = 0;
};
} // namespace android_webview
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 340e18cc..df19d57 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -2195,6 +2195,13 @@ public class AwContents {
}
}
+ // Return true if the GeolocationPermissionAPI should be used.
+ @CalledByNative
+ private boolean useLegacyGeolocationPermissionAPI() {
+ // TODO (michaelbai): Need to verify whether this is correct when release.
+ return mContext.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.KITKAT;
+ }
+
//--------------------------------------------------------------------------------------------
// Native methods
//--------------------------------------------------------------------------------------------
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 9ae3a21..dd673ad 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -28,7 +28,7 @@
#include "android_webview/native/java_browser_view_renderer_helper.h"
#include "android_webview/native/permission/aw_permission_request.h"
#include "android_webview/native/permission/permission_request_handler.h"
-#include "android_webview/native/permission/protected_media_id_permission_request.h"
+#include "android_webview/native/permission/simple_permission_request.h"
#include "android_webview/native/state_serializer.h"
#include "android_webview/public/browser/draw_gl.h"
#include "base/android/jni_android.h"
@@ -598,8 +598,8 @@ void AwContents::RequestProtectedMediaIdentifierPermission(
const GURL& origin,
const base::Callback<void(bool)>& callback) {
permission_request_handler_->SendRequest(
- scoped_ptr<AwPermissionRequestDelegate>(
- new ProtectedMediaIdPermissionRequest(origin, callback)));
+ scoped_ptr<AwPermissionRequestDelegate>(new SimplePermissionRequest(
+ origin, AwPermissionRequest::ProtectedMediaId, callback)));
}
void AwContents::CancelProtectedMediaIdentifierPermissionRequests(
@@ -608,6 +608,37 @@ void AwContents::CancelProtectedMediaIdentifierPermissionRequests(
origin, AwPermissionRequest::ProtectedMediaId);
}
+void AwContents::RequestGeolocationPermission(
+ const GURL& origin,
+ const base::Callback<void(bool)>& callback) {
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+ if (obj.is_null())
+ return;
+
+ if (Java_AwContents_useLegacyGeolocationPermissionAPI(env, obj.obj())) {
+ ShowGeolocationPrompt(origin, callback);
+ return;
+ }
+ permission_request_handler_->SendRequest(
+ scoped_ptr<AwPermissionRequestDelegate>(new SimplePermissionRequest(
+ origin, AwPermissionRequest::Geolocation, callback)));
+}
+
+void AwContents::CancelGeolocationPermissionRequests(const GURL& origin) {
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+ if (obj.is_null())
+ return;
+
+ if (Java_AwContents_useLegacyGeolocationPermissionAPI(env, obj.obj())) {
+ HideGeolocationPrompt(origin);
+ return;
+ }
+ permission_request_handler_->CancelRequest(
+ origin, AwPermissionRequest::Geolocation);
+}
+
void AwContents::FindAllAsync(JNIEnv* env, jobject obj, jstring search_string) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
GetFindHelper()->FindAllAsync(ConvertJavaStringToUTF16(env, search_string));
diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h
index da49a8e..8f69b619 100644
--- a/android_webview/native/aw_contents.h
+++ b/android_webview/native/aw_contents.h
@@ -134,9 +134,6 @@ class AwContents : public FindHelper::Listener,
void DrawGL(AwDrawGLInfo* draw_info);
- // Geolocation API support
- void ShowGeolocationPrompt(const GURL& origin, base::Callback<void(bool)>);
- void HideGeolocationPrompt(const GURL& origin);
void InvokeGeolocationCallback(JNIEnv* env,
jobject obj,
jboolean value,
@@ -162,6 +159,12 @@ class AwContents : public FindHelper::Listener,
const base::Callback<void(bool)>& callback) OVERRIDE;
virtual void CancelProtectedMediaIdentifierPermissionRequests(
const GURL& origin) OVERRIDE;
+ virtual void RequestGeolocationPermission(
+ const GURL& origin,
+ const base::Callback<void(bool)>& callback) OVERRIDE;
+ virtual void CancelGeolocationPermissionRequests(
+ const GURL& origin) OVERRIDE;
+
// Find-in-page API and related methods.
void FindAllAsync(JNIEnv* env, jobject obj, jstring search_string);
@@ -229,6 +232,10 @@ class AwContents : public FindHelper::Listener,
void InitializeHardwareDrawIfNeeded();
+ // Geolocation API support
+ void ShowGeolocationPrompt(const GURL& origin, base::Callback<void(bool)>);
+ void HideGeolocationPrompt(const GURL& origin);
+
JavaObjectWeakGlobalRef java_ref_;
scoped_ptr<content::WebContents> web_contents_;
scoped_ptr<AwWebContentsDelegate> web_contents_delegate_;
diff --git a/android_webview/native/aw_contents_client_bridge.cc b/android_webview/native/aw_contents_client_bridge.cc
index a241e40..a4f87d3 100644
--- a/android_webview/native/aw_contents_client_bridge.cc
+++ b/android_webview/native/aw_contents_client_bridge.cc
@@ -46,15 +46,6 @@ void RecordClientCertificateKey(
client_cert.get(), private_key.get());
}
-void CancelGeolocationPermission(int render_process_id,
- int render_view_id,
- const GURL& requesting_frame) {
- AwContents* aw_contents = AwContents::FromID(
- render_process_id, render_view_id);
- if (aw_contents)
- aw_contents->HideGeolocationPrompt(requesting_frame);
-}
-
} // namespace
AwContentsClientBridge::AwContentsClientBridge(JNIEnv* env, jobject obj)
@@ -349,28 +340,6 @@ bool AwContentsClientBridge::ShouldOverrideUrlLoading(
jurl.obj());
}
-void AwContentsClientBridge::RequestGeolocationPermission(
- content::WebContents* web_contents,
- const GURL& requesting_frame,
- base::Callback<void(bool)> result_callback,
- base::Closure* cancel_callback) {
- AwContents* aw_contents = AwContents::FromWebContents(web_contents);
- if (!aw_contents) {
- result_callback.Run(false);
- return;
- }
-
- if (cancel_callback) {
- *cancel_callback = base::Bind(
- CancelGeolocationPermission,
- web_contents->GetRenderProcessHost()->GetID(),
- web_contents->GetRenderViewHost()->GetRoutingID(),
- requesting_frame);
- }
-
- aw_contents->ShowGeolocationPrompt(requesting_frame, result_callback);
-}
-
void AwContentsClientBridge::ConfirmJsResult(JNIEnv* env,
jobject,
int id,
diff --git a/android_webview/native/aw_contents_client_bridge.h b/android_webview/native/aw_contents_client_bridge.h
index cb51ec1..3c97f33 100644
--- a/android_webview/native/aw_contents_client_bridge.h
+++ b/android_webview/native/aw_contents_client_bridge.h
@@ -55,11 +55,6 @@ class AwContentsClientBridge : public AwContentsClientBridgeBase {
const content::JavaScriptDialogManager::DialogClosedCallback& callback)
OVERRIDE;
virtual bool ShouldOverrideUrlLoading(const base::string16& url) OVERRIDE;
- virtual void RequestGeolocationPermission(
- content::WebContents* web_contents,
- const GURL& requesting_frame,
- base::Callback<void(bool)> result_callback,
- base::Closure* cancel_callback) OVERRIDE;
// Methods called from Java.
void ProceedSslError(JNIEnv* env, jobject obj, jboolean proceed, jint id);
diff --git a/android_webview/native/permission/protected_media_id_permission_request.cc b/android_webview/native/permission/simple_permission_request.cc
index 77b09d2..42ddcb4 100644
--- a/android_webview/native/permission/protected_media_id_permission_request.cc
+++ b/android_webview/native/permission/simple_permission_request.cc
@@ -2,33 +2,35 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "android_webview/native/permission/protected_media_id_permission_request.h"
+#include "android_webview/native/permission/simple_permission_request.h"
#include "android_webview/native/permission/aw_permission_request.h"
#include "base/callback.h"
namespace android_webview {
-ProtectedMediaIdPermissionRequest::ProtectedMediaIdPermissionRequest(
+SimplePermissionRequest::SimplePermissionRequest(
const GURL& origin,
+ int64 resources,
const base::Callback<void(bool)>& callback)
: origin_(origin),
+ resources_(resources),
callback_(callback) {
}
-ProtectedMediaIdPermissionRequest::~ProtectedMediaIdPermissionRequest() {
+SimplePermissionRequest::~SimplePermissionRequest() {
}
-void ProtectedMediaIdPermissionRequest::NotifyRequestResult(bool allowed) {
+void SimplePermissionRequest::NotifyRequestResult(bool allowed) {
callback_.Run(allowed);
}
-const GURL& ProtectedMediaIdPermissionRequest::GetOrigin() {
+const GURL& SimplePermissionRequest::GetOrigin() {
return origin_;
}
-int64 ProtectedMediaIdPermissionRequest::GetResources() {
- return AwPermissionRequest::ProtectedMediaId;
+int64 SimplePermissionRequest::GetResources() {
+ return resources_;
}
} // namespace android_webview
diff --git a/android_webview/native/permission/protected_media_id_permission_request.h b/android_webview/native/permission/simple_permission_request.h
index 2a63365..25ba540 100644
--- a/android_webview/native/permission/protected_media_id_permission_request.h
+++ b/android_webview/native/permission/simple_permission_request.h
@@ -2,21 +2,22 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef ANDROID_WEBVIEW_NATIVE_PERMISSION_PROTECTED_MEDIA_ID_PERMISSION_REQUEST_H
-#define ANDROID_WEBVIEW_NATIVE_PERMISSION_PROTECTED_MEDIA_ID_PERMISSION_REQUEST_H
+#ifndef ANDROID_WEBVIEW_NATIVE_PERMISSION_SIMPLE_PERMISSION_REQUEST_H
+#define ANDROID_WEBVIEW_NATIVE_PERMISSION_SIMPLE_PERMISSION_REQUEST_H
-#include "base/callback.h"
#include "android_webview/native/permission/aw_permission_request_delegate.h"
+#include "base/callback.h"
namespace android_webview {
-// The AwPermissionRequestDelegate implementation for protected media id
-// permission request.
-class ProtectedMediaIdPermissionRequest : public AwPermissionRequestDelegate {
+// The class is used to handle the simple permission request which just needs
+// a callback with bool parameter to indicate the permission granted or not.
+class SimplePermissionRequest : public AwPermissionRequestDelegate {
public:
- ProtectedMediaIdPermissionRequest(const GURL& origin,
- const base::Callback<void(bool)>& callback);
- virtual ~ProtectedMediaIdPermissionRequest();
+ SimplePermissionRequest(const GURL& origin,
+ int64 resources,
+ const base::Callback<void(bool)>& callback);
+ virtual ~SimplePermissionRequest();
// AwPermissionRequestDelegate implementation.
virtual const GURL& GetOrigin() OVERRIDE;
@@ -25,9 +26,10 @@ class ProtectedMediaIdPermissionRequest : public AwPermissionRequestDelegate {
private:
const GURL origin_;
+ int64 resources_;
const base::Callback<void(bool)> callback_;
- DISALLOW_COPY_AND_ASSIGN(ProtectedMediaIdPermissionRequest);
+ DISALLOW_COPY_AND_ASSIGN(SimplePermissionRequest);
};
} // namespace android_webview
diff --git a/android_webview/native/webview_native.gyp b/android_webview/native/webview_native.gyp
index 3a332ec..efb8a15 100644
--- a/android_webview/native/webview_native.gyp
+++ b/android_webview/native/webview_native.gyp
@@ -89,8 +89,8 @@
'permission/permission_request_handler.h',
'permission/permission_request_handler_client.cc',
'permission/permission_request_handler_client.h',
- 'permission/protected_media_id_permission_request.cc',
- 'permission/protected_media_id_permission_request.h',
+ 'permission/simple_permission_request.cc',
+ 'permission/simple_permission_request.h',
'state_serializer.cc',
'state_serializer.h',
],