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

Side by Side Diff: chromecast/media/cdm/browser_cdm_cast.cc

Issue 903083003: Chromecast: change BrowserCdmCast threading model. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 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() {
erickung1 2015/02/07 01:31:10 |next_registration_id_| initialization?
gunsch 2015/02/07 01:44:27 Done.
13 } 13 }
14 14
15 BrowserCdmCast::~BrowserCdmCast() { 15 BrowserCdmCast::~BrowserCdmCast() {
16 player_tracker_.NotifyCdmUnset(); 16 {
erickung1 2015/02/07 01:31:10 Nit: maybe no need the parentheses?
gunsch 2015/02/07 01:44:27 Done.
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 }
22 }
17 } 23 }
18 24
19 void BrowserCdmCast::SetCallbacks( 25 void BrowserCdmCast::SetCallbacks(
20 const ::media::SessionMessageCB& session_message_cb, 26 const ::media::SessionMessageCB& session_message_cb,
21 const ::media::SessionClosedCB& session_closed_cb, 27 const ::media::SessionClosedCB& session_closed_cb,
22 const ::media::SessionErrorCB& session_error_cb, 28 const ::media::SessionErrorCB& session_error_cb,
23 const ::media::SessionKeysChangeCB& session_keys_change_cb, 29 const ::media::SessionKeysChangeCB& session_keys_change_cb,
24 const ::media::SessionExpirationUpdateCB& session_expiration_update_cb) { 30 const ::media::SessionExpirationUpdateCB& session_expiration_update_cb) {
25 session_message_cb_ = session_message_cb; 31 session_message_cb_ = session_message_cb;
26 session_closed_cb_ = session_closed_cb; 32 session_closed_cb_ = session_closed_cb;
27 session_error_cb_ = session_error_cb; 33 session_error_cb_ = session_error_cb;
28 session_keys_change_cb_ = session_keys_change_cb; 34 session_keys_change_cb_ = session_keys_change_cb;
29 session_expiration_update_cb_ = session_expiration_update_cb; 35 session_expiration_update_cb_ = session_expiration_update_cb;
30 } 36 }
31 37
32 int BrowserCdmCast::RegisterPlayer(const base::Closure& new_key_cb, 38 int BrowserCdmCast::RegisterPlayer(const base::Closure& new_key_cb,
33 const base::Closure& cdm_unset_cb) { 39 const base::Closure& cdm_unset_cb) {
34 return player_tracker_.RegisterPlayer(new_key_cb, cdm_unset_cb); 40 int registration_id = next_registration_id_++;
41 DCHECK(!new_key_cb.is_null());
42 DCHECK(!cdm_unset_cb.is_null());
43 {
44 base::AutoLock auto_lock(callback_lock_);
45 DCHECK(!ContainsKey(new_key_callbacks_, registration_id));
46 DCHECK(!ContainsKey(cdm_unset_callbacks_, registration_id));
47 new_key_callbacks_[registration_id] = new_key_cb;
48 cdm_unset_callbacks_[registration_id] = cdm_unset_cb;
49 }
50 return registration_id;
35 } 51 }
36 52
37 void BrowserCdmCast::UnregisterPlayer(int registration_id) { 53 void BrowserCdmCast::UnregisterPlayer(int registration_id) {
38 player_tracker_.UnregisterPlayer(registration_id); 54 {
erickung1 2015/02/07 01:31:10 Nit: maybe no need the parentheses?
gunsch 2015/02/07 01:44:27 Done.
55 base::AutoLock auto_lock(callback_lock_);
56 DCHECK(ContainsKey(new_key_callbacks_, registration_id));
57 DCHECK(ContainsKey(cdm_unset_callbacks_, registration_id));
58 new_key_callbacks_.erase(registration_id);
59 cdm_unset_callbacks_.erase(registration_id);
60 }
39 } 61 }
40 62
41 void BrowserCdmCast::OnSessionMessage(const std::string& web_session_id, 63 void BrowserCdmCast::OnSessionMessage(const std::string& web_session_id,
42 const std::vector<uint8>& message, 64 const std::vector<uint8>& message,
43 const GURL& destination_url) { 65 const GURL& destination_url) {
44 // Note: Message type is not supported in Chromecast. Do our best guess here. 66 // Note: Message type is not supported in Chromecast. Do our best guess here.
45 ::media::MediaKeys::MessageType message_type = 67 ::media::MediaKeys::MessageType message_type =
46 destination_url.is_empty() ? ::media::MediaKeys::LICENSE_REQUEST 68 destination_url.is_empty() ? ::media::MediaKeys::LICENSE_REQUEST
47 : ::media::MediaKeys::LICENSE_RENEWAL; 69 : ::media::MediaKeys::LICENSE_RENEWAL;
48 session_message_cb_.Run(web_session_id, 70 session_message_cb_.Run(web_session_id,
(...skipping 12 matching lines...) Expand all
61 ::media::CdmKeysInfo cdm_keys_info; 83 ::media::CdmKeysInfo cdm_keys_info;
62 for (const std::pair<std::string, std::string>& key : keys) { 84 for (const std::pair<std::string, std::string>& key : keys) {
63 scoped_ptr< ::media::CdmKeyInformation> cdm_key_information( 85 scoped_ptr< ::media::CdmKeyInformation> cdm_key_information(
64 new ::media::CdmKeyInformation()); 86 new ::media::CdmKeyInformation());
65 cdm_key_information->key_id.assign(key.first.begin(), key.first.end()); 87 cdm_key_information->key_id.assign(key.first.begin(), key.first.end());
66 cdm_keys_info.push_back(cdm_key_information.release()); 88 cdm_keys_info.push_back(cdm_key_information.release());
67 } 89 }
68 session_keys_change_cb_.Run(web_session_id, true, cdm_keys_info.Pass()); 90 session_keys_change_cb_.Run(web_session_id, true, cdm_keys_info.Pass());
69 91
70 // Notify listeners of a new key. 92 // Notify listeners of a new key.
71 player_tracker_.NotifyNewKey(); 93 {
94 base::AutoLock auto_lock(callback_lock_);
95 for (std::map<uint32_t, base::Closure>::const_iterator it =
96 new_key_callbacks_.begin(); it != new_key_callbacks_.end(); ++it) {
97 it->second.Run();
98 }
99 }
72 } 100 }
73 101
74 } // namespace media 102 } // namespace media
75 } // namespace chromecast 103 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698