OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <stddef.h> | 5 #include <stddef.h> |
6 #include <utility> | 6 #include <utility> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 StrictMock<MockAudioDecoder>* decoder_2_; | 162 StrictMock<MockAudioDecoder>* decoder_2_; |
163 ScopedVector<AudioDecoder> all_decoders_; | 163 ScopedVector<AudioDecoder> all_decoders_; |
164 std::unique_ptr<AudioDecoder> selected_decoder_; | 164 std::unique_ptr<AudioDecoder> selected_decoder_; |
165 | 165 |
166 base::MessageLoop message_loop_; | 166 base::MessageLoop message_loop_; |
167 | 167 |
168 private: | 168 private: |
169 DISALLOW_COPY_AND_ASSIGN(AudioDecoderSelectorTest); | 169 DISALLOW_COPY_AND_ASSIGN(AudioDecoderSelectorTest); |
170 }; | 170 }; |
171 | 171 |
172 // TODO(xhwang): Add kNoCdm tests for clear stream. | 172 // Tests for clear streams. |
173 | 173 |
174 // The stream is not encrypted but we have no clear decoder. No decoder can be | |
175 // selected. | |
176 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_NoClearDecoder) { | 174 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_NoClearDecoder) { |
177 UseClearStream(); | 175 UseClearStream(); |
178 InitializeDecoderSelector(kNoDecryptor, 0); | 176 InitializeDecoderSelector(kNoDecryptor, 0); |
179 | 177 |
180 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull())); | 178 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull())); |
181 | 179 |
182 SelectDecoder(); | 180 SelectDecoder(); |
183 } | 181 } |
184 | 182 |
185 // The stream is not encrypted and we have one clear decoder. The decoder | 183 TEST_F(AudioDecoderSelectorTest, ClearStream_NoCdm_OneClearDecoder) { |
186 // will be selected. | |
187 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_OneClearDecoder) { | |
188 UseClearStream(); | 184 UseClearStream(); |
189 InitializeDecoderSelector(kNoDecryptor, 1); | 185 InitializeDecoderSelector(kNoCdm, 1); |
190 | 186 |
191 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) | 187 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) |
192 .WillOnce(RunCallback<2>(true)); | 188 .WillOnce(RunCallback<2>(true)); |
193 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull())); | 189 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull())); |
194 | 190 |
195 SelectDecoder(); | 191 SelectDecoder(); |
196 } | 192 } |
197 | 193 |
| 194 TEST_F(AudioDecoderSelectorTest, Destroy_ClearStream_NoCdm_OneClearDecoder) { |
| 195 UseClearStream(); |
| 196 InitializeDecoderSelector(kNoCdm, 1); |
| 197 |
| 198 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)); |
| 199 |
| 200 SelectDecoderAndDestroy(); |
| 201 } |
| 202 |
| 203 TEST_F(AudioDecoderSelectorTest, ClearStream_NoCdm_MultipleClearDecoder) { |
| 204 UseClearStream(); |
| 205 InitializeDecoderSelector(kNoCdm, 2); |
| 206 |
| 207 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) |
| 208 .WillOnce(RunCallback<2>(false)); |
| 209 EXPECT_CALL(*decoder_2_, Initialize(ClearConfig(), _, _, _)) |
| 210 .WillOnce(RunCallback<2>(true)); |
| 211 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, IsNull())); |
| 212 |
| 213 SelectDecoder(); |
| 214 } |
| 215 |
| 216 TEST_F(AudioDecoderSelectorTest, |
| 217 Destroy_ClearStream_NoCdm_MultipleClearDecoder) { |
| 218 UseClearStream(); |
| 219 InitializeDecoderSelector(kNoCdm, 2); |
| 220 |
| 221 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) |
| 222 .WillOnce(RunCallback<2>(false)); |
| 223 EXPECT_CALL(*decoder_2_, Initialize(ClearConfig(), _, _, _)); |
| 224 |
| 225 SelectDecoderAndDestroy(); |
| 226 } |
| 227 |
| 228 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_OneClearDecoder) { |
| 229 UseClearStream(); |
| 230 InitializeDecoderSelector(kNoDecryptor, 1); |
| 231 |
| 232 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)) |
| 233 .WillOnce(RunCallback<2>(false)); |
| 234 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull())); |
| 235 |
| 236 SelectDecoder(); |
| 237 } |
| 238 |
198 TEST_F(AudioDecoderSelectorTest, | 239 TEST_F(AudioDecoderSelectorTest, |
199 Destroy_ClearStream_NoDecryptor_OneClearDecoder) { | 240 Destroy_ClearStream_NoDecryptor_OneClearDecoder) { |
200 UseClearStream(); | 241 UseClearStream(); |
201 InitializeDecoderSelector(kNoDecryptor, 1); | 242 InitializeDecoderSelector(kNoDecryptor, 1); |
202 | 243 |
203 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)); | 244 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)); |
204 | 245 |
205 SelectDecoderAndDestroy(); | 246 SelectDecoderAndDestroy(); |
206 } | 247 } |
207 | 248 |
208 // The stream is not encrypted and we have multiple clear decoders. The first | |
209 // decoder that can decode the input stream will be selected. | |
210 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_MultipleClearDecoder) { | 249 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_MultipleClearDecoder) { |
211 UseClearStream(); | 250 UseClearStream(); |
212 InitializeDecoderSelector(kNoDecryptor, 2); | 251 InitializeDecoderSelector(kNoDecryptor, 2); |
213 | 252 |
214 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) | 253 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)) |
215 .WillOnce(RunCallback<2>(false)); | 254 .WillOnce(RunCallback<2>(false)); |
216 EXPECT_CALL(*decoder_2_, Initialize(ClearConfig(), _, _, _)) | 255 EXPECT_CALL(*decoder_2_, Initialize(EncryptedConfig(), _, _, _)) |
217 .WillOnce(RunCallback<2>(true)); | 256 .WillOnce(RunCallback<2>(true)); |
218 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, IsNull())); | 257 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, IsNull())); |
219 | 258 |
220 SelectDecoder(); | 259 SelectDecoder(); |
221 } | 260 } |
222 | 261 |
223 TEST_F(AudioDecoderSelectorTest, | 262 TEST_F(AudioDecoderSelectorTest, |
224 Destroy_ClearStream_NoDecryptor_MultipleClearDecoder) { | 263 Destroy_ClearStream_NoDecryptor_MultipleClearDecoder) { |
225 UseClearStream(); | 264 UseClearStream(); |
226 InitializeDecoderSelector(kNoDecryptor, 2); | 265 InitializeDecoderSelector(kNoDecryptor, 2); |
227 | 266 |
228 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) | 267 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)) |
229 .WillOnce(RunCallback<2>(false)); | 268 .WillOnce(RunCallback<2>(false)); |
230 EXPECT_CALL(*decoder_2_, Initialize(ClearConfig(), _, _, _)); | 269 EXPECT_CALL(*decoder_2_, Initialize(EncryptedConfig(), _, _, _)); |
231 | 270 |
232 SelectDecoderAndDestroy(); | 271 SelectDecoderAndDestroy(); |
233 } | 272 } |
234 | 273 |
235 // There is a decryptor but the stream is not encrypted. The decoder will be | 274 TEST_F(AudioDecoderSelectorTest, ClearStream_DecryptOnly) { |
236 // selected. | |
237 TEST_F(AudioDecoderSelectorTest, ClearStream_HasDecryptor) { | |
238 UseClearStream(); | 275 UseClearStream(); |
239 InitializeDecoderSelector(kDecryptOnly, 1); | 276 InitializeDecoderSelector(kDecryptOnly, 1); |
240 | 277 |
241 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) | 278 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) |
242 .WillOnce(RunCallback<2>(true)); | 279 .WillOnce(RunCallback<2>(true)); |
243 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull())); | 280 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, NotNull())); |
244 | 281 |
245 SelectDecoder(); | 282 SelectDecoder(); |
246 } | 283 } |
247 | 284 |
248 TEST_F(AudioDecoderSelectorTest, Destroy_ClearStream_HasDecryptor) { | 285 TEST_F(AudioDecoderSelectorTest, Destroy_ClearStream_DecryptOnly) { |
249 UseClearStream(); | 286 UseClearStream(); |
250 InitializeDecoderSelector(kDecryptOnly, 1); | 287 InitializeDecoderSelector(kDecryptOnly, 1); |
251 | 288 |
252 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)); | 289 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)); |
253 | 290 |
254 SelectDecoderAndDestroy(); | 291 SelectDecoderAndDestroy(); |
255 } | 292 } |
256 | 293 |
257 // The stream is encrypted and there's no decryptor. The decoder only supports | 294 TEST_F(AudioDecoderSelectorTest, ClearStream_DecryptAndDecode) { |
258 // clear streams so no decoder can be selected. | 295 UseClearStream(); |
| 296 InitializeDecoderSelector(kDecryptAndDecode, 1); |
| 297 |
| 298 #if !defined(OS_ANDROID) |
| 299 // A DecryptingVideoDecoder will be created and selected. The clear decoder |
| 300 // should not be touched at all. No DecryptingDemuxerStream should be |
| 301 // created. |
| 302 EXPECT_CALL(*this, OnDecoderSelected(NotNull(), IsNull())); |
| 303 #else |
| 304 // A DecryptingDemuxerStream will be created. The clear decoder will be |
| 305 // initialized and returned. |
| 306 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) |
| 307 .WillOnce(RunCallback<2>(true)); |
| 308 EXPECT_CALL(*this, OnDecoderSelected(NotNull(), NotNull())); |
| 309 #endif |
| 310 |
| 311 SelectDecoder(); |
| 312 } |
| 313 |
| 314 // Tests for encrypted streams. |
| 315 |
259 TEST_F(AudioDecoderSelectorTest, EncryptedStream_NoDecryptor_OneClearDecoder) { | 316 TEST_F(AudioDecoderSelectorTest, EncryptedStream_NoDecryptor_OneClearDecoder) { |
260 UseEncryptedStream(); | 317 UseEncryptedStream(); |
261 InitializeDecoderSelector(kNoDecryptor, 1); | 318 InitializeDecoderSelector(kNoDecryptor, 1); |
262 | 319 |
263 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)) | 320 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)) |
264 .WillOnce(RunCallback<2>(false)); | 321 .WillOnce(RunCallback<2>(false)); |
265 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull())); | 322 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull())); |
266 | 323 |
267 SelectDecoder(); | 324 SelectDecoder(); |
268 } | 325 } |
269 | 326 |
270 TEST_F(AudioDecoderSelectorTest, | 327 TEST_F(AudioDecoderSelectorTest, |
271 Destroy_EncryptedStream_NoDecryptor_OneClearDecoder) { | 328 Destroy_EncryptedStream_NoDecryptor_OneClearDecoder) { |
272 UseEncryptedStream(); | 329 UseEncryptedStream(); |
273 InitializeDecoderSelector(kNoDecryptor, 1); | 330 InitializeDecoderSelector(kNoDecryptor, 1); |
274 | 331 |
275 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)); | 332 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)); |
276 | 333 |
277 SelectDecoderAndDestroy(); | 334 SelectDecoderAndDestroy(); |
278 } | 335 } |
279 | 336 |
280 // The stream is encrypted and there's no decryptor. There are multiple decoders | |
281 // and the first one that supports encrypted streams is selected. | |
282 TEST_F(AudioDecoderSelectorTest, EncryptedStream_NoDecryptor_MultipleDecoders) { | 337 TEST_F(AudioDecoderSelectorTest, EncryptedStream_NoDecryptor_MultipleDecoders) { |
283 UseEncryptedStream(); | 338 UseEncryptedStream(); |
284 InitializeDecoderSelector(kNoDecryptor, 2); | 339 InitializeDecoderSelector(kNoDecryptor, 2); |
285 | 340 |
286 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)) | 341 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)) |
287 .WillOnce(RunCallback<2>(false)); | 342 .WillOnce(RunCallback<2>(false)); |
288 EXPECT_CALL(*decoder_2_, Initialize(EncryptedConfig(), _, _, _)) | 343 EXPECT_CALL(*decoder_2_, Initialize(EncryptedConfig(), _, _, _)) |
289 .WillOnce(RunCallback<2>(true)); | 344 .WillOnce(RunCallback<2>(true)); |
290 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, IsNull())); | 345 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, IsNull())); |
291 | 346 |
292 SelectDecoder(); | 347 SelectDecoder(); |
293 } | 348 } |
294 | 349 |
295 TEST_F(AudioDecoderSelectorTest, | 350 TEST_F(AudioDecoderSelectorTest, |
296 Destroy_EncryptedStream_NoDecryptor_MultipleDecoders) { | 351 Destroy_EncryptedStream_NoDecryptor_MultipleDecoders) { |
297 UseEncryptedStream(); | 352 UseEncryptedStream(); |
298 InitializeDecoderSelector(kNoDecryptor, 2); | 353 InitializeDecoderSelector(kNoDecryptor, 2); |
299 | 354 |
300 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)) | 355 EXPECT_CALL(*decoder_1_, Initialize(EncryptedConfig(), _, _, _)) |
301 .WillOnce(RunCallback<2>(false)); | 356 .WillOnce(RunCallback<2>(false)); |
302 EXPECT_CALL(*decoder_2_, Initialize(EncryptedConfig(), _, _, _)); | 357 EXPECT_CALL(*decoder_2_, Initialize(EncryptedConfig(), _, _, _)); |
303 | 358 |
304 SelectDecoderAndDestroy(); | 359 SelectDecoderAndDestroy(); |
305 } | 360 } |
306 | 361 |
307 // Decryptor can only do decryption and there's no decoder available. No decoder | |
308 // can be selected. | |
309 TEST_F(AudioDecoderSelectorTest, EncryptedStream_DecryptOnly_NoClearDecoder) { | 362 TEST_F(AudioDecoderSelectorTest, EncryptedStream_DecryptOnly_NoClearDecoder) { |
310 UseEncryptedStream(); | 363 UseEncryptedStream(); |
311 InitializeDecoderSelector(kDecryptOnly, 0); | 364 InitializeDecoderSelector(kDecryptOnly, 0); |
312 | 365 |
313 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull())); | 366 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull())); |
314 | 367 |
315 SelectDecoder(); | 368 SelectDecoder(); |
316 } | 369 } |
317 | 370 |
318 // Decryptor can do decryption-only and there's a decoder available. The decoder | |
319 // will be selected and a DecryptingDemuxerStream will be created. | |
320 TEST_F(AudioDecoderSelectorTest, EncryptedStream_DecryptOnly_OneClearDecoder) { | 371 TEST_F(AudioDecoderSelectorTest, EncryptedStream_DecryptOnly_OneClearDecoder) { |
321 UseEncryptedStream(); | 372 UseEncryptedStream(); |
322 InitializeDecoderSelector(kDecryptOnly, 1); | 373 InitializeDecoderSelector(kDecryptOnly, 1); |
323 | 374 |
324 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) | 375 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) |
325 .WillOnce(RunCallback<2>(true)); | 376 .WillOnce(RunCallback<2>(true)); |
326 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, NotNull())); | 377 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, NotNull())); |
327 | 378 |
328 SelectDecoder(); | 379 SelectDecoder(); |
329 } | 380 } |
330 | 381 |
331 TEST_F(AudioDecoderSelectorTest, | 382 TEST_F(AudioDecoderSelectorTest, |
332 Destroy_EncryptedStream_DecryptOnly_OneClearDecoder) { | 383 Destroy_EncryptedStream_DecryptOnly_OneClearDecoder) { |
333 UseEncryptedStream(); | 384 UseEncryptedStream(); |
334 InitializeDecoderSelector(kDecryptOnly, 1); | 385 InitializeDecoderSelector(kDecryptOnly, 1); |
335 | 386 |
336 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)); | 387 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)); |
337 | 388 |
338 SelectDecoderAndDestroy(); | 389 SelectDecoderAndDestroy(); |
339 } | 390 } |
340 | 391 |
341 // Decryptor can only do decryption and there are multiple decoders available. | |
342 // The first decoder that can decode the input stream will be selected and | |
343 // a DecryptingDemuxerStream will be created. | |
344 TEST_F(AudioDecoderSelectorTest, | 392 TEST_F(AudioDecoderSelectorTest, |
345 EncryptedStream_DecryptOnly_MultipleClearDecoder) { | 393 EncryptedStream_DecryptOnly_MultipleClearDecoder) { |
346 UseEncryptedStream(); | 394 UseEncryptedStream(); |
347 InitializeDecoderSelector(kDecryptOnly, 2); | 395 InitializeDecoderSelector(kDecryptOnly, 2); |
348 | 396 |
349 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) | 397 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) |
350 .WillOnce(RunCallback<2>(false)); | 398 .WillOnce(RunCallback<2>(false)); |
351 EXPECT_CALL(*decoder_2_, Initialize(ClearConfig(), _, _, _)) | 399 EXPECT_CALL(*decoder_2_, Initialize(ClearConfig(), _, _, _)) |
352 .WillOnce(RunCallback<2>(true)); | 400 .WillOnce(RunCallback<2>(true)); |
353 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, NotNull())); | 401 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, NotNull())); |
354 | 402 |
355 SelectDecoder(); | 403 SelectDecoder(); |
356 } | 404 } |
357 | 405 |
358 TEST_F(AudioDecoderSelectorTest, | 406 TEST_F(AudioDecoderSelectorTest, |
359 Destroy_EncryptedStream_DecryptOnly_MultipleClearDecoder) { | 407 Destroy_EncryptedStream_DecryptOnly_MultipleClearDecoder) { |
360 UseEncryptedStream(); | 408 UseEncryptedStream(); |
361 InitializeDecoderSelector(kDecryptOnly, 2); | 409 InitializeDecoderSelector(kDecryptOnly, 2); |
362 | 410 |
363 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) | 411 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) |
364 .WillOnce(RunCallback<2>(false)); | 412 .WillOnce(RunCallback<2>(false)); |
365 EXPECT_CALL(*decoder_2_, Initialize(ClearConfig(), _, _, _)); | 413 EXPECT_CALL(*decoder_2_, Initialize(ClearConfig(), _, _, _)); |
366 | 414 |
367 SelectDecoderAndDestroy(); | 415 SelectDecoderAndDestroy(); |
368 } | 416 } |
369 | 417 |
370 // Decryptor can do decryption and decoding. | |
371 TEST_F(AudioDecoderSelectorTest, EncryptedStream_DecryptAndDecode) { | 418 TEST_F(AudioDecoderSelectorTest, EncryptedStream_DecryptAndDecode) { |
372 UseEncryptedStream(); | 419 UseEncryptedStream(); |
373 InitializeDecoderSelector(kDecryptAndDecode, 1); | 420 InitializeDecoderSelector(kDecryptAndDecode, 1); |
374 | 421 |
375 #if !defined(OS_ANDROID) | 422 #if !defined(OS_ANDROID) |
376 // A DecryptingVideoDecoder will be created and selected. The clear decoder | 423 // A DecryptingVideoDecoder will be created and selected. The clear decoder |
377 // should not be touched at all. No DecryptingDemuxerStream should to be | 424 // should not be touched at all. No DecryptingDemuxerStream should to be |
378 // created. | 425 // created. |
379 EXPECT_CALL(*this, OnDecoderSelected(NotNull(), IsNull())); | 426 EXPECT_CALL(*this, OnDecoderSelected(NotNull(), IsNull())); |
380 #else | 427 #else |
381 // A DecryptingDemuxerStream will be created. The clear decoder will be | 428 // A DecryptingDemuxerStream will be created. The clear decoder will be |
382 // initialized and returned. | 429 // initialized and returned. |
383 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) | 430 EXPECT_CALL(*decoder_1_, Initialize(ClearConfig(), _, _, _)) |
384 .WillOnce(RunCallback<2>(true)); | 431 .WillOnce(RunCallback<2>(true)); |
385 EXPECT_CALL(*this, OnDecoderSelected(NotNull(), NotNull())); | 432 EXPECT_CALL(*this, OnDecoderSelected(NotNull(), NotNull())); |
386 #endif | 433 #endif |
387 | 434 |
388 SelectDecoder(); | 435 SelectDecoder(); |
389 } | 436 } |
390 | 437 |
391 } // namespace media | 438 } // namespace media |
OLD | NEW |