| Index: content/renderer/media/media_stream_impl.cc | 
| diff --git a/content/renderer/media/media_stream_impl.cc b/content/renderer/media/media_stream_impl.cc | 
| index 9c6d33b8332b98664509e5ff20adcb13153996f7..a0b3cf284e102c5c4dcd1cd91ef5582e53d02d24 100644 | 
| --- a/content/renderer/media/media_stream_impl.cc | 
| +++ b/content/renderer/media/media_stream_impl.cc | 
| @@ -342,7 +342,6 @@ void MediaStreamImpl::OnStreamGenerated( | 
| web_stream->setExtraData( | 
| new MediaStream( | 
| dependency_factory_, | 
| -          base::Bind(&MediaStreamImpl::OnLocalMediaStreamStop, AsWeakPtr()), | 
| *web_stream)); | 
|  | 
| // Wait for the tracks to be started successfully or to fail. | 
| @@ -365,9 +364,8 @@ void MediaStreamImpl::OnStreamGenerationFailed( | 
| DVLOG(1) << "Request ID not found"; | 
| return; | 
| } | 
| -  CompleteGetUserMediaRequest(request_info->web_stream, | 
| -                              &request_info->request, | 
| -                              result); | 
| + | 
| +  GetUserMediaRequestFailed(&request_info->request, result); | 
| DeleteUserMediaRequestInfo(request_info); | 
| } | 
|  | 
| @@ -399,19 +397,6 @@ void MediaStreamImpl::OnDeviceStopped( | 
| break; | 
| } | 
| } | 
| - | 
| -  // Remove the reference to this source from all |user_media_requests_|. | 
| -  // TODO(perkj): The below is not necessary once we don't need to support | 
| -  // MediaStream::Stop(). | 
| -  UserMediaRequests::iterator it = user_media_requests_.begin(); | 
| -  while (it != user_media_requests_.end()) { | 
| -    (*it)->RemoveSource(source); | 
| -    if ((*it)->AreAllSourcesRemoved()) { | 
| -      it = user_media_requests_.erase(it); | 
| -    } else { | 
| -      ++it; | 
| -    } | 
| -  } | 
| } | 
|  | 
| void MediaStreamImpl::InitializeSourceObject( | 
| @@ -533,14 +518,12 @@ void MediaStreamImpl::OnCreateNativeTracksCompleted( | 
| DVLOG(1) << "MediaStreamImpl::OnCreateNativeTracksComplete(" | 
| << "{request_id = " << request->request_id << "} " | 
| << "{result = " << result << "})"; | 
| -  CompleteGetUserMediaRequest(request->web_stream, &request->request, | 
| -                              result); | 
| -  if (result != MEDIA_DEVICE_OK) { | 
| -    // TODO(perkj): Once we don't support MediaStream::Stop the |request_info| | 
| -    // can be deleted even if the request succeeds. | 
| -    DeleteUserMediaRequestInfo(request); | 
| -    StopUnreferencedSources(true); | 
| -  } | 
| +  if (result == content::MEDIA_DEVICE_OK) | 
| +    GetUserMediaRequestSucceeded(request->web_stream, &request->request); | 
| +  else | 
| +    GetUserMediaRequestFailed(&request->request, result); | 
| + | 
| +  DeleteUserMediaRequestInfo(request); | 
| } | 
|  | 
| void MediaStreamImpl::OnDevicesEnumerated( | 
| @@ -566,17 +549,19 @@ void MediaStreamImpl::OnDeviceOpenFailed(int request_id) { | 
| NOTIMPLEMENTED(); | 
| } | 
|  | 
| -void MediaStreamImpl::CompleteGetUserMediaRequest( | 
| +void MediaStreamImpl::GetUserMediaRequestSucceeded( | 
| const blink::WebMediaStream& stream, | 
| +    blink::WebUserMediaRequest* request_info) { | 
| +  DVLOG(1) << "MediaStreamImpl::GetUserMediaRequestSucceeded"; | 
| +  request_info->requestSucceeded(stream); | 
| +} | 
| + | 
| +void MediaStreamImpl::GetUserMediaRequestFailed( | 
| blink::WebUserMediaRequest* request_info, | 
| content::MediaStreamRequestResult result) { | 
| - | 
| -  DVLOG(1) << "MediaStreamImpl::CompleteGetUserMediaRequest(" | 
| -           << "result=" << result; | 
| - | 
| switch (result) { | 
| case MEDIA_DEVICE_OK: | 
| -      request_info->requestSucceeded(stream); | 
| +      NOTREACHED(); | 
| break; | 
| case MEDIA_DEVICE_PERMISSION_DENIED: | 
| request_info->requestDenied(); | 
| @@ -627,16 +612,6 @@ const blink::WebMediaStreamSource* MediaStreamImpl::FindLocalSource( | 
| return NULL; | 
| } | 
|  | 
| -bool MediaStreamImpl::IsSourceInRequests( | 
| -    const blink::WebMediaStreamSource& source) const { | 
| -  for (UserMediaRequests::const_iterator req_it = user_media_requests_.begin(); | 
| -       req_it != user_media_requests_.end(); ++req_it) { | 
| -    if ((*req_it)->IsSourceUsed(source)) | 
| -      return true; | 
| -  } | 
| -  return false; | 
| -} | 
| - | 
| MediaStreamImpl::UserMediaRequestInfo* | 
| MediaStreamImpl::FindUserMediaRequestInfo(int request_id) { | 
| UserMediaRequests::iterator it = user_media_requests_.begin(); | 
| @@ -658,16 +633,6 @@ MediaStreamImpl::FindUserMediaRequestInfo( | 
| return NULL; | 
| } | 
|  | 
| -MediaStreamImpl::UserMediaRequestInfo* | 
| -MediaStreamImpl::FindUserMediaRequestInfo(const std::string& label) { | 
| -  UserMediaRequests::iterator it = user_media_requests_.begin(); | 
| -  for (; it != user_media_requests_.end(); ++it) { | 
| -    if ((*it)->generated && (*it)->web_stream.id() == base::UTF8ToUTF16(label)) | 
| -      return (*it); | 
| -  } | 
| -  return NULL; | 
| -} | 
| - | 
| void MediaStreamImpl::DeleteUserMediaRequestInfo( | 
| UserMediaRequestInfo* request) { | 
| UserMediaRequests::iterator it = user_media_requests_.begin(); | 
| @@ -720,20 +685,10 @@ void MediaStreamImpl::FrameWillClose(blink::WebFrame* frame) { | 
| } | 
| } | 
|  | 
| -void MediaStreamImpl::OnLocalMediaStreamStop( | 
| -    const std::string& label) { | 
| -  DVLOG(1) << "MediaStreamImpl::OnLocalMediaStreamStop(" << label << ")"; | 
| - | 
| -  UserMediaRequestInfo* user_media_request = FindUserMediaRequestInfo(label); | 
| -  if (user_media_request) { | 
| -    DeleteUserMediaRequestInfo(user_media_request); | 
| -  } | 
| -  StopUnreferencedSources(true); | 
| -} | 
| - | 
| void MediaStreamImpl::OnLocalSourceStopped( | 
| const blink::WebMediaStreamSource& source) { | 
| DCHECK(CalledOnValidThread()); | 
| +  DVLOG(1) << "MediaStreamImpl::OnLocalSourceStopped"; | 
|  | 
| bool device_found = false; | 
| for (LocalStreamSources::iterator device_it = local_sources_.begin(); | 
| @@ -746,19 +701,6 @@ void MediaStreamImpl::OnLocalSourceStopped( | 
| } | 
| CHECK(device_found); | 
|  | 
| -  // Remove the reference to this source from all |user_media_requests_|. | 
| -  // TODO(perkj): The below is not necessary once we don't need to support | 
| -  // MediaStream::Stop(). | 
| -  UserMediaRequests::iterator it = user_media_requests_.begin(); | 
| -  while (it != user_media_requests_.end()) { | 
| -    (*it)->RemoveSource(source); | 
| -    if ((*it)->AreAllSourcesRemoved()) { | 
| -      it = user_media_requests_.erase(it); | 
| -    } else { | 
| -      ++it; | 
| -    } | 
| -  } | 
| - | 
| MediaStreamSource* source_impl = | 
| static_cast<MediaStreamSource*> (source.extraData()); | 
| media_stream_dispatcher_->StopStreamDevice(source_impl->device_info()); | 
| @@ -779,18 +721,6 @@ void MediaStreamImpl::StopLocalSource( | 
| source_impl->StopSource(); | 
| } | 
|  | 
| -void MediaStreamImpl::StopUnreferencedSources(bool notify_dispatcher) { | 
| -  LocalStreamSources::iterator source_it = local_sources_.begin(); | 
| -  while (source_it != local_sources_.end()) { | 
| -    if (!IsSourceInRequests(source_it->source)) { | 
| -      StopLocalSource(source_it->source, notify_dispatcher); | 
| -      source_it = local_sources_.erase(source_it); | 
| -    } else { | 
| -      ++source_it; | 
| -    } | 
| -  } | 
| -} | 
| - | 
| scoped_refptr<WebRtcAudioRenderer> MediaStreamImpl::CreateRemoteAudioRenderer( | 
| webrtc::MediaStreamInterface* stream, | 
| int render_frame_id) { | 
| @@ -912,7 +842,7 @@ void MediaStreamImpl::UserMediaRequestInfo::CallbackOnTracksStarted( | 
|  | 
| void MediaStreamImpl::UserMediaRequestInfo::OnTrackStarted( | 
| MediaStreamSource* source, bool success) { | 
| -  DVLOG(1) << "OnTrackStarted"; | 
| +  DVLOG(1) << "OnTrackStarted result " << success; | 
| std::vector<MediaStreamSource*>::iterator it = | 
| std::find(sources_waiting_for_callback_.begin(), | 
| sources_waiting_for_callback_.end(), | 
|  |