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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "base/memory/ref_counted.h" |
7 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
8 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
9 #include "base/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
10 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
11 #include "build/build_config.h" | 12 #include "build/build_config.h" |
12 #include "media/base/cdm_callback_promise.h" | 13 #include "media/base/cdm_callback_promise.h" |
13 #include "media/base/cdm_context.h" | 14 #include "media/base/cdm_context.h" |
14 #include "media/base/cdm_key_information.h" | 15 #include "media/base/cdm_key_information.h" |
15 #include "media/base/decoder_buffer.h" | 16 #include "media/base/decoder_buffer.h" |
16 #include "media/base/media.h" | 17 #include "media/base/media.h" |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 const std::string& error_message) { | 196 const std::string& error_message) { |
196 FAIL() << "Unexpected Key Error"; | 197 FAIL() << "Unexpected Key Error"; |
197 } | 198 } |
198 | 199 |
199 virtual void OnEncryptedMediaInitData(EmeInitDataType init_data_type, | 200 virtual void OnEncryptedMediaInitData(EmeInitDataType init_data_type, |
200 const std::vector<uint8_t>& init_data, | 201 const std::vector<uint8_t>& init_data, |
201 AesDecryptor* decryptor) = 0; | 202 AesDecryptor* decryptor) = 0; |
202 }; | 203 }; |
203 | 204 |
204 FakeEncryptedMedia(AppBase* app) | 205 FakeEncryptedMedia(AppBase* app) |
205 : decryptor_(GURL::EmptyGURL(), | 206 : decryptor_(new AesDecryptor( |
206 base::Bind(&FakeEncryptedMedia::OnSessionMessage, | 207 GURL::EmptyGURL(), |
207 base::Unretained(this)), | 208 base::Bind(&FakeEncryptedMedia::OnSessionMessage, |
208 base::Bind(&FakeEncryptedMedia::OnSessionClosed, | 209 base::Unretained(this)), |
209 base::Unretained(this)), | 210 base::Bind(&FakeEncryptedMedia::OnSessionClosed, |
210 base::Bind(&FakeEncryptedMedia::OnSessionKeysChange, | 211 base::Unretained(this)), |
211 base::Unretained(this))), | 212 base::Bind(&FakeEncryptedMedia::OnSessionKeysChange, |
212 cdm_context_(&decryptor_), | 213 base::Unretained(this)))), |
| 214 cdm_context_(decryptor_.get()), |
213 app_(app) {} | 215 app_(app) {} |
214 | 216 |
215 CdmContext* GetCdmContext() { return &cdm_context_; } | 217 CdmContext* GetCdmContext() { return &cdm_context_; } |
216 | 218 |
217 // Callbacks for firing session events. Delegate to |app_|. | 219 // Callbacks for firing session events. Delegate to |app_|. |
218 void OnSessionMessage(const std::string& session_id, | 220 void OnSessionMessage(const std::string& session_id, |
219 MediaKeys::MessageType message_type, | 221 MediaKeys::MessageType message_type, |
220 const std::vector<uint8_t>& message, | 222 const std::vector<uint8_t>& message, |
221 const GURL& legacy_destination_url) { | 223 const GURL& legacy_destination_url) { |
222 app_->OnSessionMessage(session_id, message_type, message, | 224 app_->OnSessionMessage(session_id, message_type, message, |
223 legacy_destination_url, &decryptor_); | 225 legacy_destination_url, decryptor_.get()); |
224 } | 226 } |
225 | 227 |
226 void OnSessionClosed(const std::string& session_id) { | 228 void OnSessionClosed(const std::string& session_id) { |
227 app_->OnSessionClosed(session_id); | 229 app_->OnSessionClosed(session_id); |
228 } | 230 } |
229 | 231 |
230 void OnSessionKeysChange(const std::string& session_id, | 232 void OnSessionKeysChange(const std::string& session_id, |
231 bool has_additional_usable_key, | 233 bool has_additional_usable_key, |
232 CdmKeysInfo keys_info) { | 234 CdmKeysInfo keys_info) { |
233 app_->OnSessionKeysChange(session_id, has_additional_usable_key, | 235 app_->OnSessionKeysChange(session_id, has_additional_usable_key, |
234 keys_info.Pass()); | 236 keys_info.Pass()); |
235 } | 237 } |
236 | 238 |
237 void OnLegacySessionError(const std::string& session_id, | 239 void OnLegacySessionError(const std::string& session_id, |
238 const std::string& error_name, | 240 const std::string& error_name, |
239 uint32_t system_code, | 241 uint32_t system_code, |
240 const std::string& error_message) { | 242 const std::string& error_message) { |
241 app_->OnLegacySessionError(session_id, error_name, system_code, | 243 app_->OnLegacySessionError(session_id, error_name, system_code, |
242 error_message); | 244 error_message); |
243 } | 245 } |
244 | 246 |
245 void OnEncryptedMediaInitData(EmeInitDataType init_data_type, | 247 void OnEncryptedMediaInitData(EmeInitDataType init_data_type, |
246 const std::vector<uint8_t>& init_data) { | 248 const std::vector<uint8_t>& init_data) { |
247 app_->OnEncryptedMediaInitData(init_data_type, init_data, &decryptor_); | 249 app_->OnEncryptedMediaInitData(init_data_type, init_data, decryptor_.get()); |
248 } | 250 } |
249 | 251 |
250 private: | 252 private: |
251 class TestCdmContext : public CdmContext { | 253 class TestCdmContext : public CdmContext { |
252 public: | 254 public: |
253 TestCdmContext(Decryptor* decryptor) : decryptor_(decryptor) {} | 255 TestCdmContext(Decryptor* decryptor) : decryptor_(decryptor) {} |
254 | 256 |
255 Decryptor* GetDecryptor() final { return decryptor_; } | 257 Decryptor* GetDecryptor() final { return decryptor_; } |
256 int GetCdmId() const final { return kInvalidCdmId; } | 258 int GetCdmId() const final { return kInvalidCdmId; } |
257 | 259 |
258 private: | 260 private: |
259 Decryptor* decryptor_; | 261 Decryptor* decryptor_; |
260 }; | 262 }; |
261 | 263 |
262 AesDecryptor decryptor_; | 264 scoped_refptr<AesDecryptor> decryptor_; |
263 TestCdmContext cdm_context_; | 265 TestCdmContext cdm_context_; |
264 scoped_ptr<AppBase> app_; | 266 scoped_ptr<AppBase> app_; |
265 }; | 267 }; |
266 | 268 |
267 enum PromiseResult { RESOLVED, REJECTED }; | 269 enum PromiseResult { RESOLVED, REJECTED }; |
268 | 270 |
269 // Provides |kSecretKey| in response to needkey. | 271 // Provides |kSecretKey| in response to needkey. |
270 class KeyProvidingApp : public FakeEncryptedMedia::AppBase { | 272 class KeyProvidingApp : public FakeEncryptedMedia::AppBase { |
271 public: | 273 public: |
272 KeyProvidingApp() {} | 274 KeyProvidingApp() {} |
(...skipping 1566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1839 | 1841 |
1840 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { | 1842 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { |
1841 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); | 1843 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); |
1842 Play(); | 1844 Play(); |
1843 ASSERT_TRUE(WaitUntilOnEnded()); | 1845 ASSERT_TRUE(WaitUntilOnEnded()); |
1844 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), | 1846 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), |
1845 demuxer_->GetStartTime()); | 1847 demuxer_->GetStartTime()); |
1846 } | 1848 } |
1847 | 1849 |
1848 } // namespace media | 1850 } // namespace media |
OLD | NEW |