зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1053413 part 4 - Rely on single MozDOMFullscreen:Exited event instead of ask-* notifications on Firefox. r=dao
--HG-- extra : source : f5aa3065f1baecd2d991fb75f245004db09e3eb4
This commit is contained in:
Родитель
ae0095611c
Коммит
eeb254e9de
|
@ -101,6 +101,7 @@ var FullScreen = {
|
|||
},
|
||||
|
||||
receiveMessage: function(aMessage) {
|
||||
let browser = aMessage.target;
|
||||
switch (aMessage.name) {
|
||||
case "DOMFullscreen:Entered": {
|
||||
// If we're a multiprocess browser, then the request to enter
|
||||
|
@ -108,11 +109,8 @@ var FullScreen = {
|
|||
// it stopped at the root of the content document. That means
|
||||
// we have to kick off the switch to fullscreen here at the
|
||||
// operating system level in the parent process ourselves.
|
||||
let browser = aMessage.target;
|
||||
if (gMultiProcessBrowser && browser.getAttribute("remote") == "true") {
|
||||
let windowUtils = window.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindowUtils);
|
||||
windowUtils.remoteFrameFullscreenChanged(browser);
|
||||
if (this._isRemoteBrowser(browser)) {
|
||||
this._windowUtils.remoteFrameFullscreenChanged(browser);
|
||||
}
|
||||
this.enterDomFullscreen(browser);
|
||||
break;
|
||||
|
@ -122,6 +120,11 @@ var FullScreen = {
|
|||
break;
|
||||
}
|
||||
case "DOMFullscreen:Exited": {
|
||||
// Like entering DOM fullscreen, we also need to exit fullscreen
|
||||
// at the operating system level in the parent process here.
|
||||
if (this._isRemoteBrowser(browser)) {
|
||||
this._windowUtils.remoteFrameFullscreenReverted();
|
||||
}
|
||||
document.documentElement.removeAttribute("inDOMFullscreen");
|
||||
this.cleanupDomFullscreen();
|
||||
this.showNavToolbox();
|
||||
|
@ -200,7 +203,16 @@ var FullScreen = {
|
|||
window.removeEventListener("activate", this);
|
||||
|
||||
window.messageManager
|
||||
.broadcastAsyncMessage("DOMFullscreen:Cleanup");
|
||||
.broadcastAsyncMessage("DOMFullscreen:CleanUp");
|
||||
},
|
||||
|
||||
_isRemoteBrowser: function (aBrowser) {
|
||||
return gMultiProcessBrowser && aBrowser.getAttribute("remote") == "true";
|
||||
},
|
||||
|
||||
get _windowUtils() {
|
||||
return window.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindowUtils);
|
||||
},
|
||||
|
||||
getMouseTargetRect: function()
|
||||
|
|
|
@ -605,6 +605,9 @@ let DOMFullscreenHandler = {
|
|||
break;
|
||||
}
|
||||
case "DOMFullscreen:CleanUp": {
|
||||
let utils = content.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindowUtils);
|
||||
utils.exitFullscreen();
|
||||
this._fullscreenDoc = null;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -501,48 +501,6 @@ addMessageListener("NetworkPrioritizer:AdjustPriority", (msg) => {
|
|||
loadGroup.adjustPriority(msg.data.adjustment);
|
||||
});
|
||||
|
||||
let DOMFullscreenManager = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver,
|
||||
Ci.nsISupportsWeakReference]),
|
||||
|
||||
init: function() {
|
||||
Services.obs.addObserver(this, "ask-parent-to-exit-fullscreen", false);
|
||||
Services.obs.addObserver(this, "ask-parent-to-rollback-fullscreen", false);
|
||||
addMessageListener("DOMFullscreen:ChildrenMustExit", () => {
|
||||
let utils = content.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindowUtils);
|
||||
utils.exitFullscreen();
|
||||
});
|
||||
addEventListener("unload", () => {
|
||||
Services.obs.removeObserver(this, "ask-parent-to-exit-fullscreen");
|
||||
Services.obs.removeObserver(this, "ask-parent-to-rollback-fullscreen");
|
||||
});
|
||||
},
|
||||
|
||||
observe: function(aSubject, aTopic, aData) {
|
||||
// Observer notifications are global, which means that these notifications
|
||||
// might be coming from elements that are not actually children within this
|
||||
// windows' content. We should ignore those. This will not be necessary once
|
||||
// we fix bug 1053413 and stop using observer notifications for this stuff.
|
||||
if (aSubject.defaultView.top !== content) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (aTopic) {
|
||||
case "ask-parent-to-exit-fullscreen": {
|
||||
sendAsyncMessage("DOMFullscreen:RequestExit");
|
||||
break;
|
||||
}
|
||||
case "ask-parent-to-rollback-fullscreen": {
|
||||
sendAsyncMessage("DOMFullscreen:RequestRollback");
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
DOMFullscreenManager.init();
|
||||
|
||||
let AutoCompletePopup = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompletePopup]),
|
||||
|
||||
|
|
|
@ -263,8 +263,6 @@
|
|||
let RemoteController = Components.utils.import(jsm, {}).RemoteController;
|
||||
this._controller = new RemoteController(this);
|
||||
this.controllers.appendController(this._controller);
|
||||
|
||||
Services.obs.addObserver(this, "ask-children-to-exit-fullscreen", false);
|
||||
]]>
|
||||
</constructor>
|
||||
|
||||
|
@ -283,8 +281,6 @@
|
|||
this.mDestroyed = true;
|
||||
|
||||
this.controllers.removeController(this._controller);
|
||||
|
||||
Services.obs.removeObserver(this, "ask-children-to-exit-fullscreen");
|
||||
]]></body>
|
||||
</method>
|
||||
|
||||
|
@ -370,19 +366,6 @@
|
|||
]]></body>
|
||||
</method>
|
||||
|
||||
<method name="observe">
|
||||
<parameter name="aSubject"/>
|
||||
<parameter name="aTopic"/>
|
||||
<parameter name="aData"/>
|
||||
<body><![CDATA[
|
||||
if (aTopic == "ask-children-to-exit-fullscreen") {
|
||||
if (aSubject == window.document) {
|
||||
this.messageManager.sendAsyncMessage("DOMFullscreen:ChildrenMustExit");
|
||||
}
|
||||
}
|
||||
]]></body>
|
||||
</method>
|
||||
|
||||
<method name="enableDisableCommands">
|
||||
<parameter name="aAction"/>
|
||||
<parameter name="aEnabledLength"/>
|
||||
|
|
Загрузка…
Ссылка в новой задаче