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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/pepper/content_decryptor_delegate.h
diff --git a/content/renderer/pepper/content_decryptor_delegate.h b/content/renderer/pepper/content_decryptor_delegate.h
index 4e5a4bd5661c4644305e2e7d96313dfec42de425..257380052bf14cf5a389b113f1a1d1ea67664464 100644
--- a/content/renderer/pepper/content_decryptor_delegate.h
+++ b/content/renderer/pepper/content_decryptor_delegate.h
@@ -40,14 +40,16 @@ class ContentDecryptorDelegate {
const PPP_ContentDecryptor_Private* plugin_decryption_interface);
~ContentDecryptorDelegate();
- void Initialize(const std::string& key_system);
+ // This object should not be accessed after |fatal_plugin_error_cb| is called.
+ void Initialize(const std::string& key_system,
+ const media::SessionCreatedCB& session_created_cb,
+ const media::SessionMessageCB& session_message_cb,
+ const media::SessionReadyCB& session_ready_cb,
+ const media::SessionClosedCB& session_closed_cb,
+ const media::SessionErrorCB& session_error_cb,
+ const base::Closure& fatal_plugin_error_cb);
- void SetSessionEventCallbacks(
- const media::SessionCreatedCB& session_created_cb,
- const media::SessionMessageCB& session_message_cb,
- const media::SessionReadyCB& session_ready_cb,
- const media::SessionClosedCB& session_closed_cb,
- const media::SessionErrorCB& session_error_cb);
+ void InstanceCrashed();
// Provides access to PPP_ContentDecryptor_Private.
bool CreateSession(uint32 session_id,
@@ -109,8 +111,11 @@ class ContentDecryptorDelegate {
class TrackableCallback {
public:
TrackableCallback() : id_(0u) {}
- // TODO(xhwang): Check that no callback is pending in dtor.
- ~TrackableCallback() {};
+ ~TrackableCallback() {
+ // Callbacks must be satisfied.
+ DCHECK_EQ(id_, 0u);
+ DCHECK(is_null());
+ };
bool Matches(uint32_t id) const { return id == id_; }
@@ -162,6 +167,8 @@ class ContentDecryptorDelegate {
media::SampleFormat sample_format,
media::Decryptor::AudioBuffers* frames);
+ void SatisfyAllPendingCallbacksOnError();
+
const PP_Instance pp_instance_;
const PPP_ContentDecryptor_Private* const plugin_decryption_interface_;
@@ -175,6 +182,10 @@ class ContentDecryptorDelegate {
media::SessionClosedCB session_closed_cb_;
media::SessionErrorCB session_error_cb_;
+ // Callback to notify that unexpected error happened and |this| should not
+ // be used anymore.
+ base::Closure fatal_plugin_error_cb_;
+
gfx::Size natural_size_;
// Request ID for tracking pending content decryption callbacks.

Powered by Google App Engine
This is Rietveld 408576698