1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_RENDERER_MEDIA_WEBCONTENTDECRYPTIONMODULE_IMPL_H_ 6#define CONTENT_RENDERER_MEDIA_WEBCONTENTDECRYPTIONMODULE_IMPL_H_ 7 8#include <string> 9 10#include "base/memory/ref_counted.h" 11#include "base/memory/scoped_ptr.h" 12#include "base/strings/string16.h" 13#include "third_party/WebKit/public/platform/WebContentDecryptionModule.h" 14 15namespace blink { 16#if defined(ENABLE_PEPPER_CDMS) 17class WebLocalFrame; 18#endif 19class WebSecurityOrigin; 20} 21 22namespace media { 23class Decryptor; 24class MediaKeys; 25} 26 27namespace content { 28 29class CdmSessionAdapter; 30#if defined(ENABLE_BROWSER_CDMS) 31class RendererCdmManager; 32#endif 33class WebContentDecryptionModuleSessionImpl; 34 35class WebContentDecryptionModuleImpl 36 : public blink::WebContentDecryptionModule { 37 public: 38 static WebContentDecryptionModuleImpl* Create( 39#if defined(ENABLE_PEPPER_CDMS) 40 blink::WebLocalFrame* frame, 41#elif defined(ENABLE_BROWSER_CDMS) 42 RendererCdmManager* manager, 43#endif 44 const blink::WebSecurityOrigin& security_origin, 45 const base::string16& key_system); 46 47 virtual ~WebContentDecryptionModuleImpl(); 48 49 // Returns the Decryptor associated with this CDM. May be NULL if no 50 // Decryptor associated with the MediaKeys object. 51 // TODO(jrummell): Figure out lifetimes, as WMPI may still use the decryptor 52 // after WebContentDecryptionModule is freed. http://crbug.com/330324 53 media::Decryptor* GetDecryptor(); 54 55#if defined(ENABLE_BROWSER_CDMS) 56 // Returns the CDM ID associated with this object. May be kInvalidCdmId if no 57 // CDM ID is associated, such as when Clear Key is used. 58 int GetCdmId() const; 59#endif // defined(ENABLE_BROWSER_CDMS) 60 61 // blink::WebContentDecryptionModule implementation. 62 virtual blink::WebContentDecryptionModuleSession* createSession(); 63 // TODO(jrummell): Remove this method once blink updated. 64 virtual blink::WebContentDecryptionModuleSession* createSession( 65 blink::WebContentDecryptionModuleSession::Client* client); 66 67 virtual void setServerCertificate( 68 const uint8* server_certificate, 69 size_t server_certificate_length, 70 blink::WebContentDecryptionModuleResult result); 71 72 private: 73 // Takes reference to |adapter|. 74 WebContentDecryptionModuleImpl(scoped_refptr<CdmSessionAdapter> adapter); 75 76 scoped_refptr<CdmSessionAdapter> adapter_; 77 78 DISALLOW_COPY_AND_ASSIGN(WebContentDecryptionModuleImpl); 79}; 80 81// Allow typecasting from blink type as this is the only implementation. 82inline WebContentDecryptionModuleImpl* ToWebContentDecryptionModuleImpl( 83 blink::WebContentDecryptionModule* cdm) { 84 return static_cast<WebContentDecryptionModuleImpl*>(cdm); 85} 86 87} // namespace content 88 89#endif // CONTENT_RENDERER_MEDIA_WEBCONTENTDECRYPTIONMODULE_IMPL_H_ 90