| Index: content/renderer/media/webmediaplayer_impl.cc
 | 
| diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
 | 
| index f6c347c069f7c93a536a45b0ec1a91020a747b0c..34f80d1b95b1e8d8017ac7b4e12aa599d1ac98af 100644
 | 
| --- a/content/renderer/media/webmediaplayer_impl.cc
 | 
| +++ b/content/renderer/media/webmediaplayer_impl.cc
 | 
| @@ -38,6 +38,7 @@
 | 
|  #include "media/base/media_log.h"
 | 
|  #include "media/base/media_switches.h"
 | 
|  #include "media/base/pipeline.h"
 | 
| +#include "media/base/text_renderer.h"
 | 
|  #include "media/base/video_frame.h"
 | 
|  #include "media/filters/audio_renderer_impl.h"
 | 
|  #include "media/filters/chunk_demuxer.h"
 | 
| @@ -993,21 +994,26 @@ void WebMediaPlayerImpl::OnNeedKey(const std::string& type,
 | 
|                           init_data.size());
 | 
|  }
 | 
|  
 | 
| -scoped_ptr<media::TextTrack>
 | 
| -WebMediaPlayerImpl::OnTextTrack(media::TextKind kind,
 | 
| -                                const std::string& label,
 | 
| -                                const std::string& language) {
 | 
| -  typedef WebInbandTextTrackImpl::Kind webkind_t;
 | 
| -  const webkind_t webkind = static_cast<webkind_t>(kind);
 | 
| -  const WebKit::WebString weblabel = WebKit::WebString::fromUTF8(label);
 | 
| -  const WebKit::WebString weblanguage = WebKit::WebString::fromUTF8(language);
 | 
| +void WebMediaPlayerImpl::OnAddTextTrack(
 | 
| +    const media::TextTrackConfig& config,
 | 
| +    const media::AddTextTrackDoneCB& done_cb) {
 | 
| +  DCHECK(main_loop_->BelongsToCurrentThread());
 | 
| +
 | 
| +  const WebInbandTextTrackImpl::Kind web_kind =
 | 
| +      static_cast<WebInbandTextTrackImpl::Kind>(config.kind());
 | 
| +  const WebKit::WebString web_label =
 | 
| +      WebKit::WebString::fromUTF8(config.label());
 | 
| +  const WebKit::WebString web_language =
 | 
| +      WebKit::WebString::fromUTF8(config.language());
 | 
| +
 | 
| +  scoped_ptr<WebInbandTextTrackImpl> web_inband_text_track(
 | 
| +      new WebInbandTextTrackImpl(web_kind, web_label, web_language,
 | 
| +                                 text_track_index_++));
 | 
|  
 | 
| -  WebInbandTextTrackImpl* const text_track =
 | 
| -    new WebInbandTextTrackImpl(webkind, weblabel, weblanguage,
 | 
| -                               text_track_index_++);
 | 
| +  scoped_ptr<media::TextTrack> text_track(
 | 
| +      new TextTrackImpl(main_loop_, GetClient(), web_inband_text_track.Pass()));
 | 
|  
 | 
| -  return scoped_ptr<media::TextTrack>(new TextTrackImpl(GetClient(),
 | 
| -                                                        text_track));
 | 
| +  done_cb.Run(text_track.Pass());
 | 
|  }
 | 
|  
 | 
|  void WebMediaPlayerImpl::OnKeyError(const std::string& session_id,
 | 
| @@ -1078,6 +1084,9 @@ void WebMediaPlayerImpl::StartPipeline() {
 | 
|    UMA_HISTOGRAM_BOOLEAN("Media.MSE.Playback",
 | 
|                          (load_type_ == LoadTypeMediaSource));
 | 
|  
 | 
| +  const bool enable_inband_text_tracks =
 | 
| +      cmd_line->HasSwitch(switches::kEnableInbandTextTracks);
 | 
| +
 | 
|    // Figure out which demuxer to use.
 | 
|    if (load_type_ != LoadTypeMediaSource) {
 | 
|      DCHECK(!chunk_demuxer_);
 | 
| @@ -1086,22 +1095,16 @@ void WebMediaPlayerImpl::StartPipeline() {
 | 
|      demuxer_.reset(new media::FFmpegDemuxer(
 | 
|          media_loop_, data_source_.get(),
 | 
|          BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey),
 | 
| +        enable_inband_text_tracks,
 | 
|          media_log_));
 | 
|    } else {
 | 
|      DCHECK(!chunk_demuxer_);
 | 
|      DCHECK(!data_source_);
 | 
|  
 | 
| -    media::AddTextTrackCB add_text_track_cb;
 | 
| -
 | 
| -    if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) {
 | 
| -      add_text_track_cb =
 | 
| -          base::Bind(&WebMediaPlayerImpl::OnTextTrack, base::Unretained(this));
 | 
| -    }
 | 
| -
 | 
|      chunk_demuxer_ = new media::ChunkDemuxer(
 | 
|          BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened),
 | 
|          BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey),
 | 
| -        add_text_track_cb,
 | 
| +        enable_inband_text_tracks,
 | 
|          base::Bind(&LogMediaSourceError, media_log_));
 | 
|      demuxer_.reset(chunk_demuxer_);
 | 
|  
 | 
| @@ -1171,6 +1174,15 @@ void WebMediaPlayerImpl::StartPipeline() {
 | 
|            true));
 | 
|    filter_collection->SetVideoRenderer(video_renderer.Pass());
 | 
|  
 | 
| +  if (enable_inband_text_tracks) {
 | 
| +    scoped_ptr<media::TextRenderer> text_renderer(
 | 
| +        new media::TextRenderer(
 | 
| +            media_loop_,
 | 
| +            BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack)));
 | 
| +
 | 
| +    filter_collection->SetTextRenderer(text_renderer.Pass());
 | 
| +  }
 | 
| +
 | 
|    // ... and we're ready to go!
 | 
|    starting_ = true;
 | 
|    pipeline_->Start(
 | 
| 
 |