1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef CONTENT_RENDERER_MEDIA_WEBCONTENTDECRYPTIONMODULESESSION_IMPL_H_ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define CONTENT_RENDERER_MEDIA_WEBCONTENTDECRYPTIONMODULESESSION_IMPL_H_ 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <string> 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <vector> 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/basictypes.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/callback.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "media/base/media_keys.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/platform/WebContentDecryptionModuleSession.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/platform/WebString.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace media { 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass MediaKeys; 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content { 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass WebContentDecryptionModuleSessionImpl 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : public WebKit::WebContentDecryptionModuleSession { 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef base::Callback<void(const std::string& session_id)> SessionClosedCB; 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebContentDecryptionModuleSessionImpl( 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch media::MediaKeys* media_keys, 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Client* client, 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const SessionClosedCB& session_closed_cb); 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~WebContentDecryptionModuleSessionImpl(); 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // WebKit::WebContentDecryptionModuleSession implementation. 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual WebKit::WebString sessionId() const OVERRIDE; 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void generateKeyRequest(const WebKit::WebString& mime_type, 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const uint8* init_data, 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch size_t init_data_length) OVERRIDE; 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void update(const uint8* key, size_t key_length) OVERRIDE; 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void close() OVERRIDE; 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& session_id() const { return session_id_; } 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Callbacks. 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void KeyAdded(); 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void KeyError(media::MediaKeys::KeyError error_code, int system_code); 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void KeyMessage(const std::vector<uint8>& message, 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& destination_url); 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Non-owned pointers. 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch media::MediaKeys* media_keys_; 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Client* client_; 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SessionClosedCB session_closed_cb_; 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string session_id_; 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(WebContentDecryptionModuleSessionImpl); 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace content 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CONTENT_RENDERER_MEDIA_WEBCONTENTDECRYPTIONMODULESESSION_IMPL_H_ 65