Changeset 152741 in webkit
- Timestamp:
- Jul 16, 2013 2:34:12 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r152739 r152741 1 2013-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 1 49 2013-07-16 Tim Horton <timothy_horton@apple.com> 2 50 -
trunk/Source/WebCore/html/track/InbandTextTrack.cpp
r152217 r152741 38 38 #include "TextTrackCueGeneric.h" 39 39 #include "TextTrackCueList.h" 40 #include "WebVTTParser.h" 40 41 #include <math.h> 41 42 #include <wtf/text/CString.h> … … 43 44 namespace WebCore { 44 45 46 TextTrackCueMap::TextTrackCueMap() 47 : m_genericCueToDataMap(0) 48 , m_genericDataToCueMap(0) 49 , m_webVTTCueToDataMap(0) 50 , m_webVTTDataToCueMap(0) 51 { 52 } 53 54 TextTrackCueMap::~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 45 71 void TextTrackCueMap::add(GenericCueData* cueData, TextTrackCueGeneric* cue) 46 72 { 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 84 void 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); 49 95 } 50 96 51 97 PassRefPtr<TextTrackCueGeneric> TextTrackCueMap::find(GenericCueData* cueData) 52 98 { 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 57 106 return iter->value; 58 107 } 59 108 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 109 PassRefPtr<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 66 118 return iter->value; 67 119 } 68 120 121 PassRefPtr<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 133 PassRefPtr<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 69 145 void TextTrackCueMap::remove(GenericCueData* cueData) 70 146 { 147 if (!m_genericCueToDataMap) 148 return; 149 71 150 RefPtr<TextTrackCueGeneric> cue = find(cueData); 72 151 73 152 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 157 void 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 177 void 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); 85 187 } 86 188 … … 229 331 void InbandTextTrack::addGenericCue(InbandTextTrackPrivate* trackPrivate, PassRefPtr<GenericCueData> prpCueData) 230 332 { 231 UNUSED_PARAM(trackPrivate); 232 ASSERT(trackPrivate == m_private); 333 ASSERT_UNUSED(trackPrivate, trackPrivate == m_private); 233 334 234 335 RefPtr<GenericCueData> cueData = prpCueData; … … 271 372 } 272 373 374 void 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 390 void 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 273 400 void InbandTextTrack::removeCue(TextTrackCue* cue, ExceptionCode& ec) 274 401 { 275 m_cueMap.remove( static_cast<TextTrackCueGeneric*>(cue));402 m_cueMap.remove(cue); 276 403 TextTrack::removeCue(cue, ec); 277 404 } … … 281 408 if (!mediaElement()) 282 409 return; 283 284 UNUSED_PARAM(trackPrivate); 285 ASSERT(trackPrivate == m_private); 410 ASSERT_UNUSED(trackPrivate, trackPrivate == m_private); 286 411 mediaElement()->removeTextTrack(this); 287 412 } -
trunk/Source/WebCore/html/track/InbandTextTrack.h
r151947 r152741 39 39 class InbandTextTrackPrivate; 40 40 class TextTrackCue; 41 class WebVTTCueData; 41 42 42 43 class TextTrackCueMap { 43 44 public: 44 TextTrackCueMap() { }45 virtual ~TextTrackCueMap() { }45 TextTrackCueMap(); 46 virtual ~TextTrackCueMap(); 46 47 47 48 void add(GenericCueData*, TextTrackCueGeneric*); 49 void add(WebVTTCueData*, TextTrackCue*); 48 50 51 void remove(TextTrackCue*); 49 52 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*); 53 57 PassRefPtr<TextTrackCueGeneric> find(GenericCueData*); 58 PassRefPtr<TextTrackCue> find(WebVTTCueData*); 54 59 55 60 private: 56 typedef HashMap<RefPtr<TextTrackCue Generic>, RefPtr<GenericCueData> > GenericCueToCueDataMap;61 typedef HashMap<RefPtr<TextTrackCue>, RefPtr<GenericCueData> > GenericCueToDataMap; 57 62 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; 61 70 }; 62 71 … … 80 89 virtual void updateGenericCue(InbandTextTrackPrivate*, GenericCueData*) OVERRIDE; 81 90 virtual void removeGenericCue(InbandTextTrackPrivate*, GenericCueData*) OVERRIDE; 91 virtual void addWebVTTCue(InbandTextTrackPrivate*, PassRefPtr<WebVTTCueData>) OVERRIDE; 92 virtual void removeWebVTTCue(InbandTextTrackPrivate*, WebVTTCueData*) OVERRIDE; 82 93 virtual void removeCue(TextTrackCue*, ExceptionCode&) OVERRIDE; 83 94 virtual void willRemoveTextTrackPrivate(InbandTextTrackPrivate*) OVERRIDE; -
trunk/Source/WebCore/html/track/WebVTTParser.cpp
r147325 r152741 127 127 } 128 128 129 void WebVTTParser::getNewCues(Vector<RefPtr< TextTrackCue> >& outputCues)129 void WebVTTParser::getNewCues(Vector<RefPtr<WebVTTCueData> >& outputCues) 130 130 { 131 131 outputCues = m_cuelist; … … 361 361 return; 362 362 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()); 364 367 cue->setId(m_currentId); 365 cue->set CueSettings(m_currentSettings);368 cue->setSettings(m_currentSettings); 366 369 367 370 m_cuelist.append(cue); -
trunk/Source/WebCore/html/track/WebVTTParser.h
r147325 r152741 36 36 #include "DocumentFragment.h" 37 37 #include "HTMLNames.h" 38 #include "TextTrackCue.h"39 38 #include "TextTrackRegion.h" 40 39 #include "WebVTTTokenizer.h" … … 57 56 #endif 58 57 virtual void fileFailedToParse() = 0; 58 }; 59 60 class WebVTTCueData : public RefCounted<WebVTTCueData> { 61 public: 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 81 private: 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; 59 93 }; 60 94 … … 113 147 114 148 // Transfers ownership of last parsed cues to caller. 115 void getNewCues(Vector<RefPtr< TextTrackCue> >&);149 void getNewCues(Vector<RefPtr<WebVTTCueData> >&); 116 150 #if ENABLE(WEBVTT_REGIONS) 117 151 void getNewRegions(Vector<RefPtr<TextTrackRegion> >&); … … 166 200 167 201 Vector<AtomicString> m_languageStack; 168 Vector<RefPtr< TextTrackCue> > m_cuelist;202 Vector<RefPtr<WebVTTCueData> > m_cuelist; 169 203 170 204 #if ENABLE(WEBVTT_REGIONS) -
trunk/Source/WebCore/loader/TextTrackLoader.cpp
r148209 r152741 39 39 #include "ScriptCallStack.h" 40 40 #include "SecurityOrigin.h" 41 #include "TextTrackCue.h" 41 42 #include "WebVTTParser.h" 42 43 … … 210 211 { 211 212 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 } 214 224 } 215 225 -
trunk/Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h
r150055 r152741 130 130 }; 131 131 132 class WebVTTCueData; 133 132 134 class InbandTextTrackPrivateClient { 133 135 public: … … 138 140 virtual void removeGenericCue(InbandTextTrackPrivate*, GenericCueData*) = 0; 139 141 142 virtual void addWebVTTCue(InbandTextTrackPrivate*, PassRefPtr<WebVTTCueData>) = 0; 143 virtual void removeWebVTTCue(InbandTextTrackPrivate*, WebVTTCueData*) = 0; 144 140 145 virtual void willRemoveTextTrackPrivate(InbandTextTrackPrivate*) = 0; 141 146 };
Note: See TracChangeset
for help on using the changeset viewer.