| Index: media/base/pipeline.h
 | 
| diff --git a/media/base/pipeline.h b/media/base/pipeline.h
 | 
| index 09ff90416390fc8a3cc5d1f5071ee515df939c58..222091fcdbf9c432c0df04f081a1b2570ff39989 100644
 | 
| --- a/media/base/pipeline.h
 | 
| +++ b/media/base/pipeline.h
 | 
| @@ -30,6 +30,8 @@ namespace media {
 | 
|  class Clock;
 | 
|  class FilterCollection;
 | 
|  class MediaLog;
 | 
| +class TextRenderer;
 | 
| +class TextTrackConfig;
 | 
|  class VideoRenderer;
 | 
|  
 | 
|  // Pipeline runs the media pipeline.  Filters are created and called on the
 | 
| @@ -232,6 +234,9 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
 | 
|    // DemuxerHost implementaion.
 | 
|    virtual void SetDuration(base::TimeDelta duration) OVERRIDE;
 | 
|    virtual void OnDemuxerError(PipelineStatus error) OVERRIDE;
 | 
| +  virtual void AddTextStream(DemuxerStream* text_stream,
 | 
| +                             const TextTrackConfig& config) OVERRIDE;
 | 
| +  virtual void RemoveTextStream(DemuxerStream* text_stream) OVERRIDE;
 | 
|  
 | 
|    // Initiates teardown sequence in response to a runtime error.
 | 
|    //
 | 
| @@ -244,6 +249,7 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
 | 
|    // Callbacks executed when a renderer has ended.
 | 
|    void OnAudioRendererEnded();
 | 
|    void OnVideoRendererEnded();
 | 
| +  void OnTextRendererEnded();
 | 
|  
 | 
|    // Callback executed by filters to update statistics.
 | 
|    void OnUpdateStatistics(const PipelineStatistics& stats);
 | 
| @@ -283,14 +289,22 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
 | 
|    // Carries out notifying filters that we are seeking to a new timestamp.
 | 
|    void SeekTask(base::TimeDelta time, const PipelineStatusCB& seek_cb);
 | 
|  
 | 
| -  // Handles audio/video ended logic and running |ended_cb_|.
 | 
| +  // Handles audio/video/text ended logic and running |ended_cb_|.
 | 
|    void DoAudioRendererEnded();
 | 
|    void DoVideoRendererEnded();
 | 
| +  void DoTextRendererEnded();
 | 
|    void RunEndedCallbackIfNeeded();
 | 
|  
 | 
|    // Carries out disabling the audio renderer.
 | 
|    void AudioDisabledTask();
 | 
|  
 | 
| +  // Carries out adding a new text stream to the text renderer.
 | 
| +  void AddTextStreamTask(DemuxerStream* text_stream,
 | 
| +                         const TextTrackConfig& config);
 | 
| +
 | 
| +  // Carries out removing a text stream from the text renderer.
 | 
| +  void RemoveTextStreamTask(DemuxerStream* text_stream);
 | 
| +
 | 
|    // Kicks off initialization for each media object, executing |done_cb| with
 | 
|    // the result when completed.
 | 
|    void InitializeDemuxer(const PipelineStatusCB& done_cb);
 | 
| @@ -392,7 +406,7 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
 | 
|    // reset the pipeline state, and restore this to PIPELINE_OK.
 | 
|    PipelineStatus status_;
 | 
|  
 | 
| -  // Whether the media contains rendered audio and video streams.
 | 
| +  // Whether the media contains rendered audio or video streams.
 | 
|    // TODO(fischman,scherkus): replace these with checks for
 | 
|    // {audio,video}_decoder_ once extraction of {Audio,Video}Decoder from the
 | 
|    // Filter heirarchy is done.
 | 
| @@ -405,9 +419,10 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
 | 
|    // Member that tracks the current state.
 | 
|    State state_;
 | 
|  
 | 
| -  // Whether we've received the audio/video ended events.
 | 
| +  // Whether we've received the audio/video/text ended events.
 | 
|    bool audio_ended_;
 | 
|    bool video_ended_;
 | 
| +  bool text_ended_;
 | 
|  
 | 
|    // Set to true in DisableAudioRendererTask().
 | 
|    bool audio_disabled_;
 | 
| @@ -434,6 +449,7 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
 | 
|    // playback rate, and determining when playback has finished.
 | 
|    scoped_ptr<AudioRenderer> audio_renderer_;
 | 
|    scoped_ptr<VideoRenderer> video_renderer_;
 | 
| +  scoped_ptr<TextRenderer> text_renderer_;
 | 
|  
 | 
|    PipelineStatistics statistics_;
 | 
|  
 | 
| 
 |