diff -r 000000000000 -r 6474c204b198 dom/audiochannel/nsIAudioChannelAgent.idl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/audiochannel/nsIAudioChannelAgent.idl Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,142 @@ +/* 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 nsIDOMWindow; + +[uuid(194b55d9-39c0-45c6-b8ef-b8049f978ea5)] +interface nsIAudioChannelAgentCallback : nsISupports +{ + /** + * Notified when the playable status of channel is changed. + * + * @param canPlay + * Callback from agent to notify component of the playable status + * of the channel. If canPlay is muted state, component SHOULD stop + * playing media associated with this channel as soon as possible. if + * it is faded state then the volume of media should be reduced. + */ + void canPlayChanged(in long canPlay); + + /** + * Notified when the window volume/mute is changed + */ + void windowVolumeChanged(); +}; + +/** + * 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. Before playing, checking the playable status of the channel. + * 3. Notifying the agent when they start/stop using this channel. + * 4. Notifying the agent of changes to the visibility of the component using + * this channel. + * + * The agent will invoke a callback to notify Gecko components of + * 1. Changes to the playable status of this channel. + */ + +[uuid(2b0222a5-8f7b-49d2-9ab8-cd01b744b23e)] +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_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; + + /** + * 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 nsIDOMWindow 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 nsIDOMWindow window, in long channelType, + in nsIAudioChannelAgentCallback callback); + + /** + * This method is just like init(), and specify the channel is associated + * with video. + * + * @param weak + * true if weak reference should be hold. + */ + void initWithVideo(in nsIDOMWindow window, in long channelType, + in nsIAudioChannelAgentCallback callback, in boolean weak); + + /** + * 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. + * + * + * @return + * normal state: the agent has registered with audio channel service and + * the component should start playback. + * muted state: the agent has registered with audio channel service but + * the component should not start playback. + * faded state: the agent has registered with audio channel service the + * component should start playback as well as reducing the volume. + */ + long startPlaying(); + + /** + * Notify the agent we no longer want to play. + * + * Note : even if startPlaying() returned false, the agent would still be + * registered with the audio channel service and receive callbacks for status changes. + * So stopPlaying must still eventually be called to unregister the agent with the + * channel service. + */ + void stopPlaying(); + + /** + * Notify the agent of the visibility state of the window using this agent. + * @param visible + * True if the window associated with the agent is visible. + */ + void setVisibilityState(in boolean visible); + + /** + * Retrieve the volume from the window. + */ + readonly attribute float windowVolume; +}; +