• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
TextTrackImpl(const scoped_refptr<base::SingleThreadTaskRunner> & task_runner,blink::WebMediaPlayerClient * client,scoped_ptr<WebInbandTextTrackImpl> text_track)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 
~TextTrackImpl()27 TextTrackImpl::~TextTrackImpl() {
28   task_runner_->PostTask(
29       FROM_HERE,
30       base::Bind(&TextTrackImpl::OnRemoveTrack,
31                  client_,
32                  base::Passed(&text_track_)));
33 }
34 
addWebVTTCue(const base::TimeDelta & start,const base::TimeDelta & end,const std::string & id,const std::string & content,const std::string & settings)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 
OnAddCue(WebInbandTextTrackImpl * text_track,const base::TimeDelta & start,const base::TimeDelta & end,const std::string & id,const std::string & content,const std::string & settings)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 
OnRemoveTrack(blink::WebMediaPlayerClient * client,scoped_ptr<WebInbandTextTrackImpl> text_track)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