Skip to content

Fix 'googletagservices-gpt' — updateTargetingFromMap() #293

@AdamWr

Description

@AdamWr

If I'm not wrong, the problem is not related to redirect resource itself, but rather to the way how it's build.
It looks like that after script is compiled/built, then some methods are missed, in this case there is slicedToArray missed.

Steps to reproduce:

  1. Use latest nightly build which use latest version of googletagservices-gpt redirect resource
  2. Enable AdGuard Tracking Protection filter
  3. Go to - https://example.org/
  4. Run in browser console:
const script = document.createElement('script');
script.setAttribute("type", "text/javascript");
script.src = 'https://securepubads.g.doubleclick.net/tag/js/gpt.js';
document.getElementsByTagName('head')[0].appendChild(script);
script.onload = () => {
  const slot = googletag.defineSlot('/1234567/sports', [160, 600], 'div-1');
  slot.updateTargetingFromMap({
    'color': 'red',
    'interests': ['sports']
  });
};

There is an error - gpt.js:1 Uncaught ReferenceError: slicedToArray is not defined

Screenshot

image

The same happens with test like this:

test('Test updateTargetingFromMap', (assert) => {
    runRedirect(name);

    assert.ok(window.googletag, 'window.googletag have been created');
    assert.strictEqual(typeof window.googletag.defineSlot(), 'object', 'Slot has been mocked');

    const optDiv = 3;

    const slot = window.googletag.defineSlot('1', 2, optDiv);
    slot.updateTargetingFromMap({
        color: 'red',
        interests: ['sports'],
    });
    assert.strictEqual(slot.getTargeting('interests')[0], 'sports', '.getTargeting() has been mocked.');
    assert.strictEqual(window.hit, 'FIRED', 'hit function was executed');
});
Screenshot

image

It seems the problem is related to this line:

for (const [k, v] of entries) {
    targeting.set(k, getTargetingValue(v));
}

here:

const updateTargeting = (targeting, map) => {
if (typeof map === 'object') {
const entries = Object.entries(map || {});
for (const [k, v] of entries) {
targeting.set(k, getTargetingValue(v));
}
}
};

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions