summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/mochitest/test_startup_canary.html
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/mochitest/test_startup_canary.html')
-rw-r--r--toolkit/components/extensions/test/mochitest/test_startup_canary.html76
1 files changed, 76 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/mochitest/test_startup_canary.html b/toolkit/components/extensions/test/mochitest/test_startup_canary.html
new file mode 100644
index 0000000000..1f705940c2
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/test_startup_canary.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Check StartupCache</title>
+ <meta charset="utf-8">
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="text/javascript" src="head.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+
+<script type="text/javascript">
+"use strict";
+
+// The startup canary file is removed sometime after the startup, with a delay,
+// e.g. 30 seconds on desktop:
+// https://searchfox.org/mozilla-central/rev/aa46c2dcccbc6fd4265edca05d3d00cccdfc97b9/browser/components/BrowserGlue.jsm#2486-2490
+// e.g. up to 15 seconds (as an idle timeout) on Android:
+// https://searchfox.org/mozilla-central/rev/aa46c2dcccbc6fd4265edca05d3d00cccdfc97b9/mobile/android/chrome/geckoview/geckoview.js#510
+//
+// This test completes quickly if run sequentially after the many tests in this
+// directory. Otherwise the test may wait for up to MAX_DELAY_SEC seconds.
+const MAX_DELAY_SEC = 30;
+SimpleTest.requestFlakyTimeout("trackStartupCrashEnd() is called with a delay");
+
+// This test is not extension-specific, but placed in the extensions/ directory
+// because it complements the test_check_startupcache.html test, and because
+// the directory has many other tests, to minimize the amount of time wasted on
+// waiting.
+
+add_task(async function check_startup_canary() {
+ // The ".startup-incomplete" file is created at the startup, and supposedly
+ // cleared "soon" after startup (when the application knows that the startup
+ // succeeded without crash). Bug 1624724 and bug 1728461 show that this has
+ // not always been the case, so this regression test verifies that the file
+ // is actually non-existent when this test start, see
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1728461#c12
+
+ // This test is opened as a web page in the browser, so that should have been
+ // a point where the startup should have been considered done.
+
+ async function canaryExists() {
+ let chromeScript = loadChromeScript(async () => {
+ // This file is called FILE_STARTUP_INCOMPLETE in nsAppRunner.cpp and
+ // referenced via mozilla::startup::GetIncompleteStartupFile:
+ let file = Services.dirsvc.get("ProfLD", Ci.nsIFile);
+ file.append(".startup-incomplete");
+ this.sendAsyncMessage("canary_exists", file.exists());
+ });
+ let exists = await chromeScript.promiseOneMessage("canary_exists");
+ chromeScript.destroy();
+ return exists;
+ }
+
+ info("Checking if startup canary exists");
+ let i = 0;
+ while (await canaryExists()) {
+ if (i++ > MAX_DELAY_SEC) {
+ info("Canary still exists, giving up on waiting");
+ break;
+ }
+ info(`Startup canary exists, will retry ${i} / ${MAX_DELAY_SEC}.`);
+ await new Promise(resolve => setTimeout(resolve, 1000));
+ }
+
+ is(
+ await canaryExists(),
+ false,
+ "Startup canary should have been removed after early startup"
+ );
+});
+
+</script>
+
+</body>
+</html>