| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/browser/aw_permission_manager.h" | 5 #include "android_webview/browser/aw_permission_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "android_webview/browser/aw_browser_permission_request_delegate.h" | 9 #include "android_webview/browser/aw_browser_permission_request_delegate.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 callback.Run(content::PERMISSION_STATUS_GRANTED); | 251 callback.Run(content::PERMISSION_STATUS_GRANTED); |
| 252 break; | 252 break; |
| 253 case PermissionType::NUM: | 253 case PermissionType::NUM: |
| 254 NOTREACHED() << "PermissionType::NUM was not expected here."; | 254 NOTREACHED() << "PermissionType::NUM was not expected here."; |
| 255 callback.Run(content::PERMISSION_STATUS_DENIED); | 255 callback.Run(content::PERMISSION_STATUS_DENIED); |
| 256 break; | 256 break; |
| 257 } | 257 } |
| 258 return request_id; | 258 return request_id; |
| 259 } | 259 } |
| 260 | 260 |
| 261 int AwPermissionManager::RequestPermissions( |
| 262 const std::vector<PermissionType>& permissions, |
| 263 content::RenderFrameHost* render_frame_host, |
| 264 const GURL& requesting_origin, |
| 265 bool user_gesture, |
| 266 const base::Callback<void( |
| 267 const std::vector<PermissionStatus>&)>& callback) { |
| 268 NOTIMPLEMENTED() << "RequestPermissions has not been implemented in WebView"; |
| 269 |
| 270 std::vector<PermissionStatus> result; |
| 271 const GURL& embedding_origin = |
| 272 content::WebContents::FromRenderFrameHost(render_frame_host) |
| 273 ->GetLastCommittedURL().GetOrigin(); |
| 274 for (PermissionType type : permissions) { |
| 275 result.push_back(GetPermissionStatus( |
| 276 type, requesting_origin, embedding_origin)); |
| 277 } |
| 278 return kNoPendingOperation; |
| 279 } |
| 280 |
| 261 // static | 281 // static |
| 262 void AwPermissionManager::OnRequestResponse( | 282 void AwPermissionManager::OnRequestResponse( |
| 263 const base::WeakPtr<AwPermissionManager>& manager, | 283 const base::WeakPtr<AwPermissionManager>& manager, |
| 264 int request_id, | 284 int request_id, |
| 265 const base::Callback<void(PermissionStatus)>& callback, | 285 const base::Callback<void(PermissionStatus)>& callback, |
| 266 bool allowed) { | 286 bool allowed) { |
| 267 PermissionStatus status = allowed ? content::PERMISSION_STATUS_GRANTED | 287 PermissionStatus status = allowed ? content::PERMISSION_STATUS_GRANTED |
| 268 : content::PERMISSION_STATUS_DENIED; | 288 : content::PERMISSION_STATUS_DENIED; |
| 269 if (manager.get()) { | 289 if (manager.get()) { |
| 270 PendingRequest* pending_request = | 290 PendingRequest* pending_request = |
| (...skipping 12 matching lines...) Expand all Loading... |
| 283 manager->result_cache_->SetResult( | 303 manager->result_cache_->SetResult( |
| 284 pending_request->permission, | 304 pending_request->permission, |
| 285 pending_request->requesting_origin, | 305 pending_request->requesting_origin, |
| 286 pending_request->embedding_origin, | 306 pending_request->embedding_origin, |
| 287 status); | 307 status); |
| 288 manager->pending_requests_.Remove(request_id); | 308 manager->pending_requests_.Remove(request_id); |
| 289 } | 309 } |
| 290 callback.Run(status); | 310 callback.Run(status); |
| 291 } | 311 } |
| 292 | 312 |
| 293 void AwPermissionManager::CancelPermissionRequest( | 313 void AwPermissionManager::CancelPermissionRequest(int request_id) { |
| 294 PermissionType permission, | |
| 295 content::RenderFrameHost* render_frame_host, | |
| 296 int request_id, | |
| 297 const GURL& origin) { | |
| 298 PendingRequest* pending_request = pending_requests_.Lookup(request_id); | 314 PendingRequest* pending_request = pending_requests_.Lookup(request_id); |
| 299 if (!pending_request) | 315 if (!pending_request) |
| 300 return; | 316 return; |
| 301 | 317 |
| 318 content::RenderFrameHost* render_frame_host = |
| 319 content::RenderFrameHost::FromID(pending_request->render_process_id, |
| 320 pending_request->render_frame_id); |
| 321 content::WebContents* web_contents = |
| 322 content::WebContents::FromRenderFrameHost(render_frame_host); |
| 323 DCHECK(web_contents); |
| 324 |
| 302 // The caller is canceling (presumably) the most recent request. Assuming the | 325 // The caller is canceling (presumably) the most recent request. Assuming the |
| 303 // request did not complete, the user did not respond to the requset. | 326 // request did not complete, the user did not respond to the requset. |
| 304 // Thus, assume we do not know the result. | 327 // Thus, assume we do not know the result. |
| 305 const GURL& embedding_origin = | 328 const GURL& embedding_origin = web_contents |
| 306 content::WebContents::FromRenderFrameHost(render_frame_host) | |
| 307 ->GetLastCommittedURL().GetOrigin(); | 329 ->GetLastCommittedURL().GetOrigin(); |
| 308 result_cache_->ClearResult(permission, origin, embedding_origin); | 330 result_cache_->ClearResult( |
| 331 pending_request->permission, |
| 332 pending_request->requesting_origin, |
| 333 embedding_origin); |
| 309 | 334 |
| 310 int render_process_id = render_frame_host->GetProcess()->GetID(); | |
| 311 int render_frame_id = render_frame_host->GetRoutingID(); | |
| 312 AwBrowserPermissionRequestDelegate* delegate = | 335 AwBrowserPermissionRequestDelegate* delegate = |
| 313 AwBrowserPermissionRequestDelegate::FromID(render_process_id, | 336 AwBrowserPermissionRequestDelegate::FromID( |
| 314 render_frame_id); | 337 pending_request->render_process_id, |
| 338 pending_request->render_frame_id); |
| 315 if (!delegate) { | 339 if (!delegate) { |
| 316 pending_requests_.Remove(request_id); | 340 pending_requests_.Remove(request_id); |
| 317 return; | 341 return; |
| 318 } | 342 } |
| 319 | 343 |
| 320 switch (permission) { | 344 switch (pending_request->permission) { |
| 321 case PermissionType::GEOLOCATION: | 345 case PermissionType::GEOLOCATION: |
| 322 delegate->CancelGeolocationPermissionRequests(origin); | 346 delegate->CancelGeolocationPermissionRequests( |
| 347 pending_request->requesting_origin); |
| 323 break; | 348 break; |
| 324 case PermissionType::PROTECTED_MEDIA_IDENTIFIER: | 349 case PermissionType::PROTECTED_MEDIA_IDENTIFIER: |
| 325 delegate->CancelProtectedMediaIdentifierPermissionRequests(origin); | 350 delegate->CancelProtectedMediaIdentifierPermissionRequests( |
| 351 pending_request->requesting_origin); |
| 326 break; | 352 break; |
| 327 case PermissionType::MIDI_SYSEX: | 353 case PermissionType::MIDI_SYSEX: |
| 328 delegate->CancelMIDISysexPermissionRequests(origin); | 354 delegate->CancelMIDISysexPermissionRequests( |
| 355 pending_request->requesting_origin); |
| 329 break; | 356 break; |
| 330 case PermissionType::NOTIFICATIONS: | 357 case PermissionType::NOTIFICATIONS: |
| 331 case PermissionType::PUSH_MESSAGING: | 358 case PermissionType::PUSH_MESSAGING: |
| 332 case PermissionType::DURABLE_STORAGE: | 359 case PermissionType::DURABLE_STORAGE: |
| 333 case PermissionType::AUDIO_CAPTURE: | 360 case PermissionType::AUDIO_CAPTURE: |
| 334 case PermissionType::VIDEO_CAPTURE: | 361 case PermissionType::VIDEO_CAPTURE: |
| 335 NOTIMPLEMENTED() << "CancelPermission not implemented for " | 362 NOTIMPLEMENTED() << "CancelPermission not implemented for " |
| 336 << static_cast<int>(permission); | 363 << static_cast<int>(pending_request->permission); |
| 337 break; | 364 break; |
| 338 case PermissionType::MIDI: | 365 case PermissionType::MIDI: |
| 339 // There is nothing to cancel so this is simply ignored. | 366 // There is nothing to cancel so this is simply ignored. |
| 340 break; | 367 break; |
| 341 case PermissionType::NUM: | 368 case PermissionType::NUM: |
| 342 NOTREACHED() << "PermissionType::NUM was not expected here."; | 369 NOTREACHED() << "PermissionType::NUM was not expected here."; |
| 343 break; | 370 break; |
| 344 } | 371 } |
| 345 | 372 |
| 346 pending_requests_.Remove(request_id); | 373 pending_requests_.Remove(request_id); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 const GURL& embedding_origin, | 406 const GURL& embedding_origin, |
| 380 const base::Callback<void(PermissionStatus)>& callback) { | 407 const base::Callback<void(PermissionStatus)>& callback) { |
| 381 return kNoPendingOperation; | 408 return kNoPendingOperation; |
| 382 } | 409 } |
| 383 | 410 |
| 384 void AwPermissionManager::UnsubscribePermissionStatusChange( | 411 void AwPermissionManager::UnsubscribePermissionStatusChange( |
| 385 int subscription_id) { | 412 int subscription_id) { |
| 386 } | 413 } |
| 387 | 414 |
| 388 } // namespace android_webview | 415 } // namespace android_webview |
| OLD | NEW |