Closed Bug 1651383 Opened 4 years ago Closed 2 years ago

Video doesn't play on forbes.com with ETP - Strict enabled

Categories

(Core :: Privacy: Anti-Tracking, defect, P3)

Unspecified
Android
defect

Tracking

()

RESOLVED WORKSFORME
Tracking Status
firefox87 --- affected
firefox92 --- affected

People

(Reporter: oanaarbuzov, Unassigned)

References

(Blocks 1 open bug, )

Details

Attachments

(2 files)

Attached image StrictVsStandard.png (deleted) —

Environment:
Browser / Version: Firefox Preview Nightly 200707 (🦎 80.0a1-20200705095345)
Operating System: Huawei P20 Lite (Android 8.0.0) - 1080 x 2280 pixels, 19:9 ratio (~432 ppi density), Samsung Galaxy S6 Edge (Android 7.0) - 1440 x 2560 pixels (~577 ppi pixel density)

Steps to Reproduce:
1. Navigate https://www.forbes.com/sites/forbes-personal-shopper/2020/04/14/6-of-the-best-gaming-headsets/
2. Try to play the video.

Expected Behavior:
Video plays.

Actual Behavior:
Video doesn't play.

Note
1. The issue is not reproducible with ETP Standard.
2. Screenshot attached.

Severity: -- → S3

The issue still occurs, with ETP - Strict the video doesn't play.
https://prnt.sc/zzp0m7

Tested with:
Browser / Version: Firefox Nightly 210217 (🦎 87.0a1-20210217094559)
Operating System: Samsung Galaxy S8 (Android 9) - 1440 x 2960 pixels, 18.5:9 ratio (~570 ppi density)

Blocks: tpvideo
No longer blocks: tp-breakage

We should probably be able to shim this with an opt-in placeholder, though it may be an involved process. We can access where to place the video through the data in the object window['fbs-video'].playerData.entries().next().value[1]. But that seems Forbes-specific, so it doesn't seem like a practical general solution.

Investigating why the player isn't starting, the code basically gets as far as case 1 here:

    FbsVideoService.prototype.init = function (options) {
        return __awaiter(this, void 0, void 0, function () {
            var playerData;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        this.fbsAdsService = window['fbsads'];
                        playerData = this.playerData.get(options.videoElementId);
                        playerData = playerData ? Object.assign(playerData, options) : new PlayerData(options);
                        this.playerData.set(options.videoElementId, playerData);
                        playerData.amazonId = 'videoSlot' + ++this.playerCount;
                        return [4 /*yield*/, this.waitforGdpr()];
                    case 1:
                        _a.sent();
                        if (!!playerData.adsDisabled) return [3 /*break*/, 3];
                        return [4 /*yield*/, this.loadMnet()];

Then it fails. If I place breakpoints at the end of case 0 and start of case 1, then when I reload and the page pauses I can have the debugger to show me all caught exceptions and see hints of where it's failing. I end up seeing companionAds().getSlots() is not a function:

googletag.cmd.push(function () {
  getAdSlots(googletag.pubads().getSlots());
  getAdSlots(googletag.companionAds().getSlots());
});

Or that this Moat ad API object isn't defined:

export function targetYieldSlot(slot) {
    try {
        window['moatPrebidApi'].setMoatTargetingForSlot(slot);
    }

Or that getSizes() isn't defined here:

export function requestIasForSlot(adSlot) {
    var __iasPET = window['__iasPET'] || {};
    __iasPET.queue = __iasPET.queue || [];
    __iasPET.pubId = '930392';
    var sizes = adSlot.getSizes().map(function (size) {

So odds are good that more shimming will help, though it's still unclear whether all three of these services are always checked, and there may be other ad-services that may need to be shimmed. It's worth checking what other un-shimmed googletag and other ad service API endpoints they're calling in the related code block in https://i.forbesimg.com/simple-site/dist/js/commons-d9f1e2eb3bc4357b3e9e.js

Fixing this is pretty involved, and requires shimming Moat Ads's prebidding script somewhat thoroughly, the iasPET bidding script with basic objects, and Media.net's ad script with an empty file. On top of that, we'll need to make a number of improvements to our Google Publisher Tags shim. I have candidate patches almost ready for these changes.

This issue still reproduces when the ETP is set to strict, on the 8/2 Nightly build with GV 92, on Google Pixel (Android 10).

The issue is no longer reproducible on 92.0.0-beta.2 with Google Pixel 3 (Android 12), tested with ETP Strict.

I was able to reproduce this issue only on 8/23 Nightly on normal browsing, not in private browsing, with ETP set to strict, on Lenovo Tab M10 (Android 10).
The video keeps loading, then it displays an error message.

  • Note: not reproducible on Beta 92.0.0-beta.6 build, with the same device.
Webcompat Priority: --- → ?
Webcompat Priority: ? → ---

This has since been resolved by various SmartBlock shims.

Status: NEW → RESOLVED
Closed: 2 years ago
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: