Commit f8dfdcbd authored by Guido Urdaneta's avatar Guido Urdaneta Committed by Commit Bot

Resolve unsolved getUserMedia() requests on context destroyed.

Bug: 1025218
Change-Id: I3e357354054f6f96c85ed8d9002d252c3bf619d2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1862450
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarMarina Ciocea <marinaciocea@chromium.org>
Cr-Commit-Position: refs/heads/master@{#715705}
parent 97aabd7d
...@@ -34,7 +34,9 @@ ...@@ -34,7 +34,9 @@
#include <type_traits> #include <type_traits>
#include "base/macros.h" #include "base/macros.h"
#include "base/strings/stringprintf.h"
#include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom-blink.h" #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom-blink.h"
#include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
#include "third_party/blink/renderer/bindings/core/v8/dictionary.h" #include "third_party/blink/renderer/bindings/core/v8/dictionary.h"
#include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/core/dom/dom_exception.h"
...@@ -509,6 +511,7 @@ void UserMediaRequest::Start() { ...@@ -509,6 +511,7 @@ void UserMediaRequest::Start() {
} }
void UserMediaRequest::Succeed(MediaStreamDescriptor* stream_descriptor) { void UserMediaRequest::Succeed(MediaStreamDescriptor* stream_descriptor) {
DCHECK(!is_resolved_);
if (!GetExecutionContext()) if (!GetExecutionContext())
return; return;
...@@ -528,20 +531,24 @@ void UserMediaRequest::Succeed(MediaStreamDescriptor* stream_descriptor) { ...@@ -528,20 +531,24 @@ void UserMediaRequest::Succeed(MediaStreamDescriptor* stream_descriptor) {
} }
callbacks_->OnSuccess(nullptr, stream); callbacks_->OnSuccess(nullptr, stream);
is_resolved_ = true;
} }
void UserMediaRequest::FailConstraint(const String& constraint_name, void UserMediaRequest::FailConstraint(const String& constraint_name,
const String& message) { const String& message) {
DCHECK(!constraint_name.IsEmpty()); DCHECK(!constraint_name.IsEmpty());
DCHECK(!is_resolved_);
if (!GetExecutionContext()) if (!GetExecutionContext())
return; return;
callbacks_->OnError( callbacks_->OnError(
nullptr, DOMExceptionOrOverconstrainedError::FromOverconstrainedError( nullptr, DOMExceptionOrOverconstrainedError::FromOverconstrainedError(
OverconstrainedError::Create(constraint_name, message))); OverconstrainedError::Create(constraint_name, message)));
is_resolved_ = true;
} }
void UserMediaRequest::Fail(WebUserMediaRequest::Error name, void UserMediaRequest::Fail(WebUserMediaRequest::Error name,
const String& message) { const String& message) {
DCHECK(!is_resolved_);
if (!GetExecutionContext()) if (!GetExecutionContext())
return; return;
...@@ -579,11 +586,24 @@ void UserMediaRequest::Fail(WebUserMediaRequest::Error name, ...@@ -579,11 +586,24 @@ void UserMediaRequest::Fail(WebUserMediaRequest::Error name,
nullptr, nullptr,
DOMExceptionOrOverconstrainedError::FromDOMException( DOMExceptionOrOverconstrainedError::FromDOMException(
MakeGarbageCollected<DOMException>(exception_code, message))); MakeGarbageCollected<DOMException>(exception_code, message)));
is_resolved_ = true;
} }
void UserMediaRequest::ContextDestroyed(ExecutionContext*) { void UserMediaRequest::ContextDestroyed(ExecutionContext*) {
if (controller_) { if (controller_) {
controller_->CancelUserMediaRequest(this); controller_->CancelUserMediaRequest(this);
if (!is_resolved_) {
blink::WebRtcLogMessage(base::StringPrintf(
"UMR::ContextDestroyed. Resolving unsolved request. "
"audio constraints=%s, video constraints=%s",
AudioConstraints().ToString().Utf8().c_str(),
VideoConstraints().ToString().Utf8().c_str()));
callbacks_->OnError(
nullptr,
DOMExceptionOrOverconstrainedError::FromDOMException(
MakeGarbageCollected<DOMException>(DOMExceptionCode::kAbortError,
"Context destroyed")));
}
controller_ = nullptr; controller_ = nullptr;
} }
} }
......
...@@ -130,6 +130,7 @@ class MODULES_EXPORT UserMediaRequest final ...@@ -130,6 +130,7 @@ class MODULES_EXPORT UserMediaRequest final
Member<UserMediaController> controller_; Member<UserMediaController> controller_;
Member<Callbacks> callbacks_; Member<Callbacks> callbacks_;
bool is_resolved_ = false;
}; };
} // namespace blink } // namespace blink
......
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