tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

deprecated-render-url-replacements.https.window.js (6021B)


      1 // META: script=/resources/testdriver.js
      2 // META: script=/resources/testdriver-vendor.js
      3 // META: script=/common/utils.js
      4 // META: script=resources/fledge-util.sub.js
      5 // META: script=/common/subset-tests.js
      6 // META: timeout=long
      7 // META: variant=?1-5
      8 // META: variant=?6-10
      9 // META: variant=?11-15
     10 // META: variant=?16-last
     11 
     12 
     13 "use strict";
     14 
     15 // This test ensures proper handling of deprecatedRenderURLReplacements within auctionConfigOverrides.
     16 // It validates that these replacements are correctly applied to the winning bid's renderURL by
     17 // injecting a URL with matching macros into an interest group and ensuring that a new url with
     18 // the replacements in it, is tracked and observed.
     19 const makeTest = ({
     20    // Test name
     21    name,
     22    // Overrides to the interest group.
     23    interestGroupOverrides = {},
     24    // Overrides to the auction config.
     25    auctionConfigOverrides = {},
     26    // This is what goes into the renderURL and is expected to be replaced.
     27    beforeReplacements,
     28    // This is what's expected when 'beforeReplacements' is replaced.
     29    afterReplacements,
     30 }) => {
     31    subsetTest(promise_test, async test => {
     32        const uuid = generateUuid(test);
     33        let urlBeforeReplacements = createTrackerURL(window.location.origin, uuid, 'track_get', beforeReplacements);
     34        let urlAfterReplacements = createTrackerURL(window.location.origin, uuid, 'track_get', afterReplacements);
     35        interestGroupOverrides.ads = [{ renderURL: urlBeforeReplacements }];
     36        await joinInterestGroup(test, uuid, interestGroupOverrides);
     37 
     38        await runBasicFledgeAuctionAndNavigate(test, uuid, auctionConfigOverrides);
     39        await waitForObservedRequests(
     40            uuid,
     41            [urlAfterReplacements, createSellerReportURL(uuid), createBidderReportURL(uuid)]);
     42    }, name);
     43 };
     44 
     45 makeTest({
     46    name: 'Replacements with brackets.',
     47    auctionConfigOverrides: {
     48        deprecatedRenderURLReplacements: { '${EXAMPLE-MACRO}': 'SSP' }
     49    },
     50    beforeReplacements: "${EXAMPLE-MACRO}",
     51    afterReplacements: 'SSP',
     52 
     53 });
     54 
     55 makeTest({
     56    name: 'Replacements with percents.',
     57    auctionConfigOverrides: {
     58        deprecatedRenderURLReplacements: { '%%EXAMPLE-MACRO%%': 'SSP' }
     59    },
     60    beforeReplacements: "%%EXAMPLE-MACRO%%",
     61    afterReplacements: 'SSP',
     62 });
     63 
     64 makeTest({
     65    name: 'Multiple replacements within a URL.',
     66    auctionConfigOverrides: {
     67        deprecatedRenderURLReplacements: { '${EXAMPLE-MACRO1}': 'SSP1', '%%EXAMPLE-MACRO2%%': 'SSP2' }
     68    },
     69    beforeReplacements: "${EXAMPLE-MACRO1}/%%EXAMPLE-MACRO2%%",
     70    afterReplacements: 'SSP1/SSP2',
     71 });
     72 
     73 makeTest({
     74    name: 'Recursive and reduce size with brackets.',
     75    auctionConfigOverrides: {
     76        deprecatedRenderURLReplacements: { '${1}': '1' }
     77    },
     78    beforeReplacements: "${${${1}}}",
     79    afterReplacements: "${${1}}"
     80 });
     81 
     82 makeTest({
     83    name: 'Recursive and increase size with brackets.',
     84    auctionConfigOverrides: {
     85        deprecatedRenderURLReplacements: { '${1}': '${${1}}' }
     86    },
     87    beforeReplacements: "${1}",
     88    afterReplacements: "${${1}}"
     89 });
     90 
     91 makeTest({
     92    name: 'Replacements use a single pass with brackets.',
     93    auctionConfigOverrides: {
     94        deprecatedRenderURLReplacements: { '${1}': '${2}', '${2}': '${1}' }
     95    },
     96    beforeReplacements: "${1}${2}",
     97    afterReplacements: "${2}${1}"
     98 });
     99 
    100 makeTest({
    101    name: 'Multiple instances of same substitution string with brackets.',
    102    auctionConfigOverrides: {
    103        deprecatedRenderURLReplacements: { '${1}': '${2}' }
    104    },
    105    beforeReplacements: "{${1}${1}}",
    106    afterReplacements: "{${2}${2}}"
    107 });
    108 
    109 makeTest({
    110    name: 'Mismatched replacement with brackets.',
    111    auctionConfigOverrides: {
    112        deprecatedRenderURLReplacements: { '${2}': '${1}' }
    113    },
    114    beforeReplacements: "${1}",
    115    afterReplacements: "${1}"
    116 });
    117 
    118 makeTest({
    119    name: 'Recursive and reduce size with percents.',
    120    auctionConfigOverrides: {
    121        deprecatedRenderURLReplacements: { '%%1%%': '1' }
    122    },
    123    beforeReplacements: "%%%%1%%%%",
    124    afterReplacements: "%%1%%"
    125 });
    126 
    127 makeTest({
    128    name: 'Recursive and increase size with percents.',
    129    auctionConfigOverrides: {
    130        deprecatedRenderURLReplacements: { '%%1%%': '%%%%1%%%%' }
    131    },
    132    beforeReplacements: "%%1%%",
    133    afterReplacements: "%%%%1%%%%"
    134 });
    135 
    136 makeTest({
    137    name: 'Replacements use a single pass with percents.',
    138    auctionConfigOverrides: {
    139        deprecatedRenderURLReplacements: { '%%1%%': '%%2%%', '%%2%%': '%%1%%' }
    140    },
    141    beforeReplacements: "%%1%%%%2%%",
    142    afterReplacements: "%%2%%%%1%%"
    143 });
    144 
    145 makeTest({
    146    name: 'Multiple instances of same substitution string with percents.',
    147    auctionConfigOverrides: {
    148        deprecatedRenderURLReplacements: { '%%1%%': '%%2%%' }
    149    },
    150    beforeReplacements: "%%1%%%%1%%",
    151    afterReplacements: "%%2%%%%2%%"
    152 });
    153 
    154 makeTest({
    155    name: 'Mismatched replacement with percents.',
    156    auctionConfigOverrides: {
    157        deprecatedRenderURLReplacements: { '%%2%%': '%%1%%' }
    158    },
    159    beforeReplacements: "%%1%%",
    160    afterReplacements: "%%1%%"
    161 });
    162 
    163 makeTest({
    164    name: 'Case sensativity.',
    165    auctionConfigOverrides: {
    166        deprecatedRenderURLReplacements: { '%%foo%%': '%%bar%%' }
    167    },
    168    beforeReplacements: "%%FOO%%%%foo%%",
    169    afterReplacements: "%%FOO%%%%bar%%"
    170 });
    171 
    172 makeTest({
    173    name: 'Super macro, a macro with a macro inside it basically, with percents.',
    174    auctionConfigOverrides: {
    175        deprecatedRenderURLReplacements: { '%%%%foo%%%%': 'foo' }
    176    },
    177    beforeReplacements: "%%%%foo%%%%",
    178    afterReplacements: "foo"
    179 });
    180 
    181 makeTest({
    182    name: 'Super macro, with brackets.',
    183    auctionConfigOverrides: {
    184        deprecatedRenderURLReplacements: { '${${foo}}': 'foo' }
    185    },
    186    beforeReplacements: "${${foo}}",
    187    afterReplacements: "foo"
    188 });
    189 
    190 makeTest({
    191    name: 'Super macro, with both.',
    192    auctionConfigOverrides: {
    193        deprecatedRenderURLReplacements: { '${%%foo%%}': 'foo', '%%${bar}%%':'bar' }
    194    },
    195    beforeReplacements: "${%%foo%%}%%${bar}%%",
    196    afterReplacements: "foobar"
    197 });