Bug 1540170 - release assert if something tries to start the history service before profile startup, r=mak

Differential Revision: https://phabricator.services.mozilla.com/D24910

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Gijs Kruitbosch 2019-04-04 23:05:23 +00:00
parent 13ff7ba935
commit 8833331cd2
2 changed files with 26 additions and 0 deletions

View File

@ -1,8 +1,24 @@
// We load HTML documents, which try to track link state, which requires
// the history service, which requires a profile.
do_get_profile();
function run_test() {
// vectors by the html5security project (https://code.google.com/p/html5security/ & Creative Commons 3.0 BY), see CC-BY-LICENSE for the full license
load("results.js"); // gives us a `vectors' array
/* import-globals-from ./results.js */
// xpcshell tests are weird. They fake shutdown after the test finishes. This upsets this test
// because it will try to create the history service to check for visited state on the links
// we're parsing.
// Creating the history service midway through shutdown breaks.
// We can't catch this in the history component because we're not *actually* shutting down,
// and so the app startup's service's `shuttingDown` bool is false, even though normally that
// is set to true *before* profile-change-teardown notifications are fired.
// To work around this, just force the history service to be created earlier:
let {PlacesUtils} = ChromeUtils.import("resource://gre/modules/PlacesUtils.jsm");
Assert.ok(PlacesUtils.history.databaseStatus <= 1, "ensure places database is successfully initialized.");
var ParserUtils = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils);
var sanitizeFlags = ParserUtils.SanitizerCidEmbedsOnly | ParserUtils.SanitizerDropForms | ParserUtils.SanitizerDropNonCSSPresentation;
// flags according to

View File

@ -1445,6 +1445,16 @@ History::History()
mObservers(VISIT_OBSERVERS_INITIAL_CACHE_LENGTH),
mRecentlyVisitedURIs(RECENTLY_VISITED_URIS_SIZE) {
NS_ASSERTION(!gService, "Ruh-roh! This service has already been created!");
if (XRE_IsParentProcess()) {
nsCOMPtr<nsIProperties> dirsvc = services::GetDirectoryService();
bool haveProfile = false;
MOZ_RELEASE_ASSERT(
dirsvc &&
NS_SUCCEEDED(
dirsvc->Has(NS_APP_USER_PROFILE_50_DIR, &haveProfile)) &&
haveProfile,
"Can't construct history service if there is no profile.");
}
gService = this;
nsCOMPtr<nsIObserverService> os = services::GetObserverService();