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.
5 #ifndef MEDIA_MOJO_SERVICES_MOJO_CDM_SERVICE_H_
6 #define MEDIA_MOJO_SERVICES_MOJO_CDM_SERVICE_H_
8 #include "base/callback.h"
9 #include "base/macros.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/weak_ptr.h"
12 #include "media/base/media_keys.h"
13 #include "media/mojo/interfaces/content_decryption_module.mojom.h"
14 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_impl.h"
18 // A mojo::ContentDecryptionModule implementation backed by a media::MediaKeys.
20 : public mojo::InterfaceImpl
<mojo::ContentDecryptionModule
> {
22 MojoCdmService(const mojo::String
& key_system
);
23 ~MojoCdmService() final
;
25 // mojo::ContentDecryptionModule implementation.
26 void SetClient(mojo::ContentDecryptionModuleClientPtr client
) final
;
27 void SetServerCertificate(
28 mojo::Array
<uint8_t> certificate_data
,
29 const mojo::Callback
<void(mojo::CdmPromiseResultPtr
)>& callback
) final
;
30 void CreateSessionAndGenerateRequest(
31 mojo::ContentDecryptionModule::SessionType session_type
,
32 mojo::ContentDecryptionModule::InitDataType init_data_type
,
33 mojo::Array
<uint8_t> init_data
,
34 const mojo::Callback
<void(mojo::CdmPromiseResultPtr
, mojo::String
)>&
36 void LoadSession(mojo::ContentDecryptionModule::SessionType session_type
,
37 const mojo::String
& session_id
,
38 const mojo::Callback
<void(mojo::CdmPromiseResultPtr
,
39 mojo::String
)>& callback
) final
;
41 const mojo::String
& session_id
,
42 mojo::Array
<uint8_t> response
,
43 const mojo::Callback
<void(mojo::CdmPromiseResultPtr
)>& callback
) final
;
45 const mojo::String
& session_id
,
46 const mojo::Callback
<void(mojo::CdmPromiseResultPtr
)>& callback
) final
;
48 const mojo::String
& session_id
,
49 const mojo::Callback
<void(mojo::CdmPromiseResultPtr
)>& callback
) final
;
50 void GetCdmContext(int32_t cdm_id
,
51 mojo::InterfaceRequest
<mojo::Decryptor
> decryptor
) final
;
54 // Callbacks for firing session events.
55 void OnSessionMessage(const std::string
& session_id
,
56 MediaKeys::MessageType message_type
,
57 const std::vector
<uint8_t>& message
,
58 const GURL
& legacy_destination_url
);
59 void OnSessionKeysChange(const std::string
& session_id
,
60 bool has_additional_usable_key
,
61 CdmKeysInfo keys_info
);
62 void OnSessionExpirationUpdate(const std::string
& session_id
,
63 const base::Time
& new_expiry_time
);
64 void OnSessionClosed(const std::string
& session_id
);
65 void OnLegacySessionError(const std::string
& session_id
,
66 MediaKeys::Exception exception
,
68 const std::string
& error_message
);
70 scoped_ptr
<MediaKeys
> cdm_
;
72 mojo::ContentDecryptionModuleClientPtr client_
;
74 base::WeakPtr
<MojoCdmService
> weak_this_
;
75 base::WeakPtrFactory
<MojoCdmService
> weak_factory_
;
77 DISALLOW_COPY_AND_ASSIGN(MojoCdmService
);
82 #endif // MEDIA_MOJO_SERVICES_MOJO_CDM_SERVICE_H_