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

Unified Diff: content/renderer/pepper/content_decryptor_delegate.h

Issue 105743010: Add TrackableCallback in ContentDecryptorDelegate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 352817dd01170776d79e1f2dfad98b16667b3b09..4e5a4bd5661c4644305e2e7d96313dfec42de425 100644
--- a/content/renderer/pepper/content_decryptor_delegate.h
+++ b/content/renderer/pepper/content_decryptor_delegate.h
@@ -9,6 +9,7 @@
#include <string>
#include "base/basictypes.h"
+#include "base/callback_helpers.h"
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
@@ -104,6 +105,34 @@ class ContentDecryptorDelegate {
const PP_DecryptedSampleInfo* sample_info);
private:
+ template <typename Callback>
+ class TrackableCallback {
+ public:
+ TrackableCallback() : id_(0u) {}
+ // TODO(xhwang): Check that no callback is pending in dtor.
dmichael (off chromium) 2014/01/03 18:44:43 That should be an easy check to add if you want it
xhwang 2014/01/07 19:53:31 I can't do this now because we didn't always satis
+ ~TrackableCallback() {};
+
+ bool Matches(uint32_t id) const { return id == id_; }
+
+ bool is_null() const { return cb_.is_null(); }
+
+ void Set(uint32_t id, const Callback& cb) {
+ DCHECK_EQ(id_, 0u);
+ DCHECK(cb_.is_null());
+ id_ = id;
+ cb_ = cb;
+ }
+
+ Callback ResetAndReturn() {
+ id_ = 0;
+ return base::ResetAndReturn(&cb_);
+ }
+
+ private:
+ uint32_t id_;
+ Callback cb_;
+ };
+
// Cancels the pending decrypt-and-decode callback for |stream_type|.
void CancelDecode(media::Decryptor::StreamType stream_type);
@@ -154,23 +183,12 @@ class ContentDecryptorDelegate {
// of request IDs.
uint32_t next_decryption_request_id_;
- uint32_t pending_audio_decrypt_request_id_;
- media::Decryptor::DecryptCB pending_audio_decrypt_cb_;
-
- uint32_t pending_video_decrypt_request_id_;
- media::Decryptor::DecryptCB pending_video_decrypt_cb_;
-
- uint32_t pending_audio_decoder_init_request_id_;
- media::Decryptor::DecoderInitCB pending_audio_decoder_init_cb_;
-
- uint32_t pending_video_decoder_init_request_id_;
- media::Decryptor::DecoderInitCB pending_video_decoder_init_cb_;
-
- uint32_t pending_audio_decode_request_id_;
- media::Decryptor::AudioDecodeCB pending_audio_decode_cb_;
-
- uint32_t pending_video_decode_request_id_;
- media::Decryptor::VideoDecodeCB pending_video_decode_cb_;
+ TrackableCallback<media::Decryptor::DecryptCB> audio_decrypt_cb_;
+ TrackableCallback<media::Decryptor::DecryptCB> video_decrypt_cb_;
+ TrackableCallback<media::Decryptor::DecoderInitCB> audio_decoder_init_cb_;
+ TrackableCallback<media::Decryptor::DecoderInitCB> video_decoder_init_cb_;
+ TrackableCallback<media::Decryptor::AudioDecodeCB> audio_decode_cb_;
+ TrackableCallback<media::Decryptor::VideoDecodeCB> video_decode_cb_;
// Cached audio and video input buffers. See MakeMediaBufferResource.
scoped_refptr<PPB_Buffer_Impl> audio_input_resource_;

Powered by Google App Engine
This is Rietveld 408576698