summaryrefslogtreecommitdiffstats
path: root/dom/media/gmp/mozIGeckoMediaPluginService.idl
blob: 000cfef2f53b79437a45f51e89f01b3badc3a956 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"
#include "nsIThread.idl"

interface nsIFile;

%{C++
#include "mozilla/UniquePtr.h"
#include "nsTArray.h"
#include "nsString.h"
class GMPDecryptorProxy;
class GMPVideoDecoderProxy;
class GMPVideoEncoderProxy;
class GMPVideoHost;

namespace mozilla {
class GMPCrashHelper;
}

template<class T>
class GMPGetterCallback
{
public:
  GMPGetterCallback() { MOZ_COUNT_CTOR(GMPGetterCallback<T>); }
  virtual ~GMPGetterCallback() { MOZ_COUNT_DTOR(GMPGetterCallback<T>); }
  virtual void Done(T*) = 0;
};
template<class T>
class GMPVideoGetterCallback
{
public:
  GMPVideoGetterCallback() { MOZ_COUNT_CTOR(GMPVideoGetterCallback<T>); }
  virtual ~GMPVideoGetterCallback() { MOZ_COUNT_DTOR(GMPVideoGetterCallback<T>); }
  virtual void Done(T*, GMPVideoHost*) = 0;
};
typedef GMPGetterCallback<GMPDecryptorProxy> GetGMPDecryptorCallback;
typedef GMPVideoGetterCallback<GMPVideoDecoderProxy> GetGMPVideoDecoderCallback;
typedef GMPVideoGetterCallback<GMPVideoEncoderProxy> GetGMPVideoEncoderCallback;
class GetNodeIdCallback
{
public:
  MOZ_COUNTED_DEFAULT_CTOR(GetNodeIdCallback)
  MOZ_COUNTED_DTOR_VIRTUAL(GetNodeIdCallback)
  virtual void Done(nsresult aResult, const nsACString& aNodeId) = 0;
};
%}

[ptr] native TagArray(nsTArray<nsCString>);
[ref] native ConstTagArrayRef(const nsTArray<nsCString>);
native GetGMPDecryptorCallback(mozilla::UniquePtr<GetGMPDecryptorCallback>&&);
native GetGMPVideoDecoderCallback(mozilla::UniquePtr<GetGMPVideoDecoderCallback>&&);
native GetGMPVideoEncoderCallback(mozilla::UniquePtr<GetGMPVideoEncoderCallback>&&);
native GetNodeIdCallback(mozilla::UniquePtr<GetNodeIdCallback>&&);
native GMPCrashHelperPtr(mozilla::GMPCrashHelper*);

[scriptable, uuid(44d362ae-937a-4803-bee6-f2512a0149d1)]
interface mozIGeckoMediaPluginService : nsISupports
{

  /**
   * The GMP thread. Callable from any thread.
   */
  readonly attribute nsIThread thread;

  /**
   * Run through windows registered registered for pluginId, sending
   * 'PluginCrashed' chrome-only event
   */
  void RunPluginCrashCallbacks(in unsigned long pluginId, in ACString pluginName);

  /**
   * Get a plugin that supports the specified tags.
   * Callable on any thread
   */
  [noscript]
  boolean hasPluginForAPI(in ACString api, in ConstTagArrayRef tags);

  /**
   * Get the plugin directory for a plugin that supports the specified tags.
   * Callable on any thread
   */
  [noscript]
  nsIFile findPluginDirectoryForAPI(in ACString api, in ConstTagArrayRef tags);

  /**
   * Get a video decoder that supports the specified tags.
   * The array of tags should at least contain a codec tag, and optionally
   * other tags such as for EME keysystem.
   * Callable only on GMP thread.
   * This is an asynchronous operation, the Done method of the callback object
   * will be called on the GMP thread with the result (which might be null in
   * the case of failure). This method always takes ownership of the callback
   * object, but if this method returns an error then the Done method of the
   * callback object will not be called at all.
   */
  [noscript]
  void getGMPVideoDecoder(in GMPCrashHelperPtr helper,
                          in TagArray tags,
                          [optional] in ACString nodeId,
                          in GetGMPVideoDecoderCallback callback);

  /**
   * Get a video encoder that supports the specified tags.
   * The array of tags should at least contain a codec tag, and optionally
   * other tags.
   * Callable only on GMP thread.
   * This is an asynchronous operation, the Done method of the callback object
   * will be called on the GMP thread with the result (which might be null in
   * the case of failure). This method always takes ownership of the callback
   * object, but if this method returns an error then the Done method of the
   * callback object will not be called at all.
   */
  [noscript]
  void getGMPVideoEncoder(in GMPCrashHelperPtr helper,
                          in TagArray tags,
                          [optional] in ACString nodeId,
                          in GetGMPVideoEncoderCallback callback);

  /**
   * Gets the NodeId for a (origin, urlbarOrigin) pair.
   */
  [noscript]
  void getNodeId(in AString origin,
                 in AString topLevelOrigin,
                 in AString gmpName,
                 in GetNodeIdCallback callback);
};