Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: Source/core/html/HTMLMediaElement.cpp

Issue 205523003: Remove beforeload events. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove more tests Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/html/HTMLLinkElement.cpp ('k') | Source/core/html/HTMLObjectElement.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 } 392 }
393 393
394 void HTMLMediaElement::parseAttribute(const QualifiedName& name, const AtomicStr ing& value) 394 void HTMLMediaElement::parseAttribute(const QualifiedName& name, const AtomicStr ing& value)
395 { 395 {
396 if (name == srcAttr) { 396 if (name == srcAttr) {
397 // Trigger a reload, as long as the 'src' attribute is present. 397 // Trigger a reload, as long as the 'src' attribute is present.
398 if (!value.isNull()) { 398 if (!value.isNull()) {
399 clearMediaPlayer(LoadMediaResource); 399 clearMediaPlayer(LoadMediaResource);
400 scheduleDelayedAction(LoadMediaResource); 400 scheduleDelayedAction(LoadMediaResource);
401 } 401 }
402 } else if (name == controlsAttr) 402 } else if (name == controlsAttr) {
403 configureMediaControls(); 403 configureMediaControls();
404 else if (name == preloadAttr) { 404 } else if (name == preloadAttr) {
405 if (equalIgnoringCase(value, "none")) 405 if (equalIgnoringCase(value, "none"))
406 m_preload = MediaPlayer::None; 406 m_preload = MediaPlayer::None;
407 else if (equalIgnoringCase(value, "metadata")) 407 else if (equalIgnoringCase(value, "metadata"))
408 m_preload = MediaPlayer::MetaData; 408 m_preload = MediaPlayer::MetaData;
409 else { 409 else {
410 // The spec does not define an "invalid value default" but "auto" is suggested as the 410 // The spec does not define an "invalid value default" but "auto" is suggested as the
411 // "missing value default", so use it for everything except "none" a nd "metadata" 411 // "missing value default", so use it for everything except "none" a nd "metadata"
412 m_preload = MediaPlayer::Auto; 412 m_preload = MediaPlayer::Auto;
413 } 413 }
414 414
415 // The attribute must be ignored if the autoplay attribute is present 415 // The attribute must be ignored if the autoplay attribute is present
416 if (!autoplay() && m_player) 416 if (!autoplay() && m_player)
417 setPlayerPreload(); 417 setPlayerPreload();
418 418
419 } else if (name == mediagroupAttr) 419 } else if (name == mediagroupAttr) {
420 setMediaGroup(value); 420 setMediaGroup(value);
421 else if (name == onbeforeloadAttr) 421 } else {
422 setAttributeEventListener(EventTypeNames::beforeload, createAttributeEve ntListener(this, name, value));
423 else
424 HTMLElement::parseAttribute(name, value); 422 HTMLElement::parseAttribute(name, value);
423 }
425 } 424 }
426 425
427 void HTMLMediaElement::finishParsingChildren() 426 void HTMLMediaElement::finishParsingChildren()
428 { 427 {
429 HTMLElement::finishParsingChildren(); 428 HTMLElement::finishParsingChildren();
430 429
431 if (!RuntimeEnabledFeatures::videoTrackEnabled()) 430 if (!RuntimeEnabledFeatures::videoTrackEnabled())
432 return; 431 return;
433 432
434 if (Traversal<HTMLTrackElement>::firstChild(*this)) 433 if (Traversal<HTMLTrackElement>::firstChild(*this))
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 // The spec doesn't say to block the load event until we actually run the as ynchronous section 696 // The spec doesn't say to block the load event until we actually run the as ynchronous section
698 // algorithm, but do it now because we won't start that until after the time r fires and the 697 // algorithm, but do it now because we won't start that until after the time r fires and the
699 // event may have already fired by then. 698 // event may have already fired by then.
700 setShouldDelayLoadEvent(true); 699 setShouldDelayLoadEvent(true);
701 700
702 configureMediaControls(); 701 configureMediaControls();
703 } 702 }
704 703
705 void HTMLMediaElement::loadInternal() 704 void HTMLMediaElement::loadInternal()
706 { 705 {
707 // Some of the code paths below this function dispatch the BeforeLoad event. This ASSERT helps 706 // FIXME: Now that we don't have beforeload events we should make this ASSER T the opposite.
708 // us catch those bugs more quickly without needing all the branches to alig n to actually
709 // trigger the event.
710 ASSERT(!NoEventDispatchAssertion::isEventDispatchForbidden()); 707 ASSERT(!NoEventDispatchAssertion::isEventDispatchForbidden());
711 708
712 // HTMLMediaElement::textTracksAreReady will need "... the text tracks whose mode was not in the 709 // HTMLMediaElement::textTracksAreReady will need "... the text tracks whose mode was not in the
713 // disabled state when the element's resource selection algorithm last start ed". 710 // disabled state when the element's resource selection algorithm last start ed".
714 if (RuntimeEnabledFeatures::videoTrackEnabled()) { 711 if (RuntimeEnabledFeatures::videoTrackEnabled()) {
715 m_textTracksWhenResourceSelectionBegan.clear(); 712 m_textTracksWhenResourceSelectionBegan.clear();
716 if (m_textTracks) { 713 if (m_textTracks) {
717 for (unsigned i = 0; i < m_textTracks->length(); ++i) { 714 for (unsigned i = 0; i < m_textTracks->length(); ++i) {
718 TextTrack* track = m_textTracks->item(i); 715 TextTrack* track = m_textTracks->item(i);
719 if (track->mode() != TextTrack::disabledKeyword()) 716 if (track->mode() != TextTrack::disabledKeyword())
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 m_loadState = LoadingFromSrcAttr; 764 m_loadState = LoadingFromSrcAttr;
768 765
769 // If the src attribute's value is the empty string ... jump down to the failed step below 766 // If the src attribute's value is the empty string ... jump down to the failed step below
770 KURL mediaURL = getNonEmptyURLAttribute(srcAttr); 767 KURL mediaURL = getNonEmptyURLAttribute(srcAttr);
771 if (mediaURL.isEmpty()) { 768 if (mediaURL.isEmpty()) {
772 mediaLoadingFailed(MediaPlayer::FormatError); 769 mediaLoadingFailed(MediaPlayer::FormatError);
773 WTF_LOG(Media, "HTMLMediaElement::selectMediaResource, empty 'src'") ; 770 WTF_LOG(Media, "HTMLMediaElement::selectMediaResource, empty 'src'") ;
774 return; 771 return;
775 } 772 }
776 773
777 if (!isSafeToLoadURL(mediaURL, Complain) || !dispatchBeforeLoadEvent(med iaURL.string())) { 774 if (!isSafeToLoadURL(mediaURL, Complain)) {
778 mediaLoadingFailed(MediaPlayer::FormatError); 775 mediaLoadingFailed(MediaPlayer::FormatError);
779 return; 776 return;
780 } 777 }
781 778
782 // No type or key system information is available when the url comes 779 // No type or key system information is available when the url comes
783 // from the 'src' attribute so MediaPlayer 780 // from the 'src' attribute so MediaPlayer
784 // will have to pick a media engine based on the file extension. 781 // will have to pick a media engine based on the file extension.
785 ContentType contentType((String())); 782 ContentType contentType((String()));
786 loadResource(mediaURL, contentType, String()); 783 loadResource(mediaURL, contentType, String());
787 WTF_LOG(Media, "HTMLMediaElement::selectMediaResource, using 'src' attri bute url"); 784 WTF_LOG(Media, "HTMLMediaElement::selectMediaResource, using 'src' attri bute url");
(...skipping 1806 matching lines...) Expand 10 before | Expand all | Expand 10 after
2594 return KURL(); 2591 return KURL();
2595 } 2592 }
2596 2593
2597 KURL mediaURL; 2594 KURL mediaURL;
2598 Node* node; 2595 Node* node;
2599 HTMLSourceElement* source = 0; 2596 HTMLSourceElement* source = 0;
2600 String type; 2597 String type;
2601 String system; 2598 String system;
2602 bool lookingForStartNode = m_nextChildNodeToConsider; 2599 bool lookingForStartNode = m_nextChildNodeToConsider;
2603 bool canUseSourceElement = false; 2600 bool canUseSourceElement = false;
2604 bool okToLoadSourceURL;
2605 2601
2606 NodeVector potentialSourceNodes; 2602 NodeVector potentialSourceNodes;
2607 getChildNodes(*this, potentialSourceNodes); 2603 getChildNodes(*this, potentialSourceNodes);
2608 2604
2609 for (unsigned i = 0; !canUseSourceElement && i < potentialSourceNodes.size() ; ++i) { 2605 for (unsigned i = 0; !canUseSourceElement && i < potentialSourceNodes.size() ; ++i) {
2610 node = potentialSourceNodes[i].get(); 2606 node = potentialSourceNodes[i].get();
2611 if (lookingForStartNode && m_nextChildNodeToConsider != node) 2607 if (lookingForStartNode && m_nextChildNodeToConsider != node)
2612 continue; 2608 continue;
2613 lookingForStartNode = false; 2609 lookingForStartNode = false;
2614 2610
(...skipping 20 matching lines...) Expand all
2635 if (!type.isEmpty() || !system.isEmpty()) { 2631 if (!type.isEmpty() || !system.isEmpty()) {
2636 #if !LOG_DISABLED 2632 #if !LOG_DISABLED
2637 if (shouldLog) 2633 if (shouldLog)
2638 WTF_LOG(Media, "HTMLMediaElement::selectNextSourceChild - 'type' is '%s' - key system is '%s'", type.utf8().data(), system.utf8().data()); 2634 WTF_LOG(Media, "HTMLMediaElement::selectNextSourceChild - 'type' is '%s' - key system is '%s'", type.utf8().data(), system.utf8().data());
2639 #endif 2635 #endif
2640 if (!supportsType(ContentType(type), system)) 2636 if (!supportsType(ContentType(type), system))
2641 goto check_again; 2637 goto check_again;
2642 } 2638 }
2643 2639
2644 // Is it safe to load this url? 2640 // Is it safe to load this url?
2645 okToLoadSourceURL = isSafeToLoadURL(mediaURL, actionIfInvalid) && dispat chBeforeLoadEvent(mediaURL.string()); 2641 if (!isSafeToLoadURL(mediaURL, actionIfInvalid))
2646
2647 // A 'beforeload' event handler can mutate the DOM, so check to see if t he source element is still a child node.
2648 if (node->parentNode() != this) {
2649 WTF_LOG(Media, "HTMLMediaElement::selectNextSourceChild : 'beforeloa d' removed current element");
2650 source = 0;
2651 goto check_again;
2652 }
2653
2654 if (!okToLoadSourceURL)
2655 goto check_again; 2642 goto check_again;
2656 2643
2657 // Making it this far means the <source> looks reasonable. 2644 // Making it this far means the <source> looks reasonable.
2658 canUseSourceElement = true; 2645 canUseSourceElement = true;
2659 2646
2660 check_again: 2647 check_again:
2661 if (!canUseSourceElement && actionIfInvalid == Complain && source) 2648 if (!canUseSourceElement && actionIfInvalid == Complain && source)
2662 source->scheduleErrorEvent(); 2649 source->scheduleErrorEvent();
2663 } 2650 }
2664 2651
(...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after
3658 { 3645 {
3659 m_mediaSource->setWebMediaSourceAndOpen(adoptPtr(webMediaSource)); 3646 m_mediaSource->setWebMediaSourceAndOpen(adoptPtr(webMediaSource));
3660 } 3647 }
3661 3648
3662 bool HTMLMediaElement::isInteractiveContent() const 3649 bool HTMLMediaElement::isInteractiveContent() const
3663 { 3650 {
3664 return fastHasAttribute(controlsAttr); 3651 return fastHasAttribute(controlsAttr);
3665 } 3652 }
3666 3653
3667 } 3654 }
OLDNEW
« no previous file with comments | « Source/core/html/HTMLLinkElement.cpp ('k') | Source/core/html/HTMLObjectElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698