| Index: talk/app/webrtc/audiotrack.h | 
| diff --git a/talk/app/webrtc/audiotrack.h b/talk/app/webrtc/audiotrack.h | 
| index 750f272ba2b79c8dcd4ccc14de83b55ca43d4ec4..55f48377145ef044942b397357c6dc41c5bf97d5 100644 | 
| --- a/talk/app/webrtc/audiotrack.h | 
| +++ b/talk/app/webrtc/audiotrack.h | 
| @@ -28,40 +28,47 @@ | 
| #ifndef TALK_APP_WEBRTC_AUDIOTRACK_H_ | 
| #define TALK_APP_WEBRTC_AUDIOTRACK_H_ | 
|  | 
| +#include <string> | 
| + | 
| #include "talk/app/webrtc/mediastreaminterface.h" | 
| #include "talk/app/webrtc/mediastreamtrack.h" | 
| #include "talk/app/webrtc/notifier.h" | 
| #include "webrtc/base/scoped_ptr.h" | 
| #include "webrtc/base/scoped_ref_ptr.h" | 
| +#include "webrtc/base/thread_checker.h" | 
|  | 
| namespace webrtc { | 
|  | 
| -class AudioTrack : public MediaStreamTrack<AudioTrackInterface> { | 
| +class AudioTrack : public MediaStreamTrack<AudioTrackInterface>, | 
| +                   public ObserverInterface { | 
| + protected: | 
| +  // Protected ctor to force use of factory method. | 
| +  AudioTrack(const std::string& label, | 
| +             const rtc::scoped_refptr<AudioSourceInterface>& source); | 
| +  ~AudioTrack() override; | 
| + | 
| public: | 
| static rtc::scoped_refptr<AudioTrack> Create( | 
| -      const std::string& id, AudioSourceInterface* source); | 
| - | 
| -  // AudioTrackInterface implementation. | 
| -  AudioSourceInterface* GetSource() const override { | 
| -    return audio_source_.get(); | 
| -  } | 
| -  // TODO(xians): Implement these methods. | 
| -  void AddSink(AudioTrackSinkInterface* sink) override {} | 
| -  void RemoveSink(AudioTrackSinkInterface* sink) override {} | 
| -  bool GetSignalLevel(int* level) override { return false; } | 
| -  rtc::scoped_refptr<AudioProcessorInterface> GetAudioProcessor() override { | 
| -    return NULL; | 
| -  } | 
| -  cricket::AudioRenderer* GetRenderer() override { return NULL; } | 
| +      const std::string& id, | 
| +      const rtc::scoped_refptr<AudioSourceInterface>& source); | 
|  | 
| + private: | 
| // MediaStreamTrack implementation. | 
| std::string kind() const override; | 
|  | 
| - protected: | 
| -  AudioTrack(const std::string& label, AudioSourceInterface* audio_source); | 
| +  // AudioTrackInterface implementation. | 
| +  AudioSourceInterface* GetSource() const override; | 
| + | 
| +  void AddSink(AudioTrackSinkInterface* sink) override; | 
| +  void RemoveSink(AudioTrackSinkInterface* sink) override; | 
| + | 
| +  // ObserverInterface implementation. | 
| +  void OnChanged() override; | 
|  | 
| private: | 
| -  rtc::scoped_refptr<AudioSourceInterface> audio_source_; | 
| +  const rtc::scoped_refptr<AudioSourceInterface> audio_source_; | 
| +  rtc::ThreadChecker thread_checker_; | 
| +  RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(AudioTrack); | 
| }; | 
|  | 
| }  // namespace webrtc | 
|  |