Closed Bug 1763001 Opened 2 years ago Closed 2 years ago

Intermittent layout/base/tests/chrome/test_color_scheme_browser.xhtml | AbortError: Actor 'SpecialPowers' destroyed before query 'Spawn' was resolved - Should not throw any errors

Categories

(Core :: Layout, defect, P5)

defect

Tracking

()

RESOLVED FIXED
101 Branch
Tracking Status
firefox-esr91 --- unaffected
firefox99 --- unaffected
firefox100 --- unaffected
firefox101 --- fixed

People

(Reporter: intermittent-bug-filer, Assigned: emilio)

References

(Regression)

Details

(Keywords: intermittent-failure, regression)

Attachments

(1 file)

Filed by: mlaza [at] mozilla.com
Parsed log: https://treeherder.mozilla.org/logviewer?job_id=373328635&repo=autoland
Full log: https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/SJmGhrG0S_u3guQG7bn8mA/runs/0/artifacts/public/logs/live_backing.log


task 2022-04-04T19:56:03.544Z] 19:56:03     INFO - Buffered messages finished
[task 2022-04-04T19:56:03.545Z] 19:56:03     INFO - TEST-UNEXPECTED-FAIL | layout/base/tests/chrome/test_color_scheme_browser.xhtml | AbortError: Actor 'SpecialPowers' destroyed before query 'Spawn' was resolved - Should not throw any errors
[task 2022-04-04T19:56:03.545Z] 19:56:03     INFO - add_task/nextTick/<@chrome://mochikit/content/tests/SimpleTest/SimpleTest.js:2103:26
[task 2022-04-04T19:56:03.545Z] 19:56:03     INFO - GECKO(5204) | [Child 9184, Main Thread] WARNING: '!CanSend() || !mManager || !mManager->CanSend()', file /builds/worker/checkouts/gecko/dom/ipc/jsactor/JSWindowActorChild.cpp:44
[task 2022-04-04T19:56:03.546Z] 19:56:03     INFO - GECKO(5204) | MEMORY STAT | vsize 2120972MB | vsizeMaxContiguous 65606854MB | residentFast 469MB | heapAllocated 208MB
[task 2022-04-04T19:56:03.546Z] 19:56:03     INFO - GECKO(5204) | [Parent 4592, Main Thread] WARNING: early callback, or time went backwards: '!aAllowIdleDispatch', file /builds/worker/checkouts/gecko/xpcom/threads/IdleTaskRunner.cpp:197
[task 2022-04-04T19:56:03.547Z] 19:56:03     INFO - TEST-OK | layout/base/tests/chrome/test_color_scheme_browser.xhtml | took 290ms
Assignee: nobody → emilio

Nika, it seems like remote browser elements don't block the load event, is that intentional?

Flags: needinfo?(nika)
Has Regression Range: --- → yes

Remote browsers don't block onload otherwise, so we could spawn a task
to the initial about:blank, and getting that replaced by the real load
before the task executed.

Maybe there's a better way than watching nsIWPL. Probably it should block the load event the same way fission iframes or non-remote browsers do, but I'll send a patch waiting for now.

Flags: needinfo?(nika)
Flags: needinfo?(emilio)

Gijs, my patch is hitting a lint issue about:

Do not use add_task() for setup, use add_setup() instead.

But add_setup() is not defined in mochitest-chrome, apparently. I can workaround it by renaming the function, but maybe the lint needs to be tweaked? Or add_setup should become available to mochitest-chrome perhaps?

Flags: needinfo?(gijskruitbosch+bugs)
Pushed by ealvarez@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/542bff487bbf
Manually wait for remote browser load in test_color_scheme_browser.xhtml. r=nika

(In reply to Emilio Cobos Álvarez (:emilio) from comment #6)

Gijs, my patch is hitting a lint issue about:

Do not use add_task() for setup, use add_setup() instead.

But add_setup() is not defined in mochitest-chrome, apparently.

Nor in mochitest-plain. mochitest-chrome and plain have their own add_task implementation, and would need their own add_setup implementation. After the browser mochitest ones, I already did the work for xpcshell implementation in bug 1757040 (for which the same is true). I'd be happy to help review something for mochitest-plain/chrome, but when I asked about mochitest-plain in #developers a while ago, the suggestion was that few tests get created these days and few use add_task at all, so it was bottom of my priority pile.

I can workaround it by renaming the function, but maybe the lint needs to be tweaked?

The lint is only applied to the browser mochitest environment. It sounds like the linter thinks this chrome test is a browser mochitest. This normally happens because multiple test flavours share the same directory.

In this case, it looks like the test is in layout/base/tests/chrome/, so I don't know why it's getting the browser mochitest environment at all. Mark - maybe https://searchfox.org/mozilla-central/rev/fbb1e8462ad82b0e76b5c13dd0d6280cfb69e68d/layout/base/tests/.eslintrc.js#3-5 needs fixing? Looks like there are browser tests directly in that directory, but of course not in the chrome subdirectory. I don't know how best to represent that in an .eslintrc file - can we override the env in the subdir entirely, instead of extending the existing env?

Flags: needinfo?(gijskruitbosch+bugs) → needinfo?(standard8)

(In reply to :Gijs (he/him) from comment #8)

In this case, it looks like the test is in layout/base/tests/chrome/, so I don't know why it's getting the browser mochitest environment at all. Mark - maybe https://searchfox.org/mozilla-central/rev/fbb1e8462ad82b0e76b5c13dd0d6280cfb69e68d/layout/base/tests/.eslintrc.js#3-5 needs fixing? Looks like there are browser tests directly in that directory, but of course not in the chrome subdirectory. I don't know how best to represent that in an .eslintrc file - can we override the env in the subdir entirely, instead of extending the existing env?

The problem is the mixture of test types in layout/base/tests/, that top directory has both browser.ini and mochitest.ini. As a result it needs to know about both environments via the .eslintrc.js file. We do have bug 1379669 for potentially changing how we apply the ESLint environments so that different test types could nicely sit in the same directory, but I have never got around to investigating how much of a performance hit that might be (or how complex).

I think the simplest solution here for our current situation would be to move the two types of tests into separate sub-directories. The only other option would be to only apply the environments to the particular files in the directory, but that feels like it would be harder for maintenance.

Flags: needinfo?(standard8)

(In reply to Mark Banner (:standard8) from comment #9)

(In reply to :Gijs (he/him) from comment #8)

In this case, it looks like the test is in layout/base/tests/chrome/, so I don't know why it's getting the browser mochitest environment at all. Mark - maybe https://searchfox.org/mozilla-central/rev/fbb1e8462ad82b0e76b5c13dd0d6280cfb69e68d/layout/base/tests/.eslintrc.js#3-5 needs fixing? Looks like there are browser tests directly in that directory, but of course not in the chrome subdirectory. I don't know how best to represent that in an .eslintrc file - can we override the env in the subdir entirely, instead of extending the existing env?

The problem is the mixture of test types in layout/base/tests/, that top directory has both browser.ini and mochitest.ini. As a result it needs to know about both environments via the .eslintrc.js file. We do have bug 1379669 for potentially changing how we apply the ESLint environments so that different test types could nicely sit in the same directory, but I have never got around to investigating how much of a performance hit that might be (or how complex).

I think the simplest solution here for our current situation would be to move the two types of tests into separate sub-directories. The only other option would be to only apply the environments to the particular files in the directory, but that feels like it would be harder for maintenance.

I'm sorry but I'm confused. The "offending" tests are not in layout/base/tests/, they are in layout/base/tests/chrome/. Can we add a new .eslintrc.js there that doesn't include the browser-test environment at all, overriding the existing .eslintrc.js file that is in layout/base/tests/ ? That wouldn't fix the existing issue inside layout/base/tests/ itself, but would help for the tests that are already in the chrome/ subdir, right?

Flags: needinfo?(standard8)

Set release status flags based on info from the regressing bug 1762298

Status: NEW → RESOLVED
Closed: 2 years ago
Resolution: --- → FIXED
Target Milestone: --- → 101 Branch

(In reply to :Gijs (he/him) from comment #10)

I'm sorry but I'm confused. The "offending" tests are not in layout/base/tests/, they are in layout/base/tests/chrome/. Can we add a new .eslintrc.js there that doesn't include the browser-test environment at all, overriding the existing .eslintrc.js file that is in layout/base/tests/ ? That wouldn't fix the existing issue inside layout/base/tests/ itself, but would help for the tests that are already in the chrome/ subdir, right?

From an ESLint perspective, browser-test etc are configurations rather than environments - as well as setting environment variables, we also turn on/off various rules specific for those tests.

So when layout/base/tests/.eslintrc.js extends from the browser-test configuration, then that configuration applies to all the subdirectories of layout/base/tests. If there's another .eslintrc.js in the sub-tree, then it builds on top of the parent configurations rather than replacing them.

Unlike environments, we can't turn off configurations except for manually disabling all the rules etc.

Flags: needinfo?(standard8)

(In reply to Mark Banner (:standard8) from comment #14)

Unlike environments, we can't turn off configurations except for manually disabling all the rules etc.

Just had a thought, one option might be to set "mozilla/no-addtask-setup": "off", in chrome-test and mochitest-test. That would fix it for situations like this, though it would be ambiguous for if it was turned on or not in directories like layout/base/test where we have both mochitest-test and browser-test. I suspect the browser-test version would win in this case and turn it on, as that's listed second.

Regressions: 1763396
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: