Bug 1180448 - Add APIs to XUL browser for muting and unmuting audio playback in the document loaded inside it; r=mconley

This commit is contained in:
Ehsan Akhgari 2015-07-04 20:47:14 -04:00
Родитель def0e4ae45
Коммит d8ec611352
4 изменённых файлов: 59 добавлений и 0 удалений

Просмотреть файл

@ -697,6 +697,7 @@ let MediaPlaybackListener = {
init() {
Services.obs.addObserver(this, "media-playback", false);
addMessageListener("MediaPlaybackMute", this);
addEventListener("unload", () => {
MediaPlaybackListener.uninit();
});
@ -704,6 +705,7 @@ let MediaPlaybackListener = {
uninit() {
Services.obs.removeObserver(this, "media-playback");
removeMessageListener("MediaPlaybackMute", this);
},
observe(subject, topic, data) {
@ -715,5 +717,13 @@ let MediaPlaybackListener = {
}
}
},
receiveMessage(msg) {
if (msg.name == "MediaPlaybackMute") {
let utils = global.content.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils);
utils.audioMuted = msg.data.type === "mute";
}
},
};
MediaPlaybackListener.init();

Просмотреть файл

@ -42,3 +42,4 @@ support-files =
file_mediaPlayback.html
file_mediaPlaybackFrame.html
audio.ogg
[browser_mute.js]

Просмотреть файл

@ -0,0 +1,23 @@
const PAGE = "data:text/html,page";
function* test_on_browser(browser) {
ok(!browser.audioMuted, "Audio should not be muted by default");
browser.mute();
ok(browser.audioMuted, "Audio should be muted now");
browser.unmute();
ok(!browser.audioMuted, "Audio should be unmuted now");
}
add_task(function*() {
yield new Promise((resolve) => {
SpecialPowers.pushPrefEnv({"set": [["media.useAudioChannelService", true]]},
resolve);
});
});
add_task(function*() {
yield BrowserTestUtils.withNewTab({
gBrowser,
url: PAGE,
}, test_on_browser);
});

Просмотреть файл

@ -683,6 +683,31 @@
</body>
</method>
<field name="_audioMuted">false</field>
<property name="audioMuted"
onget="return this._audioMuted;"
readonly="true"/>
<method name="mute">
<body>
<![CDATA[
this._audioMuted = true;
this.messageManager.sendAsyncMessage("MediaPlaybackMute",
{type: "mute"});
]]>
</body>
</method>
<method name="unmute">
<body>
<![CDATA[
this._audioMuted = false;
this.messageManager.sendAsyncMessage("MediaPlaybackMute",
{type: "unmute"});
]]>
</body>
</method>
<property name="securityUI">
<getter>
<![CDATA[