mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 23:05:42 +00:00
Bug 1333126: plugin crash tests now wait properly for crash handling; r=gsvelto
MozReview-Commit-ID: 70AvBYhCKnE --HG-- extra : rebase_source : 78ff19d2bf6d119a3d6d488fa198a5f6731dcf5e
This commit is contained in:
parent
bbf7c0b952
commit
ca2d011a97
@ -1,4 +1,5 @@
|
||||
Cu.import("resource://gre/modules/CrashSubmit.jsm", this);
|
||||
Cu.import("resource://gre/modules/PromiseUtils.jsm");
|
||||
|
||||
const SERVER_URL = "http://example.com/browser/toolkit/crashreporter/test/browser/crashreport.sjs";
|
||||
|
||||
@ -6,6 +7,8 @@ var gTestRoot = getRootDirectory(gTestPath).replace("chrome://mochitests/content
|
||||
var gTestBrowser = null;
|
||||
var config = {};
|
||||
|
||||
let gRegisteredCrashObserver = null;
|
||||
|
||||
add_task(async function() {
|
||||
// The test harness sets MOZ_CRASHREPORTER_NO_REPORT, which disables plugin
|
||||
// crash reports. This test needs them enabled. The test also needs a mock
|
||||
@ -27,6 +30,9 @@ add_task(async function() {
|
||||
|
||||
registerCleanupFunction(async function() {
|
||||
Services.prefs.clearUserPref("dom.ipc.plugins.timeoutSecs");
|
||||
if (gRegisteredCrashObserver !== null) {
|
||||
Services.obs.removeObserver(gRegisteredCrashObserver, "plugin-crashed");
|
||||
}
|
||||
env.set("MOZ_CRASHREPORTER_NO_REPORT", noReport);
|
||||
env.set("MOZ_CRASHREPORTER_URL", serverUrl);
|
||||
env = null;
|
||||
@ -113,6 +119,25 @@ add_task(async function() {
|
||||
});
|
||||
|
||||
add_task(async function() {
|
||||
// Since this test doesn't actually submit a crash report, we can't await
|
||||
// on crashReportStatus. This ensures the crash handling mechanism is
|
||||
// completely finished before exiting the test.
|
||||
let crashObserverDeferred = PromiseUtils.defer();
|
||||
|
||||
gRegisteredCrashObserver = (subject, topic, data) => {
|
||||
if (topic != "plugin-crashed") {
|
||||
return;
|
||||
}
|
||||
let propBag = subject.QueryInterface(Ci.nsIPropertyBag2);
|
||||
let minidumpID = propBag.getPropertyAsAString("pluginDumpID");
|
||||
|
||||
Services.crashmanager.ensureCrashIsPresent(minidumpID).then(() => {
|
||||
crashObserverDeferred.resolve();
|
||||
});
|
||||
};
|
||||
|
||||
Services.obs.addObserver(gRegisteredCrashObserver, "plugin-crashed");
|
||||
|
||||
config = {
|
||||
shouldSubmissionUIBeVisible: false,
|
||||
comment: "",
|
||||
@ -141,6 +166,8 @@ add_task(async function() {
|
||||
Assert.equal(!!pleaseSubmit && content.getComputedStyle(pleaseSubmit).display == "block",
|
||||
aConfig.shouldSubmissionUIBeVisible, "Plugin crash UI should not be visible");
|
||||
});
|
||||
|
||||
await crashObserverDeferred.promise;
|
||||
});
|
||||
|
||||
function promisePluginCrashed() {
|
||||
|
@ -1,6 +1,8 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
Cu.import("resource://gre/modules/PromiseUtils.jsm");
|
||||
|
||||
/**
|
||||
* With e10s, plugins must run in their own process. This means we have
|
||||
* three processes at a minimum when we're running a plugin:
|
||||
@ -79,6 +81,9 @@ function preparePlugin(browser, pluginFallbackState) {
|
||||
});
|
||||
}
|
||||
|
||||
// Allows tests to ensure crash handling is completely finished before exiting.
|
||||
let crashObserverDeferred = PromiseUtils.defer();
|
||||
|
||||
add_task(async function setup() {
|
||||
// Bypass click-to-play
|
||||
setTestPluginEnabledState(Ci.nsIPluginTag.STATE_ENABLED);
|
||||
@ -108,6 +113,10 @@ add_task(async function setup() {
|
||||
|
||||
pluginDumpFile.remove(false);
|
||||
extraFile.remove(false);
|
||||
|
||||
// Resolve and replace the deferred object so the next test can wait on it
|
||||
crashObserverDeferred.resolve();
|
||||
crashObserverDeferred = PromiseUtils.defer();
|
||||
});
|
||||
};
|
||||
|
||||
@ -183,6 +192,7 @@ add_task(async function testChromeHearsPluginCrashFirst() {
|
||||
"Should have been showing crash report UI");
|
||||
});
|
||||
await BrowserTestUtils.closeWindow(win);
|
||||
await crashObserverDeferred.promise;
|
||||
});
|
||||
|
||||
/**
|
||||
@ -253,4 +263,5 @@ add_task(async function testContentHearsCrashFirst() {
|
||||
});
|
||||
|
||||
await BrowserTestUtils.closeWindow(win);
|
||||
await crashObserverDeferred.promise;
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user