| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "modules/mediarecorder/MediaRecorder.h" | 5 #include "modules/mediarecorder/MediaRecorder.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/Dictionary.h" | 7 #include "bindings/core/v8/Dictionary.h" |
| 8 #include "core/events/Event.h" | 8 #include "core/events/Event.h" |
| 9 #include "core/fileapi/Blob.h" | 9 #include "core/fileapi/Blob.h" |
| 10 #include "modules/EventTargetModules.h" | 10 #include "modules/EventTargetModules.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 return recorder; | 52 return recorder; |
| 53 } | 53 } |
| 54 | 54 |
| 55 MediaRecorder::MediaRecorder(ExecutionContext* context, MediaStream* stream, con
st MediaRecorderOptions& options, ExceptionState& exceptionState) | 55 MediaRecorder::MediaRecorder(ExecutionContext* context, MediaStream* stream, con
st MediaRecorderOptions& options, ExceptionState& exceptionState) |
| 56 : ActiveDOMObject(context) | 56 : ActiveDOMObject(context) |
| 57 , m_stream(stream) | 57 , m_stream(stream) |
| 58 , m_mimeType(options.mimeType()) | 58 , m_mimeType(options.mimeType()) |
| 59 , m_stopped(true) | 59 , m_stopped(true) |
| 60 , m_ignoreMutedMedia(true) | 60 , m_ignoreMutedMedia(true) |
| 61 , m_state(State::Inactive) | 61 , m_state(State::Inactive) |
| 62 , m_dispatchScheduledEventRunner(this, &MediaRecorder::dispatchScheduledEven
t) | 62 , m_dispatchScheduledEventRunner(AsyncMethodRunner<MediaRecorder>::create(th
is, &MediaRecorder::dispatchScheduledEvent)) |
| 63 { | 63 { |
| 64 ASSERT(m_stream->getTracks().size()); | 64 ASSERT(m_stream->getTracks().size()); |
| 65 | 65 |
| 66 m_recorderHandler = adoptPtr(Platform::current()->createMediaRecorderHandler
()); | 66 m_recorderHandler = adoptPtr(Platform::current()->createMediaRecorderHandler
()); |
| 67 ASSERT(m_recorderHandler); | 67 ASSERT(m_recorderHandler); |
| 68 | 68 |
| 69 // We deviate from the spec by not returning |UnsupportedOption|, see https:
//github.com/w3c/mediacapture-record/issues/18 | 69 // We deviate from the spec by not returning |UnsupportedOption|, see https:
//github.com/w3c/mediacapture-record/issues/18 |
| 70 if (!m_recorderHandler) { | 70 if (!m_recorderHandler) { |
| 71 exceptionState.throwDOMException(NotSupportedError, "No MediaRecorder ha
ndler can be created."); | 71 exceptionState.throwDOMException(NotSupportedError, "No MediaRecorder ha
ndler can be created."); |
| 72 return; | 72 return; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 return EventTargetNames::MediaRecorder; | 174 return EventTargetNames::MediaRecorder; |
| 175 } | 175 } |
| 176 | 176 |
| 177 ExecutionContext* MediaRecorder::executionContext() const | 177 ExecutionContext* MediaRecorder::executionContext() const |
| 178 { | 178 { |
| 179 return ActiveDOMObject::executionContext(); | 179 return ActiveDOMObject::executionContext(); |
| 180 } | 180 } |
| 181 | 181 |
| 182 void MediaRecorder::suspend() | 182 void MediaRecorder::suspend() |
| 183 { | 183 { |
| 184 m_dispatchScheduledEventRunner.suspend(); | 184 m_dispatchScheduledEventRunner->suspend(); |
| 185 } | 185 } |
| 186 | 186 |
| 187 void MediaRecorder::resume() | 187 void MediaRecorder::resume() |
| 188 { | 188 { |
| 189 m_dispatchScheduledEventRunner.resume(); | 189 m_dispatchScheduledEventRunner->resume(); |
| 190 } | 190 } |
| 191 | 191 |
| 192 void MediaRecorder::stop() | 192 void MediaRecorder::stop() |
| 193 { | 193 { |
| 194 if (m_stopped) | 194 if (m_stopped) |
| 195 return; | 195 return; |
| 196 | 196 |
| 197 m_stopped = true; | 197 m_stopped = true; |
| 198 m_stream.clear(); | 198 m_stream.clear(); |
| 199 m_recorderHandler.clear(); | 199 m_recorderHandler.clear(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 m_recorderHandler->stop(); | 244 m_recorderHandler->stop(); |
| 245 | 245 |
| 246 writeData(nullptr /* data */, 0 /* length */, true /* lastInSlice */); | 246 writeData(nullptr /* data */, 0 /* length */, true /* lastInSlice */); |
| 247 scheduleDispatchEvent(Event::create(EventTypeNames::stop)); | 247 scheduleDispatchEvent(Event::create(EventTypeNames::stop)); |
| 248 } | 248 } |
| 249 | 249 |
| 250 void MediaRecorder::scheduleDispatchEvent(PassRefPtrWillBeRawPtr<Event> event) | 250 void MediaRecorder::scheduleDispatchEvent(PassRefPtrWillBeRawPtr<Event> event) |
| 251 { | 251 { |
| 252 m_scheduledEvents.append(event); | 252 m_scheduledEvents.append(event); |
| 253 | 253 |
| 254 m_dispatchScheduledEventRunner.runAsync(); | 254 m_dispatchScheduledEventRunner->runAsync(); |
| 255 } | 255 } |
| 256 | 256 |
| 257 void MediaRecorder::dispatchScheduledEvent() | 257 void MediaRecorder::dispatchScheduledEvent() |
| 258 { | 258 { |
| 259 WillBeHeapVector<RefPtrWillBeMember<Event>> events; | 259 WillBeHeapVector<RefPtrWillBeMember<Event>> events; |
| 260 events.swap(m_scheduledEvents); | 260 events.swap(m_scheduledEvents); |
| 261 | 261 |
| 262 for (const auto& event : events) | 262 for (const auto& event : events) |
| 263 dispatchEvent(event); | 263 dispatchEvent(event); |
| 264 } | 264 } |
| 265 | 265 |
| 266 DEFINE_TRACE(MediaRecorder) | 266 DEFINE_TRACE(MediaRecorder) |
| 267 { | 267 { |
| 268 visitor->trace(m_stream); | 268 visitor->trace(m_stream); |
| 269 visitor->trace(m_dispatchScheduledEventRunner); |
| 269 visitor->trace(m_scheduledEvents); | 270 visitor->trace(m_scheduledEvents); |
| 270 RefCountedGarbageCollectedEventTargetWithInlineData<MediaRecorder>::trace(vi
sitor); | 271 RefCountedGarbageCollectedEventTargetWithInlineData<MediaRecorder>::trace(vi
sitor); |
| 271 ActiveDOMObject::trace(visitor); | 272 ActiveDOMObject::trace(visitor); |
| 272 } | 273 } |
| 273 | 274 |
| 274 } // namespace blink | 275 } // namespace blink |
| OLD | NEW |