Chromium Code Reviews| Index: content/renderer/media/texttrack_impl.cc |
| diff --git a/content/renderer/media/texttrack_impl.cc b/content/renderer/media/texttrack_impl.cc |
| index 7acf39a1a488039c5748bfa031ec9e7ece5a83da..44557b33be2086fe5183ce6f37e250ac5b2e578a 100644 |
| --- a/content/renderer/media/texttrack_impl.cc |
| +++ b/content/renderer/media/texttrack_impl.cc |
| @@ -4,21 +4,31 @@ |
| #include "content/renderer/media/texttrack_impl.h" |
| +#include "base/bind.h" |
| +#include "base/message_loop/message_loop_proxy.h" |
| #include "content/renderer/media/webinbandtexttrack_impl.h" |
| +#include "media/base/bind_to_loop.h" |
| #include "third_party/WebKit/public/web/WebInbandTextTrackClient.h" |
| #include "third_party/WebKit/public/web/WebMediaPlayerClient.h" |
| namespace content { |
| -TextTrackImpl::TextTrackImpl(WebKit::WebMediaPlayerClient* client, |
| - WebInbandTextTrackImpl* text_track) |
| - : client_(client), text_track_(text_track) { |
| +TextTrackImpl::TextTrackImpl( |
| + const scoped_refptr<base::MessageLoopProxy>& message_loop, |
| + WebKit::WebMediaPlayerClient* client, |
| + WebInbandTextTrackImpl* text_track) |
| + : message_loop_(message_loop), |
| + client_(client), |
| + text_track_(text_track) { |
| client_->addTextTrack(text_track_.get()); |
| } |
| TextTrackImpl::~TextTrackImpl() { |
| - if (text_track_->client()) |
| - client_->removeTextTrack(text_track_.get()); |
| + message_loop_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&TextTrackImpl::OnRemoveTrack, |
| + client_, |
| + text_track_.release())); |
| } |
| void TextTrackImpl::addWebVTTCue(const base::TimeDelta& start, |
| @@ -26,12 +36,36 @@ void TextTrackImpl::addWebVTTCue(const base::TimeDelta& start, |
| const std::string& id, |
| const std::string& content, |
| const std::string& settings) { |
| - if (WebKit::WebInbandTextTrackClient* client = text_track_->client()) |
| - client->addWebVTTCue(start.InSecondsF(), |
| - end.InSecondsF(), |
| - WebKit::WebString::fromUTF8(id), |
| - WebKit::WebString::fromUTF8(content), |
| - WebKit::WebString::fromUTF8(settings)); |
| + if (WebKit::WebInbandTextTrackClient* client = text_track_->client()) { |
|
acolwell GONE FROM CHROMIUM
2013/10/08 15:45:24
I don't think this is safe. I think you have to do
Matthew Heaney (Chromium)
2013/10/13 05:30:17
Done.
|
| + message_loop_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&TextTrackImpl::OnAddCue, |
| + client, |
| + start, end, |
| + id, content, settings)); |
| + } |
| +} |
| + |
| +void TextTrackImpl::OnAddCue(WebKit::WebInbandTextTrackClient* client, |
| + const base::TimeDelta& start, |
| + const base::TimeDelta& end, |
| + const std::string& id, |
| + const std::string& content, |
| + const std::string& settings) { |
| + client->addWebVTTCue(start.InSecondsF(), |
| + end.InSecondsF(), |
| + WebKit::WebString::fromUTF8(id), |
| + WebKit::WebString::fromUTF8(content), |
| + WebKit::WebString::fromUTF8(settings)); |
| +} |
| + |
| +void TextTrackImpl::OnRemoveTrack( |
| + WebKit::WebMediaPlayerClient* client, |
| + WebInbandTextTrackImpl* text_track) { |
|
acolwell GONE FROM CHROMIUM
2013/10/08 15:45:24
You should be able to make text_track a scoped_ptr
Matthew Heaney (Chromium)
2013/10/13 05:30:17
I had tried that, but the compiler complains about
|
| + scoped_ptr<WebInbandTextTrackImpl> auto_delete(text_track); |
| + |
| + if (text_track->client()) |
| + client->removeTextTrack(text_track); |
| } |
| } // namespace content |