1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CONTENT_RENDERER_MEDIA_CRYPTO_RENDERER_CDM_MANAGER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CONTENT_RENDERER_MEDIA_CRYPTO_RENDERER_CDM_MANAGER_H_ 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <map> 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <string> 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <vector> 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/basictypes.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/common/media/cdm_messages_enums.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/renderer/render_frame_observer.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "media/base/media_keys.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "url/gurl.h" 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace blink { 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class WebFrame; 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace content { 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ProxyMediaKeys; 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Class for managing all the CDM objects in the same RenderFrame. 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class RendererCdmManager : public RenderFrameObserver { 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static const int kInvalidCdmId = 0; 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Constructs a RendererCdmManager object for the |render_frame|. 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit RendererCdmManager(RenderFrame* render_frame); 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~RendererCdmManager(); 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // RenderFrameObserver overrides. 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Encrypted media related methods. 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void InitializeCdm(int cdm_id, 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProxyMediaKeys* media_keys, 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& key_system, 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& security_origin); 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void CreateSession(int cdm_id, 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uint32 session_id, 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CdmHostMsg_CreateSession_ContentType conent_type, 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::vector<uint8>& init_data); 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void UpdateSession(int cdm_id, 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uint32 session_id, 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::vector<uint8>& response); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void ReleaseSession(int cdm_id, uint32 session_id); 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void DestroyCdm(int cdm_id); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Registers a ProxyMediaKeys object. Returns allocated CDM ID. 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int RegisterMediaKeys(ProxyMediaKeys* media_keys); 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Unregisters a ProxyMediaKeys object identified by |cdm_id|. 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void UnregisterMediaKeys(int cdm_id); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Gets the pointer to ProxyMediaKeys given the |cdm_id|. 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProxyMediaKeys* GetMediaKeys(int cdm_id); 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Message handlers. 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnSessionCreated(int cdm_id, 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uint32 session_id, 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& web_session_id); 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnSessionMessage(int cdm_id, 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uint32 session_id, 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::vector<uint8>& message, 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& destination_url); 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnSessionReady(int cdm_id, uint32 session_id); 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnSessionClosed(int cdm_id, uint32 session_id); 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnSessionError(int cdm_id, 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uint32 session_id, 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) media::MediaKeys::KeyError error_code, 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uint32 system_code); 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // CDM ID should be unique per renderer frame. 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TODO(xhwang): Use uint32 to prevent undefined overflow behavior. 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int next_cdm_id_; 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // CDM ID to ProxyMediaKeys mapping. 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::map<int, ProxyMediaKeys*> proxy_media_keys_map_; 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RendererCdmManager); 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace content 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // CONTENT_RENDERER_MEDIA_CRYPTO_RENDERER_CDM_MANAGER_H_ 91