Closed Bug 1659201 Opened 5 years ago Closed 5 years ago

Cannot Join Audio in Zoom calls in Nightly

Categories

(Core :: Web Audio, defect, P1)

defect

Tracking

()

RESOLVED FIXED
81 Branch
Tracking Status
firefox-esr68 --- unaffected
firefox-esr78 --- unaffected
firefox79 --- unaffected
firefox80 --- unaffected
firefox81 + fixed

People

(Reporter: mconley, Assigned: karlt)

References

(Regression)

Details

(Keywords: regression)

Attachments

(4 files)

17:46.92 INFO: No more integration revisions, bisection finished.
17:46.92 INFO: Last good revision: 8ba557eb2370b63210e08a1f5f75077aa5b861e1
17:46.92 INFO: First bad revision: c48293a61cbf5d6ee8f94719670605281b549702
17:46.92 INFO: Pushlog:
https://hg.mozilla.org/integration/autoland/pushloghtml?fromchange=8ba557eb2370b63210e08a1f5f75077aa5b861e1&tochange=c48293a61cbf5d6ee8f94719670605281b549702

STR:

  1. Join a Zoom call using the web interface
  2. Once you have entered the room, click on "Join Audio" in the bottom left corner

ER:

The WebRTC permission panel should appear asking which microphone device you'd like to share.

AR:

No panel appears, so sharing the microphone is not possible.

[Tracking Requested - why for this release]:

This seems like something we want to make sure we get fixed before 81 goes out the door, since so many people are video conferencing for work these days.

Karl, the regression range for this points at bug 1655544 - does that make sense to you?

Flags: needinfo?(karlt)

Thank you for narrowing this down.
In step 2, I needed to attempt to "Join Audio by Computer".

This is triggered by constructing an object of content-JS-extended AudioWorkletNode class when AudioParams are registered on the node.

Assertion failure: givenProto == reflectorProto (How are we supposed to change the proto now?), at /home/karl/moz/dev/dom/bindings/BindingUtils.cpp:3960

#7  0x00007f064bb78879 in mozilla::dom::binding_detail::AssertReflectorHasGivenProto(JSContext*, JSObject*, JS::Handle<JSObject*>)
    (aCx=0x7f063c62f000, aReflector=0x1eb5092341f0, aGivenProto=...)
    at /home/karl/moz/dev/dom/bindings/BindingUtils.cpp:3959
#8  0x00007f064a8027e9 in mozilla::dom::binding_detail::DoGetOrCreateDOMReflector<mozilla::dom::AudioWorkletNode, (mozilla::dom::binding_detail::GetOrCreateReflectorWrapBehavior)0>(JSContext*, mozilla::dom::AudioWorkletNode*, JS::Handle<JSObject*>, JS::MutableHandle<JS::Value>) (cx=0x7f063c62f000, value=
    0x7f062b0e3400, givenProto=..., rval=...)
    at /var/karl/moz/obj/dist/include/mozilla/dom/BindingUtils.h:1041
#9  0x00007f064a80264a in mozilla::dom::GetOrCreateDOMReflector<mozilla::dom::AudioWorkletNode>(JSContext*, mozilla::dom::AudioWorkletNode*, JS::MutableHandle<JS::Value>, JS::Handle<JSObject*>)
    (cx=0x7f063c62f000, value=0x7f062b0e3400, rval=..., givenProto=...)
    at /var/karl/moz/obj/dist/include/mozilla/dom/BindingUtils.h:1113
#10 0x00007f064a8025cd in mozilla::dom::GetOrCreateDOMReflectorHelper<RefPtr<mozilla::dom::AudioWorkletNode>, true>::GetOrCreate(JSContext*, RefPtr<mozilla::dom::AudioWorkletNode> const&, JS::Handle<JSObject*>, JS::MutableHandle<JS::Value>) (cx=0x7f063c62f000, value=..., givenProto=..., rval=...)
    at /var/karl/moz/obj/dist/include/mozilla/dom/BindingUtils.h:1682
#11 0x00007f064a80230a in mozilla::dom::GetOrCreateDOMReflector<RefPtr<mozilla::dom::AudioWorkletNode> >(JSContext*, RefPtr<mozilla::dom::AudioWorkletNode>&, JS::MutableHandle<JS::Value>, JS::Handle<JSObject*>)
   ..., rval=..., givenProto=...) at /var/karl/moz/obj/dist/include/mozilla/dom/BindingUtils.h:1700
