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 blink::WebContentDecryptionModuleSession::Client* client); 64 65 private: 66 // Takes reference to |adapter|. 67 WebContentDecryptionModuleImpl(scoped_refptr<CdmSessionAdapter> adapter); 68 69 scoped_refptr<CdmSessionAdapter> adapter_; 70 71 DISALLOW_COPY_AND_ASSIGN(WebContentDecryptionModuleImpl); 72 }; 73 74 // Allow typecasting from blink type as this is the only implementation. 75 inline WebContentDecryptionModuleImpl* ToWebContentDecryptionModuleImpl( 76 blink::WebContentDecryptionModule* cdm) { 77 return static_cast<WebContentDecryptionModuleImpl*>(cdm); 78 } 79 80 } // namespace content 81 82 #endif // CONTENT_RENDERER_MEDIA_WEBCONTENTDECRYPTIONMODULE_IMPL_H_ 83