Skip to content

Commit 27dae86

Browse files
author
Nicholas Case
committed
Merge branch 'candidate' into release
2 parents f5da91b + c82740a commit 27dae86

File tree

5 files changed

+124
-39
lines changed

5 files changed

+124
-39
lines changed

src/lib/cmp.js

Lines changed: 65 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ export default class Cmp {
122122
return this.store.getFullVendorConsentsObject(vendorIds)
123123
.then(consent => {
124124
consent.gdprApplies = this.gdprApplies;
125-
callback(consent);
125+
callback(consent, true);
126126
return consent;
127127
});
128128
},
@@ -131,12 +131,16 @@ export default class Cmp {
131131
* Get the encoded vendor consent data value.
132132
*/
133133
getConsentData: (_, callback = () => {}) => {
134-
const consentData = {
135-
gdprApplies: this.gdprApplies,
136-
hasGlobalScope: this.config.storeConsentGlobally,
137-
consentData: this.generateConsentString()
138-
};
139-
callback(consentData, true);
134+
return this.store.getFullVendorConsentsObject()
135+
.then(consent => {
136+
const output = {
137+
gdprApplies: this.gdprApplies,
138+
hasGlobalScope: this.config.storeConsentGlobally,
139+
consentData: consent.consentString
140+
};
141+
callback(output, true);
142+
return output;
143+
});
140144
},
141145

142146
/**
@@ -224,8 +228,9 @@ export default class Cmp {
224228
* Trigger the consent tool UI to be shown
225229
*/
226230
showConsentTool: (_, callback = () => {}) => {
231+
const self = this;
227232
let _command;
228-
switch (this.config.layout) {
233+
switch (self.config.layout) {
229234
case 'footer':
230235
_command = 'toggleFooterConsentToolShowing';
231236
break;
@@ -236,8 +241,9 @@ export default class Cmp {
236241
_command = 'toggleConsentToolShowing';
237242
}
238243

239-
this.cmpShown = true;
240-
this.store[_command](true);
244+
self.cmpShown = true;
245+
self.store[_command](true);
246+
self.notify("consentToolDisplayed");
241247
callback(true);
242248
},
243249

@@ -254,21 +260,43 @@ export default class Cmp {
254260
customPurposeList
255261
} = this.store;
256262

257-
const { purposes: customPurposes = [] } = customPurposeList;
258-
const { purposes = [] } = vendorList || {};
263+
let customPurposes = [];
264+
customPurposes = customPurposeList && customPurposeList.purposes;
259265

266+
const { purposes = [] } = vendorList || {};
260267
const { selectedPurposeIds = new Set() } = persistedVendorConsentData || {};
261268
const { selectedCustomPurposeIds = new Set() } = persistedPublisherConsentData || {};
262269

263-
const allowedPurposeIds = new Set(purposes.map(({id}) => id));
264-
const allowedCustomPurposeIds = new Set(customPurposes.map(({id}) => id));
270+
const allowedPurposeIds = new Set();
271+
for (let i in purposes) {
272+
allowedPurposeIds.add(purposes[i].id);
273+
}
274+
275+
const allowedCustomPurposeIds = new Set();
276+
if (customPurposeList) {
277+
for (let j in customPurposes) {
278+
allowedCustomPurposeIds.add(customPurposes[j].id);
279+
}
280+
}
281+
282+
const selectedAllowedPurposeIds = new Set();
283+
Array.from(selectedPurposeIds).filter(id => allowedPurposeIds.has(id)).forEach((id) => {
284+
selectedAllowedPurposeIds.add(id);
285+
});
286+
287+
const selectedAllowedCustomPurposeIds = new Set();
288+
if (customPurposeList) {
289+
Array.from(selectedCustomPurposeIds).filter(id => allowedCustomPurposeIds.has(id)).forEach((id) => {
290+
selectedAllowedCustomPurposeIds.add(id);
291+
});
292+
}
265293

266294
// Encode the persisted data
267295
return persistedPublisherConsentData && encodePublisherConsentData({
268296
...persistedVendorConsentData,
269297
...persistedPublisherConsentData,
270-
selectedCustomPurposeIds: new Set(Array.from(selectedCustomPurposeIds).filter(id => allowedCustomPurposeIds.has(id))),
271-
selectedPurposeIds: new Set(Array.from(selectedPurposeIds).filter(id => allowedPurposeIds.has(id))),
298+
selectedPurposeIds: selectedAllowedPurposeIds,
299+
selectedCustomPurposeIds: selectedAllowedCustomPurposeIds,
272300
customPurposeList,
273301
vendorList,
274302
});
@@ -307,14 +335,31 @@ export default class Cmp {
307335
} = persistedVendorConsentData || {};
308336

309337
// Filter consents by values that exist in the current vendorList
310-
const allowedVendorIds = new Set(vendors.map(({id}) => id));
311-
const allowedPurposeIds = new Set(purposes.map(({id}) => id));
338+
const allowedVendorIds = new Set();
339+
for (let i in vendors) {
340+
allowedVendorIds.add(vendors[i].id);
341+
}
342+
343+
const allowedPurposeIds = new Set();
344+
for (let j in purposes) {
345+
allowedPurposeIds.add(purposes[j].id);
346+
}
347+
348+
const selectedAllowedVendorIds = new Set();
349+
Array.from(selectedVendorIds).filter(id => allowedVendorIds.has(id)).forEach((id) => {
350+
selectedAllowedVendorIds.add(id);
351+
});
352+
353+
const selectedAllowedPurposeIds = new Set();
354+
Array.from(selectedPurposeIds).filter(id => allowedPurposeIds.has(id)).forEach((id) => {
355+
selectedAllowedPurposeIds.add(id);
356+
});
312357

313358
// Encode the persisted data
314359
return persistedVendorConsentData && encodeVendorConsentData({
315360
...persistedVendorConsentData,
316-
selectedVendorIds: new Set(Array.from(selectedVendorIds).filter(id => allowedVendorIds.has(id))),
317-
selectedPurposeIds: new Set(Array.from(selectedPurposeIds).filter(id => allowedPurposeIds.has(id))),
361+
selectedVendorIds: selectedAllowedVendorIds,
362+
selectedPurposeIds: selectedAllowedPurposeIds,
318363
vendorList
319364
});
320365
};

src/lib/cmp.test.js

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -189,18 +189,37 @@ describe('cmp', () => {
189189
});
190190
});
191191

