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

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

Issue 2765343003: media: Add MediaDrmStorage (Closed)
Patch Set: fix compile error Created 3 years, 9 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 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 294
295 return GetKeySystemManager()->GetPlatformKeySystemNames(); 295 return GetKeySystemManager()->GetPlatformKeySystemNames();
296 } 296 }
297 297
298 // static 298 // static
299 scoped_refptr<MediaDrmBridge> MediaDrmBridge::CreateInternal( 299 scoped_refptr<MediaDrmBridge> MediaDrmBridge::CreateInternal(
300 const std::string& key_system, 300 const std::string& key_system,
301 const GURL& security_origin, 301 const GURL& security_origin,
302 SecurityLevel security_level, 302 SecurityLevel security_level,
303 const CreateFetcherCB& create_fetcher_cb, 303 const CreateFetcherCB& create_fetcher_cb,
304 const CreateStorageCB& create_storage_cb,
304 const SessionMessageCB& session_message_cb, 305 const SessionMessageCB& session_message_cb,
305 const SessionClosedCB& session_closed_cb, 306 const SessionClosedCB& session_closed_cb,
306 const SessionKeysChangeCB& session_keys_change_cb, 307 const SessionKeysChangeCB& session_keys_change_cb,
307 const SessionExpirationUpdateCB& session_expiration_update_cb) { 308 const SessionExpirationUpdateCB& session_expiration_update_cb) {
308 // All paths requires the MediaDrmApis. 309 // All paths requires the MediaDrmApis.
309 DCHECK(AreMediaDrmApisAvailable()); 310 DCHECK(AreMediaDrmApisAvailable());
310 311
311 UUID scheme_uuid = GetKeySystemManager()->GetUUID(key_system); 312 UUID scheme_uuid = GetKeySystemManager()->GetUUID(key_system);
312 if (scheme_uuid.empty()) 313 if (scheme_uuid.empty())
313 return nullptr; 314 return nullptr;
314 315
315 scoped_refptr<MediaDrmBridge> media_drm_bridge(new MediaDrmBridge( 316 scoped_refptr<MediaDrmBridge> media_drm_bridge(new MediaDrmBridge(
316 scheme_uuid, security_origin, security_level, create_fetcher_cb, 317 scheme_uuid, security_origin, security_level, create_fetcher_cb,
317 session_message_cb, session_closed_cb, session_keys_change_cb, 318 create_storage_cb, session_message_cb, session_closed_cb,
318 session_expiration_update_cb)); 319 session_keys_change_cb, session_expiration_update_cb));
319 320
320 if (media_drm_bridge->j_media_drm_.is_null()) 321 if (media_drm_bridge->j_media_drm_.is_null())
321 media_drm_bridge = nullptr; 322 media_drm_bridge = nullptr;
322 323
323 return media_drm_bridge; 324 return media_drm_bridge;
324 } 325 }
325 326
326 // static 327 // static
327 scoped_refptr<MediaDrmBridge> MediaDrmBridge::Create( 328 scoped_refptr<MediaDrmBridge> MediaDrmBridge::Create(
328 const std::string& key_system, 329 const std::string& key_system,
329 const GURL& security_origin, 330 const GURL& security_origin,
330 SecurityLevel security_level, 331 SecurityLevel security_level,
331 const CreateFetcherCB& create_fetcher_cb, 332 const CreateFetcherCB& create_fetcher_cb,
333 const CreateStorageCB& create_storage_cb,
332 const SessionMessageCB& session_message_cb, 334 const SessionMessageCB& session_message_cb,
333 const SessionClosedCB& session_closed_cb, 335 const SessionClosedCB& session_closed_cb,
334 const SessionKeysChangeCB& session_keys_change_cb, 336 const SessionKeysChangeCB& session_keys_change_cb,
335 const SessionExpirationUpdateCB& session_expiration_update_cb) { 337 const SessionExpirationUpdateCB& session_expiration_update_cb) {
336 DVLOG(1) << __func__; 338 DVLOG(1) << __func__;
337 339
338 if (!IsAvailable()) 340 if (!IsAvailable())
339 return nullptr; 341 return nullptr;
340 342
341 return CreateInternal(key_system, security_origin, security_level, 343 return CreateInternal(key_system, security_origin, security_level,
342 create_fetcher_cb, session_message_cb, 344 create_fetcher_cb, create_storage_cb,
343 session_closed_cb, session_keys_change_cb, 345 session_message_cb, session_closed_cb,
344 session_expiration_update_cb); 346 session_keys_change_cb, session_expiration_update_cb);
345 } 347 }
346 348
347 // static 349 // static
348 scoped_refptr<MediaDrmBridge> MediaDrmBridge::CreateWithoutSessionSupport( 350 scoped_refptr<MediaDrmBridge> MediaDrmBridge::CreateWithoutSessionSupport(
349 const std::string& key_system, 351 const std::string& key_system,
350 SecurityLevel security_level, 352 SecurityLevel security_level,
351 const CreateFetcherCB& create_fetcher_cb) { 353 const CreateFetcherCB& create_fetcher_cb) {
352 DVLOG(1) << __func__; 354 DVLOG(1) << __func__;
353 355
354 // Sessions won't be used so decoding capability is not required. 356 // Sessions won't be used so decoding capability is not required.
355 if (!AreMediaDrmApisAvailable()) 357 if (!AreMediaDrmApisAvailable())
356 return nullptr; 358 return nullptr;
357 359
358 return MediaDrmBridge::Create(key_system, GURL::EmptyGURL(), security_level, 360 return MediaDrmBridge::Create(
359 create_fetcher_cb, SessionMessageCB(), 361 key_system, GURL::EmptyGURL(), security_level, create_fetcher_cb,
360 SessionClosedCB(), SessionKeysChangeCB(), 362 CreateStorageCB(), SessionMessageCB(), SessionClosedCB(),
361 SessionExpirationUpdateCB()); 363 SessionKeysChangeCB(), SessionExpirationUpdateCB());
362 } 364 }
363 365
364 void MediaDrmBridge::SetServerCertificate( 366 void MediaDrmBridge::SetServerCertificate(
365 const std::vector<uint8_t>& certificate, 367 const std::vector<uint8_t>& certificate,
366 std::unique_ptr<media::SimpleCdmPromise> promise) { 368 std::unique_ptr<media::SimpleCdmPromise> promise) {
367 DCHECK(task_runner_->BelongsToCurrentThread()); 369 DCHECK(task_runner_->BelongsToCurrentThread());
368 DVLOG(2) << __func__ << "(" << certificate.size() << " bytes)"; 370 DVLOG(2) << __func__ << "(" << certificate.size() << " bytes)";
369 371
370 DCHECK(!certificate.empty()); 372 DCHECK(!certificate.empty());
371 373
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 } 761 }
760 762
761 //------------------------------------------------------------------------------ 763 //------------------------------------------------------------------------------
762 // The following are private methods. 764 // The following are private methods.
763 765
764 MediaDrmBridge::MediaDrmBridge( 766 MediaDrmBridge::MediaDrmBridge(
765 const std::vector<uint8_t>& scheme_uuid, 767 const std::vector<uint8_t>& scheme_uuid,
766 const GURL& security_origin, 768 const GURL& security_origin,
767 SecurityLevel security_level, 769 SecurityLevel security_level,
768 const CreateFetcherCB& create_fetcher_cb, 770 const CreateFetcherCB& create_fetcher_cb,
771 const CreateStorageCB& create_storage_cb,
769 const SessionMessageCB& session_message_cb, 772 const SessionMessageCB& session_message_cb,
770 const SessionClosedCB& session_closed_cb, 773 const SessionClosedCB& session_closed_cb,
771 const SessionKeysChangeCB& session_keys_change_cb, 774 const SessionKeysChangeCB& session_keys_change_cb,
772 const SessionExpirationUpdateCB& session_expiration_update_cb) 775 const SessionExpirationUpdateCB& session_expiration_update_cb)
773 : scheme_uuid_(scheme_uuid), 776 : scheme_uuid_(scheme_uuid),
774 create_fetcher_cb_(create_fetcher_cb), 777 create_fetcher_cb_(create_fetcher_cb),
778 create_storage_cb_(create_storage_cb),
yucliu1 2017/03/27 19:06:41 I don't think we need this member in MediaDrmBridg
xhwang 2017/03/27 20:28:46 sgtm
775 session_message_cb_(session_message_cb), 779 session_message_cb_(session_message_cb),
776 session_closed_cb_(session_closed_cb), 780 session_closed_cb_(session_closed_cb),
777 session_keys_change_cb_(session_keys_change_cb), 781 session_keys_change_cb_(session_keys_change_cb),
778 session_expiration_update_cb_(session_expiration_update_cb), 782 session_expiration_update_cb_(session_expiration_update_cb),
779 task_runner_(base::ThreadTaskRunnerHandle::Get()), 783 task_runner_(base::ThreadTaskRunnerHandle::Get()),
780 media_drm_bridge_cdm_context_(this), 784 media_drm_bridge_cdm_context_(this),
781 weak_factory_(this) { 785 weak_factory_(this) {
782 DVLOG(1) << __func__; 786 DVLOG(1) << __func__;
783 787
784 DCHECK(!create_fetcher_cb_.is_null()); 788 DCHECK(!create_fetcher_cb_.is_null());
(...skipping 14 matching lines...) Expand all
799 base::FeatureList::IsEnabled(kMediaDrmPersistentLicense) && 803 base::FeatureList::IsEnabled(kMediaDrmPersistentLicense) &&
800 // MediaDrm implements origin isolated storage on M. 804 // MediaDrm implements origin isolated storage on M.
801 base::android::BuildInfo::GetInstance()->sdk_int() >= 23; 805 base::android::BuildInfo::GetInstance()->sdk_int() >= 23;
802 806
803 // TODO(yucliu): Per EME spec on individualization, implementation should not 807 // TODO(yucliu): Per EME spec on individualization, implementation should not
804 // expose application-specific information. Considering encode origin before 808 // expose application-specific information. Considering encode origin before
805 // passing to MediaDrm. 809 // passing to MediaDrm.
806 ScopedJavaLocalRef<jstring> j_security_origin = ConvertUTF8ToJavaString( 810 ScopedJavaLocalRef<jstring> j_security_origin = ConvertUTF8ToJavaString(
807 env, use_origin_isolated_storage ? security_origin.spec() : ""); 811 env, use_origin_isolated_storage ? security_origin.spec() : "");
808 812
813 // TODO(yucliu): Use |create_storage_cb_| to create MediaDrmStorage which can
814 // be used by Java side to store/retrieve persistent data. This should only
815 // be used when |use_origin_isolated_storage| is true.
816
809 // Note: OnMediaCryptoReady() could be called in this call. 817 // Note: OnMediaCryptoReady() could be called in this call.
810 j_media_drm_.Reset(Java_MediaDrmBridge_create( 818 j_media_drm_.Reset(Java_MediaDrmBridge_create(
811 env, j_scheme_uuid, j_security_origin, j_security_level, 819 env, j_scheme_uuid, j_security_origin, j_security_level,
812 reinterpret_cast<intptr_t>(this))); 820 reinterpret_cast<intptr_t>(this)));
813 } 821 }
814 822
815 MediaDrmBridge::~MediaDrmBridge() { 823 MediaDrmBridge::~MediaDrmBridge() {
816 DCHECK(task_runner_->BelongsToCurrentThread()); 824 DCHECK(task_runner_->BelongsToCurrentThread());
817 DVLOG(1) << __func__; 825 DVLOG(1) << __func__;
818 826
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
910 } 918 }
911 919
912 void MediaDrmBridge::OnHasAdditionalUsableKey() { 920 void MediaDrmBridge::OnHasAdditionalUsableKey() {
913 DCHECK(task_runner_->BelongsToCurrentThread()); 921 DCHECK(task_runner_->BelongsToCurrentThread());
914 DVLOG(1) << __func__; 922 DVLOG(1) << __func__;
915 923
916 player_tracker_.NotifyNewKey(); 924 player_tracker_.NotifyNewKey();
917 } 925 }
918 926
919 } // namespace media 927 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698