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 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 | 327 |
328 if (m_mediaController) | 328 if (m_mediaController) |
329 m_mediaController->removeMediaElement(this); | 329 m_mediaController->removeMediaElement(this); |
330 | 330 |
331 closeMediaSource(); | 331 closeMediaSource(); |
332 | 332 |
333 #if ENABLE(ENCRYPTED_MEDIA_V2) | 333 #if ENABLE(ENCRYPTED_MEDIA_V2) |
334 setMediaKeys(0); | 334 setMediaKeys(0); |
335 #endif | 335 #endif |
336 | 336 |
337 removeElementFromDocumentMap(this, document()); | 337 removeElementFromDocumentMap(this, &document()); |
338 | 338 |
339 // Destroying the player may cause a resource load to be canceled, | 339 // Destroying the player may cause a resource load to be canceled, |
340 // which could result in userCancelledLoad() being called back. | 340 // which could result in userCancelledLoad() being called back. |
341 // Setting m_completelyLoaded ensures that such a call will not cause | 341 // Setting m_completelyLoaded ensures that such a call will not cause |
342 // us to dispatch an abort event, which would result in a crash. | 342 // us to dispatch an abort event, which would result in a crash. |
343 // See http://crbug.com/233654 for more details. | 343 // See http://crbug.com/233654 for more details. |
344 m_completelyLoaded = true; | 344 m_completelyLoaded = true; |
345 m_player.clear(); | 345 m_player.clear(); |
346 } | 346 } |
347 | 347 |
348 void HTMLMediaElement::didMoveToNewDocument(Document* oldDocument) | 348 void HTMLMediaElement::didMoveToNewDocument(Document* oldDocument) |
349 { | 349 { |
350 LOG(Media, "HTMLMediaElement::didMoveToNewDocument"); | 350 LOG(Media, "HTMLMediaElement::didMoveToNewDocument"); |
351 | 351 |
352 if (m_shouldDelayLoadEvent) { | 352 if (m_shouldDelayLoadEvent) { |
353 if (oldDocument) | 353 if (oldDocument) |
354 oldDocument->decrementLoadEventDelayCount(); | 354 oldDocument->decrementLoadEventDelayCount(); |
355 document()->incrementLoadEventDelayCount(); | 355 document().incrementLoadEventDelayCount(); |
356 } | 356 } |
357 | 357 |
358 if (oldDocument) | 358 if (oldDocument) |
359 removeElementFromDocumentMap(this, oldDocument); | 359 removeElementFromDocumentMap(this, oldDocument); |
360 | 360 |
361 addElementToDocumentMap(this, document()); | 361 addElementToDocumentMap(this, &document()); |
362 | 362 |
363 // FIXME: This is a temporary fix to prevent this object from causing the | 363 // FIXME: This is a temporary fix to prevent this object from causing the |
364 // MediaPlayer to dereference Frame and FrameLoader pointers from the | 364 // MediaPlayer to dereference Frame and FrameLoader pointers from the |
365 // previous document. A proper fix would provide a mechanism to allow this | 365 // previous document. A proper fix would provide a mechanism to allow this |
366 // object to refresh the MediaPlayer's Frame and FrameLoader references on | 366 // object to refresh the MediaPlayer's Frame and FrameLoader references on |
367 // document changes so that playback can be resumed properly. | 367 // document changes so that playback can be resumed properly. |
368 userCancelledLoad(); | 368 userCancelledLoad(); |
369 | 369 |
370 HTMLElement::didMoveToNewDocument(oldDocument); | 370 HTMLElement::didMoveToNewDocument(oldDocument); |
371 } | 371 } |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
839 m_loadState = LoadingFromSourceElement; | 839 m_loadState = LoadingFromSourceElement; |
840 loadResource(mediaURL, contentType, keySystem); | 840 loadResource(mediaURL, contentType, keySystem); |
841 } | 841 } |
842 | 842 |
843 void HTMLMediaElement::loadResource(const KURL& initialURL, ContentType& content
Type, const String& keySystem) | 843 void HTMLMediaElement::loadResource(const KURL& initialURL, ContentType& content
Type, const String& keySystem) |
844 { | 844 { |
845 ASSERT(isSafeToLoadURL(initialURL, Complain)); | 845 ASSERT(isSafeToLoadURL(initialURL, Complain)); |
846 | 846 |
847 LOG(Media, "HTMLMediaElement::loadResource(%s, %s, %s)", urlForLoggingMedia(
initialURL).utf8().data(), contentType.raw().utf8().data(), keySystem.utf8().dat
a()); | 847 LOG(Media, "HTMLMediaElement::loadResource(%s, %s, %s)", urlForLoggingMedia(
initialURL).utf8().data(), contentType.raw().utf8().data(), keySystem.utf8().dat
a()); |
848 | 848 |
849 Frame* frame = document()->frame(); | 849 Frame* frame = document().frame(); |
850 if (!frame) { | 850 if (!frame) { |
851 mediaLoadingFailed(MediaPlayer::FormatError); | 851 mediaLoadingFailed(MediaPlayer::FormatError); |
852 return; | 852 return; |
853 } | 853 } |
854 | 854 |
855 KURL url = initialURL; | 855 KURL url = initialURL; |
856 if (!frame->loader()->willLoadMediaElementURL(url)) { | 856 if (!frame->loader()->willLoadMediaElementURL(url)) { |
857 mediaLoadingFailed(MediaPlayer::FormatError); | 857 mediaLoadingFailed(MediaPlayer::FormatError); |
858 return; | 858 return; |
859 } | 859 } |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1317 } | 1317 } |
1318 | 1318 |
1319 | 1319 |
1320 bool HTMLMediaElement::isSafeToLoadURL(const KURL& url, InvalidURLAction actionI
fInvalid) | 1320 bool HTMLMediaElement::isSafeToLoadURL(const KURL& url, InvalidURLAction actionI
fInvalid) |
1321 { | 1321 { |
1322 if (!url.isValid()) { | 1322 if (!url.isValid()) { |
1323 LOG(Media, "HTMLMediaElement::isSafeToLoadURL(%s) -> FALSE because url i
s invalid", urlForLoggingMedia(url).utf8().data()); | 1323 LOG(Media, "HTMLMediaElement::isSafeToLoadURL(%s) -> FALSE because url i
s invalid", urlForLoggingMedia(url).utf8().data()); |
1324 return false; | 1324 return false; |
1325 } | 1325 } |
1326 | 1326 |
1327 Frame* frame = document()->frame(); | 1327 Frame* frame = document().frame(); |
1328 if (!frame || !document()->securityOrigin()->canDisplay(url)) { | 1328 if (!frame || !document().securityOrigin()->canDisplay(url)) { |
1329 if (actionIfInvalid == Complain) | 1329 if (actionIfInvalid == Complain) |
1330 FrameLoader::reportLocalLoadFailed(frame, url.elidedString()); | 1330 FrameLoader::reportLocalLoadFailed(frame, url.elidedString()); |
1331 LOG(Media, "HTMLMediaElement::isSafeToLoadURL(%s) -> FALSE rejected by S
ecurityOrigin", urlForLoggingMedia(url).utf8().data()); | 1331 LOG(Media, "HTMLMediaElement::isSafeToLoadURL(%s) -> FALSE rejected by S
ecurityOrigin", urlForLoggingMedia(url).utf8().data()); |
1332 return false; | 1332 return false; |
1333 } | 1333 } |
1334 | 1334 |
1335 if (!document()->contentSecurityPolicy()->allowMediaFromSource(url)) { | 1335 if (!document().contentSecurityPolicy()->allowMediaFromSource(url)) { |
1336 LOG(Media, "HTMLMediaElement::isSafeToLoadURL(%s) -> rejected by Content
Security Policy", urlForLoggingMedia(url).utf8().data()); | 1336 LOG(Media, "HTMLMediaElement::isSafeToLoadURL(%s) -> rejected by Content
Security Policy", urlForLoggingMedia(url).utf8().data()); |
1337 return false; | 1337 return false; |
1338 } | 1338 } |
1339 | 1339 |
1340 return true; | 1340 return true; |
1341 } | 1341 } |
1342 | 1342 |
1343 void HTMLMediaElement::startProgressEventTimer() | 1343 void HTMLMediaElement::startProgressEventTimer() |
1344 { | 1344 { |
1345 if (m_progressEventTimer.isActive()) | 1345 if (m_progressEventTimer.isActive()) |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1630 | 1630 |
1631 if (m_readyState == HAVE_ENOUGH_DATA && oldState < HAVE_ENOUGH_DATA && track
sAreReady) { | 1631 if (m_readyState == HAVE_ENOUGH_DATA && oldState < HAVE_ENOUGH_DATA && track
sAreReady) { |
1632 if (oldState <= HAVE_CURRENT_DATA) | 1632 if (oldState <= HAVE_CURRENT_DATA) |
1633 scheduleEvent(eventNames().canplayEvent); | 1633 scheduleEvent(eventNames().canplayEvent); |
1634 | 1634 |
1635 scheduleEvent(eventNames().canplaythroughEvent); | 1635 scheduleEvent(eventNames().canplaythroughEvent); |
1636 | 1636 |
1637 if (isPotentiallyPlaying && oldState <= HAVE_CURRENT_DATA) | 1637 if (isPotentiallyPlaying && oldState <= HAVE_CURRENT_DATA) |
1638 scheduleEvent(eventNames().playingEvent); | 1638 scheduleEvent(eventNames().playingEvent); |
1639 | 1639 |
1640 if (m_autoplaying && m_paused && autoplay() && !document()->isSandboxed(
SandboxAutomaticFeatures) && !userGestureRequiredForRateChange()) { | 1640 if (m_autoplaying && m_paused && autoplay() && !document().isSandboxed(S
andboxAutomaticFeatures) && !userGestureRequiredForRateChange()) { |
1641 m_paused = false; | 1641 m_paused = false; |
1642 invalidateCachedTime(); | 1642 invalidateCachedTime(); |
1643 scheduleEvent(eventNames().playEvent); | 1643 scheduleEvent(eventNames().playEvent); |
1644 scheduleEvent(eventNames().playingEvent); | 1644 scheduleEvent(eventNames().playingEvent); |
1645 } | 1645 } |
1646 | 1646 |
1647 shouldUpdateDisplayState = true; | 1647 shouldUpdateDisplayState = true; |
1648 } | 1648 } |
1649 | 1649 |
1650 if (shouldUpdateDisplayState) { | 1650 if (shouldUpdateDisplayState) { |
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2146 | 2146 |
2147 void HTMLMediaElement::play() | 2147 void HTMLMediaElement::play() |
2148 { | 2148 { |
2149 LOG(Media, "HTMLMediaElement::play()"); | 2149 LOG(Media, "HTMLMediaElement::play()"); |
2150 | 2150 |
2151 if (userGestureRequiredForRateChange() && !ScriptController::processingUserG
esture()) | 2151 if (userGestureRequiredForRateChange() && !ScriptController::processingUserG
esture()) |
2152 return; | 2152 return; |
2153 if (ScriptController::processingUserGesture()) | 2153 if (ScriptController::processingUserGesture()) |
2154 removeBehaviorsRestrictionsAfterFirstUserGesture(); | 2154 removeBehaviorsRestrictionsAfterFirstUserGesture(); |
2155 | 2155 |
2156 Settings* settings = document()->settings(); | 2156 Settings* settings = document().settings(); |
2157 if (settings && settings->needsSiteSpecificQuirks() && m_dispatchingCanPlayE
vent && !m_loadInitiatedByUserGesture) { | 2157 if (settings && settings->needsSiteSpecificQuirks() && m_dispatchingCanPlayE
vent && !m_loadInitiatedByUserGesture) { |
2158 // It should be impossible to be processing the canplay event while hand
ling a user gesture | 2158 // It should be impossible to be processing the canplay event while hand
ling a user gesture |
2159 // since it is dispatched asynchronously. | 2159 // since it is dispatched asynchronously. |
2160 ASSERT(!ScriptController::processingUserGesture()); | 2160 ASSERT(!ScriptController::processingUserGesture()); |
2161 String host = document()->baseURL().host(); | 2161 String host = document().baseURL().host(); |
2162 if (host.endsWith(".npr.org", false) || equalIgnoringCase(host, "npr.org
")) | 2162 if (host.endsWith(".npr.org", false) || equalIgnoringCase(host, "npr.org
")) |
2163 return; | 2163 return; |
2164 } | 2164 } |
2165 | 2165 |
2166 playInternal(); | 2166 playInternal(); |
2167 } | 2167 } |
2168 | 2168 |
2169 void HTMLMediaElement::playInternal() | 2169 void HTMLMediaElement::playInternal() |
2170 { | 2170 { |
2171 LOG(Media, "HTMLMediaElement::playInternal"); | 2171 LOG(Media, "HTMLMediaElement::playInternal"); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2323 } | 2323 } |
2324 | 2324 |
2325 void HTMLMediaElement::setLoop(bool b) | 2325 void HTMLMediaElement::setLoop(bool b) |
2326 { | 2326 { |
2327 LOG(Media, "HTMLMediaElement::setLoop(%s)", boolString(b)); | 2327 LOG(Media, "HTMLMediaElement::setLoop(%s)", boolString(b)); |
2328 setBooleanAttribute(loopAttr, b); | 2328 setBooleanAttribute(loopAttr, b); |
2329 } | 2329 } |
2330 | 2330 |
2331 bool HTMLMediaElement::controls() const | 2331 bool HTMLMediaElement::controls() const |
2332 { | 2332 { |
2333 Frame* frame = document()->frame(); | 2333 Frame* frame = document().frame(); |
2334 | 2334 |
2335 // always show controls when scripting is disabled | 2335 // always show controls when scripting is disabled |
2336 if (frame && !frame->script()->canExecuteScripts(NotAboutToExecuteScript)) | 2336 if (frame && !frame->script()->canExecuteScripts(NotAboutToExecuteScript)) |
2337 return true; | 2337 return true; |
2338 | 2338 |
2339 // Always show controls when in full screen mode. | 2339 // Always show controls when in full screen mode. |
2340 if (isFullscreen()) | 2340 if (isFullscreen()) |
2341 return true; | 2341 return true; |
2342 | 2342 |
2343 return fastHasAttribute(controlsAttr); | 2343 return fastHasAttribute(controlsAttr); |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2741 | 2741 |
2742 return trackScore + textTrackLanguageSelectionScore(track); | 2742 return trackScore + textTrackLanguageSelectionScore(track); |
2743 } | 2743 } |
2744 | 2744 |
2745 void HTMLMediaElement::configureTextTrackGroup(const TrackGroup& group) | 2745 void HTMLMediaElement::configureTextTrackGroup(const TrackGroup& group) |
2746 { | 2746 { |
2747 ASSERT(group.tracks.size()); | 2747 ASSERT(group.tracks.size()); |
2748 | 2748 |
2749 LOG(Media, "HTMLMediaElement::configureTextTrackGroup(%d)", group.kind); | 2749 LOG(Media, "HTMLMediaElement::configureTextTrackGroup(%d)", group.kind); |
2750 | 2750 |
2751 Page* page = document()->page(); | 2751 Page* page = document().page(); |
2752 Settings* settings = page ? &page->settings() : 0; | 2752 Settings* settings = page ? &page->settings() : 0; |
2753 | 2753 |
2754 // First, find the track in the group that should be enabled (if any). | 2754 // First, find the track in the group that should be enabled (if any). |
2755 Vector<RefPtr<TextTrack> > currentlyEnabledTracks; | 2755 Vector<RefPtr<TextTrack> > currentlyEnabledTracks; |
2756 RefPtr<TextTrack> trackToEnable; | 2756 RefPtr<TextTrack> trackToEnable; |
2757 RefPtr<TextTrack> defaultTrack; | 2757 RefPtr<TextTrack> defaultTrack; |
2758 RefPtr<TextTrack> fallbackTrack; | 2758 RefPtr<TextTrack> fallbackTrack; |
2759 int highestTrackScore = 0; | 2759 int highestTrackScore = 0; |
2760 for (size_t i = 0; i < group.tracks.size(); ++i) { | 2760 for (size_t i = 0; i < group.tracks.size(); ++i) { |
2761 RefPtr<TextTrack> textTrack = group.tracks[i]; | 2761 RefPtr<TextTrack> textTrack = group.tracks[i]; |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2937 // If candidate does not have a src attribute, or if its src attribute's
value is the empty string ... jump down to the failed step below | 2937 // If candidate does not have a src attribute, or if its src attribute's
value is the empty string ... jump down to the failed step below |
2938 mediaURL = source->getNonEmptyURLAttribute(srcAttr); | 2938 mediaURL = source->getNonEmptyURLAttribute(srcAttr); |
2939 #if !LOG_DISABLED | 2939 #if !LOG_DISABLED |
2940 if (shouldLog) | 2940 if (shouldLog) |
2941 LOG(Media, "HTMLMediaElement::selectNextSourceChild - 'src' is %s",
urlForLoggingMedia(mediaURL).utf8().data()); | 2941 LOG(Media, "HTMLMediaElement::selectNextSourceChild - 'src' is %s",
urlForLoggingMedia(mediaURL).utf8().data()); |
2942 #endif | 2942 #endif |
2943 if (mediaURL.isEmpty()) | 2943 if (mediaURL.isEmpty()) |
2944 goto check_again; | 2944 goto check_again; |
2945 | 2945 |
2946 if (source->fastHasAttribute(mediaAttr)) { | 2946 if (source->fastHasAttribute(mediaAttr)) { |
2947 MediaQueryEvaluator screenEval("screen", document()->frame(), render
er() ? renderer()->style() : 0); | 2947 MediaQueryEvaluator screenEval("screen", document().frame(), rendere
r() ? renderer()->style() : 0); |
2948 RefPtr<MediaQuerySet> media = MediaQuerySet::create(source->media())
; | 2948 RefPtr<MediaQuerySet> media = MediaQuerySet::create(source->media())
; |
2949 #if !LOG_DISABLED | 2949 #if !LOG_DISABLED |
2950 if (shouldLog) | 2950 if (shouldLog) |
2951 LOG(Media, "HTMLMediaElement::selectNextSourceChild - 'media' is
%s", source->media().utf8().data()); | 2951 LOG(Media, "HTMLMediaElement::selectNextSourceChild - 'media' is
%s", source->media().utf8().data()); |
2952 #endif | 2952 #endif |
2953 if (!screenEval.eval(media.get())) | 2953 if (!screenEval.eval(media.get())) |
2954 goto check_again; | 2954 goto check_again; |
2955 } | 2955 } |
2956 | 2956 |
2957 type = source->type(); | 2957 type = source->type(); |
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3532 | 3532 |
3533 bool HTMLMediaElement::isFullscreen() const | 3533 bool HTMLMediaElement::isFullscreen() const |
3534 { | 3534 { |
3535 return FullscreenElementStack::isActiveFullScreenElement(this); | 3535 return FullscreenElementStack::isActiveFullScreenElement(this); |
3536 } | 3536 } |
3537 | 3537 |
3538 void HTMLMediaElement::enterFullscreen() | 3538 void HTMLMediaElement::enterFullscreen() |
3539 { | 3539 { |
3540 LOG(Media, "HTMLMediaElement::enterFullscreen"); | 3540 LOG(Media, "HTMLMediaElement::enterFullscreen"); |
3541 | 3541 |
3542 if (document()->settings() && document()->settings()->fullScreenEnabled()) | 3542 if (document().settings() && document().settings()->fullScreenEnabled()) |
3543 FullscreenElementStack::from(document())->requestFullScreenForElement(th
is, 0, FullscreenElementStack::ExemptIFrameAllowFullScreenRequirement); | 3543 FullscreenElementStack::from(&document())->requestFullScreenForElement(t
his, 0, FullscreenElementStack::ExemptIFrameAllowFullScreenRequirement); |
3544 } | 3544 } |
3545 | 3545 |
3546 void HTMLMediaElement::exitFullscreen() | 3546 void HTMLMediaElement::exitFullscreen() |
3547 { | 3547 { |
3548 LOG(Media, "HTMLMediaElement::exitFullscreen"); | 3548 LOG(Media, "HTMLMediaElement::exitFullscreen"); |
3549 | 3549 |
3550 if (document()->settings() && document()->settings()->fullScreenEnabled() &&
isFullscreen()) | 3550 if (document().settings() && document().settings()->fullScreenEnabled() && i
sFullscreen()) |
3551 FullscreenElementStack::from(document())->webkitCancelFullScreen(); | 3551 FullscreenElementStack::from(&document())->webkitCancelFullScreen(); |
3552 } | 3552 } |
3553 | 3553 |
3554 void HTMLMediaElement::didBecomeFullscreenElement() | 3554 void HTMLMediaElement::didBecomeFullscreenElement() |
3555 { | 3555 { |
3556 if (hasMediaControls()) | 3556 if (hasMediaControls()) |
3557 mediaControls()->enteredFullscreen(); | 3557 mediaControls()->enteredFullscreen(); |
3558 } | 3558 } |
3559 | 3559 |
3560 void HTMLMediaElement::willStopBeingFullscreenElement() | 3560 void HTMLMediaElement::willStopBeingFullscreenElement() |
3561 { | 3561 { |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3653 | 3653 |
3654 void HTMLMediaElement::setShouldDelayLoadEvent(bool shouldDelay) | 3654 void HTMLMediaElement::setShouldDelayLoadEvent(bool shouldDelay) |
3655 { | 3655 { |
3656 if (m_shouldDelayLoadEvent == shouldDelay) | 3656 if (m_shouldDelayLoadEvent == shouldDelay) |
3657 return; | 3657 return; |
3658 | 3658 |
3659 LOG(Media, "HTMLMediaElement::setShouldDelayLoadEvent(%s)", boolString(shoul
dDelay)); | 3659 LOG(Media, "HTMLMediaElement::setShouldDelayLoadEvent(%s)", boolString(shoul
dDelay)); |
3660 | 3660 |
3661 m_shouldDelayLoadEvent = shouldDelay; | 3661 m_shouldDelayLoadEvent = shouldDelay; |
3662 if (shouldDelay) | 3662 if (shouldDelay) |
3663 document()->incrementLoadEventDelayCount(); | 3663 document().incrementLoadEventDelayCount(); |
3664 else | 3664 else |
3665 document()->decrementLoadEventDelayCount(); | 3665 document().decrementLoadEventDelayCount(); |
3666 } | 3666 } |
3667 | 3667 |
3668 | 3668 |
3669 MediaControls* HTMLMediaElement::mediaControls() const | 3669 MediaControls* HTMLMediaElement::mediaControls() const |
3670 { | 3670 { |
3671 return toMediaControls(userAgentShadowRoot()->firstChild()); | 3671 return toMediaControls(userAgentShadowRoot()->firstChild()); |
3672 } | 3672 } |
3673 | 3673 |
3674 bool HTMLMediaElement::hasMediaControls() const | 3674 bool HTMLMediaElement::hasMediaControls() const |
3675 { | 3675 { |
3676 if (ShadowRoot* userAgent = userAgentShadowRoot()) { | 3676 if (ShadowRoot* userAgent = userAgentShadowRoot()) { |
3677 Node* node = userAgent->firstChild(); | 3677 Node* node = userAgent->firstChild(); |
3678 ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isMediaControls()); | 3678 ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isMediaControls()); |
3679 return node; | 3679 return node; |
3680 } | 3680 } |
3681 | 3681 |
3682 return false; | 3682 return false; |
3683 } | 3683 } |
3684 | 3684 |
3685 bool HTMLMediaElement::createMediaControls() | 3685 bool HTMLMediaElement::createMediaControls() |
3686 { | 3686 { |
3687 if (hasMediaControls()) | 3687 if (hasMediaControls()) |
3688 return true; | 3688 return true; |
3689 | 3689 |
3690 RefPtr<MediaControls> mediaControls = MediaControls::create(document()); | 3690 RefPtr<MediaControls> mediaControls = MediaControls::create(&document()); |
3691 if (!mediaControls) | 3691 if (!mediaControls) |
3692 return false; | 3692 return false; |
3693 | 3693 |
3694 mediaControls->setMediaController(m_mediaController ? m_mediaController.get(
) : static_cast<MediaControllerInterface*>(this)); | 3694 mediaControls->setMediaController(m_mediaController ? m_mediaController.get(
) : static_cast<MediaControllerInterface*>(this)); |
3695 mediaControls->reset(); | 3695 mediaControls->reset(); |
3696 if (isFullscreen()) | 3696 if (isFullscreen()) |
3697 mediaControls->enteredFullscreen(); | 3697 mediaControls->enteredFullscreen(); |
3698 | 3698 |
3699 ensureUserAgentShadowRoot()->appendChild(mediaControls); | 3699 ensureUserAgentShadowRoot()->appendChild(mediaControls); |
3700 | 3700 |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3836 // 1. Let m [this] be the media element in question. | 3836 // 1. Let m [this] be the media element in question. |
3837 // 2. Let m have no current media controller, if it currently has one. | 3837 // 2. Let m have no current media controller, if it currently has one. |
3838 setController(0); | 3838 setController(0); |
3839 | 3839 |
3840 // 3. If m's mediagroup attribute is being removed, then abort these steps. | 3840 // 3. If m's mediagroup attribute is being removed, then abort these steps. |
3841 if (group.isNull() || group.isEmpty()) | 3841 if (group.isNull() || group.isEmpty()) |
3842 return; | 3842 return; |
3843 | 3843 |
3844 // 4. If there is another media element whose Document is the same as m's Do
cument (even if one or both | 3844 // 4. If there is another media element whose Document is the same as m's Do
cument (even if one or both |
3845 // of these elements are not actually in the Document), | 3845 // of these elements are not actually in the Document), |
3846 HashSet<HTMLMediaElement*> elements = documentToElementSetMap().get(document
()); | 3846 HashSet<HTMLMediaElement*> elements = documentToElementSetMap().get(&documen
t()); |
3847 for (HashSet<HTMLMediaElement*>::iterator i = elements.begin(); i != element
s.end(); ++i) { | 3847 for (HashSet<HTMLMediaElement*>::iterator i = elements.begin(); i != element
s.end(); ++i) { |
3848 if (*i == this) | 3848 if (*i == this) |
3849 continue; | 3849 continue; |
3850 | 3850 |
3851 // and which also has a mediagroup attribute, and whose mediagroup attri
bute has the same value as | 3851 // and which also has a mediagroup attribute, and whose mediagroup attri
bute has the same value as |
3852 // the new value of m's mediagroup attribute, | 3852 // the new value of m's mediagroup attribute, |
3853 if ((*i)->mediaGroup() == group) { | 3853 if ((*i)->mediaGroup() == group) { |
3854 // then let controller be that media element's current media contro
ller. | 3854 // then let controller be that media element's current media contro
ller. |
3855 setController((*i)->controller()); | 3855 setController((*i)->controller()); |
3856 return; | 3856 return; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3981 { | 3981 { |
3982 m_restrictions = NoRestrictions; | 3982 m_restrictions = NoRestrictions; |
3983 } | 3983 } |
3984 | 3984 |
3985 void HTMLMediaElement::mediaPlayerScheduleLayerUpdate() | 3985 void HTMLMediaElement::mediaPlayerScheduleLayerUpdate() |
3986 { | 3986 { |
3987 scheduleLayerUpdate(); | 3987 scheduleLayerUpdate(); |
3988 } | 3988 } |
3989 | 3989 |
3990 } | 3990 } |
OLD | NEW |