If you don’t write tests that open browser windows or work on the
front-end of Firefox, you can probably ignore this.

The initial browser in browser.xul is non-remote by default. This means
that as soon as it browses to some URL that can be loaded in the content
process (about:home, for example), we kick off the remoteness flipping
machinery that swaps out that initial browser and puts a remote one down in
its place to load the content in the child process.

In bug 1261842, I’m working on switching things around so that the initial
browser is remote as soon as possible (there’s still some set-up required
in JS, so I can’t just add the remote attribute to that initial browser).
Doing the flip sooner means we don’t have to set up the content viewer for
the non-remote browser (which gets immediately destroyed after the
remoteness flip), which is good for window-opening performance.

Normally, I wouldn’t bother these two mailing lists with this kind of
information, but while working on these patches, I’ve had to fix a bunch of
tests that worked properly under the old assumption (initial browser is
non-remote) but not under the new one (initial browser is remote), and I
wanted to give a PSA on those writing tests that open windows.

Here’s the deal: If you’re writing browser mochitests and you need to open
a window, please use BrowserTestUtils.openNewBrowserWindow. If you need to
trigger window openings via another mechanism (like window.open in
content), but need to do things with the newly opened window, set up a
Promise with BrowserTestUtils.waitForNewWindow. Both of these methods are
doing the right thing in terms of waiting for the new window to set itself
up and for the initial browser to be ready to do things with it.

If you care - here’s why: without them, you run the risk of falling into
the mistake I was seeing in a number of tests, which was opening a new
window, waiting for its load event, telling the initial browser to load
some URI, and then waiting for BrowserTestUtils.browserLoaded to resolve
before proceeding. This technique will fail frequently, because sometimes
the message to load the URI will arrive at content after it has loaded its
initial about:blank, but before the parent has had an opportunity to hear
that the initial about:blank has been loaded. This means that the
browserLoaded Promise will sometimes resolve even though the URI you
requested hasn’t finished (or maybe even started) loading.

Anyhow, with the patches in the bug, I appear to have fixed all of the
tests that fall into this trap - but if you write a new test that’s opening
a window that’s failing frequently and you don’t know why, it might be
because you need to use those BrowserTestUtils methods.

Feel free to follow up with me in this thread or over IRC if there are any
questions or concerns regarding bug 1261842.

Thanks,

-Mike
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to