#12 0x00007f064a6cb94b in mozilla::dom::AudioWorkletNode_Binding::_constructor(JSContext*, unsigned int, JS::Value*) (cx_=0x7f063c62f000, argc=2, vp=0x7f062c890178) at AudioWorkletNodeBinding.cpp:778
#13 0x00007f06510cd212 in CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), js::CallReason, JS::CallArgs const&) (cx=0x7f063c62f000, native=0x7f064a6caf60 <mozilla::dom::AudioWorkletNode_Binding::_constructor(JSContext*, unsigned int, JS::Value*)>, reason=js::CallReason::Call, args=...) at /home/karl/moz/dev/js/src/vm/Interpreter.cpp:507
#14 0x00007f06510d9433 in CallJSNativeConstructor(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) (cx=0x7f063c62f000, native=0x7f064a6caf60 <mozilla::dom::AudioWorkletNode_Binding::_constructor(JSContext*, unsigned int, JS::Value*)>, args=...) at /home/karl/moz/dev/js/src/vm/Interpreter.cpp:523
#15 0x00007f06510b7608 in InternalConstruct(JSContext*, js::AnyConstructArgs const&) (cx=0x7f063c62f000, args=...) at /home/karl/moz/dev/js/src/vm/Interpreter.cpp:727
#16 0x00007f06510b6e54 in js::ConstructFromStack(JSContext*, JS::CallArgs const&) (cx=0x7f063c62f000, args=...) at /home/karl/moz/dev/js/src/vm/Interpreter.cpp:754
#17 0x00007f06510a9883 in Interpret(JSContext*, js::RunState&) (cx=0x7f063c62f000, state=...) at /home/karl/moz/dev/js/src/vm/Interpreter.cpp:3326
#18 0x00007f065109e327 in js::RunScript(JSContext*, js::RunState&) (cx=0x7f063c62f000, state=...) at /home/karl/moz/dev/js/src/vm/Interpreter.cpp:468
#19 0x00007f06510b6738 in js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) (cx=0x7f063c62f000, args=..., construct=js::NO_CONSTRUCT, reason=js::CallReason::Call) at /home/karl/moz/dev/js/src/vm/Interpreter.cpp:636
#20 0x00007f06510b6cb7 in InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) (cx=0x7f063c62f000, args=..., reason=js::CallReason::Call) at /home/karl/moz/dev/js/src/vm/Interpreter.cpp:664
#21 0x00007f06510b6d67 in js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) (cx=0x7f063c62f000, fval=..., thisv=..., args=..., rval=..., reason=js::CallReason::Call) at /home/karl/moz/dev/js/src/vm/Interpreter.cpp:681
#22 0x00007f0651feb6d1 in js::jit::InvokeFunction(JSContext*, JS::Handle<JSObject*>, bool, bool, unsigned int, JS::Value*, JS::MutableHandle<JS::Value>) (cx=0x7f063c62f000, obj=..., constructing=false, ignoresReturnValue=false, argc=1, argv=0x7fff66b08860, rval=...) at /home/karl/moz/dev/js/src/jit/VMFunctions.cpp:272
Assignee: nobody → karlt
Severity: -- → S2
Status: NEW → ASSIGNED
Flags: needinfo?(karlt)
Priority: -- → P1
See Also: → 1400275

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

so as to clarify pointer safety and to take advantage of nsString shared
buffer optimizations.

AudioWorkletNode will soon not need the return value.

Depends on D87552

When constructing a JS object derived from AudioWorkletNode, the reflector
should be created using the prototype for the derived class.
https://searchfox.org/mozilla-central/rev/2f9eacd9d3d995c937b4251a5557d95d494c9be1/dom/bindings/BindingUtils.h#3078-3081
The reflector is typically created with the correct prototype after
AudioWorkletNode::Constructor() returns.

AudioParamMap_Binding::MaplikeHelpers::Set() calls GetOrCreateDOMReflector()
to get the JS reflector for the AudioParamMap, which obtains the associated
global from the reflector on the AudioWorkletNode parent.
https://searchfox.org/mozilla-central/rev/a315a1a0f09550e23e4590a77e74f36543315da3/dom/bindings/BindingUtils.h#1591-1599
While this was done during the AudioWorkletNode::Constructor(), the
AudioWorkletNode reflector did not yet exist and so was created on-demand
without an explicit prototype, which resulted in the base class prototype
being used incorrectly.
https://searchfox.org/mozilla-central/rev/a315a1a0f09550e23e4590a77e74f36543315da3/dom/bindings/BindingUtils.h#1550

Delaying set-up of the AudioParamMap provides that the AudioWorkletNode
construction is complete and has a correct reflector before AudioParamMap
usage attempts to get the parent reflector.

Depends on D87553

Pushed by ktomlinson@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/20800234d0d8 store AudioParam names as nsString r=pehrsons https://hg.mozilla.org/integration/autoland/rev/55e777a64d86 move CreateAudioParam() outparam to return value r=pehrsons https://hg.mozilla.org/integration/autoland/rev/ee0b3cf19483 create AudioParamMap on demand for AudioWorkletNode#parameters r=pehrsons
Pushed by ktomlinson@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/b5ec7886ff56 Test AudioWorkletNode subclass with parameters r=padenot
Created web-platform-tests PR https://github.com/web-platform-tests/wpt/pull/25369 for changes under testing/web-platform/tests
Upstream PR merged by moz-wptsync-bot
Has Regression Range: --- → yes
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: