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

Side by Side Diff: webkit/media/crypto/proxy_decryptor.h

Issue 11226019: Encrypted Media: Replace DecryptorClient with key event callbacks. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 2 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef WEBKIT_MEDIA_CRYPTO_PROXY_DECRYPTOR_H_ 5 #ifndef WEBKIT_MEDIA_CRYPTO_PROXY_DECRYPTOR_H_
6 #define WEBKIT_MEDIA_CRYPTO_PROXY_DECRYPTOR_H_ 6 #define WEBKIT_MEDIA_CRYPTO_PROXY_DECRYPTOR_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/synchronization/lock.h" 11 #include "base/synchronization/lock.h"
12 #include "media/base/decryptor.h" 12 #include "media/base/decryptor.h"
13 #include "media/base/decryptor_client.h"
13 14
14 namespace base { 15 namespace base {
15 class MessageLoopProxy; 16 class MessageLoopProxy;
16 } 17 }
17 18
18 namespace media { 19 namespace media {
19 class DecryptorClient; 20 class DecryptorClient;
20 } 21 }
21 22
22 namespace WebKit { 23 namespace WebKit {
23 class WebFrame; 24 class WebFrame;
24 class WebMediaPlayerClient; 25 class WebMediaPlayerClient;
25 } 26 }
26 27
27 namespace webkit_media { 28 namespace webkit_media {
28 29
29 // A decryptor proxy that creates a real decryptor object on demand and 30 // A decryptor proxy that creates a real decryptor object on demand and
30 // forwards decryptor calls to it. 31 // forwards decryptor calls to it.
31 // TODO(xhwang): Currently we don't support run-time switching among decryptor 32 // TODO(xhwang): Currently we don't support run-time switching among decryptor
32 // objects. Fix this when needed. 33 // objects. Fix this when needed.
33 class ProxyDecryptor : public media::Decryptor { 34 class ProxyDecryptor : public media::Decryptor, public media::DecryptorClient {
34 public: 35 public:
36 typedef base::Callback<void(const std::string& key_system,
37 const std::string& session_id)> KeyAddedCB;
38 typedef base::Callback<void(const std::string& key_system,
39 const std::string& session_id,
40 media::Decryptor::KeyError error_code,
41 int system_code)> KeyErrorCB;
42 typedef base::Callback<void(const std::string& key_system,
43 const std::string& session_id,
44 scoped_array<uint8> message,
45 int message_length,
46 const std::string& default_url)> KeyMessageCB;
47 typedef base::Callback<void(const std::string& key_system,
48 const std::string& session_id,
49 scoped_array<uint8> init_data,
50 int init_data_size)> NeedKeyCB;
Ami GONE FROM CHROMIUM 2012/10/23 06:52:22 ISTM this CL went half-way to the real goal: delet
xhwang 2012/10/23 07:32:13 Agreed that if we choose the pure callback path th
51
35 ProxyDecryptor(const scoped_refptr<base::MessageLoopProxy>& message_loop, 52 ProxyDecryptor(const scoped_refptr<base::MessageLoopProxy>& message_loop,
36 media::DecryptorClient* decryptor_client, 53 const KeyAddedCB& key_added_cb,
54 const KeyErrorCB& key_error_cb,
55 const KeyMessageCB& key_message_cb,
56 const NeedKeyCB& need_key_cb,
37 WebKit::WebMediaPlayerClient* web_media_player_client, 57 WebKit::WebMediaPlayerClient* web_media_player_client,
38 WebKit::WebFrame* web_frame); 58 WebKit::WebFrame* web_frame);
39 virtual ~ProxyDecryptor(); 59 virtual ~ProxyDecryptor();
40 60
41 void set_decryptor_for_testing(scoped_ptr<media::Decryptor> decryptor) { 61 void set_decryptor_for_testing(scoped_ptr<media::Decryptor> decryptor) {
42 decryptor_ = decryptor.Pass(); 62 decryptor_ = decryptor.Pass();
43 } 63 }
44 64
45 // Callback to notify that the decryptor has been created. 65 // Callback to notify that the decryptor has been created.
46 typedef base::Callback<void(Decryptor*)> DecryptorNotificationCB; 66 typedef base::Callback<void(Decryptor*)> DecryptorNotificationCB;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 const KeyAddedCB& key_added_cb) OVERRIDE; 98 const KeyAddedCB& key_added_cb) OVERRIDE;
79 virtual void DecryptAndDecodeAudio( 99 virtual void DecryptAndDecodeAudio(
80 const scoped_refptr<media::DecoderBuffer>& encrypted, 100 const scoped_refptr<media::DecoderBuffer>& encrypted,
81 const AudioDecodeCB& audio_decode_cb) OVERRIDE; 101 const AudioDecodeCB& audio_decode_cb) OVERRIDE;
82 virtual void DecryptAndDecodeVideo( 102 virtual void DecryptAndDecodeVideo(
83 const scoped_refptr<media::DecoderBuffer>& encrypted, 103 const scoped_refptr<media::DecoderBuffer>& encrypted,
84 const VideoDecodeCB& video_decode_cb) OVERRIDE; 104 const VideoDecodeCB& video_decode_cb) OVERRIDE;
85 virtual void ResetDecoder(StreamType stream_type) OVERRIDE; 105 virtual void ResetDecoder(StreamType stream_type) OVERRIDE;
86 virtual void DeinitializeDecoder(StreamType stream_type) OVERRIDE; 106 virtual void DeinitializeDecoder(StreamType stream_type) OVERRIDE;
87 107
108 // media::DecryptorClient implementation.
109 virtual void KeyAdded(const std::string& key_system,
110 const std::string& session_id) OVERRIDE;
111 virtual void KeyError(const std::string& key_system,
112 const std::string& session_id,
113 Decryptor::KeyError error_code,
114 int system_code) OVERRIDE;
115 virtual void KeyMessage(const std::string& key_system,
116 const std::string& session_id,
117 scoped_array<uint8> message,
118 int message_length,
119 const std::string& default_url) OVERRIDE;
120 virtual void NeedKey(const std::string& key_system,
121 const std::string& session_id,
122 scoped_array<uint8> init_data,
123 int init_data_length) OVERRIDE;
124
88 private: 125 private:
89 // Helper functions to create decryptors to handle the given |key_system|. 126 // Helper functions to create decryptors to handle the given |key_system|.
90 scoped_ptr<media::Decryptor> CreatePpapiDecryptor( 127 scoped_ptr<media::Decryptor> CreatePpapiDecryptor(
91 const std::string& key_system); 128 const std::string& key_system);
92 scoped_ptr<media::Decryptor> CreateDecryptor(const std::string& key_system); 129 scoped_ptr<media::Decryptor> CreateDecryptor(const std::string& key_system);
93 130
94 void OnNewKeyAdded(); 131 void OnNewKeyAdded();
95 132
96 // Sends |pending_buffer_to_decrypt_| to |decryptor_| for decryption. 133 // Sends |pending_buffer_to_decrypt_| to |decryptor_| for decryption.
97 void DecryptPendingBuffer(); 134 void DecryptPendingBuffer();
98 135
99 // Callback passed to decryptor_->Decrypt(). It processes the |status| and 136 // Callback passed to decryptor_->Decrypt(). It processes the |status| and
100 // |decrypted| buffer from the |decryptor_|. 137 // |decrypted| buffer from the |decryptor_|.
101 void OnBufferDecrypted(media::Decryptor::Status status, 138 void OnBufferDecrypted(media::Decryptor::Status status,
102 const scoped_refptr<media::DecoderBuffer>& decrypted); 139 const scoped_refptr<media::DecoderBuffer>& decrypted);
103 140
104 // Message loop on which decryption-related methods happen. Note that 141 // Message loop on which decryption-related methods happen. Note that
105 // key/session-related methods do not run on this message loop. 142 // key/session-related methods do not run on this message loop.
106 scoped_refptr<base::MessageLoopProxy> const decryption_message_loop_; 143 scoped_refptr<base::MessageLoopProxy> const decryption_message_loop_;
107 144
108 // DecryptorClient through which key events are fired. 145 // Callbacks for firing key events.
109 media::DecryptorClient* client_; 146 KeyAddedCB key_added_cb_;
147 KeyErrorCB key_error_cb_;
148 KeyMessageCB key_message_cb_;
149 NeedKeyCB need_key_cb_;
110 150
111 // Needed to create the PpapiDecryptor. 151 // Needed to create the PpapiDecryptor.
112 WebKit::WebMediaPlayerClient* web_media_player_client_; 152 WebKit::WebMediaPlayerClient* web_media_player_client_;
113 WebKit::WebFrame* web_frame_; 153 WebKit::WebFrame* web_frame_;
114 154
115 // Protects the |decryptor_|. Note that |decryptor_| itself should be thread 155 // Protects the |decryptor_|. Note that |decryptor_| itself should be thread
116 // safe as per the Decryptor interface. 156 // safe as per the Decryptor interface.
117 base::Lock lock_; 157 base::Lock lock_;
118 158
119 DecryptorNotificationCB decryptor_notification_cb_; 159 DecryptorNotificationCB decryptor_notification_cb_;
(...skipping 25 matching lines...) Expand all
145 // the |pending_buffer_to_decrypt_| again if kNoKey is returned because a 185 // the |pending_buffer_to_decrypt_| again if kNoKey is returned because a
146 // new key has been added. 186 // new key has been added.
147 bool has_new_key_added_; 187 bool has_new_key_added_;
148 188
149 DISALLOW_COPY_AND_ASSIGN(ProxyDecryptor); 189 DISALLOW_COPY_AND_ASSIGN(ProxyDecryptor);
150 }; 190 };
151 191
152 } // namespace webkit_media 192 } // namespace webkit_media
153 193
154 #endif // WEBKIT_MEDIA_CRYPTO_PROXY_DECRYPTOR_H_ 194 #endif // WEBKIT_MEDIA_CRYPTO_PROXY_DECRYPTOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698