192-
it('getConsentData executes', (done) => {
193-
cmp.processCommand('getConsentData', null, data => {
194-
expect(typeof data.consentData).to.equal('string');
195-
done();
192+
describe('getConsentData', () => {
193+
beforeEach(() => {
194+
cmp.store = {
195+
consentString: "here's a consent string",
196+
persistedVendorConsentData: {},
197+
persist: () => {
198+
cmp.store.consentString = "here's a persisted consent string";
199+
},
200+
getFullVendorConsentsObject: () => {
201+
return new Promise((resolve) => {
202+
resolve({consentString: cmp.store.consentString});
203+
});
204+
}
205+
};
196206
});
197-
});
198207

199-
it('getConsentData returns persisted data', (done) => {
200-
cmp.store.persist();
201-
cmp.processCommand('getConsentData', null, data => {
202-
expect(typeof data.consentData).to.equal('string');
203-
done();
208+
it('getConsentData executes', (done) => {
209+
cmp.processCommand('getConsentData', null, data => {
210+
expect(typeof data.consentData).to.equal("string");
211+
expect(data.consentData).to.equal("here's a consent string");
212+
done();
213+
});
214+
});
215+
216+
it('getConsentData returns persisted data', (done) => {
217+
cmp.store.persist();
218+
cmp.processCommand('getConsentData', null, data => {
219+
expect(typeof data.consentData).to.equal("string");
220+
expect(data.consentData).to.equal("here's a persisted consent string");
221+
done();
222+
});
204223
});
205224
});
206225

src/lib/portal.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ function openGlobalVendorPortal() {
4444
// Add listener for messages from iframe
4545
window.addEventListener('message', event => {
4646
// Only look at messages with the vendorConsent property
47-
const data = event.data.vendorConsent;
47+
const data = event && event.data && event.data.vendorConsent;
4848
if (data) {
4949
// The iframe has loaded
5050
if (data.command === 'isLoaded' && portalTimeout) {

src/lib/store.js

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ function copyData(dataObject) {
2323
const copy = {...dataObject};
2424
for (let key in copy) {
2525
if (copy.hasOwnProperty(key) && copy[key] instanceof Set) {
26-
copy[key] = new Set(copy[key]);
26+
let set = new Set();
27+
copy[key].forEach((val) => {
28+
set.add(val);
29+
});
30+
copy[key] = set;
2731
}
2832
}
2933
return copy;
@@ -102,8 +106,14 @@ export default class Store {
102106
const {purposes = [], vendors = []} = vendorList;
103107

104108
// No consent will be allowed for vendors or purposes not on the list
105-
const allowedVendorIds = new Set(vendors.map(({id}) => id));
106-
const allowedPurposeIds = new Set(purposes.map(({id}) => id));
109+
const allowedVendorIds = new Set();
110+
for (let i in vendors) {
111+
allowedVendorIds.add(vendors[i].id);
112+
}
113+
const allowedPurposeIds = new Set();
114+
for (let j in purposes) {
115+
allowedPurposeIds.add(purposes[j].id);
116+
}
107117

108118
// Map requested vendorIds
109119
const vendorMap = {};
@@ -204,7 +214,10 @@ export default class Store {
204214
const {purposes: customPurposes = []} = customPurposeList;
205215

206216
// No consent will be allowed for purposes not on the list
207-
const allowedPurposeIds = new Set(purposes.map(({id}) => id));
217+
const allowedPurposeIds = new Set();
218+
for (let i in purposes) {
219+
allowedPurposeIds.add(purposes[i].id);
220+
}
208221

209222
const lastCustomPurposeId = Math.max(
210223
...customPurposes.map(({id}) => id),
@@ -404,8 +417,14 @@ export default class Store {
404417

405418
// If vendor consent data has never been persisted set default selected status
406419
if (!created) {
407-
this.vendorConsentData.selectedPurposeIds = new Set(purposes.map(p => p.id));
408-
this.vendorConsentData.selectedVendorIds = new Set(vendors.map(v => v.id));
420+
this.vendorConsentData.selectedPurposeIds = new Set();
421+
for (let i in purposes) {
422+
this.vendorConsentData.selectedPurposeIds.add(purposes[i].id);
423+
}
424+
this.vendorConsentData.selectedVendorIds = new Set();
425+
for (let j in vendors) {
426+
this.vendorConsentData.selectedVendorIds.add(vendors[j].id);
427+
}
409428
}
410429

411430
const {selectedVendorIds = new Set()} = this.vendorConsentData;
@@ -427,7 +446,10 @@ export default class Store {
427446
// If publisher consent has never been persisted set the default selected status
428447
if (!created) {
429448
const {purposes = [],} = customPurposeList || {};
430-
this.publisherConsentData.selectedCustomPurposeIds = new Set(purposes.map(p => p.id));
449+
this.publisherConsentData.selectedCustomPurposeIds = new Set();
450+
for (let i in purposes) {
451+
this.publisherConsentData.selectedCustomPurposeIds.add(purposes[i].id);
452+
}
431453
}
432454

433455
const {version = 1} = customPurposeList || {};

src/lib/utils.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ function initConstants() {
3333

3434
initConstants();
3535

36-
3736
function getConsentsCount(consentObject, vendorList) {
3837
let total = 0;
3938
let consented = 0;

0 commit comments

Comments
 (0)