cdm_adapter_factory.cc 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "media/cdm/cdm_adapter_factory.h"
  5. #include "base/bind.h"
  6. #include "base/threading/thread_task_runner_handle.h"
  7. #include "media/base/cdm_factory.h"
  8. #include "media/cdm/cdm_adapter.h"
  9. #include "media/cdm/cdm_module.h"
  10. #include "url/origin.h"
  11. namespace media {
  12. CdmAdapterFactory::CdmAdapterFactory(HelperCreationCB helper_creation_cb)
  13. : helper_creation_cb_(std::move(helper_creation_cb)) {
  14. DCHECK(helper_creation_cb_);
  15. }
  16. CdmAdapterFactory::~CdmAdapterFactory() = default;
  17. void CdmAdapterFactory::Create(
  18. const CdmConfig& cdm_config,
  19. const SessionMessageCB& session_message_cb,
  20. const SessionClosedCB& session_closed_cb,
  21. const SessionKeysChangeCB& session_keys_change_cb,
  22. const SessionExpirationUpdateCB& session_expiration_update_cb,
  23. CdmCreatedCB cdm_created_cb) {
  24. DVLOG(1) << __func__ << ": cdm_config=" << cdm_config;
  25. CdmAdapter::CreateCdmFunc create_cdm_func =
  26. CdmModule::GetInstance()->GetCreateCdmFunc();
  27. if (!create_cdm_func) {
  28. base::ThreadTaskRunnerHandle::Get()->PostTask(
  29. FROM_HERE, base::BindOnce(std::move(cdm_created_cb), nullptr,
  30. "CreateCdmFunc not available."));
  31. return;
  32. }
  33. std::unique_ptr<CdmAuxiliaryHelper> cdm_helper = helper_creation_cb_.Run();
  34. if (!cdm_helper) {
  35. base::ThreadTaskRunnerHandle::Get()->PostTask(
  36. FROM_HERE, base::BindOnce(std::move(cdm_created_cb), nullptr,
  37. "CDM helper creation failed."));
  38. return;
  39. }
  40. CdmAdapter::Create(cdm_config, create_cdm_func, std::move(cdm_helper),
  41. session_message_cb, session_closed_cb,
  42. session_keys_change_cb, session_expiration_update_cb,
  43. std::move(cdm_created_cb));
  44. }
  45. } // namespace media