Changeset 152741 in webkit


Ignore:
Timestamp:
Jul 16, 2013 2:34:12 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

Make WebVTTParser return cue data instead of cue DOM objects
https://bugs.webkit.org/show_bug.cgi?id=118687

Patch by Brendan Long <b.long@cablelabs.com> on 2013-07-16
Reviewed by Eric Carlson.

No new tests because this doesn't change functionality.

  • html/track/InbandTextTrack.cpp:

Make TextTrackCueMap handle WebVTTCues instead of just generic cues.
m_dataToCueMap and m_cueToDataMap were renamed m_genericDataToCueMap
and m_genericCueToDataMap. The cue maps were turned into pointers so we
only allocate the ones we need.
(WebCore::TextTrackCueMap::TextTrackCueMap): Initialize maps to 0.
(WebCore::TextTrackCueMap::~TextTrackCueMap): Delete allocated maps.
(WebCore::TextTrackCueMap::add): Changed to allocate cue maps as needed, and added WebVTT version.
(WebCore::TextTrackCueMap::find): Checked to check if cue maps are allocated, and added WebVTT version.
(WebCore::TextTrackCueMap::findGenericData): Changed to accept TextTrackCue instead of TextTrackCueGeneric.
(WebCore::TextTrackCueMap::findWebVTTData): Same as findGenericData, except for WebVTTCueData.
(WebCore::TextTrackCueMap::remove): Accept TextTrackCue instead of TextTrackCueGeneric, and look in both maps.
(WebCore::InbandTextTrack::addWebVTTCue): Added, based on addGenericCue.
(WebCore::InbandTextTrack::removeWebVTTCue): Added, almost identical to removeGenericCue.
(WebCore::InbandTextTrack::removeCue): m_cueMap.remove() takes a TextTrackCue now so it can remove both types of cue.
(WebCore::InbandTextTrack::willRemoveTextTrackPrivate): Use ASSERT_UNUSED instead of UNUSED_PARAM + ASSERT.

  • html/track/InbandTextTrack.h: Add new functions above, change maps to pointers and add maps for holding WebVTT cues.
  • html/track/WebVTTParser.cpp:

(WebCore::WebVTTParser::getNewCues): Return WebVTTCueData instead of TextTrackCue.
(WebCore::WebVTTParser::createNewCue): Create WebVTTCueData instead of TextTrackCue.

  • html/track/WebVTTParser.h: Add WebVTTCueData class, based on GenericCueData.

The following functions are just constructors, destructors, getters, or setters.
(WebCore::WebVTTCueData::create):
(WebCore::WebVTTCueData::~WebVTTCueData):
(WebCore::WebVTTCueData::startTime):
(WebCore::WebVTTCueData::setStartTime):
(WebCore::WebVTTCueData::endTime):
(WebCore::WebVTTCueData::setEndTime):
(WebCore::WebVTTCueData::id):
(WebCore::WebVTTCueData::setId):
(WebCore::WebVTTCueData::content):
(WebCore::WebVTTCueData::setContent):
(WebCore::WebVTTCueData::settings):
(WebCore::WebVTTCueData::setSettings):
(WebCore::WebVTTCueData::WebVTTCueData):

  • loader/TextTrackLoader.cpp:

(WebCore::TextTrackLoader::getNewCues): Convert WebVTTCueData to TextTrackCue when we get them.

  • platform/graphics/InbandTextTrackPrivateClient.h: Add addWebVTTCue and removeWebVTTCue functions to the interface.
