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 |