Vector<RefPtr<TextTrack>> MediaControlsHost::sortedTrackListForMenu(TextTrackList* trackList) { if (!trackList) return Vector<RefPtr<TextTrack>>(); Page* page = m_mediaElement->document().page(); if (!page) return Vector<RefPtr<TextTrack>>(); CaptionUserPreferences* captionPreferences = page->group().captionPreferences(); return captionPreferences->sortedTrackListForMenu(trackList); }
void MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu() { #if ENABLE(VIDEO_TRACK) // Remove any existing content. removeChildren(); m_menuItems.clear(); m_menuToTrackMap.clear(); if (!mediaController()->hasClosedCaptions()) return; HTMLMediaElement* mediaElement = toParentMediaElement(this); if (!mediaElement) return; TextTrackList* trackList = mediaElement->textTracks(); if (!trackList || !trackList->length()) return; Document* doc = document(); if (!document()->page()) return; CaptionUserPreferences* captionPreferences = document()->page()->group().captionPreferences(); Vector<RefPtr<TextTrack> > tracksForMenu = captionPreferences->sortedTrackListForMenu(trackList); RefPtr<Element> captionsHeader = doc->createElement(h3Tag, ASSERT_NO_EXCEPTION); captionsHeader->appendChild(doc->createTextNode(textTrackSubtitlesText())); appendChild(captionsHeader); RefPtr<Element> captionsMenuList = doc->createElement(ulTag, ASSERT_NO_EXCEPTION); for (unsigned i = 0, length = tracksForMenu.size(); i < length; ++i) { RefPtr<TextTrack> textTrack = tracksForMenu[i]; RefPtr<Element> menuItem = doc->createElement(liTag, ASSERT_NO_EXCEPTION); menuItem->appendChild(doc->createTextNode(captionPreferences->displayNameForTrack(textTrack.get()))); captionsMenuList->appendChild(menuItem); m_menuItems.append(menuItem); m_menuToTrackMap.add(menuItem, textTrack); } appendChild(captionsMenuList); #endif }