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 852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
863 m_mediaSource = nullptr; | 863 m_mediaSource = nullptr; |
864 attemptLoad = false; | 864 attemptLoad = false; |
865 } | 865 } |
866 } | 866 } |
867 } | 867 } |
868 } | 868 } |
869 | 869 |
870 if (attemptLoad && canLoadURL(url, contentType, keySystem)) { | 870 if (attemptLoad && canLoadURL(url, contentType, keySystem)) { |
871 ASSERT(!webMediaPlayer()); | 871 ASSERT(!webMediaPlayer()); |
872 | 872 |
873 if (m_preload == MediaPlayer::None) { | 873 if (m_preload == MediaPlayer::None) |
874 m_delayingLoadForPreloadNone = true; | 874 m_delayingLoadForPreloadNone = true; |
875 } else { | 875 else |
876 m_player->load(loadType(), m_currentSrc, corsMode()); | 876 startPlayerLoad(); |
877 } | |
878 } else { | 877 } else { |
879 mediaLoadingFailed(MediaPlayer::FormatError); | 878 mediaLoadingFailed(MediaPlayer::FormatError); |
880 } | 879 } |
881 | 880 |
882 // If there is no poster to display, allow the media engine to render video
frames as soon as | 881 // If there is no poster to display, allow the media engine to render video
frames as soon as |
883 // they are available. | 882 // they are available. |
884 updateDisplayState(); | 883 updateDisplayState(); |
885 | 884 |
886 if (renderer()) | 885 if (renderer()) |
887 renderer()->updateFromElement(); | 886 renderer()->updateFromElement(); |
888 } | 887 } |
889 | 888 |
| 889 void HTMLMediaElement::startPlayerLoad() |
| 890 { |
| 891 // Filter out user:pass as those two URL components aren't |
| 892 // considered for media resource fetches (including for the CORS |
| 893 // use-credentials mode.) That behavior aligns with Gecko, with IE |
| 894 // being more restrictive and not allowing fetches to such URLs. |
| 895 // |
| 896 // Spec reference: http://whatwg.org/c/#concept-media-load-resource |
| 897 // |
| 898 // FIXME: when the HTML spec switches to specifying resource |
| 899 // fetches in terms of Fetch (http://fetch.spec.whatwg.org), and |
| 900 // along with that potentially also specifying a setting for its |
| 901 // 'authentication flag' to control how user:pass embedded in a |
| 902 // media resource URL should be treated, then update the handling |
| 903 // here to match. |
| 904 KURL requestURL = m_currentSrc; |
| 905 if (!requestURL.user().isEmpty()) |
| 906 requestURL.setUser(String()); |
| 907 if (!requestURL.pass().isEmpty()) |
| 908 requestURL.setPass(String()); |
| 909 |
| 910 m_player->load(loadType(), requestURL, corsMode()); |
| 911 } |
| 912 |
890 void HTMLMediaElement::setPlayerPreload() | 913 void HTMLMediaElement::setPlayerPreload() |
891 { | 914 { |
892 m_player->setPreload(m_preload); | 915 m_player->setPreload(m_preload); |
893 | 916 |
894 if (m_delayingLoadForPreloadNone && m_preload != MediaPlayer::None) | 917 if (m_delayingLoadForPreloadNone && m_preload != MediaPlayer::None) |
895 startDelayedLoad(); | 918 startDelayedLoad(); |
896 } | 919 } |
897 | 920 |
898 void HTMLMediaElement::startDelayedLoad() | 921 void HTMLMediaElement::startDelayedLoad() |
899 { | 922 { |
900 ASSERT(m_delayingLoadForPreloadNone); | 923 ASSERT(m_delayingLoadForPreloadNone); |
901 | 924 |
902 m_delayingLoadForPreloadNone = false; | 925 m_delayingLoadForPreloadNone = false; |
903 | 926 |
904 m_player->load(loadType(), m_currentSrc, corsMode()); | 927 startPlayerLoad(); |
905 } | 928 } |
906 | 929 |
907 WebMediaPlayer::LoadType HTMLMediaElement::loadType() const | 930 WebMediaPlayer::LoadType HTMLMediaElement::loadType() const |
908 { | 931 { |
909 if (m_mediaSource) | 932 if (m_mediaSource) |
910 return WebMediaPlayer::LoadTypeMediaSource; | 933 return WebMediaPlayer::LoadTypeMediaSource; |
911 | 934 |
912 if (isMediaStreamURL(m_currentSrc.string())) | 935 if (isMediaStreamURL(m_currentSrc.string())) |
913 return WebMediaPlayer::LoadTypeMediaStream; | 936 return WebMediaPlayer::LoadTypeMediaStream; |
914 | 937 |
(...skipping 2696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3611 { | 3634 { |
3612 visitor->trace(m_currentSourceNode); | 3635 visitor->trace(m_currentSourceNode); |
3613 visitor->trace(m_nextChildNodeToConsider); | 3636 visitor->trace(m_nextChildNodeToConsider); |
3614 visitor->trace(m_textTracks); | 3637 visitor->trace(m_textTracks); |
3615 visitor->trace(m_textTracksWhenResourceSelectionBegan); | 3638 visitor->trace(m_textTracksWhenResourceSelectionBegan); |
3616 WillBeHeapSupplementable<HTMLMediaElement>::trace(visitor); | 3639 WillBeHeapSupplementable<HTMLMediaElement>::trace(visitor); |
3617 HTMLElement::trace(visitor); | 3640 HTMLElement::trace(visitor); |
3618 } | 3641 } |
3619 | 3642 |
3620 } | 3643 } |
OLD | NEW |