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

Side by Side Diff: media/base/android/media_drm_bridge.cc

Issue 2765343003: media: Add MediaDrmStorage (Closed)
Patch Set: comments addressed Created 3 years, 8 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 (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "media/base/android/media_drm_bridge.h" 5 #include "media/base/android/media_drm_bridge.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 317
318 return GetKeySystemManager()->GetPlatformKeySystemNames(); 318 return GetKeySystemManager()->GetPlatformKeySystemNames();
319 } 319 }
320 320
321 // static 321 // static
322 scoped_refptr<MediaDrmBridge> MediaDrmBridge::CreateInternal( 322 scoped_refptr<MediaDrmBridge> MediaDrmBridge::CreateInternal(
323 const std::string& key_system, 323 const std::string& key_system,
324 const GURL& security_origin, 324 const GURL& security_origin,
325 SecurityLevel security_level, 325 SecurityLevel security_level,
326 const CreateFetcherCB& create_fetcher_cb, 326 const CreateFetcherCB& create_fetcher_cb,
327 const CreateStorageCB& create_storage_cb,
327 const SessionMessageCB& session_message_cb, 328 const SessionMessageCB& session_message_cb,
328 const SessionClosedCB& session_closed_cb, 329 const SessionClosedCB& session_closed_cb,
329 const SessionKeysChangeCB& session_keys_change_cb, 330 const SessionKeysChangeCB& session_keys_change_cb,
330 const SessionExpirationUpdateCB& session_expiration_update_cb) { 331 const SessionExpirationUpdateCB& session_expiration_update_cb) {
331 // All paths requires the MediaDrmApis. 332 // All paths requires the MediaDrmApis.
332 DCHECK(AreMediaDrmApisAvailable()); 333 DCHECK(AreMediaDrmApisAvailable());
333 334
334 UUID scheme_uuid = GetKeySystemManager()->GetUUID(key_system); 335 UUID scheme_uuid = GetKeySystemManager()->GetUUID(key_system);
335 if (scheme_uuid.empty()) 336 if (scheme_uuid.empty())
336 return nullptr; 337 return nullptr;
337 338
338 scoped_refptr<MediaDrmBridge> media_drm_bridge(new MediaDrmBridge( 339 scoped_refptr<MediaDrmBridge> media_drm_bridge(new MediaDrmBridge(
339 scheme_uuid, security_origin, security_level, create_fetcher_cb, 340 scheme_uuid, security_origin, security_level, create_fetcher_cb,
340 session_message_cb, session_closed_cb, session_keys_change_cb, 341 create_storage_cb, session_message_cb, session_closed_cb,
341 session_expiration_update_cb)); 342 session_keys_change_cb, session_expiration_update_cb));
342 343
343 if (media_drm_bridge->j_media_drm_.is_null()) 344 if (media_drm_bridge->j_media_drm_.is_null())
344 media_drm_bridge = nullptr; 345 media_drm_bridge = nullptr;
345 346
346 return media_drm_bridge; 347 return media_drm_bridge;
347 } 348 }
348 349
349 // static 350 // static
350 scoped_refptr<MediaDrmBridge> MediaDrmBridge::Create( 351 scoped_refptr<MediaDrmBridge> MediaDrmBridge::Create(
351 const std::string& key_system, 352 const std::string& key_system,
352 const GURL& security_origin, 353 const GURL& security_origin,
353 SecurityLevel security_level, 354 SecurityLevel security_level,
354 const CreateFetcherCB& create_fetcher_cb, 355 const CreateFetcherCB& create_fetcher_cb,
356 const CreateStorageCB& create_storage_cb,
355 const SessionMessageCB& session_message_cb, 357 const SessionMessageCB& session_message_cb,
356 const SessionClosedCB& session_closed_cb, 358 const SessionClosedCB& session_closed_cb,
357 const SessionKeysChangeCB& session_keys_change_cb, 359 const SessionKeysChangeCB& session_keys_change_cb,
358 const SessionExpirationUpdateCB& session_expiration_update_cb) { 360 const SessionExpirationUpdateCB& session_expiration_update_cb) {
359 DVLOG(1) << __func__; 361 DVLOG(1) << __func__;
360 362
361 if (!IsAvailable()) 363 if (!IsAvailable())
362 return nullptr; 364 return nullptr;
363 365
364 return CreateInternal(key_system, security_origin, security_level, 366 return CreateInternal(key_system, security_origin, security_level,
365 create_fetcher_cb, session_message_cb, 367 create_fetcher_cb, create_storage_cb,
366 session_closed_cb, session_keys_change_cb, 368 session_message_cb, session_closed_cb,
367 session_expiration_update_cb); 369 session_keys_change_cb, session_expiration_update_cb);
368 } 370 }
369 371
370 // static 372 // static
371 scoped_refptr<MediaDrmBridge> MediaDrmBridge::CreateWithoutSessionSupport( 373 scoped_refptr<MediaDrmBridge> MediaDrmBridge::CreateWithoutSessionSupport(
372 const std::string& key_system, 374 const std::string& key_system,
373 SecurityLevel security_level, 375 SecurityLevel security_level,
374 const CreateFetcherCB& create_fetcher_cb) { 376 const CreateFetcherCB& create_fetcher_cb) {
375 DVLOG(1) << __func__; 377 DVLOG(1) << __func__;
376 378
377 // Sessions won't be used so decoding capability is not required. 379 // Sessions won't be used so decoding capability is not required.
378 if (!AreMediaDrmApisAvailable()) 380 if (!AreMediaDrmApisAvailable())
379 return nullptr; 381 return nullptr;
380 382
381 return MediaDrmBridge::Create(key_system, GURL::EmptyGURL(), security_level, 383 return MediaDrmBridge::Create(
382 create_fetcher_cb, SessionMessageCB(), 384 key_system, GURL::EmptyGURL(), security_level, create_fetcher_cb,
383 SessionClosedCB(), SessionKeysChangeCB(), 385 CreateStorageCB(), SessionMessageCB(), SessionClosedCB(),
384 SessionExpirationUpdateCB()); 386 SessionKeysChangeCB(), SessionExpirationUpdateCB());
385 } 387 }
386 388
387 void MediaDrmBridge::SetServerCertificate( 389 void MediaDrmBridge::SetServerCertificate(
388 const std::vector<uint8_t>& certificate, 390 const std::vector<uint8_t>& certificate,
389 std::unique_ptr<media::SimpleCdmPromise> promise) { 391 std::unique_ptr<media::SimpleCdmPromise> promise) {
390 DCHECK(task_runner_->BelongsToCurrentThread()); 392 DCHECK(task_runner_->BelongsToCurrentThread());
391 DVLOG(2) << __func__ << "(" << certificate.size() << " bytes)"; 393 DVLOG(2) << __func__ << "(" << certificate.size() << " bytes)";
392 394
393 DCHECK(!certificate.empty()); 395 DCHECK(!certificate.empty());
394 396
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 } 779 }
778 780
779 //------------------------------------------------------------------------------ 781 //------------------------------------------------------------------------------
780 // The following are private methods. 782 // The following are private methods.
781 783
782 MediaDrmBridge::MediaDrmBridge( 784 MediaDrmBridge::MediaDrmBridge(
783 const std::vector<uint8_t>& scheme_uuid, 785 const std::vector<uint8_t>& scheme_uuid,
784 const GURL& security_origin, 786 const GURL& security_origin,
785 SecurityLevel security_level, 787 SecurityLevel security_level,
786 const CreateFetcherCB& create_fetcher_cb, 788 const CreateFetcherCB& create_fetcher_cb,
789 const CreateStorageCB& create_storage_cb,
787 const SessionMessageCB& session_message_cb, 790 const SessionMessageCB& session_message_cb,
788 const SessionClosedCB& session_closed_cb, 791 const SessionClosedCB& session_closed_cb,
789 const SessionKeysChangeCB& session_keys_change_cb, 792 const SessionKeysChangeCB& session_keys_change_cb,
790 const SessionExpirationUpdateCB& session_expiration_update_cb) 793 const SessionExpirationUpdateCB& session_expiration_update_cb)
791 : scheme_uuid_(scheme_uuid), 794 : scheme_uuid_(scheme_uuid),
792 create_fetcher_cb_(create_fetcher_cb), 795 create_fetcher_cb_(create_fetcher_cb),
796 create_storage_cb_(create_storage_cb),
793 session_message_cb_(session_message_cb), 797 session_message_cb_(session_message_cb),
794 session_closed_cb_(session_closed_cb), 798 session_closed_cb_(session_closed_cb),
795 session_keys_change_cb_(session_keys_change_cb), 799 session_keys_change_cb_(session_keys_change_cb),
796 session_expiration_update_cb_(session_expiration_update_cb), 800 session_expiration_update_cb_(session_expiration_update_cb),
797 task_runner_(base::ThreadTaskRunnerHandle::Get()), 801 task_runner_(base::ThreadTaskRunnerHandle::Get()),
798 media_drm_bridge_cdm_context_(this), 802 media_drm_bridge_cdm_context_(this),
799 weak_factory_(this) { 803 weak_factory_(this) {
800 DVLOG(1) << __func__; 804 DVLOG(1) << __func__;
801 805
802 DCHECK(!create_fetcher_cb_.is_null()); 806 DCHECK(!create_fetcher_cb_.is_null());
(...skipping 14 matching lines...) Expand all
817 base::FeatureList::IsEnabled(kMediaDrmPersistentLicense) && 821 base::FeatureList::IsEnabled(kMediaDrmPersistentLicense) &&
818 // MediaDrm implements origin isolated storage on M. 822 // MediaDrm implements origin isolated storage on M.
819 base::android::BuildInfo::GetInstance()->sdk_int() >= 23; 823 base::android::BuildInfo::GetInstance()->sdk_int() >= 23;
820 824
821 // TODO(yucliu): Per EME spec on individualization, implementation should not 825 // TODO(yucliu): Per EME spec on individualization, implementation should not
822 // expose application-specific information. Considering encode origin before 826 // expose application-specific information. Considering encode origin before
823 // passing to MediaDrm. 827 // passing to MediaDrm.
824 ScopedJavaLocalRef<jstring> j_security_origin = ConvertUTF8ToJavaString( 828 ScopedJavaLocalRef<jstring> j_security_origin = ConvertUTF8ToJavaString(
825 env, use_origin_isolated_storage ? security_origin.spec() : ""); 829 env, use_origin_isolated_storage ? security_origin.spec() : "");
826 830
831 // TODO(yucliu): Use |create_storage_cb_| to create MediaDrmStorage which can
832 // be used by Java side to store/retrieve persistent data. This should only
833 // be used when |use_origin_isolated_storage| is true.
834
827 // Note: OnMediaCryptoReady() could be called in this call. 835 // Note: OnMediaCryptoReady() could be called in this call.
828 j_media_drm_.Reset(Java_MediaDrmBridge_create( 836 j_media_drm_.Reset(Java_MediaDrmBridge_create(
829 env, j_scheme_uuid, j_security_origin, j_security_level, 837 env, j_scheme_uuid, j_security_origin, j_security_level,
830 reinterpret_cast<intptr_t>(this))); 838 reinterpret_cast<intptr_t>(this)));
831 } 839 }
832 840
833 MediaDrmBridge::~MediaDrmBridge() { 841 MediaDrmBridge::~MediaDrmBridge() {
834 DCHECK(task_runner_->BelongsToCurrentThread()); 842 DCHECK(task_runner_->BelongsToCurrentThread());
835 DVLOG(1) << __func__; 843 DVLOG(1) << __func__;
836 844
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 } 936 }
929 937
930 void MediaDrmBridge::OnHasAdditionalUsableKey() { 938 void MediaDrmBridge::OnHasAdditionalUsableKey() {
931 DCHECK(task_runner_->BelongsToCurrentThread()); 939 DCHECK(task_runner_->BelongsToCurrentThread());
932 DVLOG(1) << __func__; 940 DVLOG(1) << __func__;
933 941
934 player_tracker_.NotifyNewKey(); 942 player_tracker_.NotifyNewKey();
935 } 943 }
936 944
937 } // namespace media 945 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698