Index: Source/core/html/MediaController.cpp |
diff --git a/Source/core/html/MediaController.cpp b/Source/core/html/MediaController.cpp |
index 7835e2307a6efa23b6df4cd0c142aceec4d83362..0f2e3f33de9d09660f44e989f6fc248865c68223 100644 |
--- a/Source/core/html/MediaController.cpp |
+++ b/Source/core/html/MediaController.cpp |
@@ -38,9 +38,10 @@ |
#include "wtf/StdLibExtras.h" |
#include "wtf/text/AtomicString.h" |
-using namespace WebCore; |
using namespace std; |
+namespace WebCore { |
+ |
PassRefPtrWillBeRawPtr<MediaController> MediaController::create(ExecutionContext* context) |
{ |
return adoptRefWillBeRefCountedGarbageCollected(new MediaController(context)); |
@@ -73,7 +74,7 @@ void MediaController::addMediaElement(HTMLMediaElement* element) |
ASSERT(element); |
ASSERT(!m_mediaElements.contains(element)); |
- m_mediaElements.append(element); |
+ m_mediaElements.add(element); |
bringElementUpToSpeed(element); |
} |
@@ -92,9 +93,10 @@ PassRefPtr<TimeRanges> MediaController::buffered() const |
// The buffered attribute must return a new static normalized TimeRanges object that represents |
// the intersection of the ranges of the media resources of the slaved media elements that the |
// user agent has buffered, at the time the attribute is evaluated. |
- RefPtr<TimeRanges> bufferedRanges = m_mediaElements.first()->buffered(); |
- for (size_t index = 1; index < m_mediaElements.size(); ++index) |
- bufferedRanges->intersectWith(m_mediaElements[index]->buffered().get()); |
+ MediaElementSequence::const_iterator it = m_mediaElements.begin(); |
+ RefPtr<TimeRanges> bufferedRanges = (*it)->buffered(); |
+ for (++it; it != m_mediaElements.end(); ++it) |
+ bufferedRanges->intersectWith((*it)->buffered().get()); |
return bufferedRanges; |
} |
@@ -106,9 +108,10 @@ PassRefPtr<TimeRanges> MediaController::seekable() const |
// The seekable attribute must return a new static normalized TimeRanges object that represents |
// the intersection of the ranges of the media resources of the slaved media elements that the |
// user agent is able to seek to, at the time the attribute is evaluated. |
- RefPtr<TimeRanges> seekableRanges = m_mediaElements.first()->seekable(); |
- for (size_t index = 1; index < m_mediaElements.size(); ++index) |
- seekableRanges->intersectWith(m_mediaElements[index]->seekable().get()); |
+ MediaElementSequence::const_iterator it = m_mediaElements.begin(); |
+ RefPtr<TimeRanges> seekableRanges = (*it)->seekable(); |
+ for (++it; it != m_mediaElements.end(); ++it) |
+ seekableRanges->intersectWith((*it)->seekable().get()); |
return seekableRanges; |
} |
@@ -120,9 +123,10 @@ PassRefPtr<TimeRanges> MediaController::played() |
// The played attribute must return a new static normalized TimeRanges object that represents |
// the union of the ranges of the media resources of the slaved media elements that the |
// user agent has so far rendered, at the time the attribute is evaluated. |
- RefPtr<TimeRanges> playedRanges = m_mediaElements.first()->played(); |
- for (size_t index = 1; index < m_mediaElements.size(); ++index) |
- playedRanges->unionWith(m_mediaElements[index]->played().get()); |
+ MediaElementSequence::const_iterator it = m_mediaElements.begin(); |
+ RefPtr<TimeRanges> playedRanges = (*it)->played(); |
+ for (++it; it != m_mediaElements.end(); ++it) |
+ playedRanges->unionWith((*it)->played().get()); |
return playedRanges; |
} |
@@ -131,8 +135,8 @@ double MediaController::duration() const |
// FIXME: Investigate caching the maximum duration and only updating the cached value |
// when the slaved media elements' durations change. |
double maxDuration = 0; |
- for (size_t index = 0; index < m_mediaElements.size(); ++index) { |
- double duration = m_mediaElements[index]->duration(); |
+ for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) { |
+ double duration = (*it)->duration(); |
if (std::isnan(duration)) |
continue; |
maxDuration = max(maxDuration, duration); |
@@ -170,8 +174,8 @@ void MediaController::setCurrentTime(double time, ExceptionState& exceptionState |
m_clock->setCurrentTime(time); |
// Seek each slaved media element to the new playback position relative to the media element timeline. |
- for (size_t index = 0; index < m_mediaElements.size(); ++index) |
- m_mediaElements[index]->seek(time, exceptionState); |
+ for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
+ (*it)->seek(time, exceptionState); |
scheduleTimeupdateEvent(); |
} |
@@ -194,8 +198,8 @@ void MediaController::play() |
{ |
// When the play() method is invoked, the user agent must invoke the play method of each |
// slaved media element in turn, |
- for (size_t index = 0; index < m_mediaElements.size(); ++index) |
- m_mediaElements[index]->play(); |
+ for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
+ (*it)->play(); |
// and then invoke the unpause method of the MediaController. |
unpause(); |
@@ -242,8 +246,8 @@ void MediaController::setPlaybackRate(double rate) |
// playback rate to the new value, |
m_clock->setPlayRate(rate); |
- for (size_t index = 0; index < m_mediaElements.size(); ++index) |
- m_mediaElements[index]->updatePlaybackRate(); |
+ for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
+ (*it)->updatePlaybackRate(); |
// then queue a task to fire a simple event named ratechange at the MediaController. |
scheduleEvent(EventTypeNames::ratechange); |
@@ -268,8 +272,8 @@ void MediaController::setVolume(double level, ExceptionState& exceptionState) |
// and queue a task to fire a simple event named volumechange at the MediaController. |
scheduleEvent(EventTypeNames::volumechange); |
- for (size_t index = 0; index < m_mediaElements.size(); ++index) |
- m_mediaElements[index]->updateVolume(); |
+ for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
+ (*it)->updateVolume(); |
} |
void MediaController::setMuted(bool flag) |
@@ -284,8 +288,8 @@ void MediaController::setMuted(bool flag) |
// and queue a task to fire a simple event named volumechange at the MediaController. |
scheduleEvent(EventTypeNames::volumechange); |
- for (size_t index = 0; index < m_mediaElements.size(); ++index) |
- m_mediaElements[index]->updateVolume(); |
+ for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
+ (*it)->updateVolume(); |
} |
static const AtomicString& playbackStateWaiting() |
@@ -357,9 +361,10 @@ void MediaController::updateReadyState() |
} else { |
// Otherwise, let it have the lowest value of the readyState IDL attributes of all of its |
// slaved media elements. |
- newReadyState = m_mediaElements.first()->readyState(); |
- for (size_t index = 1; index < m_mediaElements.size(); ++index) |
- newReadyState = min(newReadyState, m_mediaElements[index]->readyState()); |
+ MediaElementSequence::const_iterator it = m_mediaElements.begin(); |
+ newReadyState = (*it)->readyState(); |
+ for (++it; it != m_mediaElements.end(); ++it) |
+ newReadyState = min(newReadyState, (*it)->readyState()); |
} |
if (newReadyState == oldReadyState) |
@@ -467,8 +472,8 @@ void MediaController::updatePlaybackState() |
void MediaController::updateMediaElements() |
{ |
- for (size_t index = 0; index < m_mediaElements.size(); ++index) |
- m_mediaElements[index]->updatePlayState(); |
+ for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
+ (*it)->updatePlayState(); |
} |
void MediaController::bringElementUpToSpeed(HTMLMediaElement* element) |
@@ -493,8 +498,8 @@ bool MediaController::isRestrained() const |
bool anyAutoplayingAndPaused = false; |
bool allPaused = true; |
- for (size_t index = 0; index < m_mediaElements.size(); ++index) { |
- HTMLMediaElement* element = m_mediaElements[index]; |
+ for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) { |
+ HTMLMediaElement* element = *it; |
// and none of its slaved media elements are blocked media elements, |
if (element->isBlocked()) |
@@ -523,8 +528,8 @@ bool MediaController::isBlocked() const |
return true; |
bool allPaused = true; |
- for (size_t index = 0; index < m_mediaElements.size(); ++index) { |
- HTMLMediaElement* element = m_mediaElements[index]; |
+ for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) { |
+ HTMLMediaElement* element = *it; |
// or if any of its slaved media elements are blocked media elements, |
if (element->isBlocked()) |
@@ -555,8 +560,8 @@ bool MediaController::hasEnded() const |
return false; |
bool allHaveEnded = true; |
- for (size_t index = 0; index < m_mediaElements.size(); ++index) { |
- if (!m_mediaElements[index]->ended()) |
+ for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) { |
+ if (!(*it)->ended()) |
allHaveEnded = false; |
} |
return allHaveEnded; |
@@ -605,3 +610,11 @@ void MediaController::scheduleTimeupdateEvent() |
scheduleEvent(EventTypeNames::timeupdate); |
m_previousTimeupdateTime = now; |
} |
+ |
+void MediaController::trace(Visitor* visitor) |
+{ |
+ visitor->trace(m_mediaElements); |
+ EventTargetWithInlineData::trace(visitor); |
+} |
+ |
+} |