Bug 1233497 - Don't yield or resolve CPOWs from Tasks or Promises in devtools tests. r=jryans

--HG--
extra : commitid : 9JIJ8ndwr2V
extra : rebase_source : b8f3d16cc2868f9f3d85aaee6129ddc8b2deb714
This commit is contained in:
Mike Conley 2016-01-07 13:40:41 -05:00
parent 94474914fb
commit 1f5ff0f8bb
35 changed files with 108 additions and 67 deletions

View File

@ -197,8 +197,12 @@ add_task(function*() {
yield findVariableViewProperties([{name: "ss2", value: "changed=ss2"}]); yield findVariableViewProperties([{name: "ss2", value: "changed=ss2"}]);
// Clearing items // Clearing items. Bug 1233497 makes it so that we can no longer yield
yield gWindow.clear(); // CPOWs from Tasks. We work around this by calling clear via a ContentTask
// instead.
yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() {
return Task.spawn(content.wrappedJSObject.clear);
});
yield gUI.once("store-objects-cleared"); yield gUI.once("store-objects-cleared");

View File

@ -203,41 +203,44 @@ function forceCollections() {
Cu.forceShrinkingGC(); Cu.forceShrinkingGC();
} }
/**
* Get all windows including frames recursively.
*
* @param {Window} [baseWindow]
* The base window at which to start looking for child windows
* (optional).
* @return {Set}
* A set of windows.
*/
function getAllWindows(baseWindow=gWindow) {
let windows = new Set();
let _getAllWindows = function(win) {
windows.add(win);
for (let i = 0; i < win.length; i++) {
_getAllWindows(win[i]);
}
};
_getAllWindows(baseWindow);
return windows;
}
/** /**
* Cleans up and finishes the test * Cleans up and finishes the test
*/ */
function* finishTests() { function* finishTests() {
for (let win of getAllWindows()) { // Bug 1233497 makes it so that we can no longer yield CPOWs from Tasks.
if (win.clear) { // We work around this by calling clear() via a ContentTask instead.
console.log("Clearing cookies, localStorage and indexedDBs from " + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() {
win.document.location); /**
yield win.clear(); * Get all windows including frames recursively.
*
* @param {Window} [baseWindow]
* The base window at which to start looking for child windows
* (optional).
* @return {Set}
* A set of windows.
*/
function getAllWindows(baseWindow) {
let windows = new Set();
let _getAllWindows = function(win) {
windows.add(win);
for (let i = 0; i < win.length; i++) {
_getAllWindows(win[i]);
}
};
_getAllWindows(baseWindow);
return windows;
} }
}
let windows = getAllWindows(content.wrappedJSObject);
for (let win of windows) {
if (win.clear) {
yield Task.spawn(win.clear);
}
}
});
forceCollections(); forceCollections();
finish(); finish();

View File

@ -18,7 +18,8 @@ const {
const TEST_URL = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelper test"; const TEST_URL = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelper test";
add_task(function*() { add_task(function*() {
let doc = yield addTab(TEST_URL); let browser = yield addTab(TEST_URL);
let doc = browser.contentDocument;
let nodeBuilder = () => { let nodeBuilder = () => {
let root = doc.createElement("div"); let root = doc.createElement("div");

View File

@ -18,7 +18,8 @@ const {
} = require("devtools/server/actors/highlighters/utils/markup"); } = require("devtools/server/actors/highlighters/utils/markup");
add_task(function*() { add_task(function*() {
let doc = yield addTab("about:preferences"); let browser = yield addTab("about:preferences");
let doc = browser.contentDocument;
let nodeBuilder = () => { let nodeBuilder = () => {
let root = doc.createElement("div"); let root = doc.createElement("div");

View File

@ -19,7 +19,8 @@ const {
const TEST_URL = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelper test"; const TEST_URL = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelper test";
add_task(function*() { add_task(function*() {
let doc = yield addTab(TEST_URL); let browser = yield addTab(TEST_URL);
let doc = browser.contentDocument;
let nodeBuilder = () => { let nodeBuilder = () => {
let root = doc.createElement("div"); let root = doc.createElement("div");

View File

@ -22,7 +22,8 @@ const TEST_URL_1 = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelp
const TEST_URL_2 = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelper test 2"; const TEST_URL_2 = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelper test 2";
add_task(function*() { add_task(function*() {
let doc = yield addTab(TEST_URL_2); let browser = yield addTab(TEST_URL_2);
let doc = browser.contentDocument;
let nodeBuilder = () => { let nodeBuilder = () => {
let root = doc.createElement("div"); let root = doc.createElement("div");

View File

@ -20,7 +20,8 @@ const {
const TEST_URL = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelper test"; const TEST_URL = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelper test";
add_task(function*() { add_task(function*() {
let doc = yield addTab(TEST_URL); let browser = yield addTab(TEST_URL);
let doc = browser.contentDocument;
let nodeBuilder = () => { let nodeBuilder = () => {
let root = doc.createElement("div"); let root = doc.createElement("div");

View File

@ -20,7 +20,8 @@ const {
const TEST_URL = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelper test"; const TEST_URL = "data:text/html;charset=utf-8,CanvasFrameAnonymousContentHelper test";
add_task(function*() { add_task(function*() {
let doc = yield addTab(TEST_URL); let browser = yield addTab(TEST_URL);
let doc = browser.contentDocument;
let nodeBuilder = () => { let nodeBuilder = () => {
let root = doc.createElement("div"); let root = doc.createElement("div");

View File

@ -8,7 +8,8 @@ const {DirectorManagerFront} = require("devtools/server/actors/director-manager"
const {DirectorRegistry} = require("devtools/server/actors/director-registry"); const {DirectorRegistry} = require("devtools/server/actors/director-registry");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "director-script-target.html"); let browser = yield addTab(MAIN_DOMAIN + "director-script-target.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -8,7 +8,8 @@ const {DirectorManagerFront} = require("devtools/server/actors/director-manager"
const {DirectorRegistry} = require("devtools/server/actors/director-registry"); const {DirectorRegistry} = require("devtools/server/actors/director-registry");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "director-script-target.html"); let browser = yield addTab(MAIN_DOMAIN + "director-script-target.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -10,7 +10,8 @@ const {DirectorRegistry} = require("devtools/server/actors/director-registry");
DirectorRegistry.clear(); DirectorRegistry.clear();
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "director-script-target.html"); let browser = yield addTab(MAIN_DOMAIN + "director-script-target.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -12,7 +12,8 @@ add_task(function*() {
// This test runs very slowly on linux32 debug EC2 instances. // This test runs very slowly on linux32 debug EC2 instances.
requestLongerTimeout(2); requestLongerTimeout(2);
let doc = yield addTab(MAIN_DOMAIN + "doc_force_cc.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_force_cc.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -9,7 +9,8 @@ const { TimelineFront } = require("devtools/server/actors/timeline");
const MARKER_NAMES = ["document::DOMContentLoaded", "document::Load"]; const MARKER_NAMES = ["document::DOMContentLoaded", "document::Load"];
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_innerHTML.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_innerHTML.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -9,7 +9,8 @@ const { TimelineFront } = require("devtools/server/actors/timeline");
const MARKER_NAMES = ["document::DOMContentLoaded", "document::Load"]; const MARKER_NAMES = ["document::DOMContentLoaded", "document::Load"];
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_innerHTML.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_innerHTML.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -9,7 +9,8 @@ const { TimelineFront } = require("devtools/server/actors/timeline");
const MARKER_NAMES = ["document::DOMContentLoaded", "document::Load"]; const MARKER_NAMES = ["document::DOMContentLoaded", "document::Load"];
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_innerHTML.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_innerHTML.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -9,7 +9,8 @@ const { PerformanceFront } = require("devtools/server/actors/performance");
const MARKER_NAME = "GarbageCollection"; const MARKER_NAME = "GarbageCollection";
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_force_gc.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_force_gc.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -9,7 +9,8 @@ const { PerformanceFront } = require("devtools/server/actors/performance");
const MARKER_NAME = "Parse HTML"; const MARKER_NAME = "Parse HTML";
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_innerHTML.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_innerHTML.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -9,7 +9,8 @@ const { PerformanceFront } = require("devtools/server/actors/performance");
const MARKER_NAME = "Styles"; const MARKER_NAME = "Styles";
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_perf.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_perf.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -10,7 +10,8 @@ const { consoleMethod, PMM_loadFrameScripts } = require("devtools/shared/perform
const MARKER_NAME = "TimeStamp"; const MARKER_NAME = "TimeStamp";
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_perf.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_perf.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -117,7 +117,8 @@ function getServerTabActor(callback) {
function test() { function test() {
// Open a test tab // Open a test tab
addTab(URL1).then(function(doc) { addTab(URL1).then(function(browser) {
let doc = browser.contentDocument;
getServerTabActor(function (tabActor) { getServerTabActor(function (tabActor) {
// In order to listen to internal will-navigate/navigate events // In order to listen to internal will-navigate/navigate events
events.on(tabActor, "will-navigate", function (data) { events.on(tabActor, "will-navigate", function (data) {
@ -128,7 +129,6 @@ function test() {
}); });
// Start listening for page load events // Start listening for page load events
let browser = gBrowser.selectedBrowser;
browser.addEventListener("DOMContentLoaded", onDOMContentLoaded, true); browser.addEventListener("DOMContentLoaded", onDOMContentLoaded, true);
browser.addEventListener("load", onLoad, true); browser.addEventListener("load", onLoad, true);

View File

@ -8,7 +8,8 @@
const { PerformanceFront } = require("devtools/server/actors/performance"); const { PerformanceFront } = require("devtools/server/actors/performance");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_allocations.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_allocations.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -11,7 +11,8 @@ const { PerformanceFront } = require("devtools/server/actors/performance");
const { sendProfilerCommand, PMM_isProfilerActive, PMM_stopProfiler, PMM_loadFrameScripts } = require("devtools/shared/performance/process-communication"); const { sendProfilerCommand, PMM_isProfilerActive, PMM_stopProfiler, PMM_loadFrameScripts } = require("devtools/shared/performance/process-communication");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_perf.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_perf.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -8,7 +8,8 @@
const { PerformanceFront } = require("devtools/server/actors/performance"); const { PerformanceFront } = require("devtools/server/actors/performance");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_perf.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_perf.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -9,7 +9,8 @@
const { PerformanceFront } = require("devtools/server/actors/performance"); const { PerformanceFront } = require("devtools/server/actors/performance");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_perf.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_perf.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -11,7 +11,8 @@ var config = { bufferSize: BUFFER_SIZE };
const { PerformanceFront } = require("devtools/server/actors/performance"); const { PerformanceFront } = require("devtools/server/actors/performance");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_perf.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_perf.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -11,7 +11,8 @@ const WAIT_TIME = 1000; // ms
const { PerformanceFront } = require("devtools/server/actors/performance"); const { PerformanceFront } = require("devtools/server/actors/performance");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_perf.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_perf.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -12,7 +12,8 @@ const WAIT_TIME = 1000; // ms
const { PerformanceFront } = require("devtools/server/actors/performance"); const { PerformanceFront } = require("devtools/server/actors/performance");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "doc_perf.html"); let browser = yield addTab(MAIN_DOMAIN + "doc_perf.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -302,7 +302,8 @@ function testRemoveIframe() {
} }
function test() { function test() {
addTab(MAIN_DOMAIN + "storage-dynamic-windows.html").then(function(doc) { addTab(MAIN_DOMAIN + "storage-dynamic-windows.html").then(function(browser) {
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let createConnection = () => { let createConnection = () => {

View File

@ -636,7 +636,8 @@ var testIDBEntries = Task.async(function*(index, hosts, indexedDBActor) {
}); });
function test() { function test() {
addTab(MAIN_DOMAIN + "storage-listings.html").then(function(doc) { addTab(MAIN_DOMAIN + "storage-listings.html").then(function(browser) {
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let createConnection = () => { let createConnection = () => {

View File

@ -282,7 +282,8 @@ function* finishTests(client) {
} }
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "storage-updates.html"); let browser = yield addTab(MAIN_DOMAIN + "storage-updates.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();

View File

@ -10,7 +10,8 @@
const {StyleSheetsFront} = require("devtools/server/actors/stylesheets"); const {StyleSheetsFront} = require("devtools/server/actors/stylesheets");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "stylesheets-nested-iframes.html"); let browser = yield addTab(MAIN_DOMAIN + "stylesheets-nested-iframes.html");
let doc = browser.contentDocument;
info("Initialising the debugger server and client."); info("Initialising the debugger server and client.");
initDebuggerServer(); initDebuggerServer();

View File

@ -13,7 +13,8 @@
const {TimelineFront} = require("devtools/server/actors/timeline"); const {TimelineFront} = require("devtools/server/actors/timeline");
add_task(function*() { add_task(function*() {
let doc = yield addTab("data:text/html;charset=utf-8,mop"); let browser = yield addTab("data:text/html;charset=utf-8,mop");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -10,7 +10,8 @@
const {TimelineFront} = require("devtools/server/actors/timeline"); const {TimelineFront} = require("devtools/server/actors/timeline");
add_task(function*() { add_task(function*() {
let doc = yield addTab("data:text/html;charset=utf-8,mop"); let browser = yield addTab("data:text/html;charset=utf-8,mop");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -10,7 +10,8 @@
const {TimelineFront} = require("devtools/server/actors/timeline"); const {TimelineFront} = require("devtools/server/actors/timeline");
add_task(function*() { add_task(function*() {
let doc = yield addTab(MAIN_DOMAIN + "timeline-iframe-parent.html"); let browser = yield addTab(MAIN_DOMAIN + "timeline-iframe-parent.html");
let doc = browser.contentDocument;
initDebuggerServer(); initDebuggerServer();
let client = new DebuggerClient(DebuggerServer.connectPipe()); let client = new DebuggerClient(DebuggerServer.connectPipe());

View File

@ -25,7 +25,10 @@ waitForExplicitFinish();
/** /**
* Add a new test tab in the browser and load the given url. * Add a new test tab in the browser and load the given url.
* @param {String} url The url to be loaded in the new tab * @param {String} url The url to be loaded in the new tab
* @return a promise that resolves to the document when the url is loaded * @return a promise that resolves to the new browser that the document
* is loaded in. Note that we cannot return the document
* directly, since this would be a CPOW in the e10s case,
* and Promises cannot be resolved with CPOWs (see bug 1233497).
*/ */
var addTab = Task.async(function* (url) { var addTab = Task.async(function* (url) {
info("Adding a new tab with URL: '" + url + "'"); info("Adding a new tab with URL: '" + url + "'");
@ -42,7 +45,7 @@ var addTab = Task.async(function* (url) {
waitForFocus(resolve, content, isBlank); waitForFocus(resolve, content, isBlank);
}); });
return tab.linkedBrowser.contentWindow.document; return tab.linkedBrowser;
}); });
function* initAnimationsFrontForUrl(url) { function* initAnimationsFrontForUrl(url) {