From 345cf920a3ff8a5b61e559eae6d8317acbe1c8f7 Mon Sep 17 00:00:00 2001 From: "perkj@chromium.org" Date: Mon, 12 Nov 2012 11:26:40 +0000 Subject: [PATCH] Fix problem with calling LocalMediaStream.Stop after a page have been reloaded. BUG=160400 TEST = The new unit test MediaStreamImplTest.StopStreamAfterReload Review URL: https://chromiumcodereview.appspot.com/11293223 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167159 0039d316-1c4b-4281-b951-d872f2087c98 --- content/renderer/media/media_stream_impl.cc | 13 ++++++++----- content/renderer/media/media_stream_impl_unittest.cc | 13 +++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/content/renderer/media/media_stream_impl.cc b/content/renderer/media/media_stream_impl.cc index e525a902356e..4c1d16edf761 100644 --- a/content/renderer/media/media_stream_impl.cc +++ b/content/renderer/media/media_stream_impl.cc @@ -122,13 +122,16 @@ MediaStreamImpl::~MediaStreamImpl() { void MediaStreamImpl::OnLocalMediaStreamStop( const std::string& label) { - DVLOG(1) << "MediaStreamImpl::OnLocalMediaStreamStop"; + DVLOG(1) << "MediaStreamImpl::OnLocalMediaStreamStop(" << label << ")"; UserMediaRequestInfo* user_media_request = FindUserMediaRequestInfo(label); - CHECK(user_media_request); - - media_stream_dispatcher_->StopStream(label); - DeleteUserMediaRequestInfo(user_media_request); + if (user_media_request) { + media_stream_dispatcher_->StopStream(label); + DeleteUserMediaRequestInfo(user_media_request); + } else { + DVLOG(1) << "MediaStreamImpl::OnLocalMediaStreamStop: the stream has " + << "already been stopped."; + } } void MediaStreamImpl::requestUserMedia( diff --git a/content/renderer/media/media_stream_impl_unittest.cc b/content/renderer/media/media_stream_impl_unittest.cc index a889fec37526..aadfb74ce880 100644 --- a/content/renderer/media/media_stream_impl_unittest.cc +++ b/content/renderer/media/media_stream_impl_unittest.cc @@ -231,4 +231,17 @@ TEST_F(MediaStreamImplTest, ReloadFrameWhileGeneratingSources) { ms_impl_->request_state()); } +// This test what happens if stop is called on a stream after the frame has +// been reloaded. +TEST_F(MediaStreamImplTest, StopStreamAfterReload) { + WebKit::WebMediaStreamDescriptor mixed_desc = RequestLocalMediaStream(true, + true); + EXPECT_EQ(0, ms_dispatcher_->stop_stream_counter()); + EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); + ms_impl_->FrameWillClose(NULL); + EXPECT_EQ(1, ms_dispatcher_->stop_stream_counter()); + ms_impl_->OnLocalMediaStreamStop(mixed_desc.label().utf8()); + EXPECT_EQ(1, ms_dispatcher_->stop_stream_counter()); +} + } // namespace content -- 2.11.4.GIT