1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "media/blink/texttrack_impl.h" 6 7 #include "base/bind.h" 8 #include "base/location.h" 9 #include "base/single_thread_task_runner.h" 10 #include "media/base/bind_to_current_loop.h" 11 #include "media/blink/webinbandtexttrack_impl.h" 12 #include "third_party/WebKit/public/platform/WebInbandTextTrackClient.h" 13 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" 14 15 namespace media { 16 17 TextTrackImpl::TextTrackImpl( 18 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 19 blink::WebMediaPlayerClient* client, 20 scoped_ptr<WebInbandTextTrackImpl> text_track) 21 : task_runner_(task_runner), 22 client_(client), 23 text_track_(text_track.Pass()) { 24 client_->addTextTrack(text_track_.get()); 25 } 26 27 TextTrackImpl::~TextTrackImpl() { 28 task_runner_->PostTask( 29 FROM_HERE, 30 base::Bind(&TextTrackImpl::OnRemoveTrack, 31 client_, 32 base::Passed(&text_track_))); 33 } 34 35 void TextTrackImpl::addWebVTTCue(const base::TimeDelta& start, 36 const base::TimeDelta& end, 37 const std::string& id, 38 const std::string& content, 39 const std::string& settings) { 40 task_runner_->PostTask( 41 FROM_HERE, 42 base::Bind(&TextTrackImpl::OnAddCue, 43 text_track_.get(), 44 start, end, 45 id, content, settings)); 46 } 47 48 void TextTrackImpl::OnAddCue(WebInbandTextTrackImpl* text_track, 49 const base::TimeDelta& start, 50 const base::TimeDelta& end, 51 const std::string& id, 52 const std::string& content, 53 const std::string& settings) { 54 if (blink::WebInbandTextTrackClient* client = text_track->client()) { 55 client->addWebVTTCue(start.InSecondsF(), 56 end.InSecondsF(), 57 blink::WebString::fromUTF8(id), 58 blink::WebString::fromUTF8(content), 59 blink::WebString::fromUTF8(settings)); 60 } 61 } 62 63 void TextTrackImpl::OnRemoveTrack( 64 blink::WebMediaPlayerClient* client, 65 scoped_ptr<WebInbandTextTrackImpl> text_track) { 66 if (text_track->client()) 67 client->removeTextTrack(text_track.get()); 68 } 69 70 } // namespace media 71