Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights | 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights |
| 3 * reserved. | 3 * reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 2961 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2972 // spec says: | 2972 // spec says: |
| 2973 // 4.8.8 - Dynamically modifying a source element and its attribute when the | 2973 // 4.8.8 - Dynamically modifying a source element and its attribute when the |
| 2974 // element is already inserted in a video or audio element will have no | 2974 // element is already inserted in a video or audio element will have no |
| 2975 // effect. | 2975 // effect. |
| 2976 m_currentSourceNode = nullptr; | 2976 m_currentSourceNode = nullptr; |
| 2977 BLINK_MEDIA_LOG << "sourceWasRemoved(" << (void*)this | 2977 BLINK_MEDIA_LOG << "sourceWasRemoved(" << (void*)this |
| 2978 << ") - m_currentSourceNode set to 0"; | 2978 << ") - m_currentSourceNode set to 0"; |
| 2979 } | 2979 } |
| 2980 } | 2980 } |
| 2981 | 2981 |
| 2982 void HTMLMediaElement::timeChanged() { | 2982 void HTMLMediaElement::timeChanged(bool ended) { |
| 2983 BLINK_MEDIA_LOG << "timeChanged(" << (void*)this << ")"; | 2983 BLINK_MEDIA_LOG << "timeChanged(" << (void*)this << ")"; |
| 2984 | 2984 |
| 2985 cueTimeline().updateActiveCues(currentTime()); | 2985 cueTimeline().updateActiveCues(currentTime()); |
| 2986 | 2986 |
| 2987 invalidateCachedTime(); | 2987 invalidateCachedTime(); |
| 2988 | 2988 |
| 2989 // 4.8.10.9 steps 12-14. Needed if no ReadyState change is associated with the | 2989 // 4.8.10.9 steps 12-14. Needed if no ReadyState change is associated with the |
| 2990 // seek. | 2990 // seek. |
| 2991 if (m_seeking && m_readyState >= kHaveCurrentData && | 2991 if (m_seeking && m_readyState >= kHaveCurrentData && |
| 2992 !webMediaPlayer()->seeking()) | 2992 !webMediaPlayer()->seeking()) |
| 2993 finishSeek(); | 2993 finishSeek(); |
| 2994 | 2994 |
| 2995 // Always call scheduleTimeupdateEvent when the media engine reports a time | 2995 // Always call scheduleTimeupdateEvent when the media engine reports a time |
| 2996 // discontinuity, it will only queue a 'timeupdate' event if we haven't | 2996 // discontinuity, it will only queue a 'timeupdate' event if we haven't |
| 2997 // already posted one at the current movie time. | 2997 // already posted one at the current movie time. |
| 2998 scheduleTimeupdateEvent(false); | 2998 scheduleTimeupdateEvent(false); |
| 2999 | 2999 |
| 3000 double now = currentTime(); | 3000 if (ended) { |
| 3001 double dur = duration(); | |
| 3002 | |
| 3003 // When the current playback position reaches the end of the media resource | |
| 3004 // when the direction of playback is forwards, then the user agent must follow | |
| 3005 // these steps: | |
| 3006 if (!std::isnan(dur) && dur && now >= dur && | |
| 3007 getDirectionOfPlayback() == Forward) { | |
| 3008 // If the media element has a loop attribute specified | 3001 // If the media element has a loop attribute specified |
| 3009 if (loop()) { | 3002 if (loop()) { |
| 3010 // then seek to the earliest possible position of the media resource and | 3003 // then seek to the earliest possible position of the media resource and |
| 3011 // abort these steps. | 3004 // abort these steps. |
| 3012 seek(0); | 3005 seek(0); |
| 3013 } else { | 3006 } else { |
| 3014 // If the media element has still ended playback, and the direction of | 3007 // If the media element has still ended playback, and the direction of |
| 3015 // playback is still forwards, and paused is false, | 3008 // playback is still forwards, and paused is false, |
| 3016 if (!m_paused) { | 3009 if (!m_paused) { |
| 3017 // changes paused to true and fires a simple event named pause at the | 3010 // changes paused to true and fires a simple event named pause at the |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3191 // A media element is said to have ended playback when the element's | 3184 // A media element is said to have ended playback when the element's |
| 3192 // readyState attribute is HAVE_METADATA or greater, | 3185 // readyState attribute is HAVE_METADATA or greater, |
| 3193 if (m_readyState < kHaveMetadata) | 3186 if (m_readyState < kHaveMetadata) |
| 3194 return false; | 3187 return false; |
| 3195 | 3188 |
| 3196 // and the current playback position is the end of the media resource and the | 3189 // and the current playback position is the end of the media resource and the |
| 3197 // direction of playback is forwards, Either the media element does not have a | 3190 // direction of playback is forwards, Either the media element does not have a |
| 3198 // loop attribute specified, | 3191 // loop attribute specified, |
| 3199 double now = currentTime(); | 3192 double now = currentTime(); |
| 3200 if (getDirectionOfPlayback() == Forward) | 3193 if (getDirectionOfPlayback() == Forward) |
| 3201 return dur > 0 && now >= dur && | 3194 return dur > 0 && now >= dur && |
|
chcunningham
2016/10/24 22:48:41
currentTime is still being compared to duration he
DaleCurtis
2016/10/24 23:29:44
Ah, good find. This is becoming problematic since
| |
| 3202 (loopCondition == LoopCondition::Ignored || !loop()); | 3195 (loopCondition == LoopCondition::Ignored || !loop()); |
| 3203 | 3196 |
| 3204 // or the current playback position is the earliest possible position and the | 3197 // or the current playback position is the earliest possible position and the |
| 3205 // direction of playback is backwards | 3198 // direction of playback is backwards |
| 3206 DCHECK_EQ(getDirectionOfPlayback(), Backward); | 3199 DCHECK_EQ(getDirectionOfPlayback(), Backward); |
| 3207 return now <= 0; | 3200 return now <= 0; |
| 3208 } | 3201 } |
| 3209 | 3202 |
| 3210 bool HTMLMediaElement::stoppedDueToErrors() const { | 3203 bool HTMLMediaElement::stoppedDueToErrors() const { |
| 3211 if (m_readyState >= kHaveMetadata && m_error) { | 3204 if (m_readyState >= kHaveMetadata && m_error) { |
| (...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4092 | 4085 |
| 4093 IntRect HTMLMediaElement::AutoplayHelperClientImpl::absoluteBoundingBoxRect() | 4086 IntRect HTMLMediaElement::AutoplayHelperClientImpl::absoluteBoundingBoxRect() |
| 4094 const { | 4087 const { |
| 4095 IntRect result; | 4088 IntRect result; |
| 4096 if (LayoutObject* object = m_element->layoutObject()) | 4089 if (LayoutObject* object = m_element->layoutObject()) |
| 4097 result = object->absoluteBoundingBoxRect(); | 4090 result = object->absoluteBoundingBoxRect(); |
| 4098 return result; | 4091 return result; |
| 4099 } | 4092 } |
| 4100 | 4093 |
| 4101 } // namespace blink | 4094 } // namespace blink |
| OLD | NEW |