mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-11 08:13:35 +00:00
Bug 1435115 - Remove usage of enablePrivilege from quit.js. r=jmaher
This patch moves the contents of quit.js into talos-powers-content.js, and makes it callable from content via TalosPowersContent. The code required a few minor tweaks. MozReview-Commit-ID: KkAbcFO0xzT --HG-- extra : rebase_source : 4a165bc613fbc73ff8edd7bcfe2cf9cbd4a2af05
This commit is contained in:
parent
4a7ebcb3bb
commit
a6f34d4700
@ -6,7 +6,7 @@
|
||||
<meta charset="utf-8">
|
||||
<head>
|
||||
<script language="Javascript" type="text/javascript" src="scripts/MozillaFileLogger.js"></script>
|
||||
<script language="Javascript" type="text/javascript" src="tests/quit.js"></script>
|
||||
<script language="Javascript" type="text/javascript" src="chrome://talos-powers-content/content/TalosPowersContent.js"></script>
|
||||
<title>shutdown script</title>
|
||||
</head>
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
//JMAHER: this is temporarily commented out because this hangs the fennec browser
|
||||
// dumpLog('\tBrowser outer width/height: ' + window.outerWidth + '/' + window.outerHeight);
|
||||
dumpLog('__metrics\n');
|
||||
goQuitApplication(true);
|
||||
TalosPowersContent.goQuitApplication(true);
|
||||
">
|
||||
</body>
|
||||
</html>
|
||||
|
@ -5,8 +5,8 @@
|
||||
<title>Session Restore Regression Test</title>
|
||||
|
||||
<script type="text/javascript" src="chrome://pageloader/content/MozillaFileLogger.js"></script>
|
||||
<script type="text/javascript" src="chrome://pageloader/content/quit.js"></script>
|
||||
<script type="text/javascript" src="chrome://talos-powers-content/content/TalosContentProfiler.js"></script>
|
||||
<script type="text/javascript" src="chrome://talos-powers-content/content/TalosPowersContent.js"></script>
|
||||
<script type="text/javascript" src="chrome://session-restore-test/content/main.js">
|
||||
</script>
|
||||
|
||||
|
@ -31,7 +31,7 @@ addEventListener("load", function() {
|
||||
dumpLog("__startTimestamp" +
|
||||
Date.now() + // eslint-disable-line mozilla/avoid-Date-timing
|
||||
"__endTimestamp\n\n");
|
||||
goQuitApplication();
|
||||
TalosPowersContent.goQuitApplication();
|
||||
});
|
||||
|
||||
// In case the add-on has broadcasted the message before we were loaded,
|
||||
|
@ -5,7 +5,7 @@
|
||||
<head>
|
||||
<script language="Javascript" type="text/javascript" src="../../../../scripts/Profiler.js"></script>
|
||||
<script language="Javascript" type="text/javascript" src="../../../../scripts/MozillaFileLogger.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="../../../../tests/quit.js"></script>
|
||||
<script language="Javascript" type="text/javascript" src="chrome://talos-powers-content/content/TalosPowersContent.js"></script>
|
||||
<script language="javascript" type="text/javascript">
|
||||
|
||||
function runTest() {
|
||||
@ -24,7 +24,7 @@ function logResults(data) {
|
||||
|
||||
|
||||
window.setTimeout(function() {
|
||||
goQuitApplication();
|
||||
TalosPowersContent.goQuitApplication();
|
||||
window.close();
|
||||
}, 0);
|
||||
} else {
|
||||
|
@ -9,7 +9,6 @@
|
||||
<script language="Javascript" type="text/javascript" src="chrome://talos-powers-content/content/TalosPowersContent.js"></script>
|
||||
<script language="Javascript" type="text/javascript" src="../scripts/MozillaFileLogger.js"></script>
|
||||
<script language="Javascript" type="text/javascript" src="chrome://talos-powers-content/content/TalosContentProfiler.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="../tests/quit.js"></script>
|
||||
<script language="javascript" type="text/javascript">
|
||||
|
||||
async function painted() {
|
||||
@ -57,7 +56,7 @@ function dumpConsoleAndQuit() {
|
||||
// eslint-disable-next-line mozilla/avoid-Date-timing
|
||||
dumpLog("__startTimestamp" + Date.now() + "__endTimestamp\n");
|
||||
}
|
||||
goQuitApplication();
|
||||
TalosPowersContent.goQuitApplication();
|
||||
window.close();
|
||||
}, 0);
|
||||
}
|
||||
|
@ -8,6 +8,97 @@
|
||||
|
||||
var { interfaces: Ci, utils: Cu } = Components;
|
||||
|
||||
function canQuitApplication() {
|
||||
var os = Components.classes["@mozilla.org/observer-service;1"]
|
||||
.getService(Components.interfaces.nsIObserverService);
|
||||
if (!os) {
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
|
||||
.createInstance(Components.interfaces.nsISupportsPRBool);
|
||||
os.notifyObservers(cancelQuit, "quit-application-requested");
|
||||
|
||||
// Something aborted the quit process.
|
||||
if (cancelQuit.data) {
|
||||
return false;
|
||||
}
|
||||
} catch (ex) {
|
||||
}
|
||||
os.notifyObservers(null, "quit-application-granted");
|
||||
return true;
|
||||
}
|
||||
|
||||
function goQuitApplication(waitForSafeBrowsing) {
|
||||
var xulRuntime = Components.classes["@mozilla.org/xre/app-info;1"]
|
||||
.getService(Components.interfaces.nsIXULRuntime);
|
||||
if (xulRuntime.processType == xulRuntime.PROCESS_TYPE_CONTENT) {
|
||||
// If we're running in a remote browser, emit an event for a
|
||||
// frame script to pick up to quit the whole browser.
|
||||
var event = new content.CustomEvent("TalosQuitApplication", {bubbles: true, detail: {waitForSafeBrowsing}});
|
||||
content.document.dispatchEvent(event);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (waitForSafeBrowsing) {
|
||||
var SafeBrowsing = ChromeUtils.import("resource://gre/modules/SafeBrowsing.jsm", {}).SafeBrowsing;
|
||||
|
||||
var whenDone = () => {
|
||||
goQuitApplication(false);
|
||||
};
|
||||
|
||||
SafeBrowsing.addMozEntriesFinishedPromise.then(whenDone, whenDone);
|
||||
// Speed things up in case nobody else called this:
|
||||
SafeBrowsing.init();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!canQuitApplication()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const kAppStartup = "@mozilla.org/toolkit/app-startup;1";
|
||||
const kAppShell = "@mozilla.org/appshell/appShellService;1";
|
||||
var appService;
|
||||
|
||||
if (kAppStartup in Components.classes) {
|
||||
appService = Components.classes[kAppStartup].
|
||||
getService(Components.interfaces.nsIAppStartup);
|
||||
|
||||
} else if (kAppShell in Components.classes) {
|
||||
appService = Components.classes[kAppShell].
|
||||
getService(Components.interfaces.nsIAppShellService);
|
||||
} else {
|
||||
throw "goQuitApplication: no AppStartup/appShell";
|
||||
}
|
||||
|
||||
var windowManager = Components.
|
||||
classes["@mozilla.org/appshell/window-mediator;1"].getService();
|
||||
|
||||
var windowManagerInterface = windowManager.
|
||||
QueryInterface(Components.interfaces.nsIWindowMediator);
|
||||
|
||||
var enumerator = windowManagerInterface.getEnumerator(null);
|
||||
|
||||
while (enumerator.hasMoreElements()) {
|
||||
var domWindow = enumerator.getNext();
|
||||
if (("tryToClose" in domWindow) && !domWindow.tryToClose()) {
|
||||
return false;
|
||||
}
|
||||
domWindow.close();
|
||||
}
|
||||
|
||||
try {
|
||||
appService.quit(appService.eForceQuit);
|
||||
} catch (ex) {
|
||||
throw ("goQuitApplication: " + ex);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Content that wants to quit the whole session should
|
||||
* fire the TalosQuitApplication custom event. This will
|
||||
@ -85,6 +176,10 @@ addEventListener("TalosPowersContentGetStartupInfo", (e) => {
|
||||
});
|
||||
});
|
||||
|
||||
addEventListener("TalosPowersGoQuitApplication", (e) => {
|
||||
goQuitApplication(e.detail);
|
||||
});
|
||||
|
||||
/* *
|
||||
* Mediator for the generic ParentExec mechanism.
|
||||
* Listens for a query event from the content, forwards it as a query message
|
||||
|
@ -51,6 +51,14 @@ var TalosPowersParent;
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
goQuitApplication(waitForSafeBrowsing) {
|
||||
var event = new CustomEvent("TalosPowersGoQuitApplication", {
|
||||
bubbles: true,
|
||||
detail: waitForSafeBrowsing,
|
||||
});
|
||||
document.dispatchEvent(event);
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1,141 +0,0 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is the Mozilla Automated Testing Code
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Mozilla Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2005
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): Bob Clary <bob@bclary.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/*
|
||||
From mozilla/toolkit/content
|
||||
These files did not have a license
|
||||
*/
|
||||
|
||||
function canQuitApplication() {
|
||||
var os = Components.classes["@mozilla.org/observer-service;1"]
|
||||
.getService(Components.interfaces.nsIObserverService);
|
||||
if (!os) {
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
|
||||
.createInstance(Components.interfaces.nsISupportsPRBool);
|
||||
os.notifyObservers(cancelQuit, "quit-application-requested");
|
||||
|
||||
// Something aborted the quit process.
|
||||
if (cancelQuit.data) {
|
||||
return false;
|
||||
}
|
||||
} catch (ex) {
|
||||
}
|
||||
os.notifyObservers(null, "quit-application-granted");
|
||||
return true;
|
||||
}
|
||||
|
||||
function goQuitApplication(waitForSafeBrowsing) {
|
||||
/* eslint-disable mozilla/use-chromeutils-import */
|
||||
try {
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
} catch (ex) {
|
||||
throw ("goQuitApplication: privilege failure " + ex);
|
||||
}
|
||||
|
||||
var xulRuntime = Components.classes["@mozilla.org/xre/app-info;1"]
|
||||
.getService(Components.interfaces.nsIXULRuntime);
|
||||
if (xulRuntime.processType == xulRuntime.PROCESS_TYPE_CONTENT) {
|
||||
// If we're running in a remote browser, emit an event for a
|
||||
// frame script to pick up to quit the whole browser.
|
||||
var event = new CustomEvent("TalosQuitApplication", {bubbles: true, detail: {waitForSafeBrowsing}});
|
||||
document.dispatchEvent(event);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (waitForSafeBrowsing) {
|
||||
var SafeBrowsing = Components.utils.
|
||||
import("resource://gre/modules/SafeBrowsing.jsm", {}).SafeBrowsing;
|
||||
|
||||
var whenDone = () => {
|
||||
goQuitApplication(false);
|
||||
};
|
||||
|
||||
SafeBrowsing.addMozEntriesFinishedPromise.then(whenDone, whenDone);
|
||||
// Speed things up in case nobody else called this:
|
||||
SafeBrowsing.init();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!canQuitApplication()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const kAppStartup = "@mozilla.org/toolkit/app-startup;1";
|
||||
const kAppShell = "@mozilla.org/appshell/appShellService;1";
|
||||
var appService;
|
||||
|
||||
if (kAppStartup in Components.classes) {
|
||||
appService = Components.classes[kAppStartup].
|
||||
getService(Components.interfaces.nsIAppStartup);
|
||||
|
||||
} else if (kAppShell in Components.classes) {
|
||||
appService = Components.classes[kAppShell].
|
||||
getService(Components.interfaces.nsIAppShellService);
|
||||
} else {
|
||||
throw "goQuitApplication: no AppStartup/appShell";
|
||||
}
|
||||
|
||||
var windowManager = Components.
|
||||
classes["@mozilla.org/appshell/window-mediator;1"].getService();
|
||||
|
||||
var windowManagerInterface = windowManager.
|
||||
QueryInterface(Components.interfaces.nsIWindowMediator);
|
||||
|
||||
var enumerator = windowManagerInterface.getEnumerator(null);
|
||||
|
||||
while (enumerator.hasMoreElements()) {
|
||||
var domWindow = enumerator.getNext();
|
||||
if (("tryToClose" in domWindow) && !domWindow.tryToClose()) {
|
||||
return false;
|
||||
}
|
||||
domWindow.close();
|
||||
}
|
||||
|
||||
try {
|
||||
appService.quit(appService.eForceQuit);
|
||||
} catch (ex) {
|
||||
throw ("goQuitApplication: " + ex);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,6 @@
|
||||
<script language="JavaScript" type="text/javascript" src="../../scripts/MozillaFileLogger.js"></script>
|
||||
<script language="JavaScript" src="chrome://talos-powers-content/content/TalosContentProfiler.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="chrome://talos-powers-content/content/TalosPowersContent.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="../quit.js"></script>
|
||||
<script>
|
||||
var OPENER_DELAY = 1000; // ms delay between tests
|
||||
var kid, kidStartTime, kidEndTime, openTime;
|
||||
|
Loading…
Reference in New Issue
Block a user