Commit f5ef337d authored by Emircan Uysaler's avatar Emircan Uysaler Committed by Commit Bot

Check context is attached before creating MediaRecorder

Bug: 896736
Change-Id: I3ccfd2188fb15704af14c8af050e0a5667855d34
Reviewed-on: https://chromium-review.googlesource.com/c/1324231
Commit-Queue: Emircan Uysaler <emircan@chromium.org>
Reviewed-by: default avatarMiguel Casas <mcasas@chromium.org>
Cr-Commit-Position: refs/heads/master@{#606242}
parent 7969de66
...@@ -133,10 +133,11 @@ MediaRecorderHandler::MediaRecorderHandler( ...@@ -133,10 +133,11 @@ MediaRecorderHandler::MediaRecorderHandler(
MediaRecorderHandler::~MediaRecorderHandler() { MediaRecorderHandler::~MediaRecorderHandler() {
DCHECK(main_render_thread_checker_.CalledOnValidThread()); DCHECK(main_render_thread_checker_.CalledOnValidThread());
// Send a |last_in_slice| to our |client_|. // Send a |last_in_slice| to our |client_|.
if (client_) if (client_) {
client_->WriteData( client_->WriteData(
nullptr, 0u, true, nullptr, 0u, true,
(TimeTicks::Now() - TimeTicks::UnixEpoch()).InMillisecondsF()); (TimeTicks::Now() - TimeTicks::UnixEpoch()).InMillisecondsF());
}
} }
bool MediaRecorderHandler::CanSupportMimeType( bool MediaRecorderHandler::CanSupportMimeType(
......
<!DOCTYPE html>
<script src=../../resources/testharness.js></script>
<script src=../../resources/testharnessreport.js></script>
<body>
<script>
promise_test(async t => {
const frame = document.body.appendChild(document.createElement('iframe'));
const recorderFunc = frame.contentWindow.MediaRecorder;
frame.remove();
try {
new recorderFunc(new MediaStream);
} catch (err) {
assert_equals(err.name, 'NotAllowedError');
return;
}
assert_unreached('MediaRecorder should have failed');
}, 'MediaRecorder creation with detached context');
</script>
</body>
...@@ -175,8 +175,13 @@ MediaRecorder::MediaRecorder(ExecutionContext* context, ...@@ -175,8 +175,13 @@ MediaRecorder::MediaRecorder(ExecutionContext* context,
this, this,
&MediaRecorder::DispatchScheduledEvent, &MediaRecorder::DispatchScheduledEvent,
context->GetTaskRunner(TaskType::kDOMManipulation))) { context->GetTaskRunner(TaskType::kDOMManipulation))) {
DCHECK(stream_->getTracks().size()); if (context->IsContextDestroyed()) {
exception_state.ThrowDOMException(DOMExceptionCode::kNotAllowedError,
"Execution context is detached.");
return;
}
DCHECK(stream_->getTracks().size());
recorder_handler_ = Platform::Current()->CreateMediaRecorderHandler( recorder_handler_ = Platform::Current()->CreateMediaRecorderHandler(
context->GetTaskRunner(TaskType::kInternalMediaRealTime)); context->GetTaskRunner(TaskType::kInternalMediaRealTime));
DCHECK(recorder_handler_); DCHECK(recorder_handler_);
......
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