⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 98736 in webkit


Ignore:
Timestamp:
Oct 28, 2011, 10:54:32 AM (15 years ago)
Author:
annacc@chromium.org
Message:

Implement load notification and events for <track>.
https://bugs.webkit.org/show_bug.cgi?id=71054

Reviewed by Eric Carlson.

Source/WebCore:

Tests: media/track/track-load-error-readyState.html

media/track/track-load-from-element-readyState.html
media/track/track-load-from-src-readyState.html

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::loadTextTracks):
(WebCore::HTMLMediaElement::loadNextTextTrack):
(WebCore::HTMLMediaElement::trackWasAdded):
(WebCore::HTMLMediaElement::trackWillBeRemoved):
(WebCore::HTMLMediaElement::trackSourceChanged):

  • html/HTMLMediaElement.h:
  • html/HTMLTrackElement.cpp:

(WebCore::HTMLTrackElement::insertedIntoTree):
(WebCore::HTMLTrackElement::willRemove):
(WebCore::HTMLTrackElement::parseMappedAttribute):
(WebCore::HTMLTrackElement::attributeChanged):

  • html/HTMLTrackElement.h:
  • html/LoadableTextTrack.cpp:

(WebCore::LoadableTextTrack::cueLoadingCompleted):

LayoutTests:

  • media/track/track-load-error-readyState-expected.txt: Added.
  • media/track/track-load-error-readyState.html: Added.
  • media/track/track-load-from-element-readyState-expected.txt: Added.
  • media/track/track-load-from-element-readyState.html: Added.
  • media/track/track-load-from-src-readyState-expected.txt: Added.
  • media/track/track-load-from-src-readyState.html: Added.
Location:
trunk
Files:
6 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r98735 r98736  
     12011-10-28  Anna Cavender  <annacc@chromium.org>
     2
     3        Implement load notification and events for <track>.
     4        https://bugs.webkit.org/show_bug.cgi?id=71054
     5
     6        Reviewed by Eric Carlson.
     7
     8        * media/track/track-load-error-readyState-expected.txt: Added.
     9        * media/track/track-load-error-readyState.html: Added.
     10        * media/track/track-load-from-element-readyState-expected.txt: Added.
     11        * media/track/track-load-from-element-readyState.html: Added.
     12        * media/track/track-load-from-src-readyState-expected.txt: Added.
     13        * media/track/track-load-from-src-readyState.html: Added.
     14
    1152011-10-28  Simon Fraser  <simon.fraser@apple.com>
    216
  • trunk/Source/WebCore/ChangeLog

    r98735 r98736  
     12011-10-28  Anna Cavender  <annacc@chromium.org>
     2
     3        Implement load notification and events for <track>.
     4        https://bugs.webkit.org/show_bug.cgi?id=71054
     5
     6        Reviewed by Eric Carlson.
     7
     8        Tests: media/track/track-load-error-readyState.html
     9               media/track/track-load-from-element-readyState.html
     10               media/track/track-load-from-src-readyState.html
     11
     12        * html/HTMLMediaElement.cpp:
     13        (WebCore::HTMLMediaElement::loadTextTracks):
     14        (WebCore::HTMLMediaElement::loadNextTextTrack):
     15        (WebCore::HTMLMediaElement::trackWasAdded):
     16        (WebCore::HTMLMediaElement::trackWillBeRemoved):
     17        (WebCore::HTMLMediaElement::trackSourceChanged):
     18        * html/HTMLMediaElement.h:
     19        * html/HTMLTrackElement.cpp:
     20        (WebCore::HTMLTrackElement::insertedIntoTree):
     21        (WebCore::HTMLTrackElement::willRemove):
     22        (WebCore::HTMLTrackElement::parseMappedAttribute):
     23        (WebCore::HTMLTrackElement::attributeChanged):
     24        * html/HTMLTrackElement.h:
     25        * html/LoadableTextTrack.cpp:
     26        (WebCore::LoadableTextTrack::cueLoadingCompleted):
     27
    1282011-10-28  Simon Fraser  <simon.fraser@apple.com>
    229
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r98592 r98736  
    840840
    841841    for (Node* node = firstChild(); node; node = node->nextSibling()) {
    842         if (node->hasTagName(trackTag)) {
    843             HTMLTrackElement* track = static_cast<HTMLTrackElement*>(node);
    844             track->load(ActiveDOMObject::scriptExecutionContext(), this);
    845         }
    846     }
     842        if (node->hasTagName(trackTag))
     843            loadNextTextTrack(static_cast<HTMLTrackElement*>(node));
     844    }
     845}
     846
     847void HTMLMediaElement::loadNextTextTrack(HTMLTrackElement* track)
     848{
     849    // FIXME(71124): This should schedule an *asynchronous* load.
     850    track->load(ActiveDOMObject::scriptExecutionContext(), this);
     851
     852    // FIXME(71123): Add new track to list of text tracks and set the text track mode.
    847853}
    848854
     
    19791985    return TextTrack::create(this, kind, label, language);
    19801986}
     1987
     1988void HTMLMediaElement::trackWasAdded(HTMLTrackElement* track)
     1989{
     1990#if !LOG_DISABLED
     1991    if (track->hasTagName(trackTag)) {
     1992        KURL url = track->getNonEmptyURLAttribute(srcAttr);
     1993        LOG(Media, "HTMLMediaElement::trackWasAdded - 'src' is %s", urlForLogging(url).utf8().data());
     1994    }
     1995#endif
     1996    loadNextTextTrack(track);
     1997}
     1998 
     1999void HTMLMediaElement::trackWillBeRemoved(HTMLTrackElement* track)
     2000{
     2001#if !LOG_DISABLED
     2002    if (track->hasTagName(trackTag)) {
     2003        KURL url = track->getNonEmptyURLAttribute(srcAttr);
     2004        LOG(Media, "HTMLMediaElement::trackWillBeRemoved - 'src' is %s", urlForLogging(url).utf8().data());
     2005    }
     2006#endif
     2007}
     2008
     2009void HTMLMediaElement::trackSourceChanged(HTMLTrackElement* track)
     2010{
     2011#if !LOG_DISABLED
     2012    if (track->hasTagName(trackTag)) {
     2013        KURL url = track->getNonEmptyURLAttribute(srcAttr);
     2014        LOG(Media, "HTMLMediaElement::trackSourceChanged - 'src' is %s", urlForLogging(url).utf8().data());
     2015    }
     2016#endif
     2017    loadNextTextTrack(track);
     2018}
    19812019#endif
    19822020
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r98300 r98736  
    5858class Widget;
    5959#endif
     60#if ENABLE(VIDEO_TRACK)
     61class HTMLTrackElement;
     62#endif
    6063
    6164// FIXME: The inheritance from MediaPlayerClient here should be private inheritance.
     
    181184#if ENABLE(VIDEO_TRACK)
    182185    PassRefPtr<TextTrack> addTrack(const String& kind, const String& label = "", const String& language = "");
     186    virtual void trackWasAdded(HTMLTrackElement*);
     187    virtual void trackWillBeRemoved(HTMLTrackElement*);
     188    virtual void trackSourceChanged(HTMLTrackElement*);
    183189#endif
    184190
     
    353359#if ENABLE(VIDEO_TRACK)
    354360    void loadTextTracks();
     361    void loadNextTextTrack(HTMLTrackElement*);
    355362
    356363    // TextTrackClient
  • trunk/Source/WebCore/html/HTMLTrackElement.cpp

    r98300 r98736  
    3333#include "HTMLNames.h"
    3434#include "Logging.h"
     35#include "ScriptEventListener.h"
    3536
    3637using namespace std;
     
    6061    HTMLElement::insertedIntoTree(deep);
    6162    Element* parent = parentElement();
    62     if (parent && parent->isMediaElement()) {
    63         // TODO(annacc):
    64         // static_cast<HTMLMediaElement*>(parentNode())->trackWasAdded(this);
    65     }
     63    if (parent && parent->isMediaElement())
     64        static_cast<HTMLMediaElement*>(parentNode())->trackWasAdded(this);
    6665}
    6766
     
    6968{
    7069    Element* parent = parentElement();
    71     if (parent && parent->isMediaElement()) {
    72         // TODO(annacc):
    73         // static_cast<HTMLMediaElement*>(parentNode())->trackWillBeRemoved(this);
     70    if (parent && parent->isMediaElement())
     71        static_cast<HTMLMediaElement*>(parentNode())->trackWillBeRemoved(this);
     72    HTMLElement::willRemove();
     73}
     74
     75void HTMLTrackElement::parseMappedAttribute(Attribute* attribute)
     76{
     77    const QualifiedName& attrName = attribute->name();
     78   
     79    if (attrName == onloadAttr)
     80        setAttributeEventListener(eventNames().loadEvent, createAttributeEventListener(this, attribute));
     81    else if (attrName == onerrorAttr)
     82        setAttributeEventListener(eventNames().errorEvent, createAttributeEventListener(this, attribute));
     83    else
     84        HTMLElement::parseMappedAttribute(attribute);
     85}
     86
     87void HTMLTrackElement::attributeChanged(Attribute* attr, bool preserveDecls)
     88{
     89    HTMLElement::attributeChanged(attr, preserveDecls);
     90
     91    const QualifiedName& attrName = attr->name();
     92    if (attrName == srcAttr) {
     93        if (!getAttribute(srcAttr).isEmpty() && parentNode())
     94            static_cast<HTMLMediaElement*>(parentNode())->trackSourceChanged(this);
    7495    }
    75     HTMLElement::willRemove();
    7696}
    7797
  • trunk/Source/WebCore/html/HTMLTrackElement.h

    r98300 r98736  
    6161    virtual ~HTMLTrackElement();
    6262
     63    virtual void parseMappedAttribute(Attribute*);
     64    virtual void attributeChanged(Attribute*, bool preserveDecls);
     65
    6366    virtual void insertedIntoTree(bool);
    6467    virtual void willRemove();
  • trunk/Source/WebCore/html/LoadableTextTrack.cpp

    r98238 r98736  
    6464}
    6565
    66 void LoadableTextTrack::cueLoadingCompleted(TextTrackLoader* loader, bool)
     66void LoadableTextTrack::cueLoadingCompleted(TextTrackLoader* loader, bool loadingFailed)
    6767{
    6868    ASSERT_UNUSED(loader, m_loader == loader);
    6969
    70     // FIXME(62885): Implement.
     70    loadingFailed ? setReadyState(TextTrack::Error) : setReadyState(TextTrack::Loaded);
     71
     72    if (m_loadingClient)
     73        m_loadingClient->textTrackLoadingCompleted(this, loadingFailed);
    7174}
    7275
Note: See TracChangeset for help on using the changeset viewer.