Index: android_webview/browser/aw_permission_manager.cc |
diff --git a/android_webview/browser/aw_permission_manager.cc b/android_webview/browser/aw_permission_manager.cc |
index 6474513250f667796a3513b10f31d50da4fb91b3..d2a6233e18a9a1222768f23aa33aedc5ce10f4dc 100644 |
--- a/android_webview/browser/aw_permission_manager.cc |
+++ b/android_webview/browser/aw_permission_manager.cc |
@@ -258,6 +258,26 @@ int AwPermissionManager::RequestPermission( |
return request_id; |
} |
+int AwPermissionManager::RequestPermissions( |
+ const std::vector<PermissionType>& permissions, |
+ content::RenderFrameHost* render_frame_host, |
+ const GURL& requesting_origin, |
+ bool user_gesture, |
+ const base::Callback<void( |
+ const std::vector<PermissionStatus>&)>& callback) { |
+ NOTIMPLEMENTED() << "RequestPermissions has not been implemented in WebView"; |
+ |
+ std::vector<PermissionStatus> result; |
+ const GURL& embedding_origin = |
+ content::WebContents::FromRenderFrameHost(render_frame_host) |
+ ->GetLastCommittedURL().GetOrigin(); |
+ for (PermissionType type : permissions) { |
+ result.push_back(GetPermissionStatus( |
+ type, requesting_origin, embedding_origin)); |
+ } |
+ return kNoPendingOperation; |
+} |
+ |
// static |
void AwPermissionManager::OnRequestResponse( |
const base::WeakPtr<AwPermissionManager>& manager, |
@@ -290,42 +310,49 @@ void AwPermissionManager::OnRequestResponse( |
callback.Run(status); |
} |
-void AwPermissionManager::CancelPermissionRequest( |
- PermissionType permission, |
- content::RenderFrameHost* render_frame_host, |
- int request_id, |
- const GURL& origin) { |
+void AwPermissionManager::CancelPermissionRequest(int request_id) { |
PendingRequest* pending_request = pending_requests_.Lookup(request_id); |
if (!pending_request) |
return; |
+ content::RenderFrameHost* render_frame_host = |
+ content::RenderFrameHost::FromID(pending_request->render_process_id, |
+ pending_request->render_frame_id); |
+ content::WebContents* web_contents = |
+ content::WebContents::FromRenderFrameHost(render_frame_host); |
+ DCHECK(web_contents); |
+ |
// The caller is canceling (presumably) the most recent request. Assuming the |
// request did not complete, the user did not respond to the requset. |
// Thus, assume we do not know the result. |
- const GURL& embedding_origin = |
- content::WebContents::FromRenderFrameHost(render_frame_host) |
+ const GURL& embedding_origin = web_contents |
->GetLastCommittedURL().GetOrigin(); |
- result_cache_->ClearResult(permission, origin, embedding_origin); |
+ result_cache_->ClearResult( |
+ pending_request->permission, |
+ pending_request->requesting_origin, |
+ embedding_origin); |
- int render_process_id = render_frame_host->GetProcess()->GetID(); |
- int render_frame_id = render_frame_host->GetRoutingID(); |
AwBrowserPermissionRequestDelegate* delegate = |
- AwBrowserPermissionRequestDelegate::FromID(render_process_id, |
- render_frame_id); |
+ AwBrowserPermissionRequestDelegate::FromID( |
+ pending_request->render_process_id, |
+ pending_request->render_frame_id); |
if (!delegate) { |
pending_requests_.Remove(request_id); |
return; |
} |
- switch (permission) { |
+ switch (pending_request->permission) { |
case PermissionType::GEOLOCATION: |
- delegate->CancelGeolocationPermissionRequests(origin); |
+ delegate->CancelGeolocationPermissionRequests( |
+ pending_request->requesting_origin); |
break; |
case PermissionType::PROTECTED_MEDIA_IDENTIFIER: |
- delegate->CancelProtectedMediaIdentifierPermissionRequests(origin); |
+ delegate->CancelProtectedMediaIdentifierPermissionRequests( |
+ pending_request->requesting_origin); |
break; |
case PermissionType::MIDI_SYSEX: |
- delegate->CancelMIDISysexPermissionRequests(origin); |
+ delegate->CancelMIDISysexPermissionRequests( |
+ pending_request->requesting_origin); |
break; |
case PermissionType::NOTIFICATIONS: |
case PermissionType::PUSH_MESSAGING: |
@@ -333,7 +360,7 @@ void AwPermissionManager::CancelPermissionRequest( |
case PermissionType::AUDIO_CAPTURE: |
case PermissionType::VIDEO_CAPTURE: |
NOTIMPLEMENTED() << "CancelPermission not implemented for " |
- << static_cast<int>(permission); |
+ << static_cast<int>(pending_request->permission); |
break; |
case PermissionType::MIDI: |
// There is nothing to cancel so this is simply ignored. |