| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 { | 91 { |
| 92 MediaSource* mediaSource(adoptRefCountedGarbageCollected(new MediaSource(con
text))); | 92 MediaSource* mediaSource(adoptRefCountedGarbageCollected(new MediaSource(con
text))); |
| 93 mediaSource->suspendIfNeeded(); | 93 mediaSource->suspendIfNeeded(); |
| 94 return mediaSource; | 94 return mediaSource; |
| 95 } | 95 } |
| 96 | 96 |
| 97 MediaSource::MediaSource(ExecutionContext* context) | 97 MediaSource::MediaSource(ExecutionContext* context) |
| 98 : ActiveDOMObject(context) | 98 : ActiveDOMObject(context) |
| 99 , m_readyState(closedKeyword()) | 99 , m_readyState(closedKeyword()) |
| 100 , m_asyncEventQueue(GenericEventQueue::create(this)) | 100 , m_asyncEventQueue(GenericEventQueue::create(this)) |
| 101 , m_attachedElement(0) | 101 , m_attachedElement(nullptr) |
| 102 , m_sourceBuffers(SourceBufferList::create(executionContext(), m_asyncEventQ
ueue.get())) | 102 , m_sourceBuffers(SourceBufferList::create(executionContext(), m_asyncEventQ
ueue.get())) |
| 103 , m_activeSourceBuffers(SourceBufferList::create(executionContext(), m_async
EventQueue.get())) | 103 , m_activeSourceBuffers(SourceBufferList::create(executionContext(), m_async
EventQueue.get())) |
| 104 { | 104 { |
| 105 WTF_LOG(Media, "MediaSource::MediaSource %p", this); | 105 WTF_LOG(Media, "MediaSource::MediaSource %p", this); |
| 106 ScriptWrappable::init(this); | 106 ScriptWrappable::init(this); |
| 107 } | 107 } |
| 108 | 108 |
| 109 MediaSource::~MediaSource() | 109 MediaSource::~MediaSource() |
| 110 { | 110 { |
| 111 WTF_LOG(Media, "MediaSource::~MediaSource %p", this); | 111 WTF_LOG(Media, "MediaSource::~MediaSource %p", this); |
| 112 #if !ENABLE(OILPAN) |
| 112 ASSERT(isClosed()); | 113 ASSERT(isClosed()); |
| 114 #endif |
| 113 } | 115 } |
| 114 | 116 |
| 115 SourceBuffer* MediaSource::addSourceBuffer(const String& type, ExceptionState& e
xceptionState) | 117 SourceBuffer* MediaSource::addSourceBuffer(const String& type, ExceptionState& e
xceptionState) |
| 116 { | 118 { |
| 117 WTF_LOG(Media, "MediaSource::addSourceBuffer(%s) %p", type.ascii().data(), t
his); | 119 WTF_LOG(Media, "MediaSource::addSourceBuffer(%s) %p", type.ascii().data(), t
his); |
| 118 | 120 |
| 119 // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media
-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type | 121 // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media
-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type |
| 120 // 1. If type is an empty string then throw an InvalidAccessError exception | 122 // 1. If type is an empty string then throw an InvalidAccessError exception |
| 121 // and abort these steps. | 123 // and abort these steps. |
| 122 if (type.isEmpty()) { | 124 if (type.isEmpty()) { |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 const AtomicString& MediaSource::interfaceName() const | 252 const AtomicString& MediaSource::interfaceName() const |
| 251 { | 253 { |
| 252 return EventTargetNames::MediaSource; | 254 return EventTargetNames::MediaSource; |
| 253 } | 255 } |
| 254 | 256 |
| 255 ExecutionContext* MediaSource::executionContext() const | 257 ExecutionContext* MediaSource::executionContext() const |
| 256 { | 258 { |
| 257 return ActiveDOMObject::executionContext(); | 259 return ActiveDOMObject::executionContext(); |
| 258 } | 260 } |
| 259 | 261 |
| 262 void MediaSource::clearWeakMembers(Visitor* visitor) |
| 263 { |
| 264 #if ENABLE(OILPAN) |
| 265 // Oilpan: If the MediaSource survived, but its attached media |
| 266 // element did not, signal the element that it can safely |
| 267 // notify its MediaSource during finalization by calling close(). |
| 268 if (m_attachedElement && !visitor->isAlive(m_attachedElement)) { |
| 269 m_attachedElement->setCloseMediaSourceWhenFinalizing(); |
| 270 m_attachedElement.clear(); |
| 271 } |
| 272 #endif |
| 273 } |
| 274 |
| 260 void MediaSource::trace(Visitor* visitor) | 275 void MediaSource::trace(Visitor* visitor) |
| 261 { | 276 { |
| 262 #if ENABLE(OILPAN) | 277 #if ENABLE(OILPAN) |
| 263 visitor->trace(m_asyncEventQueue); | 278 visitor->trace(m_asyncEventQueue); |
| 264 #endif | 279 #endif |
| 265 visitor->trace(m_sourceBuffers); | 280 visitor->trace(m_sourceBuffers); |
| 266 visitor->trace(m_activeSourceBuffers); | 281 visitor->trace(m_activeSourceBuffers); |
| 282 visitor->registerWeakMembers<MediaSource, &MediaSource::clearWeakMembers>(th
is); |
| 267 EventTargetWithInlineData::trace(visitor); | 283 EventTargetWithInlineData::trace(visitor); |
| 268 } | 284 } |
| 269 | 285 |
| 270 void MediaSource::setWebMediaSourceAndOpen(PassOwnPtr<WebMediaSource> webMediaSo
urce) | 286 void MediaSource::setWebMediaSourceAndOpen(PassOwnPtr<WebMediaSource> webMediaSo
urce) |
| 271 { | 287 { |
| 272 TRACE_EVENT_ASYNC_END0("media", "MediaSource::attachToElement", this); | 288 TRACE_EVENT_ASYNC_END0("media", "MediaSource::attachToElement", this); |
| 273 ASSERT(webMediaSource); | 289 ASSERT(webMediaSource); |
| 274 ASSERT(!m_webMediaSource); | 290 ASSERT(!m_webMediaSource); |
| 275 ASSERT(m_attachedElement); | 291 ASSERT(m_attachedElement); |
| 276 m_webMediaSource = webMediaSource; | 292 m_webMediaSource = webMediaSource; |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 | 412 |
| 397 void MediaSource::setReadyState(const AtomicString& state) | 413 void MediaSource::setReadyState(const AtomicString& state) |
| 398 { | 414 { |
| 399 ASSERT(state == openKeyword() || state == closedKeyword() || state == endedK
eyword()); | 415 ASSERT(state == openKeyword() || state == closedKeyword() || state == endedK
eyword()); |
| 400 | 416 |
| 401 AtomicString oldState = readyState(); | 417 AtomicString oldState = readyState(); |
| 402 WTF_LOG(Media, "MediaSource::setReadyState() %p : %s -> %s", this, oldState.
ascii().data(), state.ascii().data()); | 418 WTF_LOG(Media, "MediaSource::setReadyState() %p : %s -> %s", this, oldState.
ascii().data(), state.ascii().data()); |
| 403 | 419 |
| 404 if (state == closedKeyword()) { | 420 if (state == closedKeyword()) { |
| 405 m_webMediaSource.clear(); | 421 m_webMediaSource.clear(); |
| 406 m_attachedElement = 0; | 422 m_attachedElement.clear(); |
| 407 } | 423 } |
| 408 | 424 |
| 409 if (oldState == state) | 425 if (oldState == state) |
| 410 return; | 426 return; |
| 411 | 427 |
| 412 m_readyState = state; | 428 m_readyState = state; |
| 413 | 429 |
| 414 onReadyStateChange(oldState, state); | 430 onReadyStateChange(oldState, state); |
| 415 } | 431 } |
| 416 | 432 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 540 | 556 |
| 541 m_asyncEventQueue->enqueueEvent(event.release()); | 557 m_asyncEventQueue->enqueueEvent(event.release()); |
| 542 } | 558 } |
| 543 | 559 |
| 544 URLRegistry& MediaSource::registry() const | 560 URLRegistry& MediaSource::registry() const |
| 545 { | 561 { |
| 546 return MediaSourceRegistry::registry(); | 562 return MediaSourceRegistry::registry(); |
| 547 } | 563 } |
| 548 | 564 |
| 549 } // namespace WebCore | 565 } // namespace WebCore |
| OLD | NEW |