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:
Xidorn Quan 2015-05-21 09:52:26 +12:00
Родитель ae0095611c
Коммит eeb254e9de
4 изменённых файлов: 21 добавлений и 65 удалений

Просмотреть файл

@ -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"/>