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