forked from mirrors/gecko-dev
Bug 1472491: Part 5n - Add AudioPlaybackChild actor. r=felipe
MozReview-Commit-ID: DtGNW4riHQX --HG-- rename : toolkit/content/browser-content.js => toolkit/actors/AudioPlaybackChild.jsm extra : rebase_source : d37eef766306f0967ac4c13b4705e32197f7d0f6
This commit is contained in:
parent
0e0b74319e
commit
9d0fd10b85
7 changed files with 95 additions and 82 deletions
|
|
@ -382,6 +382,7 @@
|
|||
@RESPATH@/browser/modules/*
|
||||
@RESPATH@/modules/*
|
||||
@RESPATH@/browser/actors/*
|
||||
@RESPATH@/actors/*
|
||||
|
||||
; Safe Browsing
|
||||
@RESPATH@/components/nsURLClassifier.manifest
|
||||
|
|
|
|||
|
|
@ -245,6 +245,7 @@
|
|||
|
||||
; Modules
|
||||
@BINPATH@/modules/*
|
||||
@BINPATH@/actors/*
|
||||
|
||||
; Safe Browsing
|
||||
@BINPATH@/components/nsURLClassifier.manifest
|
||||
|
|
|
|||
72
toolkit/actors/AudioPlaybackChild.jsm
Normal file
72
toolkit/actors/AudioPlaybackChild.jsm
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
/* vim: set ts=2 sw=2 sts=2 et tw=80: */
|
||||
/* 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/. */
|
||||
"use strict";
|
||||
|
||||
var EXPORTED_SYMBOLS = ["AudioPlaybackChild"];
|
||||
|
||||
ChromeUtils.import("resource://gre/modules/ActorChild.jsm");
|
||||
|
||||
class AudioPlaybackChild extends ActorChild {
|
||||
handleMediaControlMessage(msg) {
|
||||
let utils = this.content.windowUtils;
|
||||
let suspendTypes = Ci.nsISuspendedTypes;
|
||||
switch (msg) {
|
||||
case "mute":
|
||||
utils.audioMuted = true;
|
||||
break;
|
||||
case "unmute":
|
||||
utils.audioMuted = false;
|
||||
break;
|
||||
case "lostAudioFocus":
|
||||
utils.mediaSuspend = suspendTypes.SUSPENDED_PAUSE_DISPOSABLE;
|
||||
break;
|
||||
case "lostAudioFocusTransiently":
|
||||
utils.mediaSuspend = suspendTypes.SUSPENDED_PAUSE;
|
||||
break;
|
||||
case "gainAudioFocus":
|
||||
utils.mediaSuspend = suspendTypes.NONE_SUSPENDED;
|
||||
break;
|
||||
case "mediaControlPaused":
|
||||
utils.mediaSuspend = suspendTypes.SUSPENDED_PAUSE_DISPOSABLE;
|
||||
break;
|
||||
case "mediaControlStopped":
|
||||
utils.mediaSuspend = suspendTypes.SUSPENDED_STOP_DISPOSABLE;
|
||||
break;
|
||||
case "resumeMedia":
|
||||
// User has clicked the tab audio indicator to play a delayed
|
||||
// media. That's clear user intent to play, so gesture activate
|
||||
// the content document tree so that the block-autoplay logic
|
||||
// allows the media to autoplay.
|
||||
this.content.document.notifyUserGestureActivation();
|
||||
utils.mediaSuspend = suspendTypes.NONE_SUSPENDED;
|
||||
break;
|
||||
default:
|
||||
dump("Error : wrong media control msg!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
observe(subject, topic, data) {
|
||||
if (topic === "audio-playback") {
|
||||
if (subject && subject.top == this.content) {
|
||||
let name = "AudioPlayback:";
|
||||
if (data === "activeMediaBlockStart") {
|
||||
name += "ActiveMediaBlockStart";
|
||||
} else if (data === "activeMediaBlockStop") {
|
||||
name += "ActiveMediaBlockStop";
|
||||
} else {
|
||||
name += (data === "active") ? "Start" : "Stop";
|
||||
}
|
||||
this.mm.sendAsyncMessage(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
receiveMessage(msg) {
|
||||
if (msg.name == "AudioPlayback") {
|
||||
this.handleMediaControlMessage(msg.data.type);
|
||||
}
|
||||
}
|
||||
}
|
||||
9
toolkit/actors/moz.build
Normal file
9
toolkit/actors/moz.build
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# 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/.
|
||||
|
||||
FINAL_TARGET_FILES.actors += [
|
||||
'AudioPlaybackChild.jsm',
|
||||
]
|
||||
|
|
@ -190,88 +190,6 @@ addEventListener("WebChannelMessageToChrome", WebChannelContent,
|
|||
true, true);
|
||||
addMessageListener("WebChannelMessageToContent", WebChannelContent);
|
||||
|
||||
var AudioPlaybackListener = {
|
||||
QueryInterface: ChromeUtils.generateQI([Ci.nsIObserver]),
|
||||
|
||||
init() {
|
||||
Services.obs.addObserver(this, "audio-playback");
|
||||
|
||||
addMessageListener("AudioPlayback", this);
|
||||
addEventListener("unload", () => {
|
||||
AudioPlaybackListener.uninit();
|
||||
});
|
||||
this.init = null;
|
||||
},
|
||||
|
||||
uninit() {
|
||||
Services.obs.removeObserver(this, "audio-playback");
|
||||
|
||||
removeMessageListener("AudioPlayback", this);
|
||||
},
|
||||
|
||||
handleMediaControlMessage(msg) {
|
||||
let utils = global.content.windowUtils;
|
||||
let suspendTypes = Ci.nsISuspendedTypes;
|
||||
switch (msg) {
|
||||
case "mute":
|
||||
utils.audioMuted = true;
|
||||
break;
|
||||
case "unmute":
|
||||
utils.audioMuted = false;
|
||||
break;
|
||||
case "lostAudioFocus":
|
||||
utils.mediaSuspend = suspendTypes.SUSPENDED_PAUSE_DISPOSABLE;
|
||||
break;
|
||||
case "lostAudioFocusTransiently":
|
||||
utils.mediaSuspend = suspendTypes.SUSPENDED_PAUSE;
|
||||
break;
|
||||
case "gainAudioFocus":
|
||||
utils.mediaSuspend = suspendTypes.NONE_SUSPENDED;
|
||||
break;
|
||||
case "mediaControlPaused":
|
||||
utils.mediaSuspend = suspendTypes.SUSPENDED_PAUSE_DISPOSABLE;
|
||||
break;
|
||||
case "mediaControlStopped":
|
||||
utils.mediaSuspend = suspendTypes.SUSPENDED_STOP_DISPOSABLE;
|
||||
break;
|
||||
case "resumeMedia":
|
||||
// User has clicked the tab audio indicator to play a delayed
|
||||
// media. That's clear user intent to play, so gesture activate
|
||||
// the content document tree so that the block-autoplay logic
|
||||
// allows the media to autoplay.
|
||||
content.document.notifyUserGestureActivation();
|
||||
utils.mediaSuspend = suspendTypes.NONE_SUSPENDED;
|
||||
break;
|
||||
default:
|
||||
dump("Error : wrong media control msg!\n");
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
observe(subject, topic, data) {
|
||||
if (topic === "audio-playback") {
|
||||
if (subject && subject.top == global.content) {
|
||||
let name = "AudioPlayback:";
|
||||
if (data === "activeMediaBlockStart") {
|
||||
name += "ActiveMediaBlockStart";
|
||||
} else if (data === "activeMediaBlockStop") {
|
||||
name += "ActiveMediaBlockStop";
|
||||
} else {
|
||||
name += (data === "active") ? "Start" : "Stop";
|
||||
}
|
||||
sendAsyncMessage(name);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
receiveMessage(msg) {
|
||||
if (msg.name == "AudioPlayback") {
|
||||
this.handleMediaControlMessage(msg.data.type);
|
||||
}
|
||||
},
|
||||
};
|
||||
AudioPlaybackListener.init();
|
||||
|
||||
var UnselectedTabHoverObserver = {
|
||||
init() {
|
||||
addMessageListener("Browser:UnselectedTabHover", this);
|
||||
|
|
|
|||
|
|
@ -100,6 +100,17 @@ ChromeUtils.import("resource://gre/modules/Services.jsm");
|
|||
const {DefaultMap} = ExtensionUtils;
|
||||
|
||||
let ACTORS = {
|
||||
AudioPlayback: {
|
||||
child: {
|
||||
module: "resource://gre/actors/AudioPlaybackChild.jsm",
|
||||
messages: [
|
||||
"AudioPlayback",
|
||||
],
|
||||
observers: [
|
||||
"audio-playback",
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
class ActorSet {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
DIRS += [
|
||||
'actors',
|
||||
'components',
|
||||
'content',
|
||||
'crashreporter',
|
||||
|
|
|
|||
Loading…
Reference in a new issue