| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "media/blink/texttrack_impl.h" |
| |
| #include <utility> |
| |
| #include "base/bind.h" |
| #include "base/location.h" |
| #include "base/single_thread_task_runner.h" |
| #include "media/base/bind_to_current_loop.h" |
| #include "media/blink/webinbandtexttrack_impl.h" |
| #include "third_party/blink/public/platform/web_inband_text_track_client.h" |
| #include "third_party/blink/public/platform/web_media_player_client.h" |
| |
| namespace media { |
| |
| TextTrackImpl::TextTrackImpl( |
| const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
| blink::WebMediaPlayerClient* client, |
| std::unique_ptr<WebInbandTextTrackImpl> text_track) |
| : task_runner_(task_runner), |
| client_(client), |
| text_track_(std::move(text_track)) { |
| client_->AddTextTrack(text_track_.get()); |
| } |
| |
| TextTrackImpl::~TextTrackImpl() { |
| task_runner_->PostTask(FROM_HERE, |
| base::BindOnce(&TextTrackImpl::OnRemoveTrack, client_, |
| std::move(text_track_))); |
| } |
| |
| void TextTrackImpl::addWebVTTCue(base::TimeDelta start, |
| base::TimeDelta end, |
| const std::string& id, |
| const std::string& content, |
| const std::string& settings) { |
| task_runner_->PostTask( |
| FROM_HERE, base::BindOnce(&TextTrackImpl::OnAddCue, text_track_.get(), |
| start, end, id, content, settings)); |
| } |
| |
| void TextTrackImpl::OnAddCue(WebInbandTextTrackImpl* text_track, |
| base::TimeDelta start, |
| base::TimeDelta end, |
| const std::string& id, |
| const std::string& content, |
| const std::string& settings) { |
| if (blink::WebInbandTextTrackClient* client = text_track->Client()) { |
| client->AddWebVTTCue(start.InSecondsF(), end.InSecondsF(), |
| blink::WebString::FromUTF8(id), |
| blink::WebString::FromUTF8(content), |
| blink::WebString::FromUTF8(settings)); |
| } |
| } |
| |
| void TextTrackImpl::OnRemoveTrack( |
| blink::WebMediaPlayerClient* client, |
| std::unique_ptr<WebInbandTextTrackImpl> text_track) { |
| if (text_track->Client()) |
| client->RemoveTextTrack(text_track.get()); |
| } |
| |
| } // namespace media |