Online ResourcesPrashant Chaudhary

Do Open-Source Video Ad Clients Follow VAST 4.3? An Empirical Study of Player Conformance

Findings

Appendix B of the paper as one table: 86 findings, 78 in the open-source clients and 8 in Google IMA. Row anchors are the finding IDs (for example findings.html#F01).

One row per finding: one cause, located in source for the open-source clients. Requirements are catalog IDs with their graded strength. Locations are in the tested release, relative to the package root: vast-client-js 6.5.0 src/, video-ad-sdk 4.0.1 dist/ (the code that ran), iab-vast-loader 2.5.1 and its parser iab-vast-parser 1.2.1 lib/, vastlint-client 0.15.0 dist/, Shaka Player 5.2.12 lib/ads/, rmp-vast 17.2.0 src/js/ at commit 5975ead. "absent:" means the feature is not implemented and says what was searched. IMA is closed source: its rows give, in place of a location, the requests the server logged and the events of its public API (Online Resource 4). rmp-vast cells that come from its bundled vast-client are attributed to vast-client-js (F01, F02, F03, F05). "Releases" is the span of swept releases (Node.js sweep) in which the finding appears; Shaka, rmp-vast and IMA were not swept. "Platform scope" lists the layers and engines in which the finding's cells deviate (Node.js, and Chromium, Firefox and WebKit on Linux; Chrome, WebKit and Safari on macOS).

Table B. Findings in all seven clients (paper Tables B1 to B7).

showing 86 of 86CSV
F01vast-client-js 6.5.0B1M12 (must)Requests a Wrapper's VASTAdTagURI with [CACHEBUSTING] and [TIMESTAMP] still in brackets.src/parser/vast_parser.js:391; src/parser/vast_parser.js:403-405all 9 (3.3.0 to 6.5.0)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F02vast-client-js 6.5.0B1P07 (must)A pod in a Wrapper's target is returned in document order (3, 1, 2).src/parser/vast_parser.js:258-315 (parse())not in the swept catalogall tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F03vast-client-js 6.5.0B1R01 (obs.)A Wrapper request timeout throws outside any promise: uncaught exception, Node.js process exits with code 1.src/fetcher/url_handler.js:57-646.0.2 to 6.5.0 (of 3.3.0 to 6.5.0)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F04vast-client-js 6.5.0B1none: robustness (fuzz C4, D4)A target that sends headers and stalls its body is waited on with no timeout at every hop.src/fetcher/url_handler.js:66-72tested release only-
F05vast-client-js 6.5.0B1W11 (must)Non-well-formed Wrapper target reported as 301 (Node.js, Firefox) or 303 (Chromium, Chrome, WebKit, Safari), never 100.src/parser/vast_parser.js:442, 170-187, 467-477all 9 (3.3.0 to 6.5.0)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F06vast-client-js 6.5.0B1none: robustness (fuzz C2)An <Ad> with neither InLine nor Wrapper makes get() throw a TypeError; no Error URI; sibling ads lost.src/parser/ad_parser.js:20-59; src/parser/vast_parser.js:226tested release only-
F07vast-client-js 6.5.0B1none: macro grid (4.x macros)Five pixel macros marked 4.x ([STOREID], [STOREURL], [PLAYBACKMETHODS], [GPPSTRING], [GPPSECTIONID]) sent literally.src/util/macros.js:1-49; src/util/util.js:72-74; absent: STOREID, STOREURL, PLAYBACKMETHODS, GPPSTRING, GPPSECTIONID anywhere under src/tested release only-
F08vast-client-js 6.5.0B1M10 (should)[ASSETURI] carries the first MediaFile, overwriting the value the integrator passes; not the one played.src/vast_tracker.js:899-906all 9 (3.3.0 to 6.5.0)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F09vast-client-js 6.5.0B1M09 (should)[UNIVERSALADID] percent-encodes the separating comma (%2C).src/vast_tracker.js:913-917; src/util/util.js:424.0.1 to 6.5.0 (of 3.3.0 to 6.5.0)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F10vast-client-js 6.5.0B1none: outside catalogwrapperLimit accepts one Wrapper fewer than its value (decides rmp-vast's W03).src/parser/vast_parser.js:369, :382, :74tested release only-
F11vast-client-js 6.5.0B1none: outside catalog (fuzz D2)An InLine with no usable MediaFile is reported with 303.src/parser/vast_parser.js:467-477tested release only-
F12rmp-vast 17.2.0B2W03 (must)Stops a five-Wrapper chain after four documents with 302 (API reports 303).src/js/helpers/utils.js:223; src/js/index.js:591; bundled vast-client 6.4.2 src/parser/vast_parser.js:362, 375not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F13rmp-vast 17.2.0B2W20 (should), W21 (should)Passes allowMultipleAds: true, overriding the Wrapper attribute.src/js/index.js:593; bundled vast-client 6.4.2 src/parser/vast_parser.js:389-392not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F14rmp-vast 17.2.0B2W23 (should), P05 (should)Never falls back to the stand-alone ad (fallbackOnNoAd, failed pod ad).absent: fallbackOnNoAd, remainingAds, getNextAds not used in rmp-vast's own modules (bundle search); src/js/index.js:364-367; bundled vast-client 6.4.2 src/parser/ad_parser.js:223-234, src/parser/vast_parser.js:304-315not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F15rmp-vast 17.2.0B2M01 (must)[CACHEBUSTING] is eight alphanumeric characters.src/js/framework/fw.js:194-201not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F16rmp-vast 17.2.0B2M03 (must), M06 (must)[LIMITADTRACKING] only if the integrator passes it; [PODSEQUENCE], [IFA], [CLIENTUA] get no -1.src/js/index.js:652-655; src/js/helpers/tracking.js:359-362, 438-442; absent: no rmp-vast code names [IFA] or [CLIENTUA] (only params.macros, tracking.js:214-222)not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F17rmp-vast 17.2.0B2M11 (must)Error URIs skip macro replacement except [ERRORCODE].src/js/helpers/tracking.js:462-482not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F18rmp-vast 17.2.0B2M09 (should)[UNIVERSALADID] starts with a comma and encodes the separators.src/js/helpers/tracking.js:338-351not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F19rmp-vast 17.2.0B2E06 (must)Undecodable media reported as 401, not 405.src/js/creatives/linear.js:147-176not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F20rmp-vast 17.2.0B2T13 (must)Resume tracker fires on every play event, including ad start.src/js/helpers/tracking.js:176-180not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F21rmp-vast 17.2.0B2T23 (should)Any volume change while unmuted fires unmute.src/js/helpers/tracking.js:112-123not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F22rmp-vast 17.2.0B2T02 (should)An about:blank Impression is requested.src/js/index.js:460-466; src/js/helpers/tracking.js:82-110not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F23rmp-vast 17.2.0B2T05 (must), T06 (must), T07 (must)macOS WebKit only: no progress tracker fires (quartiles do); T19 then n/a.src/js/creatives/linear.js:67-108, :74-76 and :292; src/js/framework/fw.js:84-88; src/js/players/ad-player.js:53-58not sweptWebKit macOS only
F24rmp-vast 17.2.0B2T21 (must)No rewind tracker when the element is seeked back (borderline: no seek control by default).absent: no rewind tracker or handler in rmp-vast's own modules (bundle search for rewind, seeked, seeking); showControlsForAdPlayer is false by default (src/js/helpers/utils.js:230, used at src/js/players/ad-player.js:139)not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F25rmp-vast 17.2.0B2I03 (should)Icon drawn on first playing event; offset and duration never read.src/js/creatives/icons.js:186-190not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F26rmp-vast 17.2.0B2A01 (must), A03 (should)With defaults, no AdVerifications handling: no verificationNotExecuted.src/js/index.js:527-530 (verification handled only if omidSupport is set); src/js/verification/omsdk.js:41-54; src/js/helpers/utils.js:245not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F27video-ad-sdk 4.0.1B3P01 (must), P07 (must)Pods play in document order: compareBySequence returns 0 for every pair.dist/vastSelectors/index.js:13-18; :103; dist/vastRequest/helpers/getNextAd.js:3-5P01: 3.0.0 to 4.0.1 (of 2.1.0 to 4.0.1); P07: not in the swept catalogall tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F28video-ad-sdk 4.0.1B3P06 (should)Only the first ad of a pod plays; no error.dist/runner/runWaterfall.js:90all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F29video-ad-sdk 4.0.1B3E05 (must), E06 (must)Error URI requested with code=undefined for media 404 or decode failure, then 402.dist/adUnit/VastAdUnit.js:34browser-only, not sweptall browsers (browser-only requirement)
F30video-ad-sdk 4.0.1B3E03 (must), E09 (must)No playable MediaFile (or NonLinear-only ad) reported as 401 to InLine and every Wrapper.dist/runner/helpers/startVideoAd.js:39all 9 (2.1.0 to 4.0.1); 2.1.0 to 2.5.1 request no Error URI, 401 from 2.6.3all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F31video-ad-sdk 4.0.1B3I03 (should)Icon with an offset is never drawn; no view tracker.dist/adUnit/helpers/icons/addIcons.js:15browser-only, not sweptall browsers (browser-only requirement)
F32video-ad-sdk 4.0.1B3A01 (must), A03 (should)AdVerifications never read; no verificationNotExecuted.absent: no occurrence of "verification" (any case) in video-ad-sdk 4.0.1 dist/ or src/all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F33video-ad-sdk 4.0.1B3X11 (must)A URI split across CDATA sections is truncated to the first part.dist/xml/helpers/xmlSelectors.js:36-38all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F34video-ad-sdk 4.0.1B3T07 (must)Percentage progress offsets computed from the media element's duration before it is set become NaN; never fire in the tested setup.dist/adUnit/helpers/metrics/handlers/onProgress.js:22-23, :19 and :29all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F35video-ad-sdk 4.0.1B3W07 (must)Failed Wrapper fetch (404, 500, refused) reported as 502.dist/vastRequest/requestAd.js:14-26all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F36video-ad-sdk 4.0.1B3W17 (must)Wrapper ClickThrough not used when the InLine has none.dist/adUnit/helpers/metrics/setupMetricHandlers.js:8; dist/vastSelectors/index.js:327all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F37video-ad-sdk 4.0.1B3M01 (must)[CACHEBUSTING] has 1 to 10 digits.dist/tracker/helpers/parseMacro.js:9 and :22-24all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F38video-ad-sdk 4.0.1B3M03 (must), M06 (must), M07 (should)parseMacro fills only CACHEBUSTING and TIMESTAMP; other listed macros literal.dist/tracker/helpers/parseMacro.js:19-35all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F39video-ad-sdk 4.0.1B3M12 (must)Requests a Wrapper's VASTAdTagURI as written.dist/vastRequest/requestAd.js:118 (the Wrapper's getVASTAdTagURI is requested unchanged)all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F40video-ad-sdk 4.0.1B3T18 (should)Percentage skipoffset ignored.dist/adUnit/helpers/metrics/handlers/onSkip.js:22; dist/vastSelectors/helpers/parseOffset.js:2-9; dist/vastSelectors/index.js:368-3722.2.1 to 4.0.1 (of 2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F41video-ad-sdk 4.0.1B3T20 (should)No loaded event.dist/tracker/linearEvents.js:12-176; absent: no loaded event or handler in dist/tracker/ or dist/adUnit/helpers/metrics/all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F42video-ad-sdk 4.0.1B3W20 (should), W21 (should)allowMultipleAds defaults to true; false rejects the response with 203.dist/vastRequest/requestAd.js:51 and :57-61all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F43video-ad-sdk 4.0.1B3T02 (should)An about:blank Impression is passed to the pixel tracker.dist/tracker/helpers/createVastEventTracker.js:13all 9 (2.1.0 to 4.0.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F44video-ad-sdk 4.0.1B3W11 (must)Browser DOMParser partial tree (parsererror) accepted as VAST; ad accepted, then 401.dist/xml/helpers/xml2js.js:5; sane-domparser-error 0.2.0 index.js:18-23none in sweepChromium, Chrome, WebKit Linux, WebKit macOS, Safari only
F45video-ad-sdk 4.0.1B3none: robustness (fuzz C3)VPAID-marked MP4: unhandled rejection; 901 to Error URI, then impression and playback.dist/runner/helpers/startVideoAd.js:33 (adUnit.start promise not handled; src startVideoAd.ts:74); dist/adUnit/helpers/vpaid/loadCreative.js:7tested release only-
F46iab-vast-loader 2.5.1B4W02 (must), P07 (must)The loader checks only vast.ads after a Wrapper: a lone <Ad sequence="1"> Wrapper, filed as a pod, is never followed (defaults only; no ad, no error), and a pod behind a Wrapper is reported as 303.lib/loader.js:58-65; iab-vast-parser lib/factory/vast.js:53-55W02: all 6 (2.0.0 to 2.5.1); P07: not in the swept catalogall tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F47iab-vast-loader 2.5.1B4X05 (must), X06 (must)Valid 4.2 documents with repeated UniversalAdId or ClosedCaptionFile rejected with 101 (and four more elements, fuzz D3).iab-vast-parser lib/vast/schema.js:13-33; lib/xml/unmarshaler.js:113-118all 6 (2.0.0 to 2.5.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F48iab-vast-loader 2.5.1B4W19 (should)followAdditionalWrappers never consulted.absent: followAdditionalWrappers is not read in iab-vast-loader lib/ (5 files); lib/loader.js:58-62all 6 (2.0.0 to 2.5.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F49iab-vast-loader 2.5.1B4W11 (must)Node.js: xmldom recovers an ad from non-well-formed XML; Firefox: 101.iab-vast-parser lib/index.js:7, 18-20; lib/parse.js:34-45; xmldom 0.1.31 dom-parser.js:30, 175-183all 6 (2.0.0 to 2.5.1)Node.js, Firefox only
F50iab-vast-loader 2.5.1B4M12 (must)Requests a Wrapper's VASTAdTagURI as written.lib/loader.js:61, :81, :14 and :88all 6 (2.0.0 to 2.5.1)all tested (Node.js, Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F51iab-vast-loader 2.5.1B4none: robustness (fuzz C5)Empty response (HTTP 204 or empty 200): an internal TypeError with no VAST code.iab-vast-parser lib/parse.js:39tested release only-
F52iab-vast-loader 2.5.1B4none: robustness (fuzz C6)A response that is not XML: rejected with 101 and an internal TypeError, where 100 applies.iab-vast-parser lib/xml/unmarshaler.js:75tested release only-
F53iab-vast-loader 2.5.1B4none: robustness (fuzz C7)A root element other than VAST: rejected with 101 and an internal TypeError.iab-vast-parser lib/factory/vast.js:38tested release only-
F54iab-vast-loader 2.5.1B4none: robustness (fuzz C8)A lower-case element name such as <creatives> rejects the whole response with an internal TypeError.iab-vast-parser lib/inherit/ad.js:57, 85, 88; lib/xml/unmarshaler.js:19-25, 85tested release only-
F55vastlint-client 0.15.0B5W03 (must)maxWrapperDepth 5 counts documents: stops before the InLine of a five-Wrapper chain, no code.dist/session.js:8all 12 (0.4.24 to 0.15.0)all tested (Node.js)
F56vastlint-client 0.15.0B5W11 (must), X09 (should), X02 (must), X17 (must)XML read with regular expressions: ads from malformed XML; commented-out URIs requested.dist/resolved.js:106-148; dist/tracking.js:72-141W11, X09, X02: all 12 (0.4.24 to 0.15.0); X17: not in the swept catalogall tested (Node.js)
F57vastlint-client 0.15.0B5X18 (should), X19 (should)Entity-escaped VASTAdTagURI truncated at the first &amp; (or &#38;).vastlint 0.15.0 upstream crates/vastlint-core/src/inspect.rs:110-117, 126, 156-158 (compiled into vastlint_wasm_bg.wasm); caller dist/session.js:461, 477not in the swept catalogall tested (Node.js)
F58vastlint-client 0.15.0B5W19 (should), W20 (should), W21 (should)followAdditionalWrappers and allowMultipleAds never read.dist/resolved.js:457-459all 12 (0.4.24 to 0.15.0)all tested (Node.js)
F59vastlint-client 0.15.0B5W23 (should)A response that holds a Wrapper ad and a stand-alone InLine ad is classified as an InLine document; the Wrapper is never followed, and its target (noad.xml) is never requested.dist/session.js:461 (buildHop takes the document type from inspectDocument) and :649-651 (a hop that is not a Wrapper ends resolution as resolved)all 12 (0.4.24 to 0.15.0)all tested (Node.js)
F60vastlint-client 0.15.0B5T05 (must), T06 (must), T07 (must), T21 (must), T20 (should)Documented controller fires quartiles only: no progress, loaded or rewind.dist/playback-queue.js:381-389all 12 (0.4.24 to 0.15.0)all tested (Node.js)
F61vastlint-client 0.15.0B5M03 (must), M06 (must), M07 (should)Only CACHEBUSTING and TIMESTAMP expanded; controller takes no macros.dist/tracking.js:169-181all 12 (0.4.24 to 0.15.0)all tested (Node.js)
F62vastlint-client 0.15.0B5M12 (must)Requests a Wrapper's VASTAdTagURI as written.dist/session.js:659 and :674 (fetchXmlFromUrl requests the URL as found)all 12 (0.4.24 to 0.15.0)all tested (Node.js)
F63vastlint-client 0.15.0B5none: delegated limitAfter a mid-chain fetch failure the snapshot keeps only the root hop; intermediate Wrapper Error URIs unreachable.dist/session.js:512-514, 629, 674, 682-689, 700-702tested release only-
F64Shaka Player 5.2.12B6W01 (must), W02 (must)Every <Ad> without an InLine is skipped: no Wrapper request, no ad, no error.lib/ads/vast_interstitial_parser.js:29-33not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F65Shaka Player 5.2.12B6M01 (must), M02 (must), M03 (must), M06 (must), M07 (should), M11 (must)No macro replaced in tracking or Error URLs.absent: no CACHEBUSTING, TIMESTAMP, ERRORCODE, ASSETURI, ADSERVINGID or UNIVERSALADID in lib/ads/ (22 files); lib/ads/ad_utils.js:173-176not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F66Shaka Player 5.2.12B6E01 (must), E02 (must)A no-ad response's document-level Error URIs are never requested.lib/ads/ad_utils.js:49; lib/ads/vast_interstitial_parser.js:29-33; absent: no read of the <Error> children of <VAST> in lib/ads/not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F67Shaka Player 5.2.12B6E03 (must), E05 (must), E06 (must)The error code is never determined: Error URIs are requested with a literal [ERRORCODE].lib/ads/ad_utils.js:149-151, 173-176; lib/ads/interstitial_ad_manager.js:1226-1236; absent: no ERRORCODE in lib/ads/not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F68Shaka Player 5.2.12B6E07 (must)A media file that does not answer is never reported (no media timeout).absent: no media-load timeout in lib/ads/interstitial_ad_manager.jsnot sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F69Shaka Player 5.2.12B6T10 (should)Impression and start fire when the ad is set up, before its media loads.lib/ads/interstitial_ad_manager.js:1262-1263not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F70Shaka Player 5.2.12B6T05 (must), T06 (must), T07 (must), T20 (should), T21 (must)No progress, loaded or rewind events: the tracking table has no such keys.lib/ads/ad_utils.js:22-38, 95-109not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F71Shaka Player 5.2.12B6T18 (should)A percentage skipoffset is not parsed; the ad is not skippable.lib/ads/vast_interstitial_parser.js:81-87not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F72Shaka Player 5.2.12B6T23 (should)A volume change fires unmute.lib/ads/ad_utils.js:161not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F73Shaka Player 5.2.12B6S01 (should)MediaFiles sorted by height; first used without checking type (FLV fails).lib/ads/vast_interstitial_parser.js:117-138not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F74Shaka Player 5.2.12B6P03 (must)Each pod ad's complete pixel is sent to the next ad.lib/ads/interstitial_ad_manager.js:1237-1244, :892 and :2561-2567not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F75Shaka Player 5.2.12B6P01 (must)Pods play in document order: the sequence attribute is never read.lib/ads/vast_interstitial_parser.js:29-62not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F76Shaka Player 5.2.12B6P05 (should)A failed pod ad is not replaced by the stand-alone ad; that ad plays after the pod.lib/ads/interstitial_ad_manager.js:1133-1140, 1207-1211; absent: no code in lib/ads/ handles stand-alone adsnot sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F77Shaka Player 5.2.12B6I01 (must), I03 (should)Icons not drawn; trackers never fire.absent: no "icon" (any case) in shaka-player 5.2.12 lib/ads/; lib/ads/vast_interstitial_parser.js:39-61 reads Linear and NonLinearAds onlynot sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F78Shaka Player 5.2.12B6A01 (must)AdVerifications never parsed: no verificationNotExecuted request.lib/ads/vast_interstitial_parser.js:29-45 (an InLine yields Creatives only); lib/ads/ad_utils.js:44-69 (createTrackingFromInline reads Error and Impression only); absent: no "verification" in lib/ads/not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS, Safari)
F79Google IMA HTML5 SDK 3.794.0B7W03 (must)Rejects a chain of five Wrappers.five Wrapper documents fetched, no InLine; Error URIs of all five requested with code 302; AdError 302 "The maximum number of VAST wrappers (4) has been reached."not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS)
F80Google IMA HTML5 SDK 3.794.0B7W17 (must)Wrapper ClickThrough not used.after a click on the ad, no click-tracking request and no landing page; probe PRB3 (InLine without ClickThrough): the click pauses the ad and sends no click-tracking requestnot sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS)
F81Google IMA HTML5 SDK 3.794.0B7W20 (should), W21 (should)A Wrapper target with a pod and a stand-alone ad is rejected with IMA code 2.start.xml and pod.xml fetched, no Error URI requested, AdError 2 "Ad source cannot contain playlist response."not sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS)
F82Google IMA HTML5 SDK 3.794.0B7W23 (should)After a Wrapper that leads to no ad (303), no other ad is tried.Error URIs requested with 303, AdError 900, the stand-alone ad of the same response never requestednot sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS)
F83Google IMA HTML5 SDK 3.794.0B7A03 (should)The Wrapper's verification vendor is not reported; at most one verificationNotExecuted per ad in these probes.InLine verificationNotExecuted requested with reason 2, Wrapper's never; probe PRB1: a Wrapper-only vendor is reported; probe PRB2: of two InLine vendors only the first is reportednot sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS)
F84Google IMA HTML5 SDK 3.794.0B7A05 (must)A verification resource that answers 404 is not reported.resource fetched with status 404, no verificationNotExecuted requestnot sweptall tested (Chromium, Chrome, Firefox, WebKit Linux, WebKit macOS)
F85Google IMA HTML5 SDK 3.794.0B7I01 (must)Icon view requested over 50 ms before the ad's start request: Linux Firefox and WebKit, macOS WebKit, some Linux Chromium runs.icon view requested before the start request in every run; 20 repeats per Linux engine: 36 to 68 ms in Chromium (6 of 20 beyond the 50 ms tolerance; reference runs 122 and 90 ms), 54 to 111 ms in Firefox and 165 to 237 ms in WebKit (all beyond); macOS, 10 repeats per browser: 11 to 12 ms in Chromium, 10 to 13 ms in Chrome and 13 to 50 ms in Firefox (none beyond), 51 to 58 ms in WebKit (all beyond)not sweptChromium, Firefox, WebKit Linux only
F86Google IMA HTML5 SDK 3.794.0B7W11 (must)Firefox: 303 for a malformed Wrapper target.Firefox: Error URI requested with code 303; Chromium, Chrome and WebKit: 100not sweptFirefox only