Commit 5857e9ed authored by gunsch's avatar gunsch Committed by Commit bot

Chromecast: updates BrowserCdmCast to handle new BrowserCdm API.

R=lcwu@chromium.org
BUG=451482

Review URL: https://codereview.chromium.org/874663002

Cr-Commit-Position: refs/heads/master@{#314178}
parent 4973f5bd
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "chromecast/browser/media/cast_browser_cdm_factory.h" #include "chromecast/browser/media/cast_browser_cdm_factory.h"
#include "chromecast/media/cdm/browser_cdm_cast.h"
namespace chromecast { namespace chromecast {
namespace media { namespace media {
...@@ -16,17 +18,20 @@ scoped_ptr< ::media::BrowserCdm> CastBrowserCdmFactory::CreateBrowserCdm( ...@@ -16,17 +18,20 @@ scoped_ptr< ::media::BrowserCdm> CastBrowserCdmFactory::CreateBrowserCdm(
const ::media::SessionExpirationUpdateCB& session_expiration_update_cb) { const ::media::SessionExpirationUpdateCB& session_expiration_update_cb) {
CastKeySystem key_system(GetKeySystemByName(key_system_name)); CastKeySystem key_system(GetKeySystemByName(key_system_name));
// TODO(gunsch): handle ClearKey decryption. See crbug.com/441957 scoped_ptr<chromecast::media::BrowserCdmCast> browser_cdm;
if (key_system == chromecast::media::KEY_SYSTEM_CLEAR_KEY) {
scoped_ptr< ::media::BrowserCdm> platform_cdm( // TODO(gunsch): handle ClearKey decryption. See crbug.com/441957
CreatePlatformBrowserCdm(key_system, } else {
session_message_cb, browser_cdm = CreatePlatformBrowserCdm(key_system);
session_closed_cb, }
session_error_cb,
session_keys_change_cb, if (browser_cdm) {
session_expiration_update_cb)); browser_cdm->SetCallbacks(session_message_cb,
if (platform_cdm) { session_closed_cb,
return platform_cdm.Pass(); session_error_cb,
session_keys_change_cb,
session_expiration_update_cb);
return browser_cdm.Pass();
} }
LOG(INFO) << "No matching key system found."; LOG(INFO) << "No matching key system found.";
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
namespace chromecast { namespace chromecast {
namespace media { namespace media {
class BrowserCdmCast;
class CastBrowserCdmFactory : public ::media::BrowserCdmFactory { class CastBrowserCdmFactory : public ::media::BrowserCdmFactory {
public: public:
CastBrowserCdmFactory() {} CastBrowserCdmFactory() {}
...@@ -32,13 +34,8 @@ class CastBrowserCdmFactory : public ::media::BrowserCdmFactory { ...@@ -32,13 +34,8 @@ class CastBrowserCdmFactory : public ::media::BrowserCdmFactory {
}; };
// Allow platform-specific CDMs to be provided. // Allow platform-specific CDMs to be provided.
scoped_ptr< ::media::BrowserCdm> CreatePlatformBrowserCdm( scoped_ptr<BrowserCdmCast> CreatePlatformBrowserCdm(
const CastKeySystem& key_system, const CastKeySystem& key_system);
const ::media::SessionMessageCB& session_message_cb,
const ::media::SessionClosedCB& session_closed_cb,
const ::media::SessionErrorCB& session_error_cb,
const ::media::SessionKeysChangeCB& session_keys_change_cb,
const ::media::SessionExpirationUpdateCB& session_expiration_update_cb);
} // namespace media } // namespace media
} // namespace chromecast } // namespace chromecast
......
...@@ -4,17 +4,14 @@ ...@@ -4,17 +4,14 @@
#include "chromecast/browser/media/cast_browser_cdm_factory.h" #include "chromecast/browser/media/cast_browser_cdm_factory.h"
#include "chromecast/media/cdm/browser_cdm_cast.h"
namespace chromecast { namespace chromecast {
namespace media { namespace media {
scoped_ptr< ::media::BrowserCdm> CreatePlatformBrowserCdm( scoped_ptr<BrowserCdmCast> CreatePlatformBrowserCdm(
const CastKeySystem& key_system, const CastKeySystem& key_system) {
const ::media::SessionMessageCB& session_message_cb, return scoped_ptr<BrowserCdmCast>();
const ::media::SessionClosedCB& session_closed_cb,
const ::media::SessionErrorCB& session_error_cb,
const ::media::SessionKeysChangeCB& session_keys_change_cb,
const ::media::SessionExpirationUpdateCB& session_expiration_update_cb) {
return scoped_ptr< ::media::BrowserCdm>();
} }
} // namespace media } // namespace media
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "chromecast/media/cdm/browser_cdm_cast.h" #include "chromecast/media/cdm/browser_cdm_cast.h"
#include "media/base/cdm_key_information.h"
namespace chromecast { namespace chromecast {
namespace media { namespace media {
...@@ -14,6 +16,19 @@ BrowserCdmCast::~BrowserCdmCast() { ...@@ -14,6 +16,19 @@ BrowserCdmCast::~BrowserCdmCast() {
player_tracker_.NotifyCdmUnset(); player_tracker_.NotifyCdmUnset();
} }
void BrowserCdmCast::SetCallbacks(
const ::media::SessionMessageCB& session_message_cb,
const ::media::SessionClosedCB& session_closed_cb,
const ::media::SessionErrorCB& session_error_cb,
const ::media::SessionKeysChangeCB& session_keys_change_cb,
const ::media::SessionExpirationUpdateCB& session_expiration_update_cb) {
session_message_cb_ = session_message_cb;
session_closed_cb_ = session_closed_cb;
session_error_cb_ = session_error_cb;
session_keys_change_cb_ = session_keys_change_cb;
session_expiration_update_cb_ = session_expiration_update_cb;
}
int BrowserCdmCast::RegisterPlayer(const base::Closure& new_key_cb, int BrowserCdmCast::RegisterPlayer(const base::Closure& new_key_cb,
const base::Closure& cdm_unset_cb) { const base::Closure& cdm_unset_cb) {
return player_tracker_.RegisterPlayer(new_key_cb, cdm_unset_cb); return player_tracker_.RegisterPlayer(new_key_cb, cdm_unset_cb);
...@@ -23,7 +38,36 @@ void BrowserCdmCast::UnregisterPlayer(int registration_id) { ...@@ -23,7 +38,36 @@ void BrowserCdmCast::UnregisterPlayer(int registration_id) {
player_tracker_.UnregisterPlayer(registration_id); player_tracker_.UnregisterPlayer(registration_id);
} }
void BrowserCdmCast::NotifyKeyAdded() { void BrowserCdmCast::OnSessionMessage(const std::string& web_session_id,
const std::vector<uint8>& message,
const GURL& destination_url) {
// Note: Message type is not supported in Chromecast. Do our best guess here.
::media::MediaKeys::MessageType message_type =
destination_url.is_empty() ? ::media::MediaKeys::LICENSE_REQUEST
: ::media::MediaKeys::LICENSE_RENEWAL;
session_message_cb_.Run(web_session_id,
message_type,
message,
destination_url);
}
void BrowserCdmCast::OnSessionClosed(const std::string& web_session_id) {
session_closed_cb_.Run(web_session_id);
}
void BrowserCdmCast::OnSessionKeysChange(
const std::string& web_session_id,
const ::media::KeyIdAndKeyPairs& keys) {
::media::CdmKeysInfo cdm_keys_info;
for (const std::pair<std::string, std::string>& key : keys) {
scoped_ptr< ::media::CdmKeyInformation> cdm_key_information(
new ::media::CdmKeyInformation());
cdm_key_information->key_id.assign(key.first.begin(), key.first.end());
cdm_keys_info.push_back(cdm_key_information.release());
}
session_keys_change_cb_.Run(web_session_id, true, cdm_keys_info.Pass());
// Notify listeners of a new key.
player_tracker_.NotifyNewKey(); player_tracker_.NotifyNewKey();
} }
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "media/base/browser_cdm.h" #include "media/base/browser_cdm.h"
#include "media/cdm/json_web_key.h"
#include "media/cdm/player_tracker_impl.h" #include "media/cdm/player_tracker_impl.h"
namespace chromecast { namespace chromecast {
...@@ -32,6 +33,13 @@ class BrowserCdmCast : public ::media::BrowserCdm { ...@@ -32,6 +33,13 @@ class BrowserCdmCast : public ::media::BrowserCdm {
BrowserCdmCast(); BrowserCdmCast();
~BrowserCdmCast() override; ~BrowserCdmCast() override;
void SetCallbacks(
const ::media::SessionMessageCB& session_message_cb,
const ::media::SessionClosedCB& session_closed_cb,
const ::media::SessionErrorCB& session_error_cb,
const ::media::SessionKeysChangeCB& session_keys_change_cb,
const ::media::SessionExpirationUpdateCB& session_expiration_update_cb);
// PlayerTracker implementation. // PlayerTracker implementation.
int RegisterPlayer(const base::Closure& new_key_cb, int RegisterPlayer(const base::Closure& new_key_cb,
const base::Closure& cdm_unset_cb) override; const base::Closure& cdm_unset_cb) override;
...@@ -44,10 +52,20 @@ class BrowserCdmCast : public ::media::BrowserCdm { ...@@ -44,10 +52,20 @@ class BrowserCdmCast : public ::media::BrowserCdm {
const std::string& key_id) const = 0; const std::string& key_id) const = 0;
protected: protected:
// Notifies all listeners a new key was added. void OnSessionMessage(const std::string& web_session_id,
void NotifyKeyAdded(); const std::vector<uint8>& message,
const GURL& destination_url);
void OnSessionClosed(const std::string& web_session_id);
void OnSessionKeysChange(const std::string& web_session_id,
const ::media::KeyIdAndKeyPairs& keys);
private: private:
::media::SessionMessageCB session_message_cb_;
::media::SessionClosedCB session_closed_cb_;
::media::SessionErrorCB session_error_cb_;
::media::SessionKeysChangeCB session_keys_change_cb_;
::media::SessionExpirationUpdateCB session_expiration_update_cb_;
::media::PlayerTrackerImpl player_tracker_; ::media::PlayerTrackerImpl player_tracker_;
DISALLOW_COPY_AND_ASSIGN(BrowserCdmCast); DISALLOW_COPY_AND_ASSIGN(BrowserCdmCast);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment