| Index: media/mojo/services/mojo_audio_output_stream_unittest.cc
|
| diff --git a/media/mojo/services/mojo_audio_output_stream_unittest.cc b/media/mojo/services/mojo_audio_output_stream_unittest.cc
|
| index c2b02a61b1e9234788d5457112e5d33e989137a5..ce55ce88c27dd2949ec5c2050a0b46969d464f19 100644
|
| --- a/media/mojo/services/mojo_audio_output_stream_unittest.cc
|
| +++ b/media/mojo/services/mojo_audio_output_stream_unittest.cc
|
| @@ -35,6 +35,26 @@ using testing::Test;
|
| using AudioOutputStream = mojom::AudioOutputStream;
|
| using AudioOutputStreamPtr = mojo::InterfacePtr<AudioOutputStream>;
|
|
|
| +class TestCancelableSyncSocket : public base::CancelableSyncSocket {
|
| + public:
|
| + TestCancelableSyncSocket() {}
|
| +
|
| + void ExpectOwnershipTransfer() { expect_ownership_transfer_ = true; }
|
| +
|
| + ~TestCancelableSyncSocket() override {
|
| + // When the handle is sent over mojo, mojo takes ownership over it and
|
| + // closes it. We have to make sure we do not also retain the handle in the
|
| + // sync socket, as the sync socket closes the handle on destruction.
|
| + if (expect_ownership_transfer_)
|
| + EXPECT_EQ(handle(), kInvalidHandle);
|
| + }
|
| +
|
| + private:
|
| + bool expect_ownership_transfer_ = false;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestCancelableSyncSocket);
|
| +};
|
| +
|
| class MockDelegate : NON_EXPORTED_BASE(public AudioOutputDelegate) {
|
| public:
|
| MockDelegate() {}
|
| @@ -111,7 +131,8 @@ class MockClient {
|
|
|
| class MojoAudioOutputStreamTest : public Test {
|
| public:
|
| - MojoAudioOutputStreamTest() {}
|
| + MojoAudioOutputStreamTest()
|
| + : foreign_socket_(base::MakeUnique<TestCancelableSyncSocket>()) {}
|
|
|
| AudioOutputStreamPtr CreateAudioOutput() {
|
| AudioOutputStreamPtr p;
|
| @@ -132,14 +153,15 @@ class MojoAudioOutputStreamTest : public Test {
|
| mock_delegate_factory_.PrepareDelegateForCreation(
|
| base::WrapUnique(delegate_));
|
| EXPECT_TRUE(
|
| - base::CancelableSyncSocket::CreatePair(&local_, &foreign_socket_));
|
| + base::CancelableSyncSocket::CreatePair(&local_, foreign_socket_.get()));
|
| EXPECT_TRUE(mem_.CreateAnonymous(kShmemSize));
|
| EXPECT_CALL(mock_delegate_factory_, MockCreateDelegate(NotNull()))
|
| .WillOnce(SaveArg<0>(&delegate_event_handler_));
|
| }
|
|
|
| base::MessageLoop loop_;
|
| - base::CancelableSyncSocket local_, foreign_socket_;
|
| + base::CancelableSyncSocket local_;
|
| + std::unique_ptr<TestCancelableSyncSocket> foreign_socket_;
|
| base::SharedMemory mem_;
|
| StrictMock<MockDelegate>* delegate_ = nullptr;
|
| AudioOutputDelegate::EventHandler* delegate_event_handler_ = nullptr;
|
| @@ -178,7 +200,9 @@ TEST_F(MojoAudioOutputStreamTest, DestructWithCallPending_Safe) {
|
| base::RunLoop().RunUntilIdle();
|
|
|
| ASSERT_NE(nullptr, delegate_event_handler_);
|
| - delegate_event_handler_->OnStreamCreated(kStreamId, &mem_, &foreign_socket_);
|
| + foreign_socket_->ExpectOwnershipTransfer();
|
| + delegate_event_handler_->OnStreamCreated(kStreamId, &mem_,
|
| + std::move(foreign_socket_));
|
| audio_output_ptr->Play();
|
| impl_.reset();
|
| base::RunLoop().RunUntilIdle();
|
| @@ -191,7 +215,9 @@ TEST_F(MojoAudioOutputStreamTest, Created_NotifiesClient) {
|
| EXPECT_CALL(client_, GotNotification());
|
|
|
| ASSERT_NE(nullptr, delegate_event_handler_);
|
| - delegate_event_handler_->OnStreamCreated(kStreamId, &mem_, &foreign_socket_);
|
| + foreign_socket_->ExpectOwnershipTransfer();
|
| + delegate_event_handler_->OnStreamCreated(kStreamId, &mem_,
|
| + std::move(foreign_socket_));
|
|
|
| base::RunLoop().RunUntilIdle();
|
| }
|
| @@ -231,7 +257,9 @@ TEST_F(MojoAudioOutputStreamTest, DelegateErrorAfterCreated_PropagatesError) {
|
| base::RunLoop().RunUntilIdle();
|
|
|
| ASSERT_NE(nullptr, delegate_event_handler_);
|
| - delegate_event_handler_->OnStreamCreated(kStreamId, &mem_, &foreign_socket_);
|
| + foreign_socket_->ExpectOwnershipTransfer();
|
| + delegate_event_handler_->OnStreamCreated(kStreamId, &mem_,
|
| + std::move(foreign_socket_));
|
| delegate_event_handler_->OnStreamError(kStreamId);
|
|
|
| base::RunLoop().RunUntilIdle();
|
|
|