1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/renderer/media/media_stream_source_observer.h" 6 7#include "base/logging.h" 8#include "content/renderer/media/media_stream_source_extra_data.h" 9 10namespace content { 11 12MediaStreamSourceObserver::MediaStreamSourceObserver( 13 webrtc::MediaSourceInterface* webrtc_source, 14 MediaStreamSourceExtraData* extra_data) 15 : state_(webrtc_source->state()), 16 webrtc_source_(webrtc_source), 17 extra_data_(extra_data) { 18 webrtc_source_->RegisterObserver(this); 19} 20 21MediaStreamSourceObserver::~MediaStreamSourceObserver() { 22 DCHECK(CalledOnValidThread()); 23 if (webrtc_source_.get()) 24 webrtc_source_->UnregisterObserver(this); 25} 26 27void MediaStreamSourceObserver::OnChanged() { 28 DCHECK(CalledOnValidThread()); 29 // There should be no more notification after kEnded. 30 DCHECK(webrtc_source_.get() != NULL); 31 32 webrtc::MediaSourceInterface::SourceState state = webrtc_source_->state(); 33 if (state == state_) 34 return; 35 state_ = state; 36 WebKit::WebMediaStreamSource webkit_source(extra_data_->webkit_source()); 37 38 switch (state) { 39 case webrtc::MediaSourceInterface::kInitializing: 40 // Ignore the kInitializing state since there is no match in 41 // WebMediaStreamSource::ReadyState. 42 break; 43 case webrtc::MediaSourceInterface::kLive: 44 webkit_source.setReadyState( 45 WebKit::WebMediaStreamSource::ReadyStateLive); 46 break; 47 case webrtc::MediaSourceInterface::kMuted: 48 webkit_source.setReadyState( 49 WebKit::WebMediaStreamSource::ReadyStateMuted); 50 break; 51 case webrtc::MediaSourceInterface::kEnded: 52 webkit_source.setReadyState( 53 WebKit::WebMediaStreamSource::ReadyStateEnded); 54 webrtc_source_->UnregisterObserver(this); 55 webrtc_source_ = NULL; 56 break; 57 default: 58 NOTREACHED(); 59 break; 60 } 61} 62 63} // namespace content 64