Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple users reporting that HBO Max is broken, likely due to kVideoPlaybackQuality being disabled #13183

Closed
nicolasff opened this issue Dec 13, 2020 · 17 comments · Fixed by brave/brave-core#7437
Labels
bug feature/shields/fingerprint The fingerprinting (aka: "device recognition") protection provided in Shields OS/Desktop priority/P2 A bad problem. We might uplift this to the next planned release. QA Pass-macOS QA Pass-Win64 QA/Yes release-notes/include webcompat/not-shields-related Sites are breaking because of something other than Shields.

Comments

@nicolasff
Copy link

nicolasff commented Dec 13, 2020

Description

HBO Max no longer plays video. Several users are reporting hitting this issue on Reddit as well as on Brave forums.

Steps to Reproduce

  1. Log in to HBO Max on Brave 1.19.54
  2. The page asks "Who is watching?". Click on a user name.
  3. The web app loads, lists content to watch. Click on any title.
  4. Select any episode of any series/film and click on the play button.
  5. The page loads the video viewer with a loading indicator and gets stuck there. An error is logged in the console:
app.js:229 Uncaught (in promise) TypeError: this._htmlVideoElement.getVideoPlaybackQuality is not a function
    at i.<anonymous> (app.js:229)
    at app.js:229
    at Object.next (app.js:229)
    at app.js:229
    at new Promise (<anonymous>)
    at uo (app.js:229)
    at i.getState (app.js:229)
    at l.<anonymous> (app.js:225)
    at app.js:229
    at Object.next (app.js:229)
    at app.js:229
    at new Promise (<anonymous>)
    at uo (app.js:229)
    at l._onPlayerTimerUpdate (app.js:225)
    at i._onTick (app.js:225)
    at i.<anonymous> (app.js:222)

Actual result:

The video never starts playing.

Expected result:

Entertaining content.

Reproduces how often:

Always.

Brave version (brave://version info)

Reproduced on Version 1.19.54 Chromium: 87.0.4280.101 (Official Build) beta (64-bit)

Version/Channel Information:

I've only tried the beta channel but I suspect this reproduces everywhere.

Other Additional Information:

  • Does the issue resolve itself when disabling Brave Shields? NO
  • Does the issue resolve itself when disabling Brave Rewards? NO
  • Is the issue reproducible on the latest version of Chrome? NO

Miscellaneous Information:

#8029 seems to show that getVideoPlaybackQuality was removed from Brave back in February as a follow-up to Chromium 80 being released. From what I am reading of the stack traced logged on the HBO Max page, it seems like their web app may have started using this API without checking if it's available. If this is indeed the issue it probably also means that users of Chrome < 80 who haven't upgraded since February would also be seeing this issue.

The removal in Brave was hardcoded so there is no easy way for me to try turning this feature back on.

/cc @fmarier and @mkarolin who created or are mentioned on the original Brave issue.

@nicolasff nicolasff changed the title Multiple users reporting that HBO Max is broken, likely due to #8029 Multiple users reporting that HBO Max is broken, likely due to kVideoPlaybackQuality being disabled Dec 13, 2020
@ryanbr ryanbr added the webcompat/not-shields-related Sites are breaking because of something other than Shields. label Dec 14, 2020
@ryanbr
Copy link
Collaborator

ryanbr commented Dec 14, 2020

I can confirm, hbomax isn't working in Release, Beta or Nightly.

@nicolasff
Copy link
Author

Here is a Tampermonkey script to re-add the missing function on <video> elements: https://gist.github.com/nicolasff/aab6141fde8c93ef2914e6200a9aece3.

HBO Max plays fine with it enabled.

It's pretty hacky because the page is constructed dynamically so I had to use the MutationObserver API to track when the <video> element was being injected, and then I attached a stubbed getVideoPlaybackQuality function on it.

It seems like the complete removal of a feature now supported by all browsers is likely to cause websites to break. Fingerprinting can be prevented by returning dummy values instead. In this particular case I would expect the number of dropped frames to be a way to track certain users. Brave could return 0 in all cases here, but of course that's a more involved change than just removing the feature entirely.

I hope Brave developers will consider replacing functions that could lead to fingerprinting with versions that return constant values, or random ones whenever appropriate. This would seem like a better way to do this than their blunt removal. Then again I'm not a browser developer, but hey. Please just think about it.

@kjozwiak kjozwiak added the bug label Dec 14, 2020
@rebron rebron added the feature/shields/fingerprint The fingerprinting (aka: "device recognition") protection provided in Shields label Dec 14, 2020
@rebron
Copy link
Collaborator

rebron commented Dec 14, 2020

cc: @pes10k

@pes10k
Copy link
Contributor

pes10k commented Dec 14, 2020

@fmarier can you say more about why this was removed?

@fmarier
Copy link
Member

fmarier commented Dec 14, 2020

We should re-enable. It sounds like a potential fingerprinting vector, but if it leads to breakage, we should figure out a better way to mess with the fingerprint.

@pes10k
Copy link
Contributor

pes10k commented Dec 14, 2020

I agree we should re-enable, but I'm curious about the fingerprinting vector. Whats the threat / concern here?

@bsclifton
Copy link
Member

bsclifton commented Dec 15, 2020

Created brave/brave-core#7437 to re-enable. @pes10k I'll create a privacy review

@rebron rebron added the priority/P2 A bad problem. We might uplift this to the next planned release. label Dec 15, 2020
@rebron rebron added this to In progress in General Dec 15, 2020
@mkarolin
Copy link
Collaborator

The feature can be re-enabled from the command line (--enable-features=VideoPlaybackQuality) for testing.

@bsclifton
Copy link
Member

Thanks for sharing @mkarolin 😄 @ryanbr will give that a go soon and verify if that fixes. If so, we can accept brave/brave-core#7437

@ryanbr
Copy link
Collaborator

ryanbr commented Dec 15, 2020

Just tested HBO Max with --enable-features=VideoPlaybackQuality can confirm video playback is working

@macp92
Copy link

macp92 commented Dec 25, 2020

Just tested HBO Max with --enable-features=VideoPlaybackQuality can confirm video playback is working

How do you do this?

@nicolasff
Copy link
Author

@macp92 This Brave support article explains how to run Brave with custom command-line parameters.

@paulcpederson
Copy link

for mac folks you can enable this flag with:

open -na "Brave Browser" --args "--enable-features=VideoPlaybackQuality"

@ryanbr
Copy link
Collaborator

ryanbr commented Dec 28, 2020

Confirmed 1.18.77rc works with HBO Max, tested before (1.18.75) and after (1.18.77). Playback now works

@kjozwiak
Copy link
Member

Thanks @ryanbr 👍 Labeling this as passed as per #13183 (comment). Unfortunately QA doesn't have an HBO account but the above was checked on Windows which is our biggest platform. Should be good enough for a verificaiton.

@LaurenWags @rebron we don't need to check macOS unless one of you has a HBO account.

@ryanbr
Copy link
Collaborator

ryanbr commented Dec 29, 2020

Checked on MacOS also, Playback of the new release now works

@mattts1
Copy link

mattts1 commented Jan 20, 2021

This issue has popped back up in 1.19.86.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug feature/shields/fingerprint The fingerprinting (aka: "device recognition") protection provided in Shields OS/Desktop priority/P2 A bad problem. We might uplift this to the next planned release. QA Pass-macOS QA Pass-Win64 QA/Yes release-notes/include webcompat/not-shields-related Sites are breaking because of something other than Shields.
Projects
None yet
Development

Successfully merging a pull request may close this issue.