Brave browser doesn't ask for camera permissions if startWithVideoMuted is set to false

There’s a bug that appears only in Brave browser related to camera permissions; it goes as follows:

When you join a Jitsi meeting, there is a boolean variables in local storage that records whether you entered with camera off, which is: startWithVideoMuted

Next time you return to that Jitsi session, it pulls this variable state from your local storage to determine whether your camera should be on or off by default. (It also does this for the microphone with startWithAudioMuted, but there is no bug with that one.)

Now, with every browser except Brave, regardless of whether startWithVideoMuted is set to true or false, when you first enter Jitsi, it will ask for your camera permissions and then set the camera to on or off depending on this value.

However, in Brave browser, if your startWithVideoMuted is set to true, it will not ask for your camera permissions at all.

Steps to reproduce:

  1. In Brave browser, start a jitsi meeting (say, meet.jit.si/123456)
  2. At the ‘Join Meeting’ screen, mute your camera and click ‘Join meeting’
  3. When inside the jitsi meeting, copy the URL and close the tab
  4. Paste the URL into a new tab
  5. Now you should see that Brave will only ask you for microphone permissions and not camera permissions
  6. Once you accept the microphone permissions, the camera dropdown menu will not be available to select a camera device

We’ve run the above steps on three laptops, and 2 out of the 3 can consistently recreate the issue. The third does not for some reason.

If you repeat the steps above in Chrome or Edge, it will still ask you for camera permissions, so this is specific to Brave. I noticed this just started happening recently, so it may have been a Brave browser update. It might have to do with the way that Brave remembers camera permissions vs the other browsers.

Are you using any extensions or incognito mode? One you have accepted the permission it won’t ask you again on step 6.

I just tried it on a second laptop w/ a completely fresh Brave installation (no starting local storage, no extensions), and recreated the same issue.

On step 6, it doesn’t ask for permissions, but that’s not because it remembers the permissions but because it makes the camera devices unavailable.

So here’s what step 5 looks like (only asks for microphone and not for camera):

And after that, we can see that the microphone permissions are granted but camera permissions are not. Also the drop-up button is grayed out so you can’t select/change the camera device.

But in setp 1 you did grant camera permission, didn’t you? The steps say to mute it which means you must have the permission.

Yes, I did grant camera permissions in step 1, but then in step 3 I closed the tab.

When I opened a new tab w/ the same URL (step 4), it neither saved the camera permissions nor asks for permissions again. It just moves forward without camera permissions.

Again, this is unique to Brave browser. The other browsers save the camera permissions so at step 4 the camera permissions are there.

What did you select here? I selected “until I close the site” and closed the tab, then reopened. The button is still available and I’m able to unmute, at which point it asks for permission.

Not sure what we are doing differently, but there must be something…

The button is still available and I’m able to unmute, at which point it asks for permission.

Yes, we’re getting the same behavior then. The issue is that you have to press the camera button (unmute) in order for it to ask for permissions.

If you take the same steps in Chrome or Edge, it will simply remember that you granted camera permissions already, just like it remembers the microphone permissions. There is something about Brave which makes it behave differently, and only when the startWithVideoMuted is set to true in local storage.

I don’t know, this might not be a big enough bug to worry about, but it is creating some issues for us. Am wondering if you guys think it’s worth fixing; if not, we’ll find some workarounds on our end.

I think I know what the “issue” is. Brave has that “until I close the site” duration for the permission there. That doesn’t exist in Chrome. Permissions are granted indefinitely until revoked by default.

We cannot sidestep this, it’s a browser implementation detail.

Ah, I see what you mean. That make sense as to why Brave wouldn’t remember the permissions.

But there’s also the piece that Brave doesn’t ask for permissions again when startWithVideoMuted is set to true in local storage. If I manually flip it to false, then it does ask for permissions.

So there’s something in the Jitsi workflow related to that field which makes it so it doesn’t ask for camera permissions. I’m guessing maybe the true value makes it so it never asks for camera permissions, but then the other browsers already remembered the permissions from last time so the permissions are already there, while in Brave the permissions were not saved and it doesn’t ask for permissions again, causing the issue. Am I thinking about that correctly?

In that case, the ‘fix’ would be to ask for permissions anyway regardless of the value of startWithVideoMuted, so long as permissions hadn’t already been granted. In that case, the other browsers wouldn’t ask anyway cause the permissions were already granted, and Brave would ask because the permissions were not saved.

There is no way to ask for the camera permission without actually opening the camera. So if you muted it last time that’s how we start the next call, and due to how Brave works here (same goes for Firefox BTW) you’ll get prompted for permission when you unmute. Opening the user camera if startWithVideoMuted is set would be very unexpected for people.

Going back the beginning of the conversation: there is no practical issue here, is there? As in, video works when it needs to, though you were surprised to be prompted for permissions when you were, correct?

1 Like

Sorry for the delayed response.

No, I agree, not really an issue. It was causing an issue for us because we changed the prejoin UI in our version, so it wasn’t as clean of a fix for users to get prompted for permissions again.

We ended up making some edits to the code on our end so that it prompts for permissions every time now, regardless of the value of startWithVideoMuted.

Thanks for your time and help w/ this!

No problem!