Location:
trunk/Source/WebCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r152739 r152741  
     12013-07-16  Brendan Long  <b.long@cablelabs.com>
     2
     3        Make WebVTTParser return cue data instead of cue DOM objects
     4        https://bugs.webkit.org/show_bug.cgi?id=118687
     5
     6        Reviewed by Eric Carlson.
     7
     8        No new tests because this doesn't change functionality.
     9
     10        * html/track/InbandTextTrack.cpp:
     11        Make TextTrackCueMap handle WebVTTCues instead of just generic cues.
     12        m_dataToCueMap and m_cueToDataMap were renamed m_genericDataToCueMap
     13        and m_genericCueToDataMap. The cue maps were turned into pointers so we
     14        only allocate the ones we need.
     15        (WebCore::TextTrackCueMap::TextTrackCueMap): Initialize maps to 0.
     16        (WebCore::TextTrackCueMap::~TextTrackCueMap): Delete allocated maps.
     17        (WebCore::TextTrackCueMap::add): Changed to allocate cue maps as needed, and added WebVTT version.
     18        (WebCore::TextTrackCueMap::find): Checked to check if cue maps are allocated, and added WebVTT version.
     19        (WebCore::TextTrackCueMap::findGenericData): Changed to accept TextTrackCue instead of TextTrackCueGeneric.
     20        (WebCore::TextTrackCueMap::findWebVTTData): Same as findGenericData, except for WebVTTCueData.
     21        (WebCore::TextTrackCueMap::remove): Accept TextTrackCue instead of TextTrackCueGeneric, and look in both maps.
     22        (WebCore::InbandTextTrack::addWebVTTCue): Added, based on addGenericCue.
     23        (WebCore::InbandTextTrack::removeWebVTTCue): Added, almost identical to removeGenericCue.
     24        (WebCore::InbandTextTrack::removeCue): m_cueMap.remove() takes a TextTrackCue now so it can remove both types of cue.
     25        (WebCore::InbandTextTrack::willRemoveTextTrackPrivate): Use ASSERT_UNUSED instead of UNUSED_PARAM + ASSERT.
     26        * html/track/InbandTextTrack.h: Add new functions above, change maps to pointers and add maps for holding WebVTT cues.
     27        * html/track/WebVTTParser.cpp:
     28        (WebCore::WebVTTParser::getNewCues): Return WebVTTCueData instead of TextTrackCue.
     29        (WebCore::WebVTTParser::createNewCue): Create WebVTTCueData instead of TextTrackCue.
     30        * html/track/WebVTTParser.h: Add WebVTTCueData class, based on GenericCueData.
     31        The following functions are just constructors, destructors, getters, or setters.
     32        (WebCore::WebVTTCueData::create):
     33        (WebCore::WebVTTCueData::~WebVTTCueData):
     34        (WebCore::WebVTTCueData::startTime):
     35        (WebCore::WebVTTCueData::setStartTime):
     36        (WebCore::WebVTTCueData::endTime):
     37        (WebCore::WebVTTCueData::setEndTime):
     38        (WebCore::WebVTTCueData::id):
     39        (WebCore::WebVTTCueData::setId):
     40        (WebCore::WebVTTCueData::content):
     41        (WebCore::WebVTTCueData::setContent):
     42        (WebCore::WebVTTCueData::settings):
     43        (WebCore::WebVTTCueData::setSettings):
     44        (WebCore::WebVTTCueData::WebVTTCueData):
     45        * loader/TextTrackLoader.cpp:
     46        (WebCore::TextTrackLoader::getNewCues): Convert WebVTTCueData to TextTrackCue when we get them.
     47        * platform/graphics/InbandTextTrackPrivateClient.h: Add addWebVTTCue and removeWebVTTCue functions to the interface.
     48
    1492013-07-16  Tim Horton  <timothy_horton@apple.com>
    250
  • trunk/Source/WebCore/html/track/InbandTextTrack.cpp

    r152217 r152741  
    3838#include "TextTrackCueGeneric.h"
    3939#include "TextTrackCueList.h"
     40#include "WebVTTParser.h"
    4041#include <math.h>
    4142#include <wtf/text/CString.h>
     
    4344namespace WebCore {
    4445
     46TextTrackCueMap::TextTrackCueMap()
     47    : m_genericCueToDataMap(0)
     48    , m_genericDataToCueMap(0)
     49    , m_webVTTCueToDataMap(0)
     50    , m_webVTTDataToCueMap(0)
     51{
     52}
     53
     54TextTrackCueMap::~TextTrackCueMap()
     55{
     56    if (m_genericCueToDataMap) {
     57        delete m_genericCueToDataMap;
     58        ASSERT(m_genericDataToCueMap);
     59        delete m_genericDataToCueMap;
     60    } else
     61        ASSERT(!m_genericDataToCueMap);
     62
     63    if (m_webVTTCueToDataMap) {
     64        delete m_webVTTCueToDataMap;
     65        ASSERT(m_webVTTDataToCueMap);
     66        delete m_webVTTDataToCueMap;
     67    } else
     68        ASSERT(!m_webVTTDataToCueMap);
     69}
     70
    4571void TextTrackCueMap::add(GenericCueData* cueData, TextTrackCueGeneric* cue)
    4672{
    47     m_dataToCueMap.add(cueData, cue);
    48     m_cueToDataMap.add(cue, cueData);
     73    if (!m_genericDataToCueMap) {
     74        m_genericDataToCueMap = new GenericCueDataToCueMap;
     75        ASSERT(!m_genericCueToDataMap);
     76        m_genericCueToDataMap = new GenericCueToDataMap;
     77    } else
     78        ASSERT(m_genericCueToDataMap);
     79
     80    m_genericDataToCueMap->add(cueData, cue);
     81    m_genericCueToDataMap->add(cue, cueData);
     82}
     83
     84void TextTrackCueMap::add(WebVTTCueData* cueData, TextTrackCue* cue)
     85{
     86    if (!m_webVTTDataToCueMap) {
     87        m_webVTTDataToCueMap = new WebVTTCueDataToCueMap;
     88        ASSERT(!m_webVTTCueToDataMap);
     89        m_webVTTCueToDataMap = new WebVTTCueToDataMap;
     90    } else
     91        ASSERT(m_webVTTCueToDataMap);
     92
     93    m_webVTTDataToCueMap->add(cueData, cue);
     94    m_webVTTCueToDataMap->add(cue, cueData);
    4995}
    5096
    5197PassRefPtr<TextTrackCueGeneric> TextTrackCueMap::find(GenericCueData* cueData)
    5298{
    53     GenericCueDataToCueMap::iterator iter = m_dataToCueMap.find(cueData);
    54     if (iter == m_dataToCueMap.end())
    55         return 0;
    56    
     99    if (!m_genericDataToCueMap)
     100        return 0;
     101
     102    GenericCueDataToCueMap::iterator iter = m_genericDataToCueMap->find(cueData);
     103    if (iter == m_genericDataToCueMap->end())
     104        return 0;
     105
    57106    return iter->value;
    58107}
    59108
    60 PassRefPtr<GenericCueData> TextTrackCueMap::find(TextTrackCueGeneric* cue)
    61 {
    62     GenericCueToCueDataMap::iterator iter = m_cueToDataMap.find(cue);
    63     if (iter == m_cueToDataMap.end())
    64         return 0;
    65    
     109PassRefPtr<TextTrackCue> TextTrackCueMap::find(WebVTTCueData* cueData)
     110{
     111    if (!m_webVTTDataToCueMap)
     112        return 0;
     113
     114    WebVTTCueDataToCueMap::iterator iter = m_webVTTDataToCueMap->find(cueData);
     115    if (iter == m_webVTTDataToCueMap->end())
     116        return 0;
     117
    66118    return iter->value;
    67119}
    68120
     121PassRefPtr<GenericCueData> TextTrackCueMap::findGenericData(TextTrackCue* cue)
     122{
     123    if (!m_genericCueToDataMap)
     124        return 0;
     125
     126    GenericCueToDataMap::iterator iter = m_genericCueToDataMap->find(cue);
     127    if (iter == m_genericCueToDataMap->end())
     128        return 0;
     129
     130    return iter->value;
     131}
     132
     133PassRefPtr<WebVTTCueData> TextTrackCueMap::findWebVTTData(TextTrackCue* cue)
     134{
     135    if (!m_webVTTCueToDataMap)
     136        return 0;
     137
     138    WebVTTCueToDataMap::iterator iter = m_webVTTCueToDataMap->find(cue);
     139    if (iter == m_webVTTCueToDataMap->end())
     140        return 0;
     141   
     142    return iter->value;
     143}
     144
    69145void TextTrackCueMap::remove(GenericCueData* cueData)
    70146{
     147    if (!m_genericCueToDataMap)
     148        return;
     149
    71150    RefPtr<TextTrackCueGeneric> cue = find(cueData);
    72151
    73152    if (cue)
    74         m_cueToDataMap.remove(cue);
    75     m_dataToCueMap.remove(cueData);
    76 }
    77 
    78 void TextTrackCueMap::remove(TextTrackCueGeneric* cue)
    79 {
    80     RefPtr<GenericCueData> cueData = find(cue);
    81 
    82     if (cueData)
    83         m_dataToCueMap.remove(cueData);
    84     m_cueToDataMap.remove(cue);
     153        m_genericCueToDataMap->remove(cue);
     154    m_genericDataToCueMap->remove(cueData);
     155}
     156
     157void TextTrackCueMap::remove(TextTrackCue* cue)
     158{
     159    if (m_genericCueToDataMap) {
     160        RefPtr<GenericCueData> genericData = findGenericData(cue);
     161        if (genericData) {
     162            m_genericDataToCueMap->remove(genericData);
     163            m_genericCueToDataMap->remove(cue);
     164            return;
     165        }
     166    }
     167
     168    if (m_webVTTCueToDataMap) {
     169        RefPtr<WebVTTCueData> webVTTData = findWebVTTData(cue);
     170        if (webVTTData) {
     171            m_webVTTDataToCueMap->remove(webVTTData);
     172            m_webVTTCueToDataMap->remove(cue);
     173        }
     174    }
     175}
     176
     177void TextTrackCueMap::remove(WebVTTCueData* cueData)
     178{
     179    if (!m_webVTTCueToDataMap)
     180        return;
     181
     182    RefPtr<TextTrackCue> cue = find(cueData);
     183
     184    if (cue)
     185        m_webVTTCueToDataMap->remove(cue);
     186    m_webVTTDataToCueMap->remove(cueData);
    85187}
    86188
     
    229331void InbandTextTrack::addGenericCue(InbandTextTrackPrivate* trackPrivate, PassRefPtr<GenericCueData> prpCueData)
    230332{
    231     UNUSED_PARAM(trackPrivate);
    232     ASSERT(trackPrivate == m_private);
     333    ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
    233334
    234335    RefPtr<GenericCueData> cueData = prpCueData;
     
    271372}
    272373
     374void InbandTextTrack::addWebVTTCue(InbandTextTrackPrivate* trackPrivate, PassRefPtr<WebVTTCueData> prpCueData)
     375{
     376    ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
     377
     378    RefPtr<WebVTTCueData> cueData = prpCueData;
     379    if (m_cueMap.find(cueData.get()))
     380        return;
     381
     382    RefPtr<TextTrackCue> cue = TextTrackCue::create(scriptExecutionContext(), cueData->startTime(), cueData->endTime(), cueData->content());
     383    cue->setId(cueData->id());
     384    cue->setCueSettings(cueData->settings());
     385
     386    m_cueMap.add(cueData.get(), cue.get());
     387    addCue(cue.release());
     388}
     389
     390void InbandTextTrack::removeWebVTTCue(InbandTextTrackPrivate*, WebVTTCueData* cueData)
     391{
     392    RefPtr<TextTrackCue> cue = m_cueMap.find(cueData);
     393    if (cue) {
     394        LOG(Media, "InbandTextTrack::removeWebVTTCue removing cue: start=%.2f, end=%.2f, content=\"%s\"\n", cueData->startTime(), cueData->endTime(), cueData->content().utf8().data());
     395        removeCue(cue.get(), IGNORE_EXCEPTION);
     396    } else
     397        m_cueMap.remove(cueData);
     398}
     399
    273400void InbandTextTrack::removeCue(TextTrackCue* cue, ExceptionCode& ec)
    274401{
    275     m_cueMap.remove(static_cast<TextTrackCueGeneric*>(cue));
     402    m_cueMap.remove(cue);
    276403    TextTrack::removeCue(cue, ec);
    277404}
     
    281408    if (!mediaElement())
    282409        return;
    283 
    284     UNUSED_PARAM(trackPrivate);
    285     ASSERT(trackPrivate == m_private);
     410    ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
    286411    mediaElement()->removeTextTrack(this);
    287412}
  • trunk/Source/WebCore/html/track/InbandTextTrack.h

    r151947 r152741  
    3939class InbandTextTrackPrivate;
    4040class TextTrackCue;
     41class WebVTTCueData;
    4142
    4243class TextTrackCueMap {
    4344public:
    44     TextTrackCueMap() { }
    45     virtual ~TextTrackCueMap() { }
     45    TextTrackCueMap();
     46    virtual ~TextTrackCueMap();
    4647
    4748    void add(GenericCueData*, TextTrackCueGeneric*);
     49    void add(WebVTTCueData*, TextTrackCue*);
    4850
     51    void remove(TextTrackCue*);
    4952    void remove(GenericCueData*);
    50     void remove(TextTrackCueGeneric*);
    51    
    52     PassRefPtr<GenericCueData> find(TextTrackCueGeneric*);
     53    void remove(WebVTTCueData*);
     54
     55    PassRefPtr<GenericCueData> findGenericData(TextTrackCue*);
     56    PassRefPtr<WebVTTCueData> findWebVTTData(TextTrackCue*);
    5357    PassRefPtr<TextTrackCueGeneric> find(GenericCueData*);
     58    PassRefPtr<TextTrackCue> find(WebVTTCueData*);
    5459   
    5560private:
    56     typedef HashMap<RefPtr<TextTrackCueGeneric>, RefPtr<GenericCueData> > GenericCueToCueDataMap;
     61    typedef HashMap<RefPtr<TextTrackCue>, RefPtr<GenericCueData> > GenericCueToDataMap;
    5762    typedef HashMap<RefPtr<GenericCueData>, RefPtr<TextTrackCueGeneric> > GenericCueDataToCueMap;
    58    
    59     GenericCueToCueDataMap m_cueToDataMap;
    60     GenericCueDataToCueMap m_dataToCueMap;
     63    typedef HashMap<RefPtr<TextTrackCue>, RefPtr<WebVTTCueData> > WebVTTCueToDataMap;
     64    typedef HashMap<RefPtr<WebVTTCueData>, RefPtr<TextTrackCue> > WebVTTCueDataToCueMap;
     65
     66    GenericCueToDataMap* m_genericCueToDataMap;
     67    GenericCueDataToCueMap* m_genericDataToCueMap;
     68    WebVTTCueToDataMap* m_webVTTCueToDataMap;
     69    WebVTTCueDataToCueMap* m_webVTTDataToCueMap;
    6170};
    6271
     
    8089    virtual void updateGenericCue(InbandTextTrackPrivate*, GenericCueData*) OVERRIDE;
    8190    virtual void removeGenericCue(InbandTextTrackPrivate*, GenericCueData*) OVERRIDE;
     91    virtual void addWebVTTCue(InbandTextTrackPrivate*, PassRefPtr<WebVTTCueData>) OVERRIDE;
     92    virtual void removeWebVTTCue(InbandTextTrackPrivate*, WebVTTCueData*) OVERRIDE;
    8293    virtual void removeCue(TextTrackCue*, ExceptionCode&) OVERRIDE;
    8394    virtual void willRemoveTextTrackPrivate(InbandTextTrackPrivate*) OVERRIDE;
  • trunk/Source/WebCore/html/track/WebVTTParser.cpp

    r147325 r152741  
    127127}
    128128
    129 void WebVTTParser::getNewCues(Vector<RefPtr<TextTrackCue> >& outputCues)
     129void WebVTTParser::getNewCues(Vector<RefPtr<WebVTTCueData> >& outputCues)
    130130{
    131131    outputCues = m_cuelist;
     
    361361        return;
    362362
    363     RefPtr<TextTrackCue> cue = TextTrackCue::create(m_scriptExecutionContext, m_currentStartTime, m_currentEndTime, m_currentContent.toString());
     363    RefPtr<WebVTTCueData> cue = WebVTTCueData::create();
     364    cue->setStartTime(m_currentStartTime);
     365    cue->setEndTime(m_currentEndTime);
     366    cue->setContent(m_currentContent.toString());
    364367    cue->setId(m_currentId);
    365     cue->setCueSettings(m_currentSettings);
     368    cue->setSettings(m_currentSettings);
    366369
    367370    m_cuelist.append(cue);
  • trunk/Source/WebCore/html/track/WebVTTParser.h

    r147325 r152741  
    3636#include "DocumentFragment.h"
    3737#include "HTMLNames.h"
    38 #include "TextTrackCue.h"
    3938#include "TextTrackRegion.h"
    4039#include "WebVTTTokenizer.h"
     
    5756#endif
    5857    virtual void fileFailedToParse() = 0;
     58};
     59
     60class WebVTTCueData : public RefCounted<WebVTTCueData> {
     61public:
     62
     63    static PassRefPtr<WebVTTCueData> create() { return adoptRef(new WebVTTCueData()); }
     64    virtual ~WebVTTCueData() { }
     65
     66    double startTime() const { return m_startTime; }
     67    void setStartTime(double startTime) { m_startTime = startTime; }
     68
     69    double endTime() const { return m_endTime; }
     70    void setEndTime(double endTime) { m_endTime = endTime; }
     71
     72    String id() const { return m_id; }
     73    void setId(String id) { m_id = id; }
     74
     75    String content() const { return m_content; }
     76    void setContent(String content) { m_content = content; }
     77
     78    String settings() const { return m_settings; }
     79    void setSettings(String settings) { m_settings = settings; }
     80
     81private:
     82    WebVTTCueData()
     83        : m_startTime(0)
     84        , m_endTime(0)
     85    {
     86    }
     87
     88    double m_startTime;
     89    double m_endTime;
     90    String m_id;
     91    String m_content;
     92    String m_settings;
    5993};
    6094
     
    113147
    114148    // Transfers ownership of last parsed cues to caller.
    115     void getNewCues(Vector<RefPtr<TextTrackCue> >&);
     149    void getNewCues(Vector<RefPtr<WebVTTCueData> >&);
    116150#if ENABLE(WEBVTT_REGIONS)
    117151    void getNewRegions(Vector<RefPtr<TextTrackRegion> >&);
     
    166200
    167201    Vector<AtomicString> m_languageStack;
    168     Vector<RefPtr<TextTrackCue> > m_cuelist;
     202    Vector<RefPtr<WebVTTCueData> > m_cuelist;
    169203
    170204#if ENABLE(WEBVTT_REGIONS)
  • trunk/Source/WebCore/loader/TextTrackLoader.cpp

    r148209 r152741  
    3939#include "ScriptCallStack.h"
    4040#include "SecurityOrigin.h"
     41#include "TextTrackCue.h"
    4142#include "WebVTTParser.h"
    4243
     
    210211{
    211212    ASSERT(m_cueParser);
    212     if (m_cueParser)
    213         m_cueParser->getNewCues(outputCues);
     213    if (m_cueParser) {
     214        Vector<RefPtr<WebVTTCueData> > newCues;
     215        m_cueParser->getNewCues(newCues);
     216        for (size_t i = 0; i < newCues.size(); ++i) {
     217            RefPtr<WebVTTCueData> data = newCues[i];
     218            RefPtr<TextTrackCue> cue = TextTrackCue::create(m_scriptExecutionContext, data->startTime(), data->endTime(), data->content());
     219            cue->setId(data->id());
     220            cue->setCueSettings(data->settings());
     221            outputCues.append(cue);
     222        }
     223    }
    214224}
    215225
  • trunk/Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h

    r150055 r152741  
    130130};
    131131
     132class WebVTTCueData;
     133
    132134class InbandTextTrackPrivateClient {
    133135public:
     
    138140    virtual void removeGenericCue(InbandTextTrackPrivate*, GenericCueData*) = 0;
    139141
     142    virtual void addWebVTTCue(InbandTextTrackPrivate*, PassRefPtr<WebVTTCueData>) = 0;
     143    virtual void removeWebVTTCue(InbandTextTrackPrivate*, WebVTTCueData*) = 0;
     144
    140145    virtual void willRemoveTextTrackPrivate(InbandTextTrackPrivate*) = 0;
    141146};
Note: See TracChangeset for help on using the changeset viewer.