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@/browser/modules/*
|
||||||
@RESPATH@/modules/*
|
@RESPATH@/modules/*
|
||||||
@RESPATH@/browser/actors/*
|
@RESPATH@/browser/actors/*
|
||||||
|
@RESPATH@/actors/*
|
||||||
|
|
||||||
; Safe Browsing
|
; Safe Browsing
|
||||||
@RESPATH@/components/nsURLClassifier.manifest
|
@RESPATH@/components/nsURLClassifier.manifest
|
||||||
|
|
|
||||||
|
|
@ -245,6 +245,7 @@
|
||||||
|
|
||||||
; Modules
|
; Modules
|
||||||
@BINPATH@/modules/*
|
@BINPATH@/modules/*
|
||||||
|
@BINPATH@/actors/*
|
||||||
|
|
||||||
; Safe Browsing
|
; Safe Browsing
|
||||||
@BINPATH@/components/nsURLClassifier.manifest
|
@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);
|
true, true);
|
||||||
addMessageListener("WebChannelMessageToContent", WebChannelContent);
|
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 = {
|
var UnselectedTabHoverObserver = {
|
||||||
init() {
|
init() {
|
||||||
addMessageListener("Browser:UnselectedTabHover", this);
|
addMessageListener("Browser:UnselectedTabHover", this);
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,17 @@ ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||||
const {DefaultMap} = ExtensionUtils;
|
const {DefaultMap} = ExtensionUtils;
|
||||||
|
|
||||||
let ACTORS = {
|
let ACTORS = {
|
||||||
|
AudioPlayback: {
|
||||||
|
child: {
|
||||||
|
module: "resource://gre/actors/AudioPlaybackChild.jsm",
|
||||||
|
messages: [
|
||||||
|
"AudioPlayback",
|
||||||
|
],
|
||||||
|
observers: [
|
||||||
|
"audio-playback",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
class ActorSet {
|
class ActorSet {
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
DIRS += [
|
DIRS += [
|
||||||
|
'actors',
|
||||||
'components',
|
'components',
|
||||||
'content',
|
'content',
|
||||||
'crashreporter',
|
'crashreporter',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue