| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chromecast/media/cdm/browser_cdm_cast.h" | 5 #include "chromecast/media/cdm/browser_cdm_cast.h" |
| 6 | 6 |
| 7 #include "media/base/cdm_key_information.h" | 7 #include "media/base/cdm_key_information.h" |
| 8 | 8 |
| 9 namespace chromecast { | 9 namespace chromecast { |
| 10 namespace media { | 10 namespace media { |
| 11 | 11 |
| 12 BrowserCdmCast::BrowserCdmCast() { | 12 BrowserCdmCast::BrowserCdmCast() |
| 13 : next_registration_id_(0) { |
| 13 } | 14 } |
| 14 | 15 |
| 15 BrowserCdmCast::~BrowserCdmCast() { | 16 BrowserCdmCast::~BrowserCdmCast() { |
| 16 player_tracker_.NotifyCdmUnset(); | 17 base::AutoLock auto_lock(callback_lock_); |
| 18 for (std::map<uint32_t, base::Closure>::const_iterator it = |
| 19 cdm_unset_callbacks_.begin(); it != cdm_unset_callbacks_.end(); ++it) { |
| 20 it->second.Run(); |
| 21 } |
| 17 } | 22 } |
| 18 | 23 |
| 19 void BrowserCdmCast::SetCallbacks( | 24 void BrowserCdmCast::SetCallbacks( |
| 20 const ::media::SessionMessageCB& session_message_cb, | 25 const ::media::SessionMessageCB& session_message_cb, |
| 21 const ::media::SessionClosedCB& session_closed_cb, | 26 const ::media::SessionClosedCB& session_closed_cb, |
| 22 const ::media::SessionErrorCB& session_error_cb, | 27 const ::media::SessionErrorCB& session_error_cb, |
| 23 const ::media::SessionKeysChangeCB& session_keys_change_cb, | 28 const ::media::SessionKeysChangeCB& session_keys_change_cb, |
| 24 const ::media::SessionExpirationUpdateCB& session_expiration_update_cb) { | 29 const ::media::SessionExpirationUpdateCB& session_expiration_update_cb) { |
| 25 session_message_cb_ = session_message_cb; | 30 session_message_cb_ = session_message_cb; |
| 26 session_closed_cb_ = session_closed_cb; | 31 session_closed_cb_ = session_closed_cb; |
| 27 session_error_cb_ = session_error_cb; | 32 session_error_cb_ = session_error_cb; |
| 28 session_keys_change_cb_ = session_keys_change_cb; | 33 session_keys_change_cb_ = session_keys_change_cb; |
| 29 session_expiration_update_cb_ = session_expiration_update_cb; | 34 session_expiration_update_cb_ = session_expiration_update_cb; |
| 30 } | 35 } |
| 31 | 36 |
| 32 int BrowserCdmCast::RegisterPlayer(const base::Closure& new_key_cb, | 37 int BrowserCdmCast::RegisterPlayer(const base::Closure& new_key_cb, |
| 33 const base::Closure& cdm_unset_cb) { | 38 const base::Closure& cdm_unset_cb) { |
| 34 return player_tracker_.RegisterPlayer(new_key_cb, cdm_unset_cb); | 39 int registration_id = next_registration_id_++; |
| 40 DCHECK(!new_key_cb.is_null()); |
| 41 DCHECK(!cdm_unset_cb.is_null()); |
| 42 { |
| 43 base::AutoLock auto_lock(callback_lock_); |
| 44 DCHECK(!ContainsKey(new_key_callbacks_, registration_id)); |
| 45 DCHECK(!ContainsKey(cdm_unset_callbacks_, registration_id)); |
| 46 new_key_callbacks_[registration_id] = new_key_cb; |
| 47 cdm_unset_callbacks_[registration_id] = cdm_unset_cb; |
| 48 } |
| 49 return registration_id; |
| 35 } | 50 } |
| 36 | 51 |
| 37 void BrowserCdmCast::UnregisterPlayer(int registration_id) { | 52 void BrowserCdmCast::UnregisterPlayer(int registration_id) { |
| 38 player_tracker_.UnregisterPlayer(registration_id); | 53 base::AutoLock auto_lock(callback_lock_); |
| 54 DCHECK(ContainsKey(new_key_callbacks_, registration_id)); |
| 55 DCHECK(ContainsKey(cdm_unset_callbacks_, registration_id)); |
| 56 new_key_callbacks_.erase(registration_id); |
| 57 cdm_unset_callbacks_.erase(registration_id); |
| 39 } | 58 } |
| 40 | 59 |
| 41 void BrowserCdmCast::OnSessionMessage(const std::string& web_session_id, | 60 void BrowserCdmCast::OnSessionMessage(const std::string& web_session_id, |
| 42 const std::vector<uint8>& message, | 61 const std::vector<uint8>& message, |
| 43 const GURL& destination_url) { | 62 const GURL& destination_url) { |
| 44 // Note: Message type is not supported in Chromecast. Do our best guess here. | 63 // Note: Message type is not supported in Chromecast. Do our best guess here. |
| 45 ::media::MediaKeys::MessageType message_type = | 64 ::media::MediaKeys::MessageType message_type = |
| 46 destination_url.is_empty() ? ::media::MediaKeys::LICENSE_REQUEST | 65 destination_url.is_empty() ? ::media::MediaKeys::LICENSE_REQUEST |
| 47 : ::media::MediaKeys::LICENSE_RENEWAL; | 66 : ::media::MediaKeys::LICENSE_RENEWAL; |
| 48 session_message_cb_.Run(web_session_id, | 67 session_message_cb_.Run(web_session_id, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 61 ::media::CdmKeysInfo cdm_keys_info; | 80 ::media::CdmKeysInfo cdm_keys_info; |
| 62 for (const std::pair<std::string, std::string>& key : keys) { | 81 for (const std::pair<std::string, std::string>& key : keys) { |
| 63 scoped_ptr< ::media::CdmKeyInformation> cdm_key_information( | 82 scoped_ptr< ::media::CdmKeyInformation> cdm_key_information( |
| 64 new ::media::CdmKeyInformation()); | 83 new ::media::CdmKeyInformation()); |
| 65 cdm_key_information->key_id.assign(key.first.begin(), key.first.end()); | 84 cdm_key_information->key_id.assign(key.first.begin(), key.first.end()); |
| 66 cdm_keys_info.push_back(cdm_key_information.release()); | 85 cdm_keys_info.push_back(cdm_key_information.release()); |
| 67 } | 86 } |
| 68 session_keys_change_cb_.Run(web_session_id, true, cdm_keys_info.Pass()); | 87 session_keys_change_cb_.Run(web_session_id, true, cdm_keys_info.Pass()); |
| 69 | 88 |
| 70 // Notify listeners of a new key. | 89 // Notify listeners of a new key. |
| 71 player_tracker_.NotifyNewKey(); | 90 { |
| 91 base::AutoLock auto_lock(callback_lock_); |
| 92 for (std::map<uint32_t, base::Closure>::const_iterator it = |
| 93 new_key_callbacks_.begin(); it != new_key_callbacks_.end(); ++it) { |
| 94 it->second.Run(); |
| 95 } |
| 96 } |
| 72 } | 97 } |
| 73 | 98 |
| 74 } // namespace media | 99 } // namespace media |
| 75 } // namespace chromecast | 100 } // namespace chromecast |
| OLD | NEW |