Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(603)

Side by Side Diff: media/mojo/clients/mojo_renderer_unittest.cc

Issue 2326913003: Privatize StrongBinding lifetime management (Closed)
Patch Set: rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "base/threading/platform_thread.h" 11 #include "base/threading/platform_thread.h"
12 #include "base/timer/elapsed_timer.h" 12 #include "base/timer/elapsed_timer.h"
13 #include "media/base/audio_renderer_sink.h" 13 #include "media/base/audio_renderer_sink.h"
14 #include "media/base/cdm_config.h" 14 #include "media/base/cdm_config.h"
15 #include "media/base/cdm_context.h" 15 #include "media/base/cdm_context.h"
16 #include "media/base/gmock_callback_support.h" 16 #include "media/base/gmock_callback_support.h"
17 #include "media/base/mock_filters.h" 17 #include "media/base/mock_filters.h"
18 #include "media/base/test_helpers.h" 18 #include "media/base/test_helpers.h"
19 #include "media/base/video_renderer_sink.h" 19 #include "media/base/video_renderer_sink.h"
20 #include "media/cdm/default_cdm_factory.h" 20 #include "media/cdm/default_cdm_factory.h"
21 #include "media/mojo/clients/mojo_renderer.h" 21 #include "media/mojo/clients/mojo_renderer.h"
22 #include "media/mojo/common/media_type_converters.h" 22 #include "media/mojo/common/media_type_converters.h"
23 #include "media/mojo/interfaces/content_decryption_module.mojom.h" 23 #include "media/mojo/interfaces/content_decryption_module.mojom.h"
24 #include "media/mojo/interfaces/renderer.mojom.h" 24 #include "media/mojo/interfaces/renderer.mojom.h"
25 #include "media/mojo/services/mojo_cdm_service.h" 25 #include "media/mojo/services/mojo_cdm_service.h"
26 #include "media/mojo/services/mojo_cdm_service_context.h" 26 #include "media/mojo/services/mojo_cdm_service_context.h"
27 #include "media/mojo/services/mojo_renderer_service.h" 27 #include "media/mojo/services/mojo_renderer_service.h"
28 #include "media/renderers/video_overlay_factory.h" 28 #include "media/renderers/video_overlay_factory.h"
29 #include "mojo/public/cpp/bindings/interface_request.h" 29 #include "mojo/public/cpp/bindings/interface_request.h"
30 #include "mojo/public/cpp/bindings/strong_binding.h"
30 #include "testing/gtest/include/gtest/gtest.h" 31 #include "testing/gtest/include/gtest/gtest.h"
31 32
32 using ::testing::_; 33 using ::testing::_;
33 using ::testing::DoAll; 34 using ::testing::DoAll;
34 using ::testing::Return; 35 using ::testing::Return;
35 using ::testing::SaveArg; 36 using ::testing::SaveArg;
36 using ::testing::StrictMock; 37 using ::testing::StrictMock;
37 38
38 namespace media { 39 namespace media {
39 40
(...skipping 14 matching lines...) Expand all
54 } // namespace 55 } // namespace
55 56
56 class MojoRendererTest : public ::testing::Test { 57 class MojoRendererTest : public ::testing::Test {
57 public: 58 public:
58 MojoRendererTest() { 59 MojoRendererTest() {
59 std::unique_ptr<StrictMock<MockRenderer>> mock_renderer( 60 std::unique_ptr<StrictMock<MockRenderer>> mock_renderer(
60 new StrictMock<MockRenderer>()); 61 new StrictMock<MockRenderer>());
61 mock_renderer_ = mock_renderer.get(); 62 mock_renderer_ = mock_renderer.get();
62 63
63 mojom::RendererPtr remote_renderer; 64 mojom::RendererPtr remote_renderer;
64 65 renderer_binding_ =
65 mojo_renderer_service_ = new MojoRendererService( 66 mojo::MakeStrongBinding(base::MakeUnique<MojoRendererService>(
66 mojo_cdm_service_context_.GetWeakPtr(), nullptr, nullptr, 67 mojo_cdm_service_context_.GetWeakPtr(),
67 std::move(mock_renderer), mojo::GetProxy(&remote_renderer)); 68 nullptr, nullptr, std::move(mock_renderer)),
69 mojo::GetProxy(&remote_renderer));
68 70
69 mojo_renderer_.reset( 71 mojo_renderer_.reset(
70 new MojoRenderer(message_loop_.task_runner(), 72 new MojoRenderer(message_loop_.task_runner(),
71 std::unique_ptr<VideoOverlayFactory>(nullptr), nullptr, 73 std::unique_ptr<VideoOverlayFactory>(nullptr), nullptr,
72 std::move(remote_renderer))); 74 std::move(remote_renderer)));
73 75
74 // CreateAudioStream() and CreateVideoStream() overrides expectations for 76 // CreateAudioStream() and CreateVideoStream() overrides expectations for
75 // expected non-NULL streams. 77 // expected non-NULL streams.
76 EXPECT_CALL(demuxer_, GetStream(_)).WillRepeatedly(Return(nullptr)); 78 EXPECT_CALL(demuxer_, GetStream(_)).WillRepeatedly(Return(nullptr));
77 79
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 &cdm_context_, 149 &cdm_context_,
148 base::Bind(&MojoRendererTest::OnCdmAttached, base::Unretained(this))); 150 base::Bind(&MojoRendererTest::OnCdmAttached, base::Unretained(this)));
149 base::RunLoop().RunUntilIdle(); 151 base::RunLoop().RunUntilIdle();
150 } 152 }
151 153
152 // Simulates a connection error at the client side by killing the service. 154 // Simulates a connection error at the client side by killing the service.
153 // Note that |mock_renderer_| will also be destroyed, do NOT expect anything 155 // Note that |mock_renderer_| will also be destroyed, do NOT expect anything
154 // on it. Otherwise the test will crash. 156 // on it. Otherwise the test will crash.
155 void ConnectionError() { 157 void ConnectionError() {
156 DVLOG(1) << __FUNCTION__; 158 DVLOG(1) << __FUNCTION__;
157 delete mojo_renderer_service_; 159 DCHECK(renderer_binding_);
160 renderer_binding_->Close();
158 base::RunLoop().RunUntilIdle(); 161 base::RunLoop().RunUntilIdle();
159 } 162 }
160 163
161 void OnCdmCreated(mojom::CdmPromiseResultPtr result, 164 void OnCdmCreated(mojom::CdmPromiseResultPtr result,
162 int cdm_id, 165 int cdm_id,
163 mojom::DecryptorPtr decryptor) { 166 mojom::DecryptorPtr decryptor) {
164 EXPECT_TRUE(result->success); 167 EXPECT_TRUE(result->success);
165 EXPECT_NE(CdmContext::kInvalidCdmId, cdm_id); 168 EXPECT_NE(CdmContext::kInvalidCdmId, cdm_id);
166 cdm_context_.set_cdm_id(cdm_id); 169 cdm_context_.set_cdm_id(cdm_id);
167 } 170 }
168 171
169 void CreateCdm() { 172 void CreateCdm() {
170 new MojoCdmService(mojo_cdm_service_context_.GetWeakPtr(), &cdm_factory_, 173 mojo::MakeStrongBinding(
171 mojo::GetProxy(&remote_cdm_)); 174 base::MakeUnique<MojoCdmService>(mojo_cdm_service_context_.GetWeakPtr(),
175 &cdm_factory_),
176 mojo::GetProxy(&remote_cdm_));
172 remote_cdm_->Initialize( 177 remote_cdm_->Initialize(
173 kClearKeyKeySystem, "https://www.test.com", 178 kClearKeyKeySystem, "https://www.test.com",
174 mojom::CdmConfig::From(CdmConfig()), 179 mojom::CdmConfig::From(CdmConfig()),
175 base::Bind(&MojoRendererTest::OnCdmCreated, base::Unretained(this))); 180 base::Bind(&MojoRendererTest::OnCdmCreated, base::Unretained(this)));
176 base::RunLoop().RunUntilIdle(); 181 base::RunLoop().RunUntilIdle();
177 } 182 }
178 183
179 void StartPlayingFrom(base::TimeDelta start_time) { 184 void StartPlayingFrom(base::TimeDelta start_time) {
180 EXPECT_CALL(*mock_renderer_, StartPlayingFrom(start_time)); 185 EXPECT_CALL(*mock_renderer_, StartPlayingFrom(start_time));
181 mojo_renderer_->StartPlayingFrom(start_time); 186 mojo_renderer_->StartPlayingFrom(start_time);
(...skipping 20 matching lines...) Expand all
202 StrictMock<MockDemuxer> demuxer_; 207 StrictMock<MockDemuxer> demuxer_;
203 std::unique_ptr<StrictMock<MockDemuxerStream>> audio_stream_; 208 std::unique_ptr<StrictMock<MockDemuxerStream>> audio_stream_;
204 std::unique_ptr<StrictMock<MockDemuxerStream>> video_stream_; 209 std::unique_ptr<StrictMock<MockDemuxerStream>> video_stream_;
205 210
206 // Service side mocks and helpers. 211 // Service side mocks and helpers.
207 StrictMock<MockRenderer>* mock_renderer_; 212 StrictMock<MockRenderer>* mock_renderer_;
208 MojoCdmServiceContext mojo_cdm_service_context_; 213 MojoCdmServiceContext mojo_cdm_service_context_;
209 RendererClient* remote_renderer_client_; 214 RendererClient* remote_renderer_client_;
210 DefaultCdmFactory cdm_factory_; 215 DefaultCdmFactory cdm_factory_;
211 216
212 // Owned by the connection. But we can delete it manually to trigger a 217 mojo::StrongBindingPtr<mojom::Renderer> renderer_binding_;
213 // connection error at the client side. See ConnectionError();
214 MojoRendererService* mojo_renderer_service_;
215 218
216 private: 219 private:
217 DISALLOW_COPY_AND_ASSIGN(MojoRendererTest); 220 DISALLOW_COPY_AND_ASSIGN(MojoRendererTest);
218 }; 221 };
219 222
220 TEST_F(MojoRendererTest, Initialize_Success) { 223 TEST_F(MojoRendererTest, Initialize_Success) {
221 Initialize(); 224 Initialize();
222 } 225 }
223 226
224 TEST_F(MojoRendererTest, Initialize_Failure) { 227 TEST_F(MojoRendererTest, Initialize_Failure) {
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 Play(); 425 Play();
423 remote_renderer_client_->OnError(PIPELINE_ERROR_DECODE); 426 remote_renderer_client_->OnError(PIPELINE_ERROR_DECODE);
424 base::RunLoop().RunUntilIdle(); 427 base::RunLoop().RunUntilIdle();
425 428
426 EXPECT_CALL(*mock_renderer_, SetPlaybackRate(0.0)).Times(1); 429 EXPECT_CALL(*mock_renderer_, SetPlaybackRate(0.0)).Times(1);
427 mojo_renderer_->SetPlaybackRate(0.0); 430 mojo_renderer_->SetPlaybackRate(0.0);
428 Flush(); 431 Flush();
429 } 432 }
430 433
431 } // namespace media 434 } // namespace media
OLDNEW
« no previous file with comments | « extensions/renderer/mojo/keep_alive_client_unittest.cc ('k') | media/mojo/services/mojo_audio_decoder_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698