Index: content/renderer/media/crypto/proxy_decryptor.h |
diff --git a/content/renderer/media/crypto/proxy_decryptor.h b/content/renderer/media/crypto/proxy_decryptor.h |
index 668d81f4be85237f604f384a98ffbefc7140a1b7..98bfbb1d2b84b2270064718f74e5a99b066d997e 100644 |
--- a/content/renderer/media/crypto/proxy_decryptor.h |
+++ b/content/renderer/media/crypto/proxy_decryptor.h |
@@ -5,15 +5,13 @@ |
#ifndef CONTENT_RENDERER_MEDIA_CRYPTO_PROXY_DECRYPTOR_H_ |
#define CONTENT_RENDERER_MEDIA_CRYPTO_PROXY_DECRYPTOR_H_ |
-#include <map> |
-#include <set> |
#include <string> |
#include <vector> |
#include "base/basictypes.h" |
+#include "base/containers/hash_tables.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
-#include "base/synchronization/lock.h" |
#include "media/base/decryptor.h" |
#include "media/base/media_keys.h" |
@@ -33,12 +31,6 @@ class RendererCdmManager; |
// A decryptor proxy that creates a real decryptor object on demand and |
// forwards decryptor calls to it. |
// |
-// Now that the Pepper API calls use session ID to match responses with |
-// requests, this class maintains a mapping between session ID and web session |
-// ID. Callers of this class expect web session IDs in the responses. |
-// Session IDs are internal unique references to the session. Web session IDs |
-// are the CDM generated ID for the session, and are what are visible to users. |
-// |
// TODO(xhwang): Currently we don't support run-time switching among decryptor |
// objects. Fix this when needed. |
// TODO(xhwang): The ProxyDecryptor is not a Decryptor. Find a better name! |
@@ -89,31 +81,23 @@ class ProxyDecryptor { |
void CancelKeyRequest(const std::string& session_id); |
private: |
- // Session_id <-> web_session_id map. |
- typedef std::map<uint32, std::string> SessionIdMap; |
- |
// Helper function to create MediaKeys to handle the given |key_system|. |
scoped_ptr<media::MediaKeys> CreateMediaKeys(const std::string& key_system, |
const GURL& security_origin); |
// Callbacks for firing session events. |
- void OnSessionCreated(uint32 session_id, const std::string& web_session_id); |
- void OnSessionMessage(uint32 session_id, |
+ void OnSessionMessage(const std::string& web_session_id, |
const std::vector<uint8>& message, |
const GURL& default_url); |
- void OnSessionReady(uint32 session_id); |
- void OnSessionClosed(uint32 session_id); |
- void OnSessionError(uint32 session_id, |
- media::MediaKeys::KeyError error_code, |
- uint32 system_code); |
- |
- // Helper function to determine session_id for the provided |web_session_id|. |
- uint32 LookupSessionId(const std::string& web_session_id) const; |
+ void OnSessionReady(const std::string& web_session_id); |
+ void OnSessionClosed(const std::string& web_session_id); |
+ void OnSessionError(const std::string& web_session_id, |
+ media::MediaKeys::Exception exception_code, |
+ uint32 system_code, |
+ const std::string& error_message); |
- // Helper function to determine web_session_id for the provided |session_id|. |
- // The returned web_session_id is only valid on the main thread, and should be |
- // stored by copy. |
- const std::string& LookupWebSessionId(uint32 session_id) const; |
+ // Called when a session is actually created or loaded. |
+ void SetSessionId(bool persistent, const std::string& web_session_id); |
#if defined(ENABLE_PEPPER_CDMS) |
// Callback to create the Pepper plugin. |
@@ -131,14 +115,8 @@ class ProxyDecryptor { |
KeyErrorCB key_error_cb_; |
KeyMessageCB key_message_cb_; |
- // Session IDs are used to uniquely track sessions so that CDM callbacks |
- // can get mapped to the correct session ID. Session ID should be unique |
- // per renderer process for debugging purposes. |
- static uint32 next_session_id_; |
- |
- SessionIdMap sessions_; |
- |
- std::set<uint32> persistent_sessions_; |
+ // Keep track of both persistent and non-persistent sessions. |
+ base::hash_map<std::string, bool> active_sessions_; |
bool is_clear_key_; |