diff options
author | ddorwin@chromium.org <ddorwin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-12 20:42:19 +0000 |
---|---|---|
committer | ddorwin@chromium.org <ddorwin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-12 20:42:19 +0000 |
commit | 586d6f15802e4f1a873b2d0709d1b5f32da2bc7f (patch) | |
tree | 44888c8b7ac2efbff879ffe1dfe05b491e839acf /webkit/renderer | |
parent | 6d3c558e01e0d80281061e67399512439e7d772d (diff) | |
download | chromium_src-586d6f15802e4f1a873b2d0709d1b5f32da2bc7f.zip chromium_src-586d6f15802e4f1a873b2d0709d1b5f32da2bc7f.tar.gz chromium_src-586d6f15802e4f1a873b2d0709d1b5f32da2bc7f.tar.bz2 |
ProxyDecryptor owns destruction of the Helper Plugin.
This moves ths responsibility from from ProxyDecryptor to PpapiDecryptor.
BUG=173755
Review URL: https://chromiumcodereview.appspot.com/15724027
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205921 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/renderer')
-rw-r--r-- | webkit/renderer/media/crypto/ppapi_decryptor.cc | 5 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/ppapi_decryptor.h | 6 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/proxy_decryptor.cc | 24 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/proxy_decryptor.h | 5 |
4 files changed, 21 insertions, 19 deletions
diff --git a/webkit/renderer/media/crypto/ppapi_decryptor.cc b/webkit/renderer/media/crypto/ppapi_decryptor.cc index 341f8d3..310f9a5 100644 --- a/webkit/renderer/media/crypto/ppapi_decryptor.cc +++ b/webkit/renderer/media/crypto/ppapi_decryptor.cc @@ -28,12 +28,14 @@ PpapiDecryptor::PpapiDecryptor( const media::KeyAddedCB& key_added_cb, const media::KeyErrorCB& key_error_cb, const media::KeyMessageCB& key_message_cb, - const media::NeedKeyCB& need_key_cb) + const media::NeedKeyCB& need_key_cb, + const base::Closure& destroy_plugin_cb) : plugin_instance_(plugin_instance), key_added_cb_(key_added_cb), key_error_cb_(key_error_cb), key_message_cb_(key_message_cb), need_key_cb_(need_key_cb), + destroy_plugin_cb_(destroy_plugin_cb), plugin_cdm_delegate_(NULL), render_loop_proxy_(base::MessageLoopProxy::current()), weak_ptr_factory_(this), @@ -44,6 +46,7 @@ PpapiDecryptor::PpapiDecryptor( PpapiDecryptor::~PpapiDecryptor() { plugin_cdm_delegate_ = NULL; plugin_instance_ = NULL; + destroy_plugin_cb_.Run(); } bool PpapiDecryptor::GenerateKeyRequest(const std::string& key_system, diff --git a/webkit/renderer/media/crypto/ppapi_decryptor.h b/webkit/renderer/media/crypto/ppapi_decryptor.h index dd47cc7..6b08a82 100644 --- a/webkit/renderer/media/crypto/ppapi_decryptor.h +++ b/webkit/renderer/media/crypto/ppapi_decryptor.h @@ -36,7 +36,8 @@ class PpapiDecryptor : public media::MediaKeys, public media::Decryptor { const media::KeyAddedCB& key_added_cb, const media::KeyErrorCB& key_error_cb, const media::KeyMessageCB& key_message_cb, - const media::NeedKeyCB& need_key_cb); + const media::NeedKeyCB& need_key_cb, + const base::Closure& destroy_plugin_cb); virtual ~PpapiDecryptor(); // media::MediaKeys implementation. @@ -104,6 +105,9 @@ class PpapiDecryptor : public media::MediaKeys, public media::Decryptor { media::KeyMessageCB key_message_cb_; media::NeedKeyCB need_key_cb_; + // Called to destroy the helper plugin when this class no longer needs it. + base::Closure destroy_plugin_cb_; + webkit::ppapi::ContentDecryptorDelegate* plugin_cdm_delegate_; scoped_refptr<base::MessageLoopProxy> render_loop_proxy_; diff --git a/webkit/renderer/media/crypto/proxy_decryptor.cc b/webkit/renderer/media/crypto/proxy_decryptor.cc index 94c32a8..4bf7374 100644 --- a/webkit/renderer/media/crypto/proxy_decryptor.cc +++ b/webkit/renderer/media/crypto/proxy_decryptor.cc @@ -37,17 +37,17 @@ static scoped_refptr<webkit::ppapi::PluginInstance> CreateHelperPlugin( if (!web_plugin) return NULL; - DCHECK(!web_plugin->isPlaceholder()); // Prevented by WebKit. + DCHECK(!web_plugin->isPlaceholder()); // Prevented by Blink. // Only Pepper plugins are supported, so it must be a ppapi object. webkit::ppapi::WebPluginImpl* ppapi_plugin = static_cast<webkit::ppapi::WebPluginImpl*>(web_plugin); return ppapi_plugin->instance(); } -static void DestroyHelperPlugin( - WebKit::WebMediaPlayerClient* web_media_player_client) { - web_media_player_client->closeHelperPlugin(); +void ProxyDecryptor::DestroyHelperPlugin() { + web_media_player_client_->closeHelperPlugin(); } + #endif // defined(ENABLE_PEPPER_CDMS) ProxyDecryptor::ProxyDecryptor( @@ -59,7 +59,6 @@ ProxyDecryptor::ProxyDecryptor( const media::NeedKeyCB& need_key_cb) : web_media_player_client_(web_media_player_client), web_frame_(web_frame), - did_create_helper_plugin_(false), key_added_cb_(key_added_cb), key_error_cb_(key_error_cb), key_message_cb_(key_message_cb), @@ -73,13 +72,6 @@ ProxyDecryptor::~ProxyDecryptor() { base::AutoLock auto_lock(lock_); decryptor_.reset(); } - -#if defined(ENABLE_PEPPER_CDMS) - if (did_create_helper_plugin_) - DestroyHelperPlugin(web_media_player_client_); -#endif - - web_media_player_client_ = NULL; // We should be done using it now. } // TODO(xhwang): Support multiple decryptor notification request (e.g. from @@ -169,18 +161,20 @@ scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor( DCHECK(!plugin_type.empty()); const scoped_refptr<webkit::ppapi::PluginInstance>& plugin_instance = CreateHelperPlugin(plugin_type, web_media_player_client_, web_frame_); - did_create_helper_plugin_ = plugin_instance.get() != NULL; - if (!did_create_helper_plugin_) { + if (!plugin_instance.get()) { DVLOG(1) << "ProxyDecryptor: plugin instance creation failed."; return scoped_ptr<media::Decryptor>(); } + // The new object will call destroy_plugin_cb to destroy Helper Plugin. return scoped_ptr<media::Decryptor>(new PpapiDecryptor( plugin_instance, base::Bind(&ProxyDecryptor::KeyAdded, weak_ptr_factory_.GetWeakPtr()), base::Bind(&ProxyDecryptor::KeyError, weak_ptr_factory_.GetWeakPtr()), base::Bind(&ProxyDecryptor::KeyMessage, weak_ptr_factory_.GetWeakPtr()), - base::Bind(&ProxyDecryptor::NeedKey, weak_ptr_factory_.GetWeakPtr()))); + base::Bind(&ProxyDecryptor::NeedKey, weak_ptr_factory_.GetWeakPtr()), + base::Bind(&ProxyDecryptor::DestroyHelperPlugin, + weak_ptr_factory_.GetWeakPtr()))); } #endif // defined(ENABLE_PEPPER_CDMS) diff --git a/webkit/renderer/media/crypto/proxy_decryptor.h b/webkit/renderer/media/crypto/proxy_decryptor.h index 1580099..629f76f 100644 --- a/webkit/renderer/media/crypto/proxy_decryptor.h +++ b/webkit/renderer/media/crypto/proxy_decryptor.h @@ -55,11 +55,13 @@ class ProxyDecryptor : public media::MediaKeys { private: // Helper functions to create decryptors to handle the given |key_system|. + scoped_ptr<media::Decryptor> CreateDecryptor(const std::string& key_system); #if defined(ENABLE_PEPPER_CDMS) scoped_ptr<media::Decryptor> CreatePpapiDecryptor( const std::string& key_system); + // Callback for cleaning up a Pepper CDM. + void DestroyHelperPlugin(); #endif // defined(ENABLE_PEPPER_CDMS) - scoped_ptr<media::Decryptor> CreateDecryptor(const std::string& key_system); // Callbacks for firing key events. void KeyAdded(const std::string& key_system, const std::string& session_id); @@ -79,7 +81,6 @@ class ProxyDecryptor : public media::MediaKeys { // Needed to create the PpapiDecryptor. WebKit::WebMediaPlayerClient* web_media_player_client_; WebKit::WebFrame* web_frame_; - bool did_create_helper_plugin_; // Callbacks for firing key events. media::KeyAddedCB key_added_cb_; |