summaryrefslogtreecommitdiffstats
path: root/dom/audiochannel/nsIAudioChannelAgent.idl
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /dom/audiochannel/nsIAudioChannelAgent.idl
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'dom/audiochannel/nsIAudioChannelAgent.idl')
-rw-r--r--dom/audiochannel/nsIAudioChannelAgent.idl187
1 files changed, 187 insertions, 0 deletions
diff --git a/dom/audiochannel/nsIAudioChannelAgent.idl b/dom/audiochannel/nsIAudioChannelAgent.idl
new file mode 100644
index 000000000..820f8da85
--- /dev/null
+++ b/dom/audiochannel/nsIAudioChannelAgent.idl
@@ -0,0 +1,187 @@
+/* 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"
+
+interface mozIDOMWindow;
+
+typedef uint32_t nsSuspendedTypes;
+
+[scriptable, builtinclass, uuid(2822a840-f009-11e5-a837-0800200c9a66)]
+interface nsISuspendedTypes : nsISupports
+{
+ /**
+ * The suspended enum is used in three different situations,
+ * - platform audio focus (Fennec/B2G)
+ * - remote media control (Fennec)
+ * - block auto-play video in non-active page
+ *
+ * Note: the "remote side" must control the AudioChannelAgent using
+ * nsIAudioChannelAgentCallback.windowSuspendChanged() callback instead using
+ * play/pause methods or any button in the webpage.
+ *
+ * - SUSPENDED_PAUSE :
+ * It's used when transiently losing audio focus, the media can't be resumed
+ * until we gain the audio focus again. It would change the internal state of
+ * MediaElement when it's being suspended/resumed, and it would trigger the
+ * related JS event. eg. "play" and "pause" event.
+ *
+ * - SUSPENDED_BLOCK
+ * It's used to prevent auto-playing media in inactive page in order to
+ * reduce the power consumption, and the media can't be resumed until the
+ * page becomes active again. It would change the internal state of
+ * MediaElement when it's being blocked/resumed, so it won't trigger the
+ * related JS event. eg. "play" and "pause" event.
+ *
+ * - SUSPENDED_PAUSE_DISPOSABLE
+ * It's used for remote media-control to pause the playing media and when we
+ * lose audio focus permanently. It's disposable suspended, so the media can
+ * be resumed arbitrary after that. Same as SUSPENDED_PAUSE, it would change
+ * the internal state of MediaElement when it's being suspended.
+ *
+ * - SUSPENDED_STOP_DISPOSABLE
+ * It's used for remote media-control to stop the playing media. The remote
+ * control would disappear after stopping the media, so we would disconnect
+ * the audio channel agent. It's disposable suspended, so the media can be
+ * resumed arbitrary after that. Same as SUSPENDED_PAUSE, it would change
+ * the internal state of MediaElement when it's being suspended.
+ */
+
+ const uint32_t NONE_SUSPENDED = 0;
+ const uint32_t SUSPENDED_PAUSE = 1;
+ const uint32_t SUSPENDED_BLOCK = 2;
+ const uint32_t SUSPENDED_PAUSE_DISPOSABLE = 3;
+ const uint32_t SUSPENDED_STOP_DISPOSABLE = 4;
+};
+
+%{C++
+namespace mozilla {
+namespace dom {
+// It's defined in dom/audiochannel/AudioChannelService.h.
+class AudioPlaybackConfig;
+}
+}
+%}
+[ptr] native AudioPlaybackConfig(mozilla::dom::AudioPlaybackConfig);
+
+[uuid(15c05894-408e-4798-b527-a8c32d9c5f8c)]
+interface nsIAudioChannelAgentCallback : nsISupports
+{
+ /**
+ * Notified when the window volume/mute is changed
+ */
+ void windowVolumeChanged(in float aVolume, in bool aMuted);
+
+ /**
+ * Notified when the window needs to be suspended or resumed.
+ */
+ void windowSuspendChanged(in uint32_t aSuspend);
+
+ /**
+ * Notified when the capture state is changed.
+ */
+ void windowAudioCaptureChanged(in bool aCapture);
+};
+
+/**
+ * This interface provides an agent for gecko components to participate
+ * in the audio channel service. Gecko components are responsible for
+ * 1. Indicating what channel type they are using (via the init() member
+ * function).
+ * 2. Notifying the agent when they start/stop using this channel.
+ * 3. Notifying the agent when they are audible.
+ *
+ * The agent will invoke a callback to notify Gecko components of
+ * 1. Changes to the playable status of this channel.
+ */
+
+[uuid(ab7e21c0-970c-11e5-a837-0800200c9a66)]
+interface nsIAudioChannelAgent : nsISupports
+{
+ const long AUDIO_AGENT_CHANNEL_NORMAL = 0;
+ const long AUDIO_AGENT_CHANNEL_CONTENT = 1;
+ const long AUDIO_AGENT_CHANNEL_NOTIFICATION = 2;
+ const long AUDIO_AGENT_CHANNEL_ALARM = 3;
+ const long AUDIO_AGENT_CHANNEL_TELEPHONY = 4;
+ const long AUDIO_AGENT_CHANNEL_RINGER = 5;
+ const long AUDIO_AGENT_CHANNEL_PUBLICNOTIFICATION = 6;
+ const long AUDIO_AGENT_CHANNEL_SYSTEM = 7;
+
+ const long AUDIO_AGENT_CHANNEL_ERROR = 1000;
+
+ const long AUDIO_AGENT_STATE_NORMAL = 0;
+ const long AUDIO_AGENT_STATE_MUTED = 1;
+ const long AUDIO_AGENT_STATE_FADED = 2;
+
+ /**
+ * Before init() is called, this returns AUDIO_AGENT_CHANNEL_ERROR.
+ */
+ readonly attribute long audioChannelType;
+
+ %{C++
+ inline int32_t AudioChannelType() {
+ int32_t channel;
+ return NS_SUCCEEDED(GetAudioChannelType(&channel)) ? channel : AUDIO_AGENT_CHANNEL_ERROR;
+ }
+ %}
+
+ /**
+ * Initialize the agent with a channel type.
+ * Note: This function should only be called once.
+ *
+ * @param window
+ * The window
+ * @param channelType
+ * Audio Channel Type listed as above
+ * @param callback
+ * 1. Once the playable status changes, agent uses this callback function
+ * to notify Gecko component.
+ * 2. The callback is allowed to be null. Ex: telephony doesn't need to
+ * listen change of the playable status.
+ * 3. The AudioChannelAgent keeps a strong reference to the callback
+ * object.
+ */
+ void init(in mozIDOMWindow window, in long channelType,
+ in nsIAudioChannelAgentCallback callback);
+
+ /**
+ * This method is just like init(), except the audio channel agent keeps a
+ * weak reference to the callback object.
+ *
+ * In order for this to work, |callback| must implement
+ * nsISupportsWeakReference.
+ */
+ void initWithWeakCallback(in mozIDOMWindow window, in long channelType,
+ in nsIAudioChannelAgentCallback callback);
+
+ /**
+ * Notify the agent that we want to start playing.
+ * Note: Gecko component SHOULD call this function first then start to
+ * play audio stream only when return value is true.
+ *
+ * @param config
+ * It contains the playback related states (volume/mute/suspend)
+ */
+ void notifyStartedPlaying(in AudioPlaybackConfig config, in uint8_t audible);
+
+ /**
+ * Notify the agent we no longer want to play.
+ *
+ * Note : even if notifyStartedPlaying() returned false, the agent would
+ * still be registered with the audio channel service and receive callbacks
+ * for status changes. So notifyStoppedPlaying must still eventually be
+ * called to unregister the agent with the channel service.
+ */
+ void notifyStoppedPlaying();
+
+
+ /**
+ * Notify agent that we already start producing audible data.
+ *
+ * Note : sometime audio might become silent during playing, this method is used to
+ * notify the actually audible state to other services which want to know
+ * about that, ex. tab sound indicator.
+ */
+ void notifyStartedAudible(in uint8_t audible, in uint32_t reason);
+};