зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
def0e4ae45
Коммит
d8ec611352
|
@ -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[
|
||||
|
|
Загрузка…
Ссылка в новой задаче