Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple 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 | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 851 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 862 // 5 - Queue a task to fire a simple event named loadstart at the media elem ent. | 862 // 5 - Queue a task to fire a simple event named loadstart at the media elem ent. |
| 863 scheduleEvent(EventTypeNames::loadstart); | 863 scheduleEvent(EventTypeNames::loadstart); |
| 864 | 864 |
| 865 // 6 - If mode is attribute, then run these substeps | 865 // 6 - If mode is attribute, then run these substeps |
| 866 if (mode == attribute) { | 866 if (mode == attribute) { |
| 867 m_loadState = LoadingFromSrcAttr; | 867 m_loadState = LoadingFromSrcAttr; |
| 868 | 868 |
| 869 // If the src attribute's value is the empty string ... jump down to the failed step below | 869 // If the src attribute's value is the empty string ... jump down to the failed step below |
| 870 KURL mediaURL = getNonEmptyURLAttribute(srcAttr); | 870 KURL mediaURL = getNonEmptyURLAttribute(srcAttr); |
| 871 if (mediaURL.isEmpty()) { | 871 if (mediaURL.isEmpty()) { |
| 872 mediaLoadingFailed(MediaPlayer::FormatError); | 872 mediaLoadingFailed(WebMediaPlayer::NetworkStateFormatError); |
| 873 WTF_LOG(Media, "HTMLMediaElement::selectMediaResource, empty 'src'") ; | 873 WTF_LOG(Media, "HTMLMediaElement::selectMediaResource, empty 'src'") ; |
| 874 return; | 874 return; |
| 875 } | 875 } |
| 876 | 876 |
| 877 if (!isSafeToLoadURL(mediaURL, Complain)) { | 877 if (!isSafeToLoadURL(mediaURL, Complain)) { |
| 878 mediaLoadingFailed(MediaPlayer::FormatError); | 878 mediaLoadingFailed(WebMediaPlayer::NetworkStateFormatError); |
| 879 return; | 879 return; |
| 880 } | 880 } |
| 881 | 881 |
| 882 // No type or key system information is available when the url comes | 882 // No type or key system information is available when the url comes |
| 883 // from the 'src' attribute so MediaPlayer | 883 // from the 'src' attribute so MediaPlayer |
| 884 // will have to pick a media engine based on the file extension. | 884 // will have to pick a media engine based on the file extension. |
| 885 ContentType contentType((String())); | 885 ContentType contentType((String())); |
| 886 loadResource(mediaURL, contentType, String()); | 886 loadResource(mediaURL, contentType, String()); |
| 887 WTF_LOG(Media, "HTMLMediaElement::selectMediaResource, using 'src' attri bute url"); | 887 WTF_LOG(Media, "HTMLMediaElement::selectMediaResource, using 'src' attri bute url"); |
| 888 return; | 888 return; |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 910 } | 910 } |
| 911 | 911 |
| 912 void HTMLMediaElement::loadResource(const KURL& url, ContentType& contentType, c onst String& keySystem) | 912 void HTMLMediaElement::loadResource(const KURL& url, ContentType& contentType, c onst String& keySystem) |
| 913 { | 913 { |
| 914 ASSERT(isSafeToLoadURL(url, Complain)); | 914 ASSERT(isSafeToLoadURL(url, Complain)); |
| 915 | 915 |
| 916 WTF_LOG(Media, "HTMLMediaElement::loadResource(%s, %s, %s)", urlForLoggingMe dia(url).utf8().data(), contentType.raw().utf8().data(), keySystem.utf8().data() ); | 916 WTF_LOG(Media, "HTMLMediaElement::loadResource(%s, %s, %s)", urlForLoggingMe dia(url).utf8().data(), contentType.raw().utf8().data(), keySystem.utf8().data() ); |
| 917 | 917 |
| 918 LocalFrame* frame = document().frame(); | 918 LocalFrame* frame = document().frame(); |
| 919 if (!frame) { | 919 if (!frame) { |
| 920 mediaLoadingFailed(MediaPlayer::FormatError); | 920 mediaLoadingFailed(WebMediaPlayer::NetworkStateFormatError); |
| 921 return; | 921 return; |
| 922 } | 922 } |
| 923 | 923 |
| 924 // The resource fetch algorithm | 924 // The resource fetch algorithm |
| 925 m_networkState = NETWORK_LOADING; | 925 m_networkState = NETWORK_LOADING; |
| 926 | 926 |
| 927 // Set m_currentSrc *before* changing to the cache url, the fact that we are loading from the app | 927 // Set m_currentSrc *before* changing to the cache url, the fact that we are loading from the app |
| 928 // cache is an internal detail not exposed through the media element API. | 928 // cache is an internal detail not exposed through the media element API. |
| 929 m_currentSrc = url; | 929 m_currentSrc = url; |
| 930 | 930 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 966 if (attemptLoad && canLoadURL(url, contentType, keySystem)) { | 966 if (attemptLoad && canLoadURL(url, contentType, keySystem)) { |
| 967 ASSERT(!webMediaPlayer()); | 967 ASSERT(!webMediaPlayer()); |
| 968 | 968 |
| 969 if (!m_havePreparedToPlay && !autoplay() && m_preload == MediaPlayer::No ne) { | 969 if (!m_havePreparedToPlay && !autoplay() && m_preload == MediaPlayer::No ne) { |
| 970 WTF_LOG(Media, "HTMLMediaElement::loadResource : Delaying load becau se preload == 'none'"); | 970 WTF_LOG(Media, "HTMLMediaElement::loadResource : Delaying load becau se preload == 'none'"); |
| 971 deferLoad(); | 971 deferLoad(); |
| 972 } else { | 972 } else { |
| 973 startPlayerLoad(); | 973 startPlayerLoad(); |
| 974 } | 974 } |
| 975 } else { | 975 } else { |
| 976 mediaLoadingFailed(MediaPlayer::FormatError); | 976 mediaLoadingFailed(WebMediaPlayer::NetworkStateFormatError); |
| 977 } | 977 } |
| 978 | 978 |
| 979 // If there is no poster to display, allow the media engine to render video frames as soon as | 979 // If there is no poster to display, allow the media engine to render video frames as soon as |
| 980 // they are available. | 980 // they are available. |
| 981 updateDisplayState(); | 981 updateDisplayState(); |
| 982 | 982 |
| 983 if (renderer()) | 983 if (renderer()) |
| 984 renderer()->updateFromElement(); | 984 renderer()->updateFromElement(); |
| 985 } | 985 } |
| 986 | 986 |
| (...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1619 { | 1619 { |
| 1620 WTF_LOG(Media, "HTMLMediaElement::cancelPendingEventsAndCallbacks"); | 1620 WTF_LOG(Media, "HTMLMediaElement::cancelPendingEventsAndCallbacks"); |
| 1621 m_asyncEventQueue->cancelAllEvents(); | 1621 m_asyncEventQueue->cancelAllEvents(); |
| 1622 | 1622 |
| 1623 for (HTMLSourceElement* source = Traversal<HTMLSourceElement>::firstChild(*t his); source; source = Traversal<HTMLSourceElement>::nextSibling(*source)) | 1623 for (HTMLSourceElement* source = Traversal<HTMLSourceElement>::firstChild(*t his); source; source = Traversal<HTMLSourceElement>::nextSibling(*source)) |
| 1624 source->cancelPendingErrorEvent(); | 1624 source->cancelPendingErrorEvent(); |
| 1625 } | 1625 } |
| 1626 | 1626 |
| 1627 void HTMLMediaElement::mediaPlayerNetworkStateChanged() | 1627 void HTMLMediaElement::mediaPlayerNetworkStateChanged() |
| 1628 { | 1628 { |
| 1629 setNetworkState(m_player->networkState()); | 1629 setNetworkState(webMediaPlayer()->networkState()); |
|
philipj_slow
2014/07/12 20:50:55
You should also be able to remove MediaPlayerClien
Srirama
2014/07/13 05:30:17
But that is not straightforward, it can be done on
| |
| 1630 } | 1630 } |
| 1631 | 1631 |
| 1632 void HTMLMediaElement::mediaLoadingFailed(MediaPlayer::NetworkState error) | 1632 void HTMLMediaElement::mediaLoadingFailed(WebMediaPlayer::NetworkState error) |
| 1633 { | 1633 { |
| 1634 stopPeriodicTimers(); | 1634 stopPeriodicTimers(); |
| 1635 | 1635 |
| 1636 // If we failed while trying to load a <source> element, the movie was never parsed, and there are more | 1636 // If we failed while trying to load a <source> element, the movie was never parsed, and there are more |
| 1637 // <source> children, schedule the next one | 1637 // <source> children, schedule the next one |
| 1638 if (m_readyState < HAVE_METADATA && m_loadState == LoadingFromSourceElement) { | 1638 if (m_readyState < HAVE_METADATA && m_loadState == LoadingFromSourceElement) { |
| 1639 | 1639 |
| 1640 // resource selection algorithm | 1640 // resource selection algorithm |
| 1641 // Step 9.Otherwise.9 - Failed with elements: Queue a task, using the DO M manipulation task source, to fire a simple event named error at the candidate element. | 1641 // Step 9.Otherwise.9 - Failed with elements: Queue a task, using the DO M manipulation task source, to fire a simple event named error at the candidate element. |
| 1642 if (m_currentSourceNode) | 1642 if (m_currentSourceNode) |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 1653 WTF_LOG(Media, "HTMLMediaElement::setNetworkState - scheduling next <source>"); | 1653 WTF_LOG(Media, "HTMLMediaElement::setNetworkState - scheduling next <source>"); |
| 1654 scheduleNextSourceChild(); | 1654 scheduleNextSourceChild(); |
| 1655 } else { | 1655 } else { |
| 1656 WTF_LOG(Media, "HTMLMediaElement::setNetworkState - no more <source> elements, waiting"); | 1656 WTF_LOG(Media, "HTMLMediaElement::setNetworkState - no more <source> elements, waiting"); |
| 1657 waitForSourceChange(); | 1657 waitForSourceChange(); |
| 1658 } | 1658 } |
| 1659 | 1659 |
| 1660 return; | 1660 return; |
| 1661 } | 1661 } |
| 1662 | 1662 |
| 1663 if (error == MediaPlayer::NetworkError && m_readyState >= HAVE_METADATA) | 1663 if (error == WebMediaPlayer::NetworkStateNetworkError && m_readyState >= HAV E_METADATA) |
| 1664 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_NETWORK)); | 1664 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_NETWORK)); |
| 1665 else if (error == MediaPlayer::DecodeError) | 1665 else if (error == WebMediaPlayer::NetworkStateDecodeError) |
| 1666 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_DECODE)); | 1666 mediaEngineError(MediaError::create(MediaError::MEDIA_ERR_DECODE)); |
| 1667 else if ((error == MediaPlayer::FormatError || error == MediaPlayer::Network Error) && m_loadState == LoadingFromSrcAttr) | 1667 else if ((error == WebMediaPlayer::NetworkStateFormatError |
| 1668 || error == WebMediaPlayer::NetworkStateNetworkError) | |
| 1669 && m_loadState == LoadingFromSrcAttr) | |
| 1668 noneSupported(); | 1670 noneSupported(); |
| 1669 | 1671 |
| 1670 updateDisplayState(); | 1672 updateDisplayState(); |
| 1671 if (hasMediaControls()) | 1673 if (hasMediaControls()) |
| 1672 mediaControls()->reset(); | 1674 mediaControls()->reset(); |
| 1673 } | 1675 } |
| 1674 | 1676 |
| 1675 void HTMLMediaElement::setNetworkState(MediaPlayer::NetworkState state) | 1677 void HTMLMediaElement::setNetworkState(WebMediaPlayer::NetworkState state) |
| 1676 { | 1678 { |
| 1677 WTF_LOG(Media, "HTMLMediaElement::setNetworkState(%d) - current state is %d" , static_cast<int>(state), static_cast<int>(m_networkState)); | 1679 WTF_LOG(Media, "HTMLMediaElement::setNetworkState(%d) - current state is %d" , static_cast<int>(state), static_cast<int>(m_networkState)); |
| 1678 | 1680 |
| 1679 if (state == MediaPlayer::Empty) { | 1681 if (state == WebMediaPlayer::NetworkStateEmpty) { |
| 1680 // Just update the cached state and leave, we can't do anything. | 1682 // Just update the cached state and leave, we can't do anything. |
| 1681 m_networkState = NETWORK_EMPTY; | 1683 m_networkState = NETWORK_EMPTY; |
| 1682 return; | 1684 return; |
| 1683 } | 1685 } |
| 1684 | 1686 |
| 1685 if (state == MediaPlayer::FormatError || state == MediaPlayer::NetworkError || state == MediaPlayer::DecodeError) { | 1687 if (state == WebMediaPlayer::NetworkStateFormatError |
| 1688 || state == WebMediaPlayer::NetworkStateNetworkError | |
| 1689 || state == WebMediaPlayer::NetworkStateDecodeError) { | |
| 1686 mediaLoadingFailed(state); | 1690 mediaLoadingFailed(state); |
| 1687 return; | 1691 return; |
| 1688 } | 1692 } |
| 1689 | 1693 |
| 1690 if (state == MediaPlayer::Idle) { | 1694 if (state == WebMediaPlayer::NetworkStateIdle) { |
| 1691 if (m_networkState > NETWORK_IDLE) { | 1695 if (m_networkState > NETWORK_IDLE) { |
| 1692 changeNetworkStateFromLoadingToIdle(); | 1696 changeNetworkStateFromLoadingToIdle(); |
| 1693 setShouldDelayLoadEvent(false); | 1697 setShouldDelayLoadEvent(false); |
| 1694 } else { | 1698 } else { |
| 1695 m_networkState = NETWORK_IDLE; | 1699 m_networkState = NETWORK_IDLE; |
| 1696 } | 1700 } |
| 1697 } | 1701 } |
| 1698 | 1702 |
| 1699 if (state == MediaPlayer::Loading) { | 1703 if (state == WebMediaPlayer::NetworkStateLoading) { |
| 1700 if (m_networkState < NETWORK_LOADING || m_networkState == NETWORK_NO_SOU RCE) | 1704 if (m_networkState < NETWORK_LOADING || m_networkState == NETWORK_NO_SOU RCE) |
| 1701 startProgressEventTimer(); | 1705 startProgressEventTimer(); |
| 1702 m_networkState = NETWORK_LOADING; | 1706 m_networkState = NETWORK_LOADING; |
| 1703 } | 1707 } |
| 1704 | 1708 |
| 1705 if (state == MediaPlayer::Loaded) { | 1709 if (state == WebMediaPlayer::NetworkStateLoaded) { |
| 1706 if (m_networkState != NETWORK_IDLE) | 1710 if (m_networkState != NETWORK_IDLE) |
| 1707 changeNetworkStateFromLoadingToIdle(); | 1711 changeNetworkStateFromLoadingToIdle(); |
| 1708 m_completelyLoaded = true; | 1712 m_completelyLoaded = true; |
| 1709 } | 1713 } |
| 1710 } | 1714 } |
| 1711 | 1715 |
| 1712 void HTMLMediaElement::changeNetworkStateFromLoadingToIdle() | 1716 void HTMLMediaElement::changeNetworkStateFromLoadingToIdle() |
| 1713 { | 1717 { |
| 1714 ASSERT(m_player); | 1718 ASSERT(m_player); |
| 1715 m_progressEventTimer.stop(); | 1719 m_progressEventTimer.stop(); |
| (...skipping 2253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3969 | 3973 |
| 3970 #if ENABLE(WEB_AUDIO) | 3974 #if ENABLE(WEB_AUDIO) |
| 3971 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) | 3975 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) |
| 3972 { | 3976 { |
| 3973 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) | 3977 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) |
| 3974 audioSourceProvider()->setClient(0); | 3978 audioSourceProvider()->setClient(0); |
| 3975 } | 3979 } |
| 3976 #endif | 3980 #endif |
| 3977 | 3981 |
| 3978 } | 3982 } |
| OLD | NEW |