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

Side by Side Diff: content/renderer/pepper/content_decryptor_delegate.h

Issue 116443009: Handle plugin instance crash in ContentDecryptorDelegate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments addressed Created 6 years, 11 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 | Annotate | Revision Log
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 CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_ 5 #ifndef CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_
6 #define CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_ 6 #define CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_
7 7
8 #include <queue> 8 #include <queue>
9 #include <string> 9 #include <string>
10 10
(...skipping 22 matching lines...) Expand all
33 class ContentDecryptorDelegate { 33 class ContentDecryptorDelegate {
34 public: 34 public:
35 // ContentDecryptorDelegate does not take ownership of 35 // ContentDecryptorDelegate does not take ownership of
36 // |plugin_decryption_interface|. Therefore |plugin_decryption_interface| 36 // |plugin_decryption_interface|. Therefore |plugin_decryption_interface|
37 // must outlive this object. 37 // must outlive this object.
38 ContentDecryptorDelegate( 38 ContentDecryptorDelegate(
39 PP_Instance pp_instance, 39 PP_Instance pp_instance,
40 const PPP_ContentDecryptor_Private* plugin_decryption_interface); 40 const PPP_ContentDecryptor_Private* plugin_decryption_interface);
41 ~ContentDecryptorDelegate(); 41 ~ContentDecryptorDelegate();
42 42
43 void Initialize(const std::string& key_system); 43 // This object should not be accessed after |fatal_plugin_error_cb| is called.
44 void Initialize(const std::string& key_system,
45 const media::SessionCreatedCB& session_created_cb,
46 const media::SessionMessageCB& session_message_cb,
47 const media::SessionReadyCB& session_ready_cb,
48 const media::SessionClosedCB& session_closed_cb,
49 const media::SessionErrorCB& session_error_cb,
50 const base::Closure& fatal_plugin_error_cb);
44 51
45 void SetSessionEventCallbacks( 52 void InstanceCrashed();
46 const media::SessionCreatedCB& session_created_cb,
47 const media::SessionMessageCB& session_message_cb,
48 const media::SessionReadyCB& session_ready_cb,
49 const media::SessionClosedCB& session_closed_cb,
50 const media::SessionErrorCB& session_error_cb);
51 53
52 // Provides access to PPP_ContentDecryptor_Private. 54 // Provides access to PPP_ContentDecryptor_Private.
53 bool CreateSession(uint32 session_id, 55 bool CreateSession(uint32 session_id,
54 const std::string& type, 56 const std::string& type,
55 const uint8* init_data, 57 const uint8* init_data,
56 int init_data_length); 58 int init_data_length);
57 bool UpdateSession(uint32 session_id, 59 bool UpdateSession(uint32 session_id,
58 const uint8* response, 60 const uint8* response,
59 int response_length); 61 int response_length);
60 bool ReleaseSession(uint32 session_id); 62 bool ReleaseSession(uint32 session_id);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 void DeliverFrame(PP_Resource decrypted_frame, 104 void DeliverFrame(PP_Resource decrypted_frame,
103 const PP_DecryptedFrameInfo* frame_info); 105 const PP_DecryptedFrameInfo* frame_info);
104 void DeliverSamples(PP_Resource audio_frames, 106 void DeliverSamples(PP_Resource audio_frames,
105 const PP_DecryptedSampleInfo* sample_info); 107 const PP_DecryptedSampleInfo* sample_info);
106 108
107 private: 109 private:
108 template <typename Callback> 110 template <typename Callback>
109 class TrackableCallback { 111 class TrackableCallback {
110 public: 112 public:
111 TrackableCallback() : id_(0u) {} 113 TrackableCallback() : id_(0u) {}
112 // TODO(xhwang): Check that no callback is pending in dtor. 114 ~TrackableCallback() {
113 ~TrackableCallback() {}; 115 // Callbacks must be satisfied.
116 DCHECK_EQ(id_, 0u);
117 DCHECK(is_null());
118 };
114 119
115 bool Matches(uint32_t id) const { return id == id_; } 120 bool Matches(uint32_t id) const { return id == id_; }
116 121
117 bool is_null() const { return cb_.is_null(); } 122 bool is_null() const { return cb_.is_null(); }
118 123
119 void Set(uint32_t id, const Callback& cb) { 124 void Set(uint32_t id, const Callback& cb) {
120 DCHECK_EQ(id_, 0u); 125 DCHECK_EQ(id_, 0u);
121 DCHECK(cb_.is_null()); 126 DCHECK(cb_.is_null());
122 id_ = id; 127 id_ = id;
123 cb_ = cb; 128 cb_ = cb;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 160
156 void SetBufferToFreeInTrackingInfo(PP_DecryptTrackingInfo* tracking_info); 161 void SetBufferToFreeInTrackingInfo(PP_DecryptTrackingInfo* tracking_info);
157 162
158 // Deserializes audio data stored in |audio_frames| into individual audio 163 // Deserializes audio data stored in |audio_frames| into individual audio
159 // buffers in |frames|. Returns true upon success. 164 // buffers in |frames|. Returns true upon success.
160 bool DeserializeAudioFrames(PP_Resource audio_frames, 165 bool DeserializeAudioFrames(PP_Resource audio_frames,
161 size_t data_size, 166 size_t data_size,
162 media::SampleFormat sample_format, 167 media::SampleFormat sample_format,
163 media::Decryptor::AudioBuffers* frames); 168 media::Decryptor::AudioBuffers* frames);
164 169
170 void SatisfyAllPendingCallbacksOnError();
171
165 const PP_Instance pp_instance_; 172 const PP_Instance pp_instance_;
166 const PPP_ContentDecryptor_Private* const plugin_decryption_interface_; 173 const PPP_ContentDecryptor_Private* const plugin_decryption_interface_;
167 174
168 // TODO(ddorwin): Remove after updating the Pepper API to not use key system. 175 // TODO(ddorwin): Remove after updating the Pepper API to not use key system.
169 std::string key_system_; 176 std::string key_system_;
170 177
171 // Callbacks for firing session events. 178 // Callbacks for firing session events.
172 media::SessionCreatedCB session_created_cb_; 179 media::SessionCreatedCB session_created_cb_;
173 media::SessionMessageCB session_message_cb_; 180 media::SessionMessageCB session_message_cb_;
174 media::SessionReadyCB session_ready_cb_; 181 media::SessionReadyCB session_ready_cb_;
175 media::SessionClosedCB session_closed_cb_; 182 media::SessionClosedCB session_closed_cb_;
176 media::SessionErrorCB session_error_cb_; 183 media::SessionErrorCB session_error_cb_;
177 184
185 // Callback to notify that unexpected error happened and |this| should not
186 // be used anymore.
187 base::Closure fatal_plugin_error_cb_;
188
178 gfx::Size natural_size_; 189 gfx::Size natural_size_;
179 190
180 // Request ID for tracking pending content decryption callbacks. 191 // Request ID for tracking pending content decryption callbacks.
181 // Note that zero indicates an invalid request ID. 192 // Note that zero indicates an invalid request ID.
182 // TODO(xhwang): Add completion callbacks for Reset/Stop and remove the use 193 // TODO(xhwang): Add completion callbacks for Reset/Stop and remove the use
183 // of request IDs. 194 // of request IDs.
184 uint32_t next_decryption_request_id_; 195 uint32_t next_decryption_request_id_;
185 196
186 TrackableCallback<media::Decryptor::DecryptCB> audio_decrypt_cb_; 197 TrackableCallback<media::Decryptor::DecryptCB> audio_decrypt_cb_;
187 TrackableCallback<media::Decryptor::DecryptCB> video_decrypt_cb_; 198 TrackableCallback<media::Decryptor::DecryptCB> video_decrypt_cb_;
(...skipping 14 matching lines...) Expand all
202 213
203 base::WeakPtr<ContentDecryptorDelegate> weak_this_; 214 base::WeakPtr<ContentDecryptorDelegate> weak_this_;
204 base::WeakPtrFactory<ContentDecryptorDelegate> weak_ptr_factory_; 215 base::WeakPtrFactory<ContentDecryptorDelegate> weak_ptr_factory_;
205 216
206 DISALLOW_COPY_AND_ASSIGN(ContentDecryptorDelegate); 217 DISALLOW_COPY_AND_ASSIGN(ContentDecryptorDelegate);
207 }; 218 };
208 219
209 } // namespace content 220 } // namespace content
210 221
211 #endif // CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_ 222 #endif // CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698