Every verdict by client
One row per requirement and configuration in the two reference layers: 5 configurations in the Node.js layer and 8 in Chromium 141 on Linux, 1,404 rows in all. "Detail" is the oracle's or the grader's own text for a deviating or n/a cell, as stored with the results.
Choose a configuration to see one client's full record; the totals per configuration are Table 5. For the open-source clients, verdicts in other engines differ only in the cells of Table 6; the results grid shows Firefox and WebKit as well.
Table R5.7. Every verdict by client and layer, with detail.
showing 1404 of 1404CSV
| vast-client-js 6.5.0 | Node.js | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
|---|---|---|---|---|---|---|---|
| vast-client-js 6.5.0 | Node.js | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | conforms | |
| vast-client-js 6.5.0 | Node.js | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | conforms | |
| vast-client-js 6.5.0 | Node.js | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| vast-client-js 6.5.0 | Node.js | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| vast-client-js 6.5.0 | Node.js | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| vast-client-js 6.5.0 | Node.js | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | conforms | |
| vast-client-js 6.5.0 | Node.js | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| vast-client-js 6.5.0 | Node.js | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| vast-client-js 6.5.0 | Node.js | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | conforms | |
| vast-client-js 6.5.0 | Node.js | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | deviates | code 301 |
| vast-client-js 6.5.0 | Node.js | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | conforms | |
| vast-client-js 6.5.0 | Node.js | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | conforms | |
| vast-client-js 6.5.0 | Node.js | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | conforms | |
| vast-client-js 6.5.0 | Node.js | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | conforms | |
| vast-client-js 6.5.0 | Node.js | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | conforms | |
| vast-client-js 6.5.0 | Node.js | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | conforms | |
| vast-client-js 6.5.0 | Node.js | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | conforms | |
| vast-client-js 6.5.0 | Node.js | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | conforms | |
| vast-client-js 6.5.0 | Node.js | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | conforms | |
| vast-client-js 6.5.0 | Node.js | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | conforms | |
| vast-client-js 6.5.0 | Node.js | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| vast-client-js 6.5.0 | Node.js | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | conforms | |
| vast-client-js 6.5.0 | Node.js | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | conforms | |
| vast-client-js 6.5.0 | Node.js | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | delegated | |
| vast-client-js 6.5.0 | Node.js | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | conforms | |
| vast-client-js 6.5.0 | Node.js | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | conforms | |
| vast-client-js 6.5.0 | Node.js | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | conforms | |
| vast-client-js 6.5.0 | Node.js | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | conforms | |
| vast-client-js 6.5.0 | Node.js | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | conforms | |
| vast-client-js 6.5.0 | Node.js | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | conforms | |
| vast-client-js 6.5.0 | Node.js | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | conforms | |
| vast-client-js 6.5.0 | Node.js | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | conforms | |
| vast-client-js 6.5.0 | Node.js | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | conforms | |
| vast-client-js 6.5.0 | Node.js | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | n/a | 22 ms |
| vast-client-js 6.5.0 | Node.js | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | conforms | |
| vast-client-js 6.5.0 | Node.js | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | conforms | |
| vast-client-js 6.5.0 | Node.js | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | conforms | |
| vast-client-js 6.5.0 | Node.js | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | conforms | |
| vast-client-js 6.5.0 | Node.js | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | conforms | |
| vast-client-js 6.5.0 | Node.js | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | conforms | |
| vast-client-js 6.5.0 | Node.js | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | conforms | |
| vast-client-js 6.5.0 | Node.js | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | conforms | |
| vast-client-js 6.5.0 | Node.js | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| vast-client-js 6.5.0 | Node.js | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | conforms | |
| vast-client-js 6.5.0 | Node.js | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | conforms | |
| vast-client-js 6.5.0 | Node.js | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| vast-client-js 6.5.0 | Node.js | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | deviates | uncaught: URLHandler: Request timed out after 2000 ms (408) |
| vast-client-js 6.5.0 | Node.js | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| vast-client-js 6.5.0 | Node.js | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | delegated | |
| vast-client-js 6.5.0 | Node.js | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | n/a | needs real media decoding (browser layer only) |
| vast-client-js 6.5.0 | Node.js | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | n/a | needs real media decoding (browser layer only) |
| vast-client-js 6.5.0 | Node.js | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | n/a | needs real media decoding (browser layer only) |
| vast-client-js 6.5.0 | Node.js | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | conforms | |
| vast-client-js 6.5.0 | Node.js | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | delegated | |
| vast-client-js 6.5.0 | Node.js | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | delegated | |
| vast-client-js 6.5.0 | Node.js | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | conforms | |
| vast-client-js 6.5.0 | Node.js | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | conforms | |
| vast-client-js 6.5.0 | Node.js | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | conforms | |
| vast-client-js 6.5.0 | Node.js | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | conforms | |
| vast-client-js 6.5.0 | Node.js | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | conforms | |
| vast-client-js 6.5.0 | Node.js | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | delegated | |
| vast-client-js 6.5.0 | Node.js | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | conforms | |
| vast-client-js 6.5.0 | Node.js | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | conforms | |
| vast-client-js 6.5.0 | Node.js | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | conforms | |
| vast-client-js 6.5.0 | Node.js | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | conforms | |
| vast-client-js 6.5.0 | Node.js | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | conforms | |
| vast-client-js 6.5.0 | Node.js | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | conforms | |
| vast-client-js 6.5.0 | Node.js | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | conforms | |
| vast-client-js 6.5.0 | Node.js | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | delegated | |
| vast-client-js 6.5.0 | Node.js | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | delegated | |
| vast-client-js 6.5.0 | Node.js | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | conforms | |
| vast-client-js 6.5.0 | Node.js | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | delegated | |
| vast-client-js 6.5.0 | Node.js | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | delegated | |
| vast-client-js 6.5.0 | Node.js | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | delegated | |
| vast-client-js 6.5.0 | Node.js | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | n/a | needs real media decoding (browser layer only) |
| vast-client-js 6.5.0 | Node.js | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | conforms | |
| vast-client-js 6.5.0 | Node.js | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | conforms | |
| vast-client-js 6.5.0 | Node.js | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | conforms | |
| vast-client-js 6.5.0 | Node.js | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | deviates | raw "ad-id.org%20ABCD%201234%2Cclearcast.co.uk%20CC%2FABC%2F123" |
| vast-client-js 6.5.0 | Node.js | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | deviates | ASSETURI in.flv; played in.mp4 |
| vast-client-js 6.5.0 | Node.js | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | conforms | |
| vast-client-js 6.5.0 | Node.js | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| vast-client-js 6.5.0 | Node.js | P06 | should | Ad pods | Plays all three ads of a pod. | delegated | |
| vast-client-js 6.5.0 | Node.js | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | delegated | |
| vast-client-js 6.5.0 | Node.js | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | n/a | needs real media decoding (browser layer only) |
| vast-client-js 6.5.0 | Node.js | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | n/a | needs real media decoding (browser layer only) |
| vast-client-js 6.5.0 | Node.js | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | n/a | needs real media decoding (browser layer only) |
| vast-client-js 6.5.0 | Node.js | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | n/a | needs real media decoding (browser layer only) |
| vast-client-js 6.5.0 | Node.js | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | n/a | needs real media decoding (browser layer only) |
| vast-client-js 6.5.0 | Node.js | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| vast-client-js 6.5.0 | Node.js | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | conforms | |
| vast-client-js 6.5.0 | Node.js | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | conforms | |
| vast-client-js 6.5.0 | Node.js | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| vast-client-js 6.5.0 | Node.js | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | conforms | |
| vast-client-js 6.5.0 | Node.js | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| vast-client-js 6.5.0 | Node.js | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | conforms | |
| vast-client-js 6.5.0 | Node.js | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| vast-client-js 6.5.0 | Node.js | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| vast-client-js 6.5.0 | Node.js | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| vast-client-js 6.5.0 | Node.js | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| vast-client-js 6.5.0 | Node.js | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| vast-client-js 6.5.0 | Node.js | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| vast-client-js 6.5.0 | Node.js | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | conforms | |
| vast-client-js 6.5.0 | Node.js | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | conforms | |
| vast-client-js 6.5.0 | Node.js | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| vast-client-js 6.5.0 | Node.js | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| vast-client-js 6.5.0 | Node.js | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | order p3,p1,p2 |
| video-ad-sdk 4.0.1 | Node.js | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | deviates | code 502 |
| video-ad-sdk 4.0.1 | Node.js | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | n/a | fanned out 401 to inline and both wrappers; the code is graded by E03 (G2) |
| video-ad-sdk 4.0.1 | Node.js | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | deviates | no click-through used |
| video-ad-sdk 4.0.1 | Node.js | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | deviates | resolved none |
| video-ad-sdk 4.0.1 | Node.js | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | deviates | resolved p2 |
| video-ad-sdk 4.0.1 | Node.js | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| video-ad-sdk 4.0.1 | Node.js | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | deviates | err1 401; err2 401 |
| video-ad-sdk 4.0.1 | Node.js | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | deviates | dispatched about:blank |
| video-ad-sdk 4.0.1 | Node.js | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | deviates | 10%: 0, 80%: 0 |
| video-ad-sdk 4.0.1 | Node.js | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | n/a | 3 ms |
| video-ad-sdk 4.0.1 | Node.js | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | deviates | "4592845962" (10 chars) |
| video-ad-sdk 4.0.1 | Node.js | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | deviates | "[LIMITADTRACKING]" |
| video-ad-sdk 4.0.1 | Node.js | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | plays p3 first |
| video-ad-sdk 4.0.1 | Node.js | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | n/a | needs real media decoding (browser layer only) |
| video-ad-sdk 4.0.1 | Node.js | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | n/a | needs real media decoding (browser layer only) |
| video-ad-sdk 4.0.1 | Node.js | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | n/a | needs real media decoding (browser layer only) |
| video-ad-sdk 4.0.1 | Node.js | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | deviates | code 401 |
| video-ad-sdk 4.0.1 | Node.js | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | deviates | 0 times |
| video-ad-sdk 4.0.1 | Node.js | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | deviates | before false, after false, skip 0 |
| video-ad-sdk 4.0.1 | Node.js | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | deviates | not requested |
| video-ad-sdk 4.0.1 | Node.js | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | n/a | not requested (see A01) |
| video-ad-sdk 4.0.1 | Node.js | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | deviates | not requested |
| video-ad-sdk 4.0.1 | Node.js | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | n/a | not requested (see A01) |
| video-ad-sdk 4.0.1 | Node.js | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | n/a | resource neither fetched nor reported (see A01) |
| video-ad-sdk 4.0.1 | Node.js | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | n/a | needs real media decoding (browser layer only) |
| video-ad-sdk 4.0.1 | Node.js | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | deviates | not replaced or implausible: ah="[ADPLAYHEAD]", asi="[ADSERVINGID]", ua="[UNIVERSALADID]", ps="[PODSEQUENCE]", au="[ASSETURI]", bp="[BREAKPOSITION]", ifa="[IFA]", cua="[CLIENTUA]" |
| video-ad-sdk 4.0.1 | Node.js | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | deviates | "[ADSERVINGID]" |
| video-ad-sdk 4.0.1 | Node.js | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | n/a | left as macro (see M06) |
| video-ad-sdk 4.0.1 | Node.js | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | n/a | left as macro (see M06) |
| video-ad-sdk 4.0.1 | Node.js | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | n/a | left as macro (see M06) |
| video-ad-sdk 4.0.1 | Node.js | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| video-ad-sdk 4.0.1 | Node.js | P06 | should | Ad pods | Plays all three ads of a pod. | deviates | played p1 |
| video-ad-sdk 4.0.1 | Node.js | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | n/a | plays 1 of 3 pod ads (see P06) |
| video-ad-sdk 4.0.1 | Node.js | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | n/a | needs real media decoding (browser layer only) |
| video-ad-sdk 4.0.1 | Node.js | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | n/a | needs real media decoding (browser layer only) |
| video-ad-sdk 4.0.1 | Node.js | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | n/a | needs real media decoding (browser layer only) |
| video-ad-sdk 4.0.1 | Node.js | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | n/a | needs real media decoding (browser layer only) |
| video-ad-sdk 4.0.1 | Node.js | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | n/a | needs real media decoding (browser layer only) |
| video-ad-sdk 4.0.1 | Node.js | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | deviates | s="x]]" |
| video-ad-sdk 4.0.1 | Node.js | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| video-ad-sdk 4.0.1 | Node.js | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| video-ad-sdk 4.0.1 | Node.js | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | plays p3 first |
| iab-vast-loader 2.5.1, defaults | Node.js | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | deviates | fetched start.xml; resolved 0; no ad and no error |
| iab-vast-loader 2.5.1, defaults | Node.js | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | deviates | accepted an ad from non-well-formed XML (x) |
| iab-vast-loader 2.5.1, defaults | Node.js | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | deviates | followed the second wrapper to the InLine |
| iab-vast-loader 2.5.1, defaults | Node.js | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| iab-vast-loader 2.5.1, defaults | Node.js | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | deviates | rejected: Multiple values for Creative.UniversalAdId |
| iab-vast-loader 2.5.1, defaults | Node.js | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | deviates | rejected: Multiple values for ClosedCaptionFiles.ClosedCaptionFile |
| iab-vast-loader 2.5.1, defaults | Node.js | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, defaults | Node.js | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, defaults | Node.js | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, defaults | Node.js | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, defaults | Node.js | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| iab-vast-loader 2.5.1, defaults | Node.js | P06 | should | Ad pods | Plays all three ads of a pod. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, defaults | Node.js | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, defaults | Node.js | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, defaults | Node.js | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, defaults | Node.js | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, defaults | Node.js | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | delegated | |
| iab-vast-loader 2.5.1, defaults | Node.js | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| iab-vast-loader 2.5.1, defaults | Node.js | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | fetched the pod and reported no ad (303): VAST error 303: No ads VAST response after one or more Wrapp |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | deviates | accepted an ad from non-well-formed XML (x) |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | deviates | followed the second wrapper to the InLine |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | deviates | rejected: Multiple values for Creative.UniversalAdId |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | deviates | rejected: Multiple values for ClosedCaptionFiles.ClosedCaptionFile |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | P06 | should | Ad pods | Plays all three ads of a pod. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | n/a | needs real media decoding (browser layer only) |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Node.js | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | fetched the pod and reported no ad (303): VAST error 303: No ads VAST response after one or more Wrapp |
| vastlint-client 0.15.0 | Node.js | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| vastlint-client 0.15.0 | Node.js | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | conforms | |
| vastlint-client 0.15.0 | Node.js | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | deviates | stopped after 5 documents; codes none |
| vastlint-client 0.15.0 | Node.js | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | delegated | |
| vastlint-client 0.15.0 | Node.js | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| vastlint-client 0.15.0 | Node.js | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | delegated | |
| vastlint-client 0.15.0 | Node.js | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | delegated | |
| vastlint-client 0.15.0 | Node.js | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | delegated | |
| vastlint-client 0.15.0 | Node.js | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | delegated | |
| vastlint-client 0.15.0 | Node.js | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | delegated | |
| vastlint-client 0.15.0 | Node.js | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | deviates | accepted an ad from non-well-formed XML (x) |
| vastlint-client 0.15.0 | Node.js | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | delegated | |
| vastlint-client 0.15.0 | Node.js | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | conforms | |
| vastlint-client 0.15.0 | Node.js | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | conforms | |
| vastlint-client 0.15.0 | Node.js | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | conforms | |
| vastlint-client 0.15.0 | Node.js | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | conforms | |
| vastlint-client 0.15.0 | Node.js | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | conforms | |
| vastlint-client 0.15.0 | Node.js | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | conforms | |
| vastlint-client 0.15.0 | Node.js | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | deviates | followed the second wrapper to the InLine |
| vastlint-client 0.15.0 | Node.js | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | deviates | resolved p1,p2,s1 |
| vastlint-client 0.15.0 | Node.js | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | deviates | resolved p1,p2,s1 |
| vastlint-client 0.15.0 | Node.js | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| vastlint-client 0.15.0 | Node.js | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | delegated | |
| vastlint-client 0.15.0 | Node.js | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | delegated | |
| vastlint-client 0.15.0 | Node.js | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | delegated | |
| vastlint-client 0.15.0 | Node.js | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | delegated | |
| vastlint-client 0.15.0 | Node.js | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | conforms | |
| vastlint-client 0.15.0 | Node.js | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | conforms | |
| vastlint-client 0.15.0 | Node.js | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | conforms | |
| vastlint-client 0.15.0 | Node.js | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | conforms | |
| vastlint-client 0.15.0 | Node.js | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | deviates | fired 0 times |
| vastlint-client 0.15.0 | Node.js | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | deviates | fired 0 times |
| vastlint-client 0.15.0 | Node.js | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | deviates | 10%: 0, 80%: 0 |
| vastlint-client 0.15.0 | Node.js | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | conforms | |
| vastlint-client 0.15.0 | Node.js | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | n/a | 2 ms |
| vastlint-client 0.15.0 | Node.js | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | conforms | |
| vastlint-client 0.15.0 | Node.js | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | conforms | |
| vastlint-client 0.15.0 | Node.js | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | deviates | "[LIMITADTRACKING]" |
| vastlint-client 0.15.0 | Node.js | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | conforms | |
| vastlint-client 0.15.0 | Node.js | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | conforms | |
| vastlint-client 0.15.0 | Node.js | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | n/a | requested, but the client-side URL was not observable |
| vastlint-client 0.15.0 | Node.js | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | deviates | impression not requested |
| vastlint-client 0.15.0 | Node.js | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | conforms | |
| vastlint-client 0.15.0 | Node.js | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| vastlint-client 0.15.0 | Node.js | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | conforms | |
| vastlint-client 0.15.0 | Node.js | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | conforms | |
| vastlint-client 0.15.0 | Node.js | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| vastlint-client 0.15.0 | Node.js | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | conforms | |
| vastlint-client 0.15.0 | Node.js | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| vastlint-client 0.15.0 | Node.js | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | deviates | resolved s1; fetched start.xml; error none |
| vastlint-client 0.15.0 | Node.js | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | n/a | needs real media decoding (browser layer only) |
| vastlint-client 0.15.0 | Node.js | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | n/a | needs real media decoding (browser layer only) |
| vastlint-client 0.15.0 | Node.js | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | n/a | needs real media decoding (browser layer only) |
| vastlint-client 0.15.0 | Node.js | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | conforms | |
| vastlint-client 0.15.0 | Node.js | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | delegated | |
| vastlint-client 0.15.0 | Node.js | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | delegated | |
| vastlint-client 0.15.0 | Node.js | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | conforms | |
| vastlint-client 0.15.0 | Node.js | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | conforms | |
| vastlint-client 0.15.0 | Node.js | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | conforms | |
| vastlint-client 0.15.0 | Node.js | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | conforms | |
| vastlint-client 0.15.0 | Node.js | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | conforms | |
| vastlint-client 0.15.0 | Node.js | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | conforms | |
| vastlint-client 0.15.0 | Node.js | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | deviates | 0 times |
| vastlint-client 0.15.0 | Node.js | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | conforms | |
| vastlint-client 0.15.0 | Node.js | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | delegated | |
| vastlint-client 0.15.0 | Node.js | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | delegated | |
| vastlint-client 0.15.0 | Node.js | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | n/a | no progress tracker fired (see T05) |
| vastlint-client 0.15.0 | Node.js | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | deviates | not fired |
| vastlint-client 0.15.0 | Node.js | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | conforms | |
| vastlint-client 0.15.0 | Node.js | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | delegated | |
| vastlint-client 0.15.0 | Node.js | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | delegated | |
| vastlint-client 0.15.0 | Node.js | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | conforms | |
| vastlint-client 0.15.0 | Node.js | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | delegated | |
| vastlint-client 0.15.0 | Node.js | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | delegated | |
| vastlint-client 0.15.0 | Node.js | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | delegated | |
| vastlint-client 0.15.0 | Node.js | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | n/a | needs real media decoding (browser layer only) |
| vastlint-client 0.15.0 | Node.js | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | deviates | not replaced or implausible: ah="[ADPLAYHEAD]", asi="[ADSERVINGID]", ua="[UNIVERSALADID]", ps="[PODSEQUENCE]", au="[ASSETURI]", bp="[BREAKPOSITION]", ifa="[IFA]", cua="[CLIENTUA]" |
| vastlint-client 0.15.0 | Node.js | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | deviates | "[ADSERVINGID]" |
| vastlint-client 0.15.0 | Node.js | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | n/a | left as macro (see M06) |
| vastlint-client 0.15.0 | Node.js | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | n/a | left as macro (see M06) |
| vastlint-client 0.15.0 | Node.js | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | n/a | left as macro (see M06) |
| vastlint-client 0.15.0 | Node.js | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | conforms | |
| vastlint-client 0.15.0 | Node.js | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| vastlint-client 0.15.0 | Node.js | P06 | should | Ad pods | Plays all three ads of a pod. | delegated | |
| vastlint-client 0.15.0 | Node.js | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | delegated | |
| vastlint-client 0.15.0 | Node.js | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | n/a | needs real media decoding (browser layer only) |
| vastlint-client 0.15.0 | Node.js | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | n/a | needs real media decoding (browser layer only) |
| vastlint-client 0.15.0 | Node.js | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | n/a | needs real media decoding (browser layer only) |
| vastlint-client 0.15.0 | Node.js | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | n/a | needs real media decoding (browser layer only) |
| vastlint-client 0.15.0 | Node.js | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | n/a | needs real media decoding (browser layer only) |
| vastlint-client 0.15.0 | Node.js | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| vastlint-client 0.15.0 | Node.js | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | conforms | |
| vastlint-client 0.15.0 | Node.js | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | deviates | requested ext/imp,ext/start |
| vastlint-client 0.15.0 | Node.js | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| vastlint-client 0.15.0 | Node.js | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | conforms | |
| vastlint-client 0.15.0 | Node.js | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| vastlint-client 0.15.0 | Node.js | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | conforms | |
| vastlint-client 0.15.0 | Node.js | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| vastlint-client 0.15.0 | Node.js | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| vastlint-client 0.15.0 | Node.js | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| vastlint-client 0.15.0 | Node.js | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| vastlint-client 0.15.0 | Node.js | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| vastlint-client 0.15.0 | Node.js | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| vastlint-client 0.15.0 | Node.js | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | conforms | |
| vastlint-client 0.15.0 | Node.js | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | deviates | requested the commented-out Impression |
| vastlint-client 0.15.0 | Node.js | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | deviates | requested with "?a=1" |
| vastlint-client 0.15.0 | Node.js | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | deviates | requested with "?a=1" |
| vastlint-client 0.15.0 | Node.js | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | deviates | code 303 |
| vast-client-js 6.5.0 | Chromium 141 | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| vast-client-js 6.5.0 | Chromium 141 | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | n/a | 5 ms |
| vast-client-js 6.5.0 | Chromium 141 | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | deviates | uncaught: Uncaught Error: URLHandler: Request timed out after 2000 ms (408) | URLHandler: Request timed out after 2000 ms (408) |
| vast-client-js 6.5.0 | Chromium 141 | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | deviates | raw "ad-id.org%20ABCD%201234%2Cclearcast.co.uk%20CC%2FABC%2F123" |
| vast-client-js 6.5.0 | Chromium 141 | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | deviates | ASSETURI ad-10s.flv?case=ch0349&ad=in; played ad-10s.webm?case=ch0349&ad=in |
| vast-client-js 6.5.0 | Chromium 141 | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| vast-client-js 6.5.0 | Chromium 141 | P06 | should | Ad pods | Plays all three ads of a pod. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | delegated | |
| vast-client-js 6.5.0 | Chromium 141 | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| vast-client-js 6.5.0 | Chromium 141 | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | order p3,p1,p2 |
| video-ad-sdk 4.0.1 | Chromium 141 | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | deviates | code 502 |
| video-ad-sdk 4.0.1 | Chromium 141 | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | deviates | accepted an ad from non-well-formed XML (x) |
| video-ad-sdk 4.0.1 | Chromium 141 | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | n/a | fanned out 401 to inline and both wrappers; the code is graded by E03 (G2) |
| video-ad-sdk 4.0.1 | Chromium 141 | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | deviates | no click-through used |
| video-ad-sdk 4.0.1 | Chromium 141 | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | deviates | resolved none |
| video-ad-sdk 4.0.1 | Chromium 141 | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | deviates | resolved p2 |
| video-ad-sdk 4.0.1 | Chromium 141 | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| video-ad-sdk 4.0.1 | Chromium 141 | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | deviates | err1 401; err2 401 |
| video-ad-sdk 4.0.1 | Chromium 141 | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | deviates | dispatched about:blank |
| video-ad-sdk 4.0.1 | Chromium 141 | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | deviates | 10%: 0, 80%: 0 |
| video-ad-sdk 4.0.1 | Chromium 141 | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | n/a | 7 ms |
| video-ad-sdk 4.0.1 | Chromium 141 | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | deviates | "2855248806" (10 chars) |
| video-ad-sdk 4.0.1 | Chromium 141 | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | deviates | "[LIMITADTRACKING]" |
| video-ad-sdk 4.0.1 | Chromium 141 | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | plays p3 first |
| video-ad-sdk 4.0.1 | Chromium 141 | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | deviates | code undefined,402 |
| video-ad-sdk 4.0.1 | Chromium 141 | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | deviates | code undefined,402 |
| video-ad-sdk 4.0.1 | Chromium 141 | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | deviates | code 401 |
| video-ad-sdk 4.0.1 | Chromium 141 | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | deviates | 0 times |
| video-ad-sdk 4.0.1 | Chromium 141 | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | deviates | before false, after false, skip 0 |
| video-ad-sdk 4.0.1 | Chromium 141 | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | deviates | not requested |
| video-ad-sdk 4.0.1 | Chromium 141 | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | n/a | not requested (see A01) |
| video-ad-sdk 4.0.1 | Chromium 141 | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | deviates | not requested |
| video-ad-sdk 4.0.1 | Chromium 141 | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | n/a | not requested (see A01) |
| video-ad-sdk 4.0.1 | Chromium 141 | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | n/a | resource neither fetched nor reported (see A01) |
| video-ad-sdk 4.0.1 | Chromium 141 | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | deviates | not replaced or implausible: ah="[ADPLAYHEAD]", asi="[ADSERVINGID]", ua="[UNIVERSALADID]", ps="[PODSEQUENCE]", au="[ASSETURI]", bp="[BREAKPOSITION]", ifa="[IFA]", cua="[CLIENTUA]" |
| video-ad-sdk 4.0.1 | Chromium 141 | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | deviates | "[ADSERVINGID]" |
| video-ad-sdk 4.0.1 | Chromium 141 | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | n/a | left as macro (see M06) |
| video-ad-sdk 4.0.1 | Chromium 141 | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | n/a | left as macro (see M06) |
| video-ad-sdk 4.0.1 | Chromium 141 | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | n/a | left as macro (see M06) |
| video-ad-sdk 4.0.1 | Chromium 141 | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| video-ad-sdk 4.0.1 | Chromium 141 | P06 | should | Ad pods | Plays all three ads of a pod. | deviates | played p1 |
| video-ad-sdk 4.0.1 | Chromium 141 | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | n/a | plays 1 of 3 pod ads (see P06) |
| video-ad-sdk 4.0.1 | Chromium 141 | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | n/a | the pod was not continued past its first ad (see P06) |
| video-ad-sdk 4.0.1 | Chromium 141 | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | n/a | the pod was not continued past its first ad (see P06) |
| video-ad-sdk 4.0.1 | Chromium 141 | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | deviates | not requested |
| video-ad-sdk 4.0.1 | Chromium 141 | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | deviates | s="x]]" |
| video-ad-sdk 4.0.1 | Chromium 141 | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| video-ad-sdk 4.0.1 | Chromium 141 | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | plays p3 first |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | deviates | fetched start.xml; resolved 0; no ad and no error |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | deviates | followed the second wrapper to the InLine |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | deviates | rejected: Multiple values for Creative.UniversalAdId |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | deviates | rejected: Multiple values for ClosedCaptionFiles.ClosedCaptionFile |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | P06 | should | Ad pods | Plays all three ads of a pod. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | delegated | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| iab-vast-loader 2.5.1, defaults | Chromium 141 | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | fetched the pod and reported no ad (303): VAST error 303: No ads VAST response after one or more Wrapp |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | deviates | followed the second wrapper to the InLine |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | deviates | rejected: Multiple values for Creative.UniversalAdId |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | deviates | rejected: Multiple values for ClosedCaptionFiles.ClosedCaptionFile |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | P06 | should | Ad pods | Plays all three ads of a pod. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | delegated | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| iab-vast-loader 2.5.1, noSingleAdPods | Chromium 141 | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | fetched the pod and reported no ad (303): VAST error 303: No ads VAST response after one or more Wrapp |
| Shaka Player 5.2.12 | Chromium 141 | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | deviates | fetched start.xml; resolved 0 |
| Shaka Player 5.2.12 | Chromium 141 | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | deviates | fetched start.xml; resolved 0; no ad and no error |
| Shaka Player 5.2.12 | Chromium 141 | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | deviates | not requested |
| Shaka Player 5.2.12 | Chromium 141 | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | deviates | err1 0, err2 0 |
| Shaka Player 5.2.12 | Chromium 141 | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | deviates | err1 [ERRORCODE]; err2 [ERRORCODE] |
| Shaka Player 5.2.12 | Chromium 141 | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | deviates | fired 0 times |
| Shaka Player 5.2.12 | Chromium 141 | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | deviates | fired 0 times |
| Shaka Player 5.2.12 | Chromium 141 | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | deviates | 10%: 0, 80%: 0 |
| Shaka Player 5.2.12 | Chromium 141 | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | n/a | Shaka exposes no API to stop an interstitial at a given point or to click it (partial) |
| Shaka Player 5.2.12 | Chromium 141 | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | deviates | "[CACHEBUSTING]" (14 chars) |
| Shaka Player 5.2.12 | Chromium 141 | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | deviates | "[TIMESTAMP]" |
| Shaka Player 5.2.12 | Chromium 141 | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | deviates | "[LIMITADTRACKING]" |
| Shaka Player 5.2.12 | Chromium 141 | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | n/a | TIMESTAMP left unreplaced (see M02) |
| Shaka Player 5.2.12 | Chromium 141 | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | n/a | requested, but the client-side URL was not observable |
| Shaka Player 5.2.12 | Chromium 141 | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | order p3,p1,p2 |
| Shaka Player 5.2.12 | Chromium 141 | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | deviates | code [ERRORCODE] |
| Shaka Player 5.2.12 | Chromium 141 | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | deviates | code [ERRORCODE] |
| Shaka Player 5.2.12 | Chromium 141 | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | deviates | Error URI not requested |
| Shaka Player 5.2.12 | Chromium 141 | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | deviates | impression requested for an ad that never played |
| Shaka Player 5.2.12 | Chromium 141 | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | deviates | unmute fired 2 times |
| Shaka Player 5.2.12 | Chromium 141 | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | deviates | 0 times |
| Shaka Player 5.2.12 | Chromium 141 | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | deviates | before false, after false, skip 0 |
| Shaka Player 5.2.12 | Chromium 141 | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | n/a | no progress tracker fired (see T05) |
| Shaka Player 5.2.12 | Chromium 141 | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | deviates | not fired |
| Shaka Player 5.2.12 | Chromium 141 | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | deviates | not requested |
| Shaka Player 5.2.12 | Chromium 141 | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | n/a | not requested (see A01) |
| Shaka Player 5.2.12 | Chromium 141 | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | n/a | not requested (see A01) |
| Shaka Player 5.2.12 | Chromium 141 | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | n/a | resource neither fetched nor reported (see A01) |
| Shaka Player 5.2.12 | Chromium 141 | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | deviates | chose http://127.0.0.1:41045/media/ad-10s.flv?case=ch0337&ad=in |
| Shaka Player 5.2.12 | Chromium 141 | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | deviates | not replaced or implausible: ah="[ADPLAYHEAD]", asi="[ADSERVINGID]", ua="[UNIVERSALADID]", ps="[PODSEQUENCE]", au="[ASSETURI]", bp="[BREAKPOSITION]", ifa="[IFA]", cua="[CLIENTUA]" |
| Shaka Player 5.2.12 | Chromium 141 | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | deviates | "[ADSERVINGID]" |
| Shaka Player 5.2.12 | Chromium 141 | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | n/a | left as macro (see M06) |
| Shaka Player 5.2.12 | Chromium 141 | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | n/a | left as macro (see M06) |
| Shaka Player 5.2.12 | Chromium 141 | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | n/a | left as macro (see M06) |
| Shaka Player 5.2.12 | Chromium 141 | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| Shaka Player 5.2.12 | Chromium 141 | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | P06 | should | Ad pods | Plays all three ads of a pod. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | deviates | misattributed: p1 imp 1 complete 0; p2 imp 1 complete 1; p3 imp 1 complete 2 |
| Shaka Player 5.2.12 | Chromium 141 | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | deviates | s1 played after p3 |
| Shaka Player 5.2.12 | Chromium 141 | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | deviates | not requested |
| Shaka Player 5.2.12 | Chromium 141 | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | deviates | not requested |
| Shaka Player 5.2.12 | Chromium 141 | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | n/a | icon not displayed (see I01) |
| Shaka Player 5.2.12 | Chromium 141 | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | conforms | |
| Shaka Player 5.2.12 | Chromium 141 | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | n/a | the client does not follow Wrappers (see W01) |
| Shaka Player 5.2.12 | Chromium 141 | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | n/a | the client does not follow Wrappers (see W01) |
| rmp-vast 17.2.0, defaults | Chromium 141 | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | deviates | stopped after 4 documents; codes 302 |
| rmp-vast 17.2.0, defaults | Chromium 141 | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | deviates | code 303 |
| rmp-vast 17.2.0, defaults | Chromium 141 | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | deviates | resolved p2,p1,s1 |
| rmp-vast 17.2.0, defaults | Chromium 141 | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | deviates | resolved p2,p1,s1 |
| rmp-vast 17.2.0, defaults | Chromium 141 | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| rmp-vast 17.2.0, defaults | Chromium 141 | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | deviates | dispatched about:blank |
| rmp-vast 17.2.0, defaults | Chromium 141 | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | n/a | 0 ms |
| rmp-vast 17.2.0, defaults | Chromium 141 | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | deviates | "cvAILwRW" (8 chars) |
| rmp-vast 17.2.0, defaults | Chromium 141 | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | deviates | "[LIMITADTRACKING]" |
| rmp-vast 17.2.0, defaults | Chromium 141 | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | deviates | uncaught: Uncaught Error: URLHandler: Request timed out after 2000 ms (408) | URLHandler: Request timed out after 2000 ms (408) |
| rmp-vast 17.2.0, defaults | Chromium 141 | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | deviates | resolved none; fetched start.xml,noad.xml; error aderror 303: No VAST response after one or more Wrappers. |
| rmp-vast 17.2.0, defaults | Chromium 141 | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | deviates | code 401 |
| rmp-vast 17.2.0, defaults | Chromium 141 | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | deviates | 2 times |
| rmp-vast 17.2.0, defaults | Chromium 141 | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | deviates | unmute fired 2 times |
| rmp-vast 17.2.0, defaults | Chromium 141 | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | deviates | not fired |
| rmp-vast 17.2.0, defaults | Chromium 141 | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | deviates | not requested |
| rmp-vast 17.2.0, defaults | Chromium 141 | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | n/a | not requested (see A01) |
| rmp-vast 17.2.0, defaults | Chromium 141 | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | deviates | not requested |
| rmp-vast 17.2.0, defaults | Chromium 141 | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | n/a | not requested (see A01) |
| rmp-vast 17.2.0, defaults | Chromium 141 | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | n/a | resource neither fetched nor reported (see A01) |
| rmp-vast 17.2.0, defaults | Chromium 141 | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | n/a | not supported (optional); reported 401 |
| rmp-vast 17.2.0, defaults | Chromium 141 | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | deviates | not replaced or implausible: ps="[PODSEQUENCE]", ifa="[IFA]", cua="[CLIENTUA]" |
| rmp-vast 17.2.0, defaults | Chromium 141 | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | deviates | raw "%2Cad-id.org%20ABCD%201234%2Cclearcast.co.uk%20CC%2FABC%2F123" |
| rmp-vast 17.2.0, defaults | Chromium 141 | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| rmp-vast 17.2.0, defaults | Chromium 141 | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| rmp-vast 17.2.0, defaults | Chromium 141 | P06 | should | Ad pods | Plays all three ads of a pod. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | deviates | stand-alone ad not played; moved to p3 |
| rmp-vast 17.2.0, defaults | Chromium 141 | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | deviates | requested 15 ms after start, before the 1 s offset |
| rmp-vast 17.2.0, defaults | Chromium 141 | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| rmp-vast 17.2.0, defaults | Chromium 141 | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | order p3,p1,p2 |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | deviates | stopped after 4 documents; codes 302 |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | deviates | code 303 |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | deviates | resolved p2,p1,s1 |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | deviates | resolved p2,p1,s1 |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | deviates | dispatched about:blank |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | n/a | 1 ms |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | deviates | "Pl0Z4sfx" (8 chars) |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | deviates | "[LIMITADTRACKING]" |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | deviates | uncaught: Uncaught Error: URLHandler: Request timed out after 2000 ms (408) | URLHandler: Request timed out after 2000 ms (408) |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | deviates | resolved none; fetched start.xml,noad.xml; error aderror 303: No VAST response after one or more Wrappers. |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | deviates | code 401 |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | deviates | 2 times |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | deviates | unmute fired 2 times |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | deviates | not fired |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | n/a | resource neither fetched nor reported (see A01) |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | n/a | not supported (optional); reported 401 |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | deviates | not replaced or implausible: ps="[PODSEQUENCE]", ifa="[IFA]", cua="[CLIENTUA]" |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | deviates | raw "%2Cad-id.org%20ABCD%201234%2Cclearcast.co.uk%20CC%2FABC%2F123" |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | deviates | cb "[CACHEBUSTING]", ts "[TIMESTAMP]" |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | P06 | should | Ad pods | Plays all three ads of a pod. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | deviates | stand-alone ad not played; moved to p3 |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | deviates | requested 19 ms after start, before the 1 s offset |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| rmp-vast 17.2.0, omidSupport | Chromium 141 | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | deviates | order p3,p1,p2 |
| Google IMA 3.794.0 | Chromium 141 | W01 | must | Wrapper resolution | Follows a Wrapper to its InLine ad. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W02 | must | Wrapper resolution | Follows a lone Wrapper that carries sequence="1" (a one-ad pod) to its InLine ad, or declines it with an error (pod support is optional). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W03 | must | Wrapper resolution | Accepts a chain of five Wrappers before the InLine ad (players are required to accept five). | deviates | stopped after 5 documents; codes 302 |
| Google IMA 3.794.0 | Chromium 141 | W04 | should | Error reporting | With six Wrappers the player may reject; if it does, it determines 302 (and, with a tracker, reports it to the Error URI of every Wrapper it received). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W05 | should | Wrapper resolution | Terminates a Wrapper that points to itself (stops requesting it). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W06 | should | Error reporting | Reports 302 (wrapper limit) for a self-referencing Wrapper loop. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W07 | must | Error reporting | When the VASTAdTagURI is unavailable (HTTP 404), determines error 301. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W08 | must | Error reporting | When the VASTAdTagURI times out, determines error 301. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W09 | should | Error reporting | When a Wrapper leads to a no-ad response and the player determines a code, the code is 303. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W10 | must | Error reporting | Requests the VAST-level Error URI of a no-ad response reached through a Wrapper (with 303 for [ERRORCODE]). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W11 | must | Error reporting | When the Wrapper target is not well-formed XML, determines error 100 (and does not use an ad from it). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W12 | must | Error reporting | Requests the Wrapper Error URI when its VASTAdTagURI fails. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W13 | must | Error reporting | An InLine error after a chain of Wrappers is reported to the InLine and to every Wrapper Error URI, with the same code (403 here). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W14 | must | Impressions and tracking | At impression time, requests the Impression URIs of the InLine ad and of every Wrapper before it. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W15 | must | Impressions and tracking | Fires the Wrapper's Linear tracking events (start, quartiles, complete) together with the InLine ones. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W16 | must | Impressions and tracking | When both the InLine and a Wrapper carry a ClickThrough, the InLine one is used. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W17 | must | Impressions and tracking | When the InLine has no ClickThrough (no VideoClicks), the ClickThrough of the Wrapper closest to the InLine is used. | deviates | no click-through used |
| Google IMA 3.794.0 | Chromium 141 | W18 | must | Impressions and tracking | On a click, requests the ClickTracking URIs of the InLine and of every Wrapper. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W19 | should | Wrapper resolution | With followAdditionalWrappers="false", a Wrapper received next is ignored rather than followed. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W20 | should | Wrapper resolution | With allowMultipleAds="false", only the first stand-alone Ad of the response is used (pod ads are dropped). | deviates | resolved none |
| Google IMA 3.794.0 | Chromium 141 | W21 | should | Wrapper resolution | Without the attribute, allowMultipleAds defaults to false, so only the first stand-alone Ad is used. | deviates | resolved none |
| Google IMA 3.794.0 | Chromium 141 | W22 | may | Wrapper resolution | Optional: rejects an InLine whose Category is blocked upstream; a player that does reject it must report 205. | n/a | not implemented (optional): ad accepted |
| Google IMA 3.794.0 | Chromium 141 | E01 | must | Error reporting | For a no-ad response, requests the VAST-level Error URI. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | E02 | must | Error reporting | Requests every VAST-level Error URI when several are given. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | E03 | must | Error reporting | With no supported MediaFile, requests every InLine Error URI with 403. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | E04 | must | Error reporting | Replaces [ERRORCODE] in Error URIs with a numeric code. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T01 | must | Impressions and tracking | Requests every Impression URI of the ad. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T02 | should | Impressions and tracking | Does not dispatch an Impression whose URI is about:blank. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T03 | must | Impressions and tracking | Fires start, firstQuartile, midpoint, thirdQuartile and complete exactly once each, in that order. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T04 | must | Impressions and tracking | Fires every Tracking element for the same event (two start trackers for two parties). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T05 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS offset. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T06 | must | Impressions and tracking | Fires a progress tracker with an HH:MM:SS.mmm offset. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T07 | must | Impressions and tracking | Fires progress trackers with percentage offsets (10% and 80%). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T08 | must | Impressions and tracking | Stopping at 60% fires midpoint but neither thirdQuartile nor complete. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T09 | observation | Robustness observations | Spread between the first and last Impression request at impression time (ms, measured at the server). | n/a | 4 ms |
| Google IMA 3.794.0 | Chromium 141 | M01 | must | Macros | Replaces [CACHEBUSTING] with a random 8-digit integer. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | M02 | must | Macros | Replaces [TIMESTAMP] with an ISO 8601 date-time (milliseconds and zone as in the macro list example 2016-01-17T8:15:07.127-05). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | M03 | must | Macros | Replaces [LIMITADTRACKING] with 0 or 1 (the harness also accepts -1/-2, since a browser has no device advertising ID; see detail). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | M04 | must | Macros | Percent-encodes macro values (the colons in TIMESTAMP). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | M05 | should | Macros | Does not write -1 into a macro it does not know ([NOTAREALMACRO]). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X01 | should | XML and parsing | Trims the whitespace around a CDATA-wrapped Impression URI before handing it to the network (checked on the client side, since URL parsers also strip it). | n/a | requested, but the client-side URL was not observable |
| Google IMA 3.794.0 | Chromium 141 | X02 | must | XML and parsing | Ignores XML comments inside an element when reading its URI. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X03 | should | XML and parsing | Decodes character entities (&) in a URI given as plain text (a document that breaks ยง2.3.3's CDATA rule, which real tags still do). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X04 | observation | Robustness observations | Parses a document that omits xmlns="http://www.iab.com/VAST". | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X05 | must | XML and parsing | Accepts a Creative with two UniversalAdId elements. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X06 | must | XML and parsing | Accepts two ClosedCaptionFile elements. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | P01 | must | Ad pods | Orders pod ads by their sequence attribute (document order is 3, 1, 2): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | R01 | observation | Robustness observations | A timed-out Wrapper request does not escape as an uncaught exception (which terminates a Node process). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | R02 | observation | Robustness observations | A failed Wrapper request does not escape as an uncaught exception. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | W23 | should | Wrapper resolution | With fallbackOnNoAd="true", when the Wrapper's target returns no ad, a stand-alone ad from the response is used. | deviates | resolved none; fetched start.xml,noad.xml; error AD_ERROR 900: The response does not contain any valid ads. |
| Google IMA 3.794.0 | Chromium 141 | E05 | must | Error reporting | When the MediaFile URI returns HTTP 404, requests the InLine Error URI with 401 (file not found). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | E06 | must | Error reporting | When a MediaFile of a supported type cannot be decoded, requests the InLine Error URI with 405. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | E07 | must | Error reporting | When the MediaFile URI answers only after 30 s, requests the InLine Error URI with 402 (media timeout). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | E08 | should | Error reporting | Does not request the Error URI when the ad plays without a problem. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | E09 | must | Error reporting | Given a NonLinear-only ad, either displays it (impression or creativeView) or reports 200/201 (unexpected ad type or linearity). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T10 | should | Impressions and tracking | Does not request the Impression of an ad whose media never plays (no supported MediaFile). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T11 | should | Impressions and tracking | Requests the Impression exactly once across pause, resume, mute and unmute. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T12 | must | Impressions and tracking | Fires the pause tracker once when the user pauses. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T13 | must | Impressions and tracking | Fires the resume tracker once when the user resumes. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T14 | must | Impressions and tracking | Fires the mute tracker once when the user mutes. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T15 | must | Impressions and tracking | Fires the unmute tracker when the user unmutes. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T23 | should | Impressions and tracking | A volume change that is not an unmute (0.5 while unmuted) does not fire unmute. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T20 | should | Impressions and tracking | Fires the loaded tracker once when the media is ready to play. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T16 | must | Impressions and tracking | Skipping at 6 s (skipoffset 00:00:03) fires skip and neither thirdQuartile nor complete (skippable support is an optional ad type). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T17 | should | Impressions and tracking | The skip control is not available at 1.5 s and is available at 6 s (skipoffset 00:00:03). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T18 | should | Impressions and tracking | A percentage skipoffset (30% of 10 s) makes skip available at 3 s, and skipping fires skip. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T19 | should | Impressions and tracking | Progress offsets passed before the skip (2 s and 5 s) are fired. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | T21 | must | Impressions and tracking | Fires the rewind tracker when the user seeks back 2 s (from 60% to 40%). | n/a | IMA exposes no seek or icon control to a page; rewind is not drivable |
| Google IMA 3.794.0 | Chromium 141 | T22 | should | Impressions and tracking | After rewinding from 6 s to 4 s, midpoint and the 5 s progress tracker are not fired a second time when playback passes them again. | n/a | IMA exposes no seek or icon control to a page; rewind is not drivable |
| Google IMA 3.794.0 | Chromium 141 | A01 | must | Verification and icons | When it does not execute the InLine's verification resource (a JavaScript resource with an apiFramework it does not implement), requests its verificationNotExecuted URI. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | A02 | must | Verification and icons | Fills [REASON] in verificationNotExecuted with a reason code (1, 2 or 3). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | A03 | should | Verification and icons | Handles the Wrapper's verification too: requests its verificationNotExecuted URI. | deviates | not requested |
| Google IMA 3.794.0 | Chromium 141 | A04 | must | Verification and icons | Reports a verification resource whose apiFramework it does not implement with reason 2 (verification not supported). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | A05 | must | Verification and icons | When an OMID verification resource fails to load (HTTP 404), requests its verificationNotExecuted URI with reason 3 (error during resource load). | deviates | resource fetched (404); verificationNotExecuted not requested |
| Google IMA 3.794.0 | Chromium 141 | S01 | should | Media selection | Skips a MediaFile of an unsupported type listed first (video/x-flv) and plays a supported one. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | S02 | may | Media selection | Optional: plays an audio ad (adType="audio", Opus WebM and AAC files). | n/a | not supported (optional); reported 400 |
| Google IMA 3.794.0 | Chromium 141 | M06 | must | Macros | Replaces each of eight listed optional macros ([ADPLAYHEAD], [ADSERVINGID], [UNIVERSALADID], [PODSEQUENCE], [ASSETURI], [BREAKPOSITION], [IFA], [CLIENTUA]) with a plausible value or -1/-2; none left as macro or empty. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | M07 | should | Macros | Fills [ADSERVINGID] with the ad's AdServingId (in-serving). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | M08 | should | Macros | When it fills [ADPLAYHEAD], the midpoint value is HH:MM:SS.mmm and about 5 s. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | M09 | should | Macros | Fills [UNIVERSALADID] with one or more of the Creative's IDs as "registry value" pairs, each percent-encoded; several IDs are joined by a raw comma. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | M10 | should | Macros | When it fills [ASSETURI], the value is the MediaFile actually chosen (an unsupported FLV is listed first). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | M11 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in an Error URI as in any other tracking URI. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | M12 | must | Macros | Replaces [CACHEBUSTING] and [TIMESTAMP] in a Wrapper's VASTAdTagURI before requesting it. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | P06 | should | Ad pods | Plays all three ads of a pod. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | P03 | must | Ad pods | Playing a three-ad pod, each ad gets one impression and one complete, fired between its own impression and the next ad's. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | P02 | should | Ad pods | When the second pod ad cannot play, playback continues with another ad (the stand-alone ad or the third pod ad). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | P05 | should | Ad pods | The failed pod ad is replaced by the stand-alone ad from the response, after the first pod ad and before the third. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | I01 | must | Verification and icons | Displays the Icon after the ad starts and requests its IconViewTracking URI. | deviates | requested before the ad started |
| Google IMA 3.794.0 | Chromium 141 | I03 | should | Verification and icons | Displays an Icon with offset 00:00:01 and duration 00:00:08 once playback passes 1 s, requesting its IconViewTracking URI. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | I02 | must | Verification and icons | On a click on the Icon, requests its IconClickTracking URI. | n/a | IMA exposes no seek or icon control to a page; icon is not drivable |
| Google IMA 3.794.0 | Chromium 141 | X07 | observation | Robustness observations | Follows a VASTAdTagURI whose CDATA is surrounded by whitespace and line breaks (on the wire; URL parsers also strip the whitespace). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X08 | should | XML and parsing | Never requests a Tracking element whose event name is not a VAST event (notARealEvent). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X09 | should | XML and parsing | Does not request Impression or Tracking URIs that appear inside an Extension. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X10 | must | XML and parsing | Parses a document that starts with a UTF-8 byte order mark. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X11 | must | XML and parsing | Reassembles an Impression URI split across two CDATA sections (query s=x]]>x). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X12 | should | XML and parsing | Accepts a UniversalAdId that still carries the VAST 4.0 idValue attribute. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X13 | must | XML and parsing | An empty Impression element does not stop the other Impression from being requested. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X14 | should | XML and parsing | Accepts a VAST 3.0 InLine document. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X15 | should | XML and parsing | Accepts a VAST 2.0 InLine document. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X16 | should | XML and parsing | Follows a VAST 3.0 Wrapper to a VAST 4.3 InLine. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | R03 | observation | Robustness observations | Follows an HTTP 302 redirect on a VASTAdTagURI. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | R04 | observation | Robustness observations | Parses a VAST response sent with Content-Encoding: gzip. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | R05 | observation | Robustness observations | Parses a VAST response served as text/plain rather than an XML media type. | conforms | |
| Google IMA 3.794.0 | Chromium 141 | R06 | observation | Robustness observations | A tracking URI that answers HTTP 500 does not stop later trackers (quartiles, complete). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X17 | must | XML and parsing | Does not request an Impression element that sits entirely inside an XML comment (next to a real Impression). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X18 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | X19 | should | XML and parsing | Requests a VASTAdTagURI written as escaped text, with the character reference & between query parameters, with all parameters intact (a=1, b=2, c=3). | conforms | |
| Google IMA 3.794.0 | Chromium 141 | P07 | must | Ad pods | Orders the pod ads of a Wrapper's target by their sequence attribute (document order 3, 1, 2; the Wrapper sets allowMultipleAds="true"): the ad with sequence 1 comes first (or the pod is declined with an error; pod support is optional). | conforms |