mirror of
https://github.com/zen-browser/desktop.git
synced 2025-10-05 17:36:34 +00:00
fix(MediaController): more accurate sharing state
This commit is contained in:
12
src/browser/actors/WebRTCParent-sys-mjs.patch
Normal file
12
src/browser/actors/WebRTCParent-sys-mjs.patch
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs
|
||||||
|
index be66de4a1ef044341c2e1d6953806550897df45a..ff6ef3511076b25e00ca4d0189f666ec7aa94fe8 100644
|
||||||
|
--- a/browser/actors/WebRTCParent.sys.mjs
|
||||||
|
+++ b/browser/actors/WebRTCParent.sys.mjs
|
||||||
|
@@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent {
|
||||||
|
|
||||||
|
let tabbrowser = browser.ownerGlobal.gBrowser;
|
||||||
|
if (tabbrowser) {
|
||||||
|
+ browser.ownerGlobal.gZenMediaController.updateMediaSharing(state);
|
||||||
|
tabbrowser.updateBrowserSharing(browser, {
|
||||||
|
webRTC: state,
|
||||||
|
});
|
@@ -118,7 +118,9 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
const onTabDiscardedOrClosed = this.onTabDiscardedOrClosed.bind(this);
|
const onTabDiscardedOrClosed = this.onTabDiscardedOrClosed.bind(this);
|
||||||
|
|
||||||
window.addEventListener('TabClose', onTabDiscardedOrClosed);
|
window.addEventListener('TabClose', onTabDiscardedOrClosed);
|
||||||
|
window.addEventListener('TabBrowserDiscarded', onTabDiscardedOrClosed);
|
||||||
|
|
||||||
window.addEventListener('DOMAudioPlaybackStarted', (event) => {
|
window.addEventListener('DOMAudioPlaybackStarted', (event) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@@ -138,24 +140,19 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
window.addEventListener('DOMAudioPlaybackStopped', () => this.updateMuteState());
|
window.addEventListener('DOMAudioPlaybackStopped', () => this.updateMuteState());
|
||||||
window.webrtcUI.on('peer-request-allowed', this._onMediaShareStart.bind(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onTabDiscardedOrClosed(event) {
|
onTabDiscardedOrClosed(event) {
|
||||||
const { linkedBrowser } = event.target;
|
const { linkedBrowser } = event.target;
|
||||||
|
const isCurrentBrowser = linkedBrowser?.browserId === this._currentBrowser?.browserId;
|
||||||
|
|
||||||
if (linkedBrowser?.browserId === this._currentBrowser?.browserId) {
|
if (isCurrentBrowser) {
|
||||||
this.deinitMediaSharingControls(linkedBrowser);
|
this.isSharing = false;
|
||||||
this.hideMediaControls();
|
this.hideMediaControls();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (linkedBrowser?.browsingContext.mediaController) {
|
if (linkedBrowser?.browsingContext.mediaController) {
|
||||||
this.deinitMediaController(
|
this.deinitMediaController(linkedBrowser.browsingContext.mediaController, true, isCurrentBrowser, true);
|
||||||
linkedBrowser.browsingContext.mediaController,
|
|
||||||
true,
|
|
||||||
linkedBrowser.browserId === this._currentBrowser?.browserId,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +188,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
set isSharing(value) {
|
set isSharing(value) {
|
||||||
if (this._currentBrowser && !value) {
|
if (this._currentBrowser?.browsingContext && !value) {
|
||||||
const webRTC = this._currentBrowser.browsingContext.currentWindowGlobal.getActor('WebRTC');
|
const webRTC = this._currentBrowser.browsingContext.currentWindowGlobal.getActor('WebRTC');
|
||||||
webRTC.sendAsyncMessage('webrtc:UnmuteMicrophone');
|
webRTC.sendAsyncMessage('webrtc:UnmuteMicrophone');
|
||||||
webRTC.sendAsyncMessage('webrtc:UnmuteCamera');
|
webRTC.sendAsyncMessage('webrtc:UnmuteCamera');
|
||||||
@@ -353,52 +350,35 @@
|
|||||||
this.mediaArtist.textContent = '';
|
this.mediaArtist.textContent = '';
|
||||||
|
|
||||||
this.showMediaControls();
|
this.showMediaControls();
|
||||||
tab.addEventListener('TabAttrModified', this._onTabAttrModified.bind(this));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deinitMediaSharingControls(browser) {
|
updateMediaSharing(data) {
|
||||||
const tab = window.gBrowser.getTabForBrowser(browser);
|
const { windowId, showCameraIndicator, showMicrophoneIndicator } = data;
|
||||||
if (tab) tab.removeEventListener('TabAttrModified', this._onTabAttrModified.bind(this));
|
|
||||||
|
|
||||||
this.isSharing = false;
|
|
||||||
this._currentBrowser = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
_onTabAttrModified(event) {
|
|
||||||
const { changed } = event.detail;
|
|
||||||
const { linkedBrowser } = event.target;
|
|
||||||
|
|
||||||
if (changed.includes('sharing') && !linkedBrowser.browsingContext.currentWindowGlobal.hasActivePeerConnections()) {
|
|
||||||
if (this._currentBrowser?.browserId === linkedBrowser.browserId) {
|
|
||||||
event.target.removeEventListener('TabAttrModified', this._onTabAttrModified.bind(this));
|
|
||||||
this.deinitMediaSharingControls(linkedBrowser);
|
|
||||||
|
|
||||||
this.hideMediaControls();
|
|
||||||
this.switchController(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_onMediaShareStart(event) {
|
|
||||||
const { innerWindowID } = event;
|
|
||||||
|
|
||||||
for (const browser of window.gBrowser.browsers) {
|
for (const browser of window.gBrowser.browsers) {
|
||||||
if (browser.innerWindowID === innerWindowID) {
|
const isMatch = browser.innerWindowID === windowId;
|
||||||
|
|
||||||
|
if (!isMatch) continue;
|
||||||
|
if (showCameraIndicator || showMicrophoneIndicator) {
|
||||||
const webRTC = browser.browsingContext.currentWindowGlobal.getActor('WebRTC');
|
const webRTC = browser.browsingContext.currentWindowGlobal.getActor('WebRTC');
|
||||||
webRTC.sendAsyncMessage('webrtc:UnmuteMicrophone');
|
webRTC.sendAsyncMessage('webrtc:UnmuteMicrophone');
|
||||||
webRTC.sendAsyncMessage('webrtc:UnmuteCamera');
|
webRTC.sendAsyncMessage('webrtc:UnmuteCamera');
|
||||||
|
|
||||||
if (this._currentBrowser) this.deinitMediaSharingControls(this._currentBrowser);
|
if (this._currentBrowser) this.isSharing = false;
|
||||||
if (this._currentMediaController) {
|
if (this._currentMediaController) {
|
||||||
this._currentMediaController.pause();
|
this._currentMediaController.pause();
|
||||||
this.deinitMediaController(this._currentMediaController, true, true).then(() =>
|
this.deinitMediaController(this._currentMediaController, true, true).then(() =>
|
||||||
this.activateMediaDeviceControls(browser)
|
this.activateMediaDeviceControls(browser)
|
||||||
);
|
);
|
||||||
} else this.activateMediaDeviceControls(browser);
|
} else this.activateMediaDeviceControls(browser);
|
||||||
|
} else if (this.isSharing && !(showCameraIndicator || showMicrophoneIndicator)) {
|
||||||
break;
|
this.isSharing = false;
|
||||||
|
this._currentBrowser = null;
|
||||||
|
this.hideMediaControls();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -625,7 +605,7 @@
|
|||||||
if (this._currentMediaController) {
|
if (this._currentMediaController) {
|
||||||
this._currentMediaController.pause();
|
this._currentMediaController.pause();
|
||||||
this.deinitMediaController(this._currentMediaController);
|
this.deinitMediaController(this._currentMediaController);
|
||||||
} else if (this.isSharing) this.deinitMediaSharingControls(this._currentBrowser);
|
} else if (this.isSharing) this.isSharing = false;
|
||||||
|
|
||||||
this.hideMediaControls();
|
this.hideMediaControls();
|
||||||
this.switchController(true);
|
this.switchController(true);
|
||||||
|
Reference in New Issue
Block a user