Closed Bug 1697354 Opened 3 years ago Closed 3 years ago

Intermittent devtools-fission devtools/shared/resources/tests/browser_target_list_frames.js | The new target should be the newly loaded document - Got "about:blank", expected "https://example.org/document-builder.sjs?html=org"

Categories

(DevTools :: General, defect, P5)

defect

Tracking

(firefox-esr78 unaffected, firefox86 unaffected, firefox87 unaffected, firefox88 fixed)

RESOLVED FIXED
88 Branch
Tracking Status
firefox-esr78 --- unaffected
firefox86 --- unaffected
firefox87 --- unaffected
firefox88 --- fixed

People

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

References

(Regression)

Details

(Keywords: intermittent-failure, regression)

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


[task 2021-03-10T03:18:43.395Z] 03:18:43     INFO - TEST-PASS | devtools/shared/resources/tests/browser_target_list_frames.js | isTopLevel property is correct - 
[task 2021-03-10T03:18:43.395Z] 03:18:43     INFO - Console message: [JavaScript Error: "The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol." {file: "https://example.org/document-builder.sjs?html=org" line: 0}]
[task 2021-03-10T03:18:43.395Z] 03:18:43     INFO - TEST-PASS | devtools/shared/resources/tests/browser_target_list_frames.js | We are only notified about frame targets - 
[task 2021-03-10T03:18:43.395Z] 03:18:43     INFO - TEST-PASS | devtools/shared/resources/tests/browser_target_list_frames.js | retrieved all targets after navigation - 
[task 2021-03-10T03:18:43.395Z] 03:18:43     INFO - Buffered messages finished
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - TEST-UNEXPECTED-FAIL | devtools/shared/resources/tests/browser_target_list_frames.js | The new target should be the newly loaded document - Got "about:blank", expected "https://example.org/document-builder.sjs?html=org"
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - Stack trace:
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - chrome://mochikit/content/browser-test.js:test_is:1359
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - chrome://mochitests/content/browser/devtools/shared/resources/tests/browser_target_list_frames.js:testTabFrames:235
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - chrome://mochitests/content/browser/devtools/shared/resources/tests/browser_target_list_frames.js:null:30
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - chrome://mochikit/content/browser-test.js:Tester_execTest/<:1089
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - chrome://mochikit/content/browser-test.js:Tester_execTest:1129
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - chrome://mochikit/content/browser-test.js:nextTest/<:949
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - chrome://mochikit/content/tests/SimpleTest/SimpleTest.js:SimpleTest.waitForFocus/waitForFocusInner/focusedOrLoaded/<:1037
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - TEST-PASS | devtools/shared/resources/tests/browser_target_list_frames.js | and should be flagged as a target switching - 
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - TEST-PASS | devtools/shared/resources/tests/browser_target_list_frames.js | The two existing targets should be destroyed - 
[task 2021-03-10T03:18:43.396Z] 03:18:43     INFO - TEST-PASS | devtools/shared/resources/tests/browser_target_list_frames.js | The first destroyed should be the previous top level one - 
[task 2021-03-10T03:18:43.397Z] 03:18:43     INFO - TEST-PASS | devtools/shared/resources/tests/browser_target_list_frames.js | the target destruction is flagged as target switching - 
[task 2021-03-10T03:18:43.397Z] 03:18:43     INFO - TEST-PASS | devtools/shared/resources/tests/browser_target_list_frames.js | The second destroyed should be the iframe one - 
[task 2021-03-10T03:18:43.397Z] 03:18:43     INFO - TEST-PASS | devtools/shared/resources/tests/browser_target_list_frames.js | the target destruction is not flagged as target switching for iframes - 
[task 2021-03-10T03:18:43.397Z] 03:18:43     INFO - GECKO(3412) | console.error: "Tried to send a 'target-destroyed-form' event on an already destroyed actor 'watcher'"
[task 2021-03-10T03:18:43.397Z] 03:18:43     INFO - Leaving test bound```
Summary: Intermittent devtools/shared/resources/tests/browser_target_list_frames.js | The new target should be the newly loaded document - Got "about:blank", expected "https://example.org/document-builder.sjs?html=org" → Intermittent devtools-fission devtools/shared/resources/tests/browser_target_list_frames.js | The new target should be the newly loaded document - Got "about:blank", expected "https://example.org/document-builder.sjs?html=org"
Regressed by: 1694906
Has Regression Range: --- → yes
Keywords: regression

Looks like this spiked on Windows with fission after Bug 1694906 landed.

From what I can see, we get a Target too early, and the URL is still on about:blank and not yet on the real location. I'm not exactly sure why my change messed up the timings for this particular sequence, but I'll take a look.

Some easy options to reduce the breakage:

  • skip on windows+fission
  • skip the URL assert on Fission for now

I also feel like this will be fixed completely by Bug 1644397. Once all targets are created via JSWindow actors, we should not get the Target while it's temporarily sitting on about:blank

Assignee: nobody → jdescottes
Status: NEW → ASSIGNED
Pushed by malexandru@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/de15019f6e77
Disable browser_target_list_frames.js on win10 fission for causing permafailures. a=disable

I think the timing issue boils down to one change from target-list:

-    // Fetch the new target from the existing client so that the new target uses the same client.
-    const newTarget = await TabTargetFactory.forTab(localTab, client);
+    // Fetch the new target from the descriptor.
+    const newTarget = await this.descriptorFront.getTarget();

This is from TargetCommand::onLocalTabRemotenessChange.
Before we used to go through TabTargetFactory::forTab which would:

  • call rootFront::getTab (this would end up returning the existing descriptorFront, but it's still an additional server round trip)
  • call descriptor::getTarget

Now we directly reuse the descriptor so we skip the call to getTab, and we call getTarget earlier, potentially while the target is still on about:blank.
It's not clear to me if the about:blank load happens in the same process as the page being loaded, or if a new process change will occur. Again this will be fixed by server side target switching but I wonder what happens in practice for a toolbox.

Considering that other target-switching tests have not spiked since we landed the target->descriptor change, I'm going to guess that the toolbox behavior is not impacted.

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

Couple of try pushes:

It seems that server side target switching indeed fixes this.

Status: ASSIGNED → RESOLVED
Closed: 3 years ago
Resolution: --- → FIXED
Target Milestone: --- → 88 Branch
See Also: → 1698212
You need to log in before you can comment on or make changes to this bug.