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

Side by Side Diff: media/remoting/rpc/rpc.h

Issue 2261503002: Define remote playback proto buffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months 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 2016 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 #ifndef MEDIA_REMOTING_RPC_RPC_H_
6 #define MEDIA_REMOTING_RPC_RPC_H_
7
8 #include <cstdint>
9 #include <string>
10 #include <vector>
11
12 #include "base/macros.h"
13 #include "base/memory/ref_counted.h"
14 #include "media/base/audio_decoder_config.h"
15 #include "media/base/cdm_config.h"
16 #include "media/base/cdm_key_information.h"
17 #include "media/base/demuxer_stream.h"
18 #include "media/base/eme_constants.h"
19 #include "media/base/media_keys.h"
20 #include "media/base/video_decoder_config.h"
21 #include "media/remoting/remoting_rpc_message.pb.h"
22
23 namespace media {
24 namespace remoting {
25
26 class CdmPromiseResult;
27
28 namespace internal {
29
30 template <class T>
31 inline bool ProtoMessageGet(const pb::RpcMessage& message, T* value);
32
33 template <class T>
34 inline void ProtoMessageSet(pb::RpcMessage* message, const T& value);
35
36 template <>
37 inline bool ProtoMessageGet<bool>(const pb::RpcMessage& message, bool* value) {
38 if (!message.has_boolean_value())
39 return false;
40 *value = message.boolean_value();
41 return true;
42 }
43
44 template <>
45 inline bool ProtoMessageGet<int>(const pb::RpcMessage& message, int* value) {
46 if (!message.has_integer_value())
47 return false;
48 *value = message.integer_value();
49 return true;
50 }
51
52 template <>
53 inline bool ProtoMessageGet<double>(const pb::RpcMessage& message,
54 double* value) {
55 if (!message.has_double_value())
56 return false;
57 *value = message.double_value();
58 return true;
59 }
60
61 template <>
62 inline bool ProtoMessageGet<std::string>(const pb::RpcMessage& message,
63 std::string* value) {
64 if (!message.has_string_value())
65 return false;
66 *value = message.string_value();
67 return true;
68 }
69
70 template <>
71 inline void ProtoMessageSet<bool>(pb::RpcMessage* message, const bool& value) {
72 message->set_boolean_value(value);
73 }
74
75 template <>
76 inline void ProtoMessageSet<int>(pb::RpcMessage* message, const int& value) {
77 message->set_integer_value(value);
78 }
79
80 template <>
81 inline void ProtoMessageSet<double>(pb::RpcMessage* message,
82 const double& value) {
83 message->set_double_value(value);
84 }
85
86 template <>
87 inline void ProtoMessageSet<std::string>(pb::RpcMessage* message,
88 const std::string& value) {
89 message->set_string_value(value);
90 }
91
92 bool CdmPromiseFromMessage(const pb::CdmPromise& promise_message,
93 CdmPromiseResult* result,
94 std::string* session_id);
95
96 void CdmPromiseToMessage(pb::CdmPromise* promise_message,
97 const CdmPromiseResult& result,
98 const std::string& session_id);
99
100 } // namespace internal
101
102 class Rpc : public base::RefCountedThreadSafe<Rpc> {
103 public:
104 static const int kInvalidHandle = -1;
105 static const int kReceiverHandle = 0;
106
107 static scoped_refptr<Rpc> FromMessage(const std::string& proto);
108
109 int handle() const { return handle_; }
110
111 std::string ToMessage() const;
112
113 virtual pb::RpcProc GetProc() const = 0;
114
115 protected:
116 friend class base::RefCountedThreadSafe<Rpc>;
117 explicit Rpc(int handle);
118 virtual ~Rpc();
119
120 virtual void ToMessageInternal(pb::RpcMessage* rpc) const = 0;
121
122 private:
123 int handle_;
124
125 DISALLOW_COPY_AND_ASSIGN(Rpc);
126 };
127
128 template <typename T, pb::RpcProc Proc>
129 class SimpleRpc : public Rpc {
130 public:
131 SimpleRpc(int handle, T value) : Rpc(handle), value_(value) {}
132
133 static scoped_refptr<SimpleRpc> FromRpcMessage(const pb::RpcMessage* rpc) {
134 T value;
135 if (!internal::ProtoMessageGet(*rpc, &value)) {
136 LOG(ERROR) << "Not valid proto buffer message";
137 return nullptr;
138 }
139
140 return new SimpleRpc(rpc->handle(), value);
141 }
142
143 const T& value() const { return value_; }
144
145 pb::RpcProc GetProc() const override { return Proc; }
146
147 protected:
148 void ToMessageInternal(pb::RpcMessage* rpc) const override {
149 internal::ProtoMessageSet(rpc, value_);
150 }
151
152 private:
153 ~SimpleRpc() override = default;
154 T value_;
155 };
156
157 template <pb::RpcProc Proc>
158 class NullRpc : public Rpc {
159 public:
160 explicit NullRpc(int handle) : Rpc(handle) {}
161
162 static scoped_refptr<NullRpc> FromRpcMessage(const pb::RpcMessage* rpc) {
163 return new NullRpc(rpc->handle());
164 }
165
166 pb::RpcProc GetProc() const override { return Proc; }
167
168 protected:
169 void ToMessageInternal(pb::RpcMessage* rpc) const override {}
170
171 private:
172 ~NullRpc() override = default;
173 };
174
175 //==============================================================================
176 using AcquireRendererRpc = SimpleRpc<int, pb::RPC_ACQUIRE_RENDERER>;
177 using AcquireRendererDoneRpc = SimpleRpc<int, pb::RPC_ACQUIRE_RENDERER_DONE>;
178 using AcquireCdmRpc = SimpleRpc<int, pb::RPC_ACQUIRE_CDM>;
179 using AcquireCdmDoneRpc = SimpleRpc<int, pb::RPC_ACQUIRE_CDM>;
180
181 //==============================================================================
182 class RendererInitializeRpc : public Rpc {
183 public:
184 RendererInitializeRpc(int handle,
185 int client_handle,
186 int audio_demuxer_handle,
187 int video_demuxer_handle,
188 int callback_handle);
189
190 static scoped_refptr<RendererInitializeRpc> FromRpcMessage(
191 const pb::RpcMessage* rpc);
192
193 int client_handle() const { return client_handle_; }
194 int audio_demuxer_handle() const { return audio_demuxer_handle_; }
195 int video_demuxer_handle() const { return video_demuxer_handle_; }
196 int callback_handle() const { return callback_handle_; }
197
198 pb::RpcProc GetProc() const override;
199
200 protected:
201 void ToMessageInternal(pb::RpcMessage* rpc) const override;
202
203 private:
204 ~RendererInitializeRpc() override;
205 int client_handle_;
206 int audio_demuxer_handle_;
207 int video_demuxer_handle_;
208 int callback_handle_;
209 };
210
211 //==============================================================================
212 using RendererFlushRpc = SimpleRpc<int, pb::RPC_R_FLUSH>;
213
214 //==============================================================================
215 class RendererStartPlayingFromRpc : public Rpc {
216 public:
217 RendererStartPlayingFromRpc(int handle, int64_t time_delta_usec);
218
219 static scoped_refptr<RendererStartPlayingFromRpc> FromRpcMessage(
220 const pb::RpcMessage* rpc);
221
222 int64_t time_delta_usec() const { return time_delta_usec_; }
223
224 pb::RpcProc GetProc() const override;
225
226 protected:
227 void ToMessageInternal(pb::RpcMessage* rpc) const override;
228
229 private:
230 ~RendererStartPlayingFromRpc() override;
231 int64_t time_delta_usec_;
232 };
233
234 //==============================================================================
235 using RendererSetPlaybackRateRpc = SimpleRpc<double, pb::RPC_R_SETPLAYBACKRATE>;
236 using RendererSetVolumeRpc = SimpleRpc<double, pb::RPC_R_SETVOLUME>;
237
238 //==============================================================================
239 class RendererSetCdmRpc : public Rpc {
240 public:
241 RendererSetCdmRpc(int handle, int cdm_id, int callback_handle);
242
243 static scoped_refptr<RendererSetCdmRpc> FromRpcMessage(
244 const pb::RpcMessage* rpc);
245
246 int cdm_id() const { return cdm_id_; }
247 int callback_handle() const { return callback_handle_; }
248
249 pb::RpcProc GetProc() const override;
250
251 protected:
252 void ToMessageInternal(pb::RpcMessage* rpc) const override;
253
254 private:
255 ~RendererSetCdmRpc() override;
256 int cdm_id_;
257 int callback_handle_;
258 };
259
260 //==============================================================================
261 using RendererInitializeCallbackRpc =
262 SimpleRpc<bool, pb::RPC_R_INITIALIZE_CALLBACK>;
263 using RendererFlushCallbackRpc = NullRpc<pb::RPC_R_FLUSH_CALLBACK>;
264 using RendererSetCdmCallbackRpc = SimpleRpc<bool, pb::RPC_R_SETCDM_CALLBACK>;
265
266 //==============================================================================
267 class RendererClientOnTimeUpdateRpc : public Rpc {
268 public:
269 RendererClientOnTimeUpdateRpc(int handle,
270 int64_t time_usec,
271 int64_t max_time_usec);
272
273 static scoped_refptr<RendererClientOnTimeUpdateRpc> FromRpcMessage(
274 const pb::RpcMessage* rpc);
275
276 int64_t time_usec() const { return time_usec_; }
277 int64_t max_time_usec() const { return max_time_usec_; }
278
279 pb::RpcProc GetProc() const override;
280
281 protected:
282 void ToMessageInternal(pb::RpcMessage* rpc) const override;
283
284 private:
285 ~RendererClientOnTimeUpdateRpc() override;
286 int64_t time_usec_;
287 int64_t max_time_usec_;
288 };
289
290 //==============================================================================
291 using RendererClientOnBufferingStateChangeRpc =
292 SimpleRpc<int, pb::RPC_RC_ONBUFFERINGSTATECHANGE>;
293 using RendererClientOnEndedRpc = NullRpc<pb::RPC_RC_ONENDED>;
294 using RendererClientOnErrorRpc = NullRpc<pb::RPC_RC_ONERROR>;
295
296 //==============================================================================
297 class RendererClientOnVideoNaturalSizeChangeRpc : public Rpc {
298 public:
299 RendererClientOnVideoNaturalSizeChangeRpc(int handle, const gfx::Size& size);
300
301 static scoped_refptr<RendererClientOnVideoNaturalSizeChangeRpc>
302 FromRpcMessage(const pb::RpcMessage* rpc);
303
304 const gfx::Size& size() const { return size_; }
305
306 pb::RpcProc GetProc() const override;
307
308 protected:
309 void ToMessageInternal(pb::RpcMessage* rpc) const override;
310
311 private:
312 ~RendererClientOnVideoNaturalSizeChangeRpc() override;
313 gfx::Size size_;
314 };
315
316 //==============================================================================
317 using RendererClientOnVideoOpacityChangeRpc =
318 SimpleRpc<bool, pb::RPC_RC_ONVIDEOOPACITYCHANGE>;
319 using DemuxerStreamInitializeRpc = SimpleRpc<int, pb::RPC_DS_INITIALIZE>;
320 using DemuxerStreamEnableBitstreamConverterRpc =
321 NullRpc<pb::RPC_DS_ENABLEBITSTREAMCONVERTER>;
322
323 //==============================================================================
324 class DemuxerStreamReadUntilRpc : public Rpc {
325 public:
326 DemuxerStreamReadUntilRpc(int handle, uint32_t frame_id, int callback_handle);
327
328 static scoped_refptr<DemuxerStreamReadUntilRpc> FromRpcMessage(
329 const pb::RpcMessage* rpc);
330
331 uint32_t frame_id() const { return frame_id_; }
332 int callback_handle() const { return callback_handle_; }
333
334 pb::RpcProc GetProc() const override;
335
336 protected:
337 void ToMessageInternal(pb::RpcMessage* rpc) const override;
338
339 private:
340 ~DemuxerStreamReadUntilRpc() override;
341 uint32_t frame_id_;
342 int callback_handle_;
343 };
344
345 class DemuxerStreamInitializeCallbackRpc : public Rpc {
346 public:
347 DemuxerStreamInitializeCallbackRpc(
348 int handle,
349 ::media::DemuxerStream::Type type,
350 const ::media::AudioDecoderConfig& audio_config,
351 const ::media::VideoDecoderConfig& video_config);
352
353 static scoped_refptr<DemuxerStreamInitializeCallbackRpc> FromRpcMessage(
354 const pb::RpcMessage* rpc);
355
356 ::media::DemuxerStream::Type type() const { return type_; }
357 const ::media::AudioDecoderConfig& audio_config() const {
358 return audio_config_;
359 }
360 const ::media::VideoDecoderConfig& video_config() const {
361 return video_config_;
362 }
363
364 pb::RpcProc GetProc() const override;
365
366 protected:
367 void ToMessageInternal(pb::RpcMessage* rpc) const override;
368
369 private:
370 ~DemuxerStreamInitializeCallbackRpc() override;
371 ::media::DemuxerStream::Type type_;
372 ::media::AudioDecoderConfig audio_config_;
373 ::media::VideoDecoderConfig video_config_;
374 };
375
376 class DemuxerStreamReadUntilCallbackRpc : public Rpc {
377 public:
378 DemuxerStreamReadUntilCallbackRpc(
379 int handle,
380 uint32_t frame_id,
381 ::media::DemuxerStream::Status status,
382 const ::media::AudioDecoderConfig& audio_config,
383 const ::media::VideoDecoderConfig& video_config);
384
385 static scoped_refptr<DemuxerStreamReadUntilCallbackRpc> FromRpcMessage(
386 const pb::RpcMessage* rpc);
387
388 uint32_t frame_id() const { return frame_id_; }
389 ::media::DemuxerStream::Status status() const { return status_; }
390
391 const ::media::AudioDecoderConfig& audio_config() const {
392 return audio_config_;
393 }
394 const ::media::VideoDecoderConfig& video_config() const {
395 return video_config_;
396 }
397
398 pb::RpcProc GetProc() const override;
399
400 protected:
401 void ToMessageInternal(pb::RpcMessage* rpc) const override;
402
403 private:
404 ~DemuxerStreamReadUntilCallbackRpc() override;
405 uint32_t frame_id_;
406 ::media::DemuxerStream::Status status_;
407 ::media::AudioDecoderConfig audio_config_;
408 ::media::VideoDecoderConfig video_config_;
409 };
410
411 typedef SimpleRpc<int, pb::RPC_CDM_SETCLIENT> CdmSetClientRpc;
412
413 class CdmInitializeRpc : public Rpc {
414 public:
415 CdmInitializeRpc(int handle,
416 const std::string& key_system,
417 const std::string& security_origin,
418 const ::media::CdmConfig& cdm_config,
419 int callback_handle);
420
421 static scoped_refptr<CdmInitializeRpc> FromRpcMessage(
422 const pb::RpcMessage* rpc);
423
424 const std::string& key_system() const { return key_system_; }
425 const std::string& security_origin() const { return security_origin_; }
426 const ::media::CdmConfig& cdm_config() const { return cdm_config_; }
427 int callback_handle() const { return callback_handle_; }
428
429 pb::RpcProc GetProc() const override;
430
431 protected:
432 void ToMessageInternal(pb::RpcMessage* rpc) const override;
433
434 private:
435 ~CdmInitializeRpc() override;
436 std::string key_system_;
437 std::string security_origin_;
438 ::media::CdmConfig cdm_config_;
439 int callback_handle_;
440 };
441
442 class CdmSetServerCertificateRpc : public Rpc {
443 public:
444 CdmSetServerCertificateRpc(int handle,
445 const uint8_t* certificate_data,
446 size_t certificate_data_size,
447 int callback_handle);
448
449 static scoped_refptr<CdmSetServerCertificateRpc> FromRpcMessage(
450 const pb::RpcMessage* rpc);
451
452 const uint8_t* certificate_data() const {
453 return certificate_data_.empty() ? nullptr : certificate_data_.data();
454 }
455 size_t certificate_data_size() const { return certificate_data_.size(); }
456 int callback_handle() const { return callback_handle_; }
457
458 pb::RpcProc GetProc() const override;
459
460 protected:
461 void ToMessageInternal(pb::RpcMessage* rpc) const override;
462
463 private:
464 ~CdmSetServerCertificateRpc() override;
465 std::vector<uint8_t> certificate_data_;
466 int callback_handle_;
467 };
468
469 class CdmCreateSessionAndGenerateRequestRpc : public Rpc {
470 public:
471 CdmCreateSessionAndGenerateRequestRpc(
472 int handle,
473 ::media::MediaKeys::SessionType session_type,
474 ::media::EmeInitDataType init_data_type,
475 const uint8_t* init_data,
476 size_t init_data_size,
477 int callback_handle);
478
479 static scoped_refptr<CdmCreateSessionAndGenerateRequestRpc> FromRpcMessage(
480 const pb::RpcMessage* rpc);
481
482 ::media::MediaKeys::SessionType session_type() const { return session_type_; }
483 ::media::EmeInitDataType init_data_type() const { return init_data_type_; }
484 const uint8_t* init_data() const {
485 return init_data_.empty() ? nullptr : init_data_.data();
486 }
487 size_t init_data_size() const { return init_data_.size(); }
488 int callback_handle() const { return callback_handle_; }
489
490 pb::RpcProc GetProc() const override;
491
492 protected:
493 void ToMessageInternal(pb::RpcMessage* rpc) const override;
494
495 private:
496 ~CdmCreateSessionAndGenerateRequestRpc() override;
497 ::media::MediaKeys::SessionType session_type_;
498 ::media::EmeInitDataType init_data_type_;
499 std::vector<uint8_t> init_data_;
500 int callback_handle_;
501 };
502
503 class CdmLoadSessionRpc : public Rpc {
504 public:
505 CdmLoadSessionRpc(int handle,
506 ::media::MediaKeys::SessionType session_type,
507 const std::string& session_id,
508 int callback_handle);
509
510 static scoped_refptr<CdmLoadSessionRpc> FromRpcMessage(
511 const pb::RpcMessage* rpc);
512
513 ::media::MediaKeys::SessionType session_type() const { return session_type_; }
514 const std::string& session_id() const { return session_id_; }
515 int callback_handle() const { return callback_handle_; }
516
517 pb::RpcProc GetProc() const override;
518
519 protected:
520 void ToMessageInternal(pb::RpcMessage* rpc) const override;
521
522 private:
523 ~CdmLoadSessionRpc() override;
524 ::media::MediaKeys::SessionType session_type_;
525 std::string session_id_;
526 int callback_handle_;
527 };
528
529 class CdmUpdateSessionRpc : public Rpc {
530 public:
531 CdmUpdateSessionRpc(int handle,
532 const std::string& session_id,
533 const uint8_t* response,
534 size_t response_size,
535 int callback_handle);
536
537 static scoped_refptr<CdmUpdateSessionRpc> FromRpcMessage(
538 const pb::RpcMessage* rpc);
539
540 const std::string& session_id() const { return session_id_; }
541 const uint8_t* response() const {
542 return response_.empty() ? nullptr : response_.data();
543 }
544 size_t response_size() const { return response_.size(); }
545 int callback_handle() const { return callback_handle_; }
546
547 pb::RpcProc GetProc() const override;
548
549 protected:
550 void ToMessageInternal(pb::RpcMessage* rpc) const override;
551
552 private:
553 ~CdmUpdateSessionRpc() override;
554 std::string session_id_;
555 std::vector<uint8_t> response_;
556 int callback_handle_;
557 };
558
559 class CdmCloseSessionRpc : public Rpc {
560 public:
561 CdmCloseSessionRpc(int handle,
562 const std::string& session_id,
563 int callback_handle);
564
565 static scoped_refptr<CdmCloseSessionRpc> FromRpcMessage(
566 const pb::RpcMessage* rpc);
567
568 const std::string& session_id() const { return session_id_; }
569 int callback_handle() const { return callback_handle_; }
570
571 pb::RpcProc GetProc() const override;
572
573 protected:
574 void ToMessageInternal(pb::RpcMessage* rpc) const override;
575
576 private:
577 ~CdmCloseSessionRpc() override;
578 std::string session_id_;
579 int callback_handle_;
580 };
581
582 class CdmRemoveSessionRpc : public Rpc {
583 public:
584 CdmRemoveSessionRpc(int handle,
585 const std::string& session_id,
586 int callback_handle);
587
588 static scoped_refptr<CdmRemoveSessionRpc> FromRpcMessage(
589 const pb::RpcMessage* rpc);
590
591 const std::string& session_id() const { return session_id_; }
592 int callback_handle() const { return callback_handle_; }
593
594 pb::RpcProc GetProc() const override;
595
596 protected:
597 void ToMessageInternal(pb::RpcMessage* rpc) const override;
598
599 private:
600 ~CdmRemoveSessionRpc() override;
601 std::string session_id_;
602 int callback_handle_;
603 };
604
605 class CdmPromiseResult {
606 public:
607 CdmPromiseResult();
608 CdmPromiseResult(::media::MediaKeys::Exception exception,
609 uint32_t system_code,
610 std::string error_message);
611 CdmPromiseResult(const CdmPromiseResult& other);
612 ~CdmPromiseResult();
613
614 static CdmPromiseResult SuccessResult();
615
616 bool success() const { return success_; }
617 ::media::MediaKeys::Exception exception() const { return exception_; }
618 uint32_t system_code() const { return system_code_; }
619 const std::string& error_message() const { return error_message_; }
620
621 private:
622 bool success_;
623 ::media::MediaKeys::Exception exception_;
624 uint32_t system_code_;
625 std::string error_message_;
626 };
627
628 template <pb::RpcProc Proc>
629 class CdmPromiseCallbackRpc : public Rpc {
630 public:
631 CdmPromiseCallbackRpc(int handle, const CdmPromiseResult& result)
632 : Rpc(handle), result_(result) {}
633
634 static scoped_refptr<CdmPromiseCallbackRpc> FromRpcMessage(
635 const pb::RpcMessage* rpc) {
636 CdmPromiseResult result;
637 DCHECK(rpc->has_cdm_promise_rpc());
638 const pb::CdmPromise promise_message = rpc->cdm_promise_rpc();
639 if (!internal::CdmPromiseFromMessage(promise_message, &result, nullptr))
640 return nullptr;
641 return new CdmPromiseCallbackRpc(rpc->handle(), result);
642 }
643
644 const CdmPromiseResult& result() const { return result_; }
645
646 pb::RpcProc GetProc() const override { return Proc; }
647
648 protected:
649 ~CdmPromiseCallbackRpc() = default;
650 void ToMessageInternal(pb::RpcMessage* rpc) const override {
651 pb::CdmPromise* promise_message = rpc->mutable_cdm_promise_rpc();
652 internal::CdmPromiseToMessage(promise_message, result_, "");
653 }
654
655 private:
656 CdmPromiseResult result_;
657 };
658
659 template <pb::RpcProc Proc>
660 class CdmPromiseWithSessionIdCallbackRpc : public CdmPromiseCallbackRpc<Proc> {
661 public:
662 CdmPromiseWithSessionIdCallbackRpc(int handle,
663 const CdmPromiseResult& result,
664 const std::string& session_id)
665 : CdmPromiseCallbackRpc<Proc>(handle, result), session_id_(session_id) {}
666
667 static scoped_refptr<CdmPromiseWithSessionIdCallbackRpc> FromRpcMessage(
668 const pb::RpcMessage* rpc) {
669 CdmPromiseResult result;
670 std::string session_id;
671 DCHECK(rpc->has_cdm_promise_rpc());
672 const pb::CdmPromise promise_message = rpc->cdm_promise_rpc();
673 if (!internal::CdmPromiseFromMessage(promise_message, &result, &session_id))
674 return nullptr;
675 return new CdmPromiseWithSessionIdCallbackRpc(rpc->handle(), result,
676 session_id);
677 }
678
679 const std::string& session_id() const { return session_id_; }
680
681 protected:
682 void ToMessageInternal(pb::RpcMessage* rpc) const override {
683 pb::CdmPromise* promise_message = rpc->mutable_cdm_promise_rpc();
684 internal::CdmPromiseToMessage(
685 promise_message, CdmPromiseCallbackRpc<Proc>::result(), session_id_);
686 }
687
688 private:
689 ~CdmPromiseWithSessionIdCallbackRpc() = default;
690 std::string session_id_;
691 };
692
693 //==============================================================================
694 using CdmSetServerCertificateCallbackRpc =
695 CdmPromiseCallbackRpc<pb::RPC_CDM_SETSERVERCERTIFICATE_CALLBACK>;
696 using CdmCreateSessionAndGenerateRequestCallbackRpc =
697 CdmPromiseWithSessionIdCallbackRpc<
698 pb::RPC_CDM_CREATESESSIONANDGENERATEREQUEST_CALLBACK>;
699 using CdmLoadSessionCallbackRpc =
700 CdmPromiseWithSessionIdCallbackRpc<pb::RPC_CDM_LOADSESSION_CALLBACK>;
701 using CdmUpdateSessionCallbackRpc =
702 CdmPromiseCallbackRpc<pb::RPC_CDM_UPDATESESSION_CALLBACK>;
703 using CdmCloseSessionCallbackRpc =
704 CdmPromiseCallbackRpc<pb::RPC_CDM_CLOSESESSION_CALLBACK>;
705 using CdmRemoveSessionCallbackRpc =
706 CdmPromiseCallbackRpc<pb::RPC_CDM_REMOVESESSION_CALLBACK>;
707
708 //==============================================================================
709 class CdmInitializeCallbackRpc
710 : public CdmPromiseCallbackRpc<pb::RPC_CDM_INITIALIZE_CALLBACK> {
711 public:
712 CdmInitializeCallbackRpc(int handle,
713 const CdmPromiseResult& result,
714 int cdm_id,
715 int decryptor_handle);
716
717 static scoped_refptr<CdmInitializeCallbackRpc> FromRpcMessage(
718 const pb::RpcMessage* rpc);
719
720 int cdm_id() const { return cdm_id_; }
721 int decryptor_handle() const { return decryptor_handle_; }
722
723 protected:
724 void ToMessageInternal(pb::RpcMessage* rpc) const override;
725
726 private:
727 ~CdmInitializeCallbackRpc() override;
728 int cdm_id_;
729 int decryptor_handle_;
730 };
731
732 class CdmClientOnSessionMessageRpc : public Rpc {
733 public:
734 CdmClientOnSessionMessageRpc(int handle,
735 const std::string& session_id,
736 ::media::MediaKeys::MessageType message_type,
737 const uint8_t* message,
738 size_t message_size,
739 const std::string& legacy_destination_url);
740
741 static scoped_refptr<CdmClientOnSessionMessageRpc> FromRpcMessage(
742 const pb::RpcMessage* rpc);
743
744 const std::string& session_id() const { return session_id_; }
745 ::media::MediaKeys::MessageType message_type() const { return message_type_; }
746 const uint8_t* message() const {
747 return message_.empty() ? nullptr : message_.data();
748 }
749 size_t message_size() const { return message_.size(); }
750 const std::string& legacy_destination_url() const {
751 return legacy_destination_url_;
752 }
753
754 pb::RpcProc GetProc() const override;
755
756 protected:
757 void ToMessageInternal(pb::RpcMessage* rpc) const override;
758
759 private:
760 ~CdmClientOnSessionMessageRpc() override;
761 std::string session_id_;
762 ::media::MediaKeys::MessageType message_type_;
763 std::vector<uint8_t> message_;
764 std::string legacy_destination_url_;
765 };
766
767 //==============================================================================
768 using CdmClientOnSessionClosedRpc =
769 SimpleRpc<std::string, pb::RPC_CDMC_ONSESSIONCLOSED>;
770
771 //==============================================================================
772 class CdmClientOnLegacySessionErrorRpc : public Rpc {
773 public:
774 CdmClientOnLegacySessionErrorRpc(int handle,
775 const std::string& session_id,
776 ::media::MediaKeys::Exception exception,
777 uint32_t system_code,
778 const std::string& error_message);
779
780 static scoped_refptr<CdmClientOnLegacySessionErrorRpc> FromRpcMessage(
781 const pb::RpcMessage* rpc);
782
783 const std::string& session_id() const { return session_id_; }
784 ::media::MediaKeys::Exception exception() const { return exception_; }
785 uint32_t system_code() const { return system_code_; }
786 const std::string& error_message() const { return error_message_; }
787
788 pb::RpcProc GetProc() const override;
789
790 protected:
791 void ToMessageInternal(pb::RpcMessage* rpc) const override;
792
793 private:
794 ~CdmClientOnLegacySessionErrorRpc() override;
795 std::string session_id_;
796 ::media::MediaKeys::Exception exception_;
797 uint32_t system_code_;
798 std::string error_message_;
799 };
800
801 class CdmClientOnSessionKeysChangeRpc : public Rpc {
802 public:
803 CdmClientOnSessionKeysChangeRpc(
804 int handle,
805 const std::string& session_id,
806 bool has_additional_usable_key,
807 const ::media::CdmKeyInformation* key_information,
808 size_t key_information_size);
809
810 static scoped_refptr<CdmClientOnSessionKeysChangeRpc> FromRpcMessage(
811 const pb::RpcMessage* rpc);
812
813 const std::string& session_id() const { return session_id_; }
814 bool has_additional_usable_key() const { return has_additional_usable_key_; }
815 const ::media::CdmKeyInformation* key_information() const {
816 return key_information_.empty() ? nullptr : key_information_.data();
817 }
818 size_t key_information_size() const { return key_information_.size(); }
819
820 pb::RpcProc GetProc() const override;
821
822 protected:
823 void ToMessageInternal(pb::RpcMessage* rpc) const override;
824
825 private:
826 ~CdmClientOnSessionKeysChangeRpc() override;
827 std::string session_id_;
828 bool has_additional_usable_key_;
829 std::vector<::media::CdmKeyInformation> key_information_;
830 };
831
832 class CdmClientOnSessionExpirationUpdateRpc : public Rpc {
833 public:
834 CdmClientOnSessionExpirationUpdateRpc(int handle,
835 const std::string& session_id,
836 double new_expiry_time_sec);
837
838 static scoped_refptr<CdmClientOnSessionExpirationUpdateRpc> FromRpcMessage(
839 const pb::RpcMessage* rpc);
840
841 const std::string& session_id() const { return session_id_; }
842 double new_expiry_time_sec() const { return new_expiry_time_sec_; }
843
844 pb::RpcProc GetProc() const override;
845
846 protected:
847 void ToMessageInternal(pb::RpcMessage* rpc) const override;
848
849 private:
850 ~CdmClientOnSessionExpirationUpdateRpc() override;
851 std::string session_id_;
852 double new_expiry_time_sec_;
853 };
854
855 } // namespace remoting
856 } // namespace media
857
858 #endif // MEDIA_REMOTING_RPC_RPC_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698