summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc42
1 files changed, 34 insertions, 8 deletions
diff --git a/chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc b/chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc
index eff3e1a5a2d..821de11ab6a 100644
--- a/chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc
+++ b/chromium/third_party/blink/renderer/modules/mediastream/media_devices.cc
@@ -39,6 +39,10 @@ namespace blink {
namespace {
+const char kFeaturePolicyBlocked[] =
+ "Access to the feature \"display-capture\" is disallowed by permission "
+ "policy.";
+
class PromiseResolverCallbacks final : public UserMediaRequest::Callbacks {
public:
explicit PromiseResolverCallbacks(ScriptPromiseResolver* resolver)
@@ -185,6 +189,26 @@ ScriptPromise MediaDevices::getCurrentBrowsingContextMedia(
ScriptState* script_state,
const MediaStreamConstraints* options,
ExceptionState& exception_state) {
+ const ExecutionContext* const context = GetExecutionContext();
+ if (!context) {
+ exception_state.ThrowDOMException(
+ DOMExceptionCode::kNotSupportedError,
+ "The implementation did not support the requested type of object or "
+ "operation.");
+ return ScriptPromise();
+ }
+
+ // This call should not be possible otherwise, as per the RuntimeEnabled
+ // in the IDL.
+ CHECK(RuntimeEnabledFeatures::GetCurrentBrowsingContextMediaEnabled(context));
+
+ if (!context->IsFeatureEnabled(
+ mojom::blink::FeaturePolicyFeature::kDisplayCapture,
+ ReportOptions::kReportOnFailure)) {
+ exception_state.ThrowSecurityError(kFeaturePolicyBlocked);
+ return ScriptPromise();
+ }
+
return SendUserMediaRequest(
script_state,
UserMediaRequest::MediaType::kGetCurrentBrowsingContextMedia, options,
@@ -297,7 +321,7 @@ namespace {
void RecordEnumeratedDevices(ScriptPromiseResolver* resolver,
const MediaDeviceInfoVector& media_devices) {
if (!IdentifiabilityStudySettings::Get()->IsWebFeatureAllowed(
- WebFeature::kMediaDevicesEnumerateDevices)) {
+ WebFeature::kIdentifiabilityMediaDevicesEnumerateDevices)) {
return;
}
Document* document = LocalDOMWindow::From(resolver->GetScriptState())
@@ -305,13 +329,13 @@ void RecordEnumeratedDevices(ScriptPromiseResolver* resolver,
->GetDocument();
IdentifiableTokenBuilder builder;
for (const auto& device_info : media_devices) {
- builder.AddToken(IdentifiabilityBenignStringToken(device_info->deviceId()));
+ // Ignore device_id since that varies per-site.
builder.AddToken(IdentifiabilityBenignStringToken(device_info->kind()));
builder.AddToken(IdentifiabilityBenignStringToken(device_info->label()));
- builder.AddToken(IdentifiabilityBenignStringToken(device_info->groupId()));
+ // Ignore group_id since that is varies per-site.
}
IdentifiabilityMetricBuilder(document->UkmSourceID())
- .SetWebfeature(WebFeature::kMediaDevicesEnumerateDevices,
+ .SetWebfeature(WebFeature::kIdentifiabilityMediaDevicesEnumerateDevices,
builder.GetToken())
.Record(document->UkmRecorder());
}
@@ -361,12 +385,15 @@ void MediaDevices::DevicesEnumerated(
mojom::blink::MediaDeviceType device_type =
static_cast<mojom::blink::MediaDeviceType>(i);
WebMediaDeviceInfo device_info = enumeration[i][j];
+ String device_label = String::FromUTF8(device_info.label);
+ if (device_label.Contains("AirPods")) {
+ device_label = "AirPods";
+ }
if (device_type == mojom::blink::MediaDeviceType::MEDIA_AUDIO_INPUT ||
device_type == mojom::blink::MediaDeviceType::MEDIA_VIDEO_INPUT) {
InputDeviceInfo* input_device_info =
MakeGarbageCollected<InputDeviceInfo>(
- String::FromUTF8(device_info.device_id),
- String::FromUTF8(device_info.label),
+ String::FromUTF8(device_info.device_id), device_label,
String::FromUTF8(device_info.group_id), device_type);
if (device_type == mojom::blink::MediaDeviceType::MEDIA_VIDEO_INPUT &&
!video_input_capabilities.IsEmpty()) {
@@ -381,8 +408,7 @@ void MediaDevices::DevicesEnumerated(
media_devices.push_back(input_device_info);
} else {
media_devices.push_back(MakeGarbageCollected<MediaDeviceInfo>(
- String::FromUTF8(device_info.device_id),
- String::FromUTF8(device_info.label),
+ String::FromUTF8(device_info.device_id), device_label,
String::FromUTF8(device_info.group_id), device_type));
}
}