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 15 namespace blink { 16 #if defined(ENABLE_PEPPER_CDMS) 17 class WebLocalFrame; 18 #endif 19 class WebSecurityOrigin; 20 } 21 22 namespace media { 23 class Decryptor; 24 class MediaKeys; 25 } 26 27 namespace content { 28 29 class CdmSessionAdapter; 30 #if defined(ENABLE_BROWSER_CDMS) 31 class RendererCdmManager; 32 #endif 33 class WebContentDecryptionModuleSessionImpl; 34 35 class 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. 82 inline 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