diff options
Diffstat (limited to 'toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_while_idle.js')
-rw-r--r-- | toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_while_idle.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_while_idle.js b/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_while_idle.js new file mode 100644 index 000000000..8ff6a3509 --- /dev/null +++ b/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_while_idle.js @@ -0,0 +1,38 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function* runTests() { + let crashObserver = bgAddCrashObserver(); + + // make a good capture first - this ensures we have the <browser> + let goodUrl = bgTestPageURL(); + yield bgCapture(goodUrl); + ok(thumbnailExists(goodUrl), "Thumbnail should be cached after capture"); + removeThumbnail(goodUrl); + + // inject our content script. + let mm = bgInjectCrashContentScript(); + + // the observer for the crashing process is basically async, so it's hard + // to know when the <browser> has actually seen it. Easist is to just add + // our own observer. + Services.obs.addObserver(function onCrash() { + Services.obs.removeObserver(onCrash, "oop-frameloader-crashed"); + // spin the event loop to ensure the BPT observer was called. + executeSoon(function() { + // Now queue another capture and ensure it recovers. + bgCapture(goodUrl, { onDone: () => { + ok(thumbnailExists(goodUrl), "We should have recovered and handled new capture requests"); + removeThumbnail(goodUrl); + // Test done. + ok(crashObserver.crashed, "Saw a crash from this test"); + next(); + }}); + }); + }, "oop-frameloader-crashed", false); + + // Nothing is pending - crash the process. + info("Crashing the thumbnail content process."); + mm.sendAsyncMessage("thumbnails-test:crash"); + yield true; +} |