Commit 2f05627a authored by Guido Urdaneta's avatar Guido Urdaneta Committed by Chromium LUCI CQ

Record identifiability metrics before getUserMedia() settles

When the promise of a getUserMedia() call is settled, it can result
in the detachment of the execution context.
The idenfiability metrics for getUserMedia() require a valid
execution context and therefore should run before the getUserMedia()
call ends.

Bug: 1156510
Change-Id: I29975c9d779858b1574506f5d60ecfe4ae6a1690
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2580070
Auto-Submit: Guido Urdaneta <guidou@chromium.org>
Commit-Queue: Chris Fredrickson <cfredric@chromium.org>
Reviewed-by: default avatarChris Fredrickson <cfredric@chromium.org>
Cr-Commit-Position: refs/heads/master@{#835178}
parent 20ad996e
...@@ -556,9 +556,10 @@ void UserMediaRequest::OnMediaStreamInitialized(MediaStream* stream) { ...@@ -556,9 +556,10 @@ void UserMediaRequest::OnMediaStreamInitialized(MediaStream* stream) {
for (const auto& video_track : video_tracks) for (const auto& video_track : video_tracks)
video_track->SetConstraints(video_); video_track->SetConstraints(video_);
callbacks_->OnSuccess(nullptr, stream);
RecordIdentifiabilityMetric(surface_, GetExecutionContext(), RecordIdentifiabilityMetric(surface_, GetExecutionContext(),
IdentifiabilityBenignStringToken(g_empty_string)); IdentifiabilityBenignStringToken(g_empty_string));
// After this call, the execution context may be invalid.
callbacks_->OnSuccess(nullptr, stream);
is_resolved_ = true; is_resolved_ = true;
} }
...@@ -568,11 +569,12 @@ void UserMediaRequest::FailConstraint(const String& constraint_name, ...@@ -568,11 +569,12 @@ void UserMediaRequest::FailConstraint(const String& constraint_name,
DCHECK(!is_resolved_); DCHECK(!is_resolved_);
if (!GetExecutionContext()) if (!GetExecutionContext())
return; return;
RecordIdentifiabilityMetric(surface_, GetExecutionContext(),
IdentifiabilityBenignStringToken(message));
// After this call, the execution context may be invalid.
callbacks_->OnError( callbacks_->OnError(
nullptr, DOMExceptionOrOverconstrainedError::FromOverconstrainedError( nullptr, DOMExceptionOrOverconstrainedError::FromOverconstrainedError(
OverconstrainedError::Create(constraint_name, message))); OverconstrainedError::Create(constraint_name, message)));
RecordIdentifiabilityMetric(surface_, GetExecutionContext(),
IdentifiabilityBenignStringToken(message));
is_resolved_ = true; is_resolved_ = true;
} }
...@@ -611,12 +613,13 @@ void UserMediaRequest::Fail(Error name, const String& message) { ...@@ -611,12 +613,13 @@ void UserMediaRequest::Fail(Error name, const String& message) {
default: default:
NOTREACHED(); NOTREACHED();
} }
RecordIdentifiabilityMetric(surface_, GetExecutionContext(),
IdentifiabilityBenignStringToken(message));
// After this call, the execution context may be invalid.
callbacks_->OnError( callbacks_->OnError(
nullptr, nullptr,
DOMExceptionOrOverconstrainedError::FromDOMException( DOMExceptionOrOverconstrainedError::FromDOMException(
MakeGarbageCollected<DOMException>(exception_code, message))); MakeGarbageCollected<DOMException>(exception_code, message)));
RecordIdentifiabilityMetric(surface_, GetExecutionContext(),
IdentifiabilityBenignStringToken(message));
is_resolved_ = true; is_resolved_ = true;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment