Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(530)

Side by Side Diff: media/mojo/services/mojo_cdm_service.cc

Issue 763883006: Add Mojo CDM Service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments addressed Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 "media/mojo/services/mojo_cdm_service.h"
6
7 #include "base/bind.h"
8 #include "media/base/key_systems.h"
9 #include "media/cdm/aes_decryptor.h"
10 #include "media/mojo/services/mojo_cdm_promise.h"
11 #include "mojo/common/common_type_converters.h"
12
13 namespace media {
14
15 typedef MojoCdmPromise<> SimpleMojoCdmPromise;
jrummell 2014/12/18 00:02:12 Any reason not to put these in mojo_cdm_promise.h?
xhwang 2014/12/18 17:04:59 I want to keep mojo_cdm_promise.h generic/clean. I
16 typedef MojoCdmPromise<std::string> NewSessionMojoCdmPromise;
17 typedef MojoCdmPromise<std::vector<std::vector<uint8_t>>> KeyIdsMojoCdmPromise;
18
19 MojoCdmService::MojoCdmService(const mojo::String& key_system)
20 : weak_factory_(this) {
21 base::WeakPtr<MojoCdmService> weak_this = weak_factory_.GetWeakPtr();
22 if (CanUseAesDecryptor(key_system)) {
23 cdm_.reset(new AesDecryptor(
24 base::Bind(&MojoCdmService::OnSessionMessage, weak_this),
25 base::Bind(&MojoCdmService::OnSessionClosed, weak_this),
26 base::Bind(&MojoCdmService::OnSessionKeysChange, weak_this)));
27 }
28
29 // TODO(xhwang): Check key system support in the app.
30 NOTREACHED();
31 }
32
33 MojoCdmService::~MojoCdmService() {
34 }
35
36 // mojo::MediaRenderer implementation.
37 void MojoCdmService::SetServerCertificate(
38 mojo::Array<uint8_t> certificate_data,
39 const mojo::Callback<void(mojo::CdmPromiseResultPtr)>& callback) {
40 const std::vector<uint8_t>& certificate_data_vector =
41 certificate_data.storage();
42 cdm_->SetServerCertificate(
43 certificate_data_vector.empty() ? nullptr : &certificate_data_vector[0],
jrummell 2014/12/18 00:02:12 Now that we support C++11, can you just use .data(
jamesr 2014/12/18 00:39:22 No. std::vector::data() is a C++11 standard librar
xhwang 2014/12/18 17:04:59 Acknowledged.
44 certificate_data_vector.size(),
45 scoped_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback)));
46 }
47
48 void MojoCdmService::CreateSession(
49 const mojo::String& init_data_type,
50 mojo::Array<uint8_t> init_data,
51 mojo::ContentDecryptionModule::SessionType session_type,
52 const mojo::Callback<void(mojo::CdmPromiseResultPtr, mojo::String)>&
53 callback) {
54 const std::vector<uint8_t>& init_data_vector = init_data.storage();
55 cdm_->CreateSession(
56 init_data_type.To<std::string>(),
57 init_data_vector.empty() ? nullptr : &init_data_vector[0],
58 init_data_vector.size(),
59 static_cast<MediaKeys::SessionType>(session_type),
60 scoped_ptr<NewSessionCdmPromise>(new NewSessionMojoCdmPromise(callback)));
61 }
62
63 void MojoCdmService::LoadSession(
64 const mojo::String& session_id,
65 const mojo::Callback<void(mojo::CdmPromiseResultPtr, mojo::String)>&
66 callback) {
67 cdm_->LoadSession(
68 session_id.To<std::string>(),
69 scoped_ptr<NewSessionCdmPromise>(new NewSessionMojoCdmPromise(callback)));
70 }
71
72 void MojoCdmService::UpdateSession(
73 const mojo::String& session_id,
74 mojo::Array<uint8_t> response,
75 const mojo::Callback<void(mojo::CdmPromiseResultPtr)>& callback) {
76 const std::vector<uint8_t>& response_vector = response.storage();
77 cdm_->UpdateSession(
78 session_id.To<std::string>(),
79 response_vector.empty() ? nullptr : &response_vector[0],
80 response_vector.size(),
81 scoped_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback)));
82 }
83
84 void MojoCdmService::CloseSession(
85 const mojo::String& session_id,
86 const mojo::Callback<void(mojo::CdmPromiseResultPtr)>& callback) {
87 cdm_->CloseSession(
88 session_id.To<std::string>(),
89 scoped_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback)));
90 }
91
92 void MojoCdmService::RemoveSession(
93 const mojo::String& session_id,
94 const mojo::Callback<void(mojo::CdmPromiseResultPtr)>& callback) {
95 cdm_->RemoveSession(
96 session_id.To<std::string>(),
97 scoped_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback)));
98 }
99
100 void MojoCdmService::GetUsableKeyIds(
101 const mojo::String& session_id,
102 const mojo::Callback<void(mojo::CdmPromiseResultPtr,
103 mojo::Array<mojo::Array<uint8_t>>)>& callback) {
104 cdm_->GetUsableKeyIds(
105 session_id.To<std::string>(),
106 scoped_ptr<KeyIdsPromise>(new KeyIdsMojoCdmPromise(callback)));
107 }
108
109 void MojoCdmService::GetCdmContext(
110 int32_t cdm_id,
111 mojo::InterfaceRequest<mojo::Decryptor> decryptor) {
112 NOTIMPLEMENTED();
113 }
114
115 void MojoCdmService::OnSessionMessage(const std::string& session_id,
116 const std::vector<uint8>& message,
117 const GURL& destination_url) {
118 client()->OnSessionMessage(session_id, mojo::Array<uint8_t>::From(message),
119 mojo::String::From(destination_url));
120 }
121
122 void MojoCdmService::OnSessionKeysChange(const std::string& session_id,
123 bool has_additional_usable_key) {
124 client()->OnSessionKeysChange(session_id, has_additional_usable_key);
125 }
126
127 void MojoCdmService::OnSessionExpirationUpdate(
128 const std::string& session_id,
129 const base::Time& new_expiry_time) {
130 client()->OnSessionExpirationUpdate(session_id,
131 new_expiry_time.ToInternalValue());
132 }
133
134 void MojoCdmService::OnSessionReady(const std::string& session_id) {
135 client()->OnSessionReady(session_id);
136 }
137
138 void MojoCdmService::OnSessionClosed(const std::string& session_id) {
139 client()->OnSessionClosed(session_id);
140 }
141
142 void MojoCdmService::OnSessionError(const std::string& session_id,
143 MediaKeys::Exception exception,
144 uint32 system_code,
145 const std::string& error_message) {
146 client()->OnSessionError(session_id,
147 static_cast<mojo::CdmException>(exception),
148 system_code, error_message);
149 }
150
151 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698