123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: Jeremy Rose <[email protected]>
- Date: Tue, 12 Jul 2022 16:51:43 -0700
- Subject: short-circuit permissions checks in MediaStreamDevicesController
- The //components/permissions architecture is complicated and not that
- widely used in Chromium, and mostly oriented around showing permissions
- UI and/or remembering per-site permissions, which we're not interested
- in.
- Since we do a permissions check prior to invoking the
- MediaStreamDevicesController, and don't (yet) provide the ability to set
- granular permissions (e.g. allow video but not audio), just
- short-circuit all the permissions checks in MSDC for now to allow us to
- unduplicate this code.
- diff --git a/components/webrtc/media_stream_devices_controller.cc b/components/webrtc/media_stream_devices_controller.cc
- index efbea8c15b096344b0cc65cc337a9cdbd727cb55..ca31bba7fc6daf68e6862554a70032dfdc8285b5 100644
- --- a/components/webrtc/media_stream_devices_controller.cc
- +++ b/components/webrtc/media_stream_devices_controller.cc
- @@ -57,7 +57,8 @@ bool PermissionIsRequested(blink::PermissionType permission,
- void MediaStreamDevicesController::RequestPermissions(
- const content::MediaStreamRequest& request,
- MediaStreamDeviceEnumerator* enumerator,
- - ResultCallback callback) {
- + ResultCallback callback,
- + bool previously_approved) {
- content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
- request.render_process_id, request.render_frame_id);
- // The RFH may have been destroyed by the time the request is processed.
- @@ -93,6 +94,7 @@ void MediaStreamDevicesController::RequestPermissions(
-
- std::vector<blink::PermissionType> permission_types;
-
- +#if 0
- content::PermissionController* permission_controller =
- web_contents->GetBrowserContext()->GetPermissionController();
-
- @@ -153,19 +155,25 @@ void MediaStreamDevicesController::RequestPermissions(
- permission_types.push_back(blink::PermissionType::CAMERA_PAN_TILT_ZOOM);
- }
- }
- +#endif
-
- // It is OK to ignore `request.security_origin` because it will be calculated
- // from `render_frame_host` and we always ignore `requesting_origin` for
- // `AUDIO_CAPTURE` and `VIDEO_CAPTURE`.
- // `render_frame_host->GetMainFrame()->GetLastCommittedOrigin()` will be used
- // instead.
- - rfh->GetBrowserContext()
- - ->GetPermissionController()
- - ->RequestPermissionsFromCurrentDocument(
- - permission_types, rfh, request.user_gesture,
- - base::BindOnce(
- - &MediaStreamDevicesController::PromptAnsweredGroupedRequest,
- - std::move(controller)));
- + if (previously_approved) {
- + controller->PromptAnsweredGroupedRequest({blink::mojom::PermissionStatus::GRANTED /*audio*/,
- + blink::mojom::PermissionStatus::GRANTED /*video*/});
- + } else {
- + rfh->GetBrowserContext()
- + ->GetPermissionController()
- + ->RequestPermissionsFromCurrentDocument(
- + permission_types, rfh, request.user_gesture,
- + base::BindOnce(
- + &MediaStreamDevicesController::PromptAnsweredGroupedRequest,
- + std::move(controller)));
- + }
- }
-
- MediaStreamDevicesController::~MediaStreamDevicesController() {
- @@ -435,6 +443,7 @@ bool MediaStreamDevicesController::PermissionIsBlockedForReason(
- return false;
- }
-
- +#if 0
- // TODO(raymes): This function wouldn't be needed if
- // PermissionManager::RequestPermissions returned a denial reason.
- content::PermissionResult result =
- @@ -445,6 +454,7 @@ bool MediaStreamDevicesController::PermissionIsBlockedForReason(
- DCHECK_EQ(blink::mojom::PermissionStatus::DENIED, result.status);
- return true;
- }
- +#endif
- return false;
- }
-
- diff --git a/components/webrtc/media_stream_devices_controller.h b/components/webrtc/media_stream_devices_controller.h
- index b4258f59081c5d99b9c3edf02ca538499a5a435e..3bb6ac4e27fb39283d71a46dd3af7b9f7258d1e2 100644
- --- a/components/webrtc/media_stream_devices_controller.h
- +++ b/components/webrtc/media_stream_devices_controller.h
- @@ -48,7 +48,8 @@ class MediaStreamDevicesController {
- // synchronously or asynchronously returned via |callback|.
- static void RequestPermissions(const content::MediaStreamRequest& request,
- MediaStreamDeviceEnumerator* enumerator,
- - ResultCallback callback);
- + ResultCallback callback,
- + bool previously_approved = false);
-
- ~MediaStreamDevicesController();
-
|