Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / content / renderer / media / android / proxy_media_keys.cc
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 #include "content/renderer/media/android/proxy_media_keys.h"
6
7 #include <vector>
8
9 #include "base/basictypes.h"
10 #include "base/logging.h"
11 #include "content/renderer/media/android/renderer_media_player_manager.h"
12 #include "content/renderer/media/crypto/key_systems.h"
13
14 namespace content {
15
16 ProxyMediaKeys::ProxyMediaKeys(
17     RendererMediaPlayerManager* manager,
18     int media_keys_id,
19     const media::SessionCreatedCB& session_created_cb,
20     const media::SessionMessageCB& session_message_cb,
21     const media::SessionReadyCB& session_ready_cb,
22     const media::SessionClosedCB& session_closed_cb,
23     const media::SessionErrorCB& session_error_cb)
24     : manager_(manager),
25       media_keys_id_(media_keys_id),
26       session_created_cb_(session_created_cb),
27       session_message_cb_(session_message_cb),
28       session_ready_cb_(session_ready_cb),
29       session_closed_cb_(session_closed_cb),
30       session_error_cb_(session_error_cb) {
31   DCHECK(manager_);
32 }
33
34 ProxyMediaKeys::~ProxyMediaKeys() {
35   manager_->CancelAllPendingSessionCreations(media_keys_id_);
36 }
37
38 void ProxyMediaKeys::InitializeCDM(const std::string& key_system,
39                                    const GURL& frame_url) {
40 #if defined(ENABLE_PEPPER_CDMS)
41   NOTIMPLEMENTED();
42 #elif defined(OS_ANDROID)
43   std::vector<uint8> uuid = GetUUID(key_system);
44   DCHECK(!uuid.empty());
45   manager_->InitializeCDM(media_keys_id_, this, uuid, frame_url);
46 #endif
47 }
48
49 bool ProxyMediaKeys::CreateSession(uint32 session_id,
50                                    const std::string& type,
51                                    const uint8* init_data,
52                                    int init_data_length) {
53   manager_->CreateSession(
54       media_keys_id_,
55       session_id,
56       type,
57       std::vector<uint8>(init_data, init_data + init_data_length));
58   return true;
59 }
60
61 void ProxyMediaKeys::UpdateSession(uint32 session_id,
62                                    const uint8* response,
63                                    int response_length) {
64   manager_->UpdateSession(
65       media_keys_id_,
66       session_id,
67       std::vector<uint8>(response, response + response_length));
68 }
69
70 void ProxyMediaKeys::ReleaseSession(uint32 session_id) {
71   manager_->ReleaseSession(media_keys_id_, session_id);
72 }
73
74 void ProxyMediaKeys::OnSessionCreated(uint32 session_id,
75                                       const std::string& web_session_id) {
76   session_created_cb_.Run(session_id, web_session_id);
77 }
78
79 void ProxyMediaKeys::OnSessionMessage(uint32 session_id,
80                                       const std::vector<uint8>& message,
81                                       const std::string& destination_url) {
82   session_message_cb_.Run(session_id, message, destination_url);
83 }
84
85 void ProxyMediaKeys::OnSessionReady(uint32 session_id) {
86   session_ready_cb_.Run(session_id);
87 }
88
89 void ProxyMediaKeys::OnSessionClosed(uint32 session_id) {
90   session_closed_cb_.Run(session_id);
91 }
92
93 void ProxyMediaKeys::OnSessionError(uint32 session_id,
94                                     media::MediaKeys::KeyError error_code,
95                                     int system_code) {
96   session_error_cb_.Run(session_id, error_code, system_code);
97 }
98
99 }  // namespace content