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_WEBCONTENTDECRYPTIONMODULESESSION_IMPL_H_ 6 #define CONTENT_RENDERER_MEDIA_WEBCONTENTDECRYPTIONMODULESESSION_IMPL_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/callback.h" 13 #include "media/base/media_keys.h" 14 #include "third_party/WebKit/public/platform/WebContentDecryptionModuleSession.h" 15 #include "third_party/WebKit/public/platform/WebString.h" 16 17 namespace media { 18 class MediaKeys; 19 } 20 21 namespace content { 22 23 class WebContentDecryptionModuleSessionImpl 24 : public blink::WebContentDecryptionModuleSession { 25 public: 26 typedef base::Callback<void(uint32 session_id)> SessionClosedCB; 27 28 WebContentDecryptionModuleSessionImpl( 29 uint32 session_id, 30 media::MediaKeys* media_keys, 31 Client* client, 32 const SessionClosedCB& session_closed_cb); 33 virtual ~WebContentDecryptionModuleSessionImpl(); 34 35 // blink::WebContentDecryptionModuleSession implementation. 36 virtual blink::WebString sessionId() const OVERRIDE; 37 virtual void generateKeyRequest(const blink::WebString& mime_type, 38 const uint8* init_data, 39 size_t init_data_length) OVERRIDE; 40 virtual void update(const uint8* response, size_t response_length) OVERRIDE; 41 virtual void close() OVERRIDE; 42 43 // Callbacks. 44 void OnSessionCreated(const std::string& web_session_id); 45 void OnSessionMessage(const std::vector<uint8>& message, 46 const std::string& destination_url); 47 void OnSessionReady(); 48 void OnSessionClosed(); 49 void OnSessionError(media::MediaKeys::KeyError error_code, int system_code); 50 51 private: 52 // Non-owned pointers. 53 media::MediaKeys* media_keys_; 54 Client* client_; 55 56 SessionClosedCB session_closed_cb_; 57 58 // Web session ID is the app visible ID for this session generated by the CDM. 59 // This value is not set until the CDM calls OnSessionCreated(). 60 blink::WebString web_session_id_; 61 62 // Session ID is used to uniquely track this object so that CDM callbacks 63 // can get routed to the correct object. 64 const uint32 session_id_; 65 66 DISALLOW_COPY_AND_ASSIGN(WebContentDecryptionModuleSessionImpl); 67 }; 68 69 } // namespace content 70 71 #endif // CONTENT_RENDERER_MEDIA_WEBCONTENTDECRYPTIONMODULESESSION_IMPL_H_ 72