|
182 | 182 | }, {
|
183 | 183 | key: "vendorLegitimateInterests",
|
184 | 184 | queue: queueVendors
|
| 185 | + }, { |
| 186 | + key: "publisherRestrictions", |
| 187 | + queue: [{ |
| 188 | + key: "numPubRestrictions", |
| 189 | + size: 12 |
| 190 | + }] |
185 | 191 | });
|
186 | 192 |
|
187 | 193 | var queueSegment = [{
|
|
241 | 247 |
|
242 | 248 | return function (string) {
|
243 | 249 | var reduceQueue = function (queue, schema, value, result) {
|
244 |
| - var reduceEntries = function () { |
| 250 | + var reduceNumPubEntries = function () { |
| 251 | + if (result.pubRestrictionEntry && result.rangeEntry) { |
| 252 | + result.pubRestrictionEntry = Object.assign(result.pubRestrictionEntry, result.rangeEntry); |
| 253 | + } |
| 254 | + |
| 255 | + if (result.numPubRestrictions) { |
| 256 | + result.numPubRestrictions -= 1; |
| 257 | + |
| 258 | + queue.push({ |
| 259 | + key: "purposeId", |
| 260 | + size: 6 |
| 261 | + }, { |
| 262 | + key: "restrictionType", |
| 263 | + size: 2 |
| 264 | + }, { |
| 265 | + key: "numEntries", |
| 266 | + size: 12 |
| 267 | + }); |
| 268 | + } |
| 269 | + }; |
| 270 | + |
| 271 | + var reduceNumEntries = function () { |
245 | 272 | if (result.numEntries) {
|
246 | 273 | result.numEntries -= 1;
|
247 | 274 |
|
|
253 | 280 | key: "startVendorId",
|
254 | 281 | size: 16
|
255 | 282 | });
|
| 283 | + } else { |
| 284 | + reduceNumPubEntries(); |
| 285 | + } |
| 286 | + }; |
| 287 | + |
| 288 | + var getRangeResult = function () { |
| 289 | + if (result.purposeId) { |
| 290 | + return [{ |
| 291 | + purpose: result.purposeId, |
| 292 | + isAllowed: result.restrictionType !== 0, |
| 293 | + isConsentRequired: result.restrictionType === 1, |
| 294 | + isLegitimateInterestRequired: result.restrictionType === 2 |
| 295 | + }]; |
256 | 296 | }
|
| 297 | + |
| 298 | + return true; |
257 | 299 | };
|
258 | 300 |
|
259 | 301 | if (schema.key === "isRangeEncoding") {
|
|
269 | 311 |
|
270 | 312 | if (schema.key === "numEntries") {
|
271 | 313 | result.rangeEntry = {};
|
272 |
| - reduceEntries(); |
| 314 | + reduceNumEntries(); |
273 | 315 | } else
|
274 | 316 |
|
275 | 317 | if (schema.key === "isRange") {
|
|
283 | 325 |
|
284 | 326 | if (schema.key === "startVendorId") {
|
285 | 327 | if (!result.isRange) {
|
286 |
| - result.rangeEntry[value] = true; |
287 |
| - reduceEntries(); |
| 328 | + result.rangeEntry[value] = getRangeResult(); |
| 329 | + reduceNumEntries(); |
288 | 330 | }
|
289 | 331 | } else
|
290 | 332 |
|
291 | 333 | if (schema.key === "endVendorId") {
|
292 | 334 | for (var vendorId = result.startVendorId; vendorId <= result.endVendorId; vendorId += 1) {
|
293 |
| - result.rangeEntry[vendorId] = true; |
| 335 | + result.rangeEntry[vendorId] = getRangeResult(); |
294 | 336 | }
|
295 |
| - reduceEntries(); |
| 337 | + reduceNumEntries(); |
296 | 338 | } else
|
297 | 339 |
|
298 | 340 | if (schema.key === "numCustomPurposes") {
|
|
305 | 347 | size: result.numCustomPurposes,
|
306 | 348 | decoder: decodeFlags
|
307 | 349 | });
|
| 350 | + } else |
| 351 | + |
| 352 | + if (schema.key === "numPubRestrictions") { |
| 353 | + result.pubRestrictionEntry = {}; |
| 354 | + reduceNumPubEntries(); |
308 | 355 | }
|
309 | 356 | };
|
310 | 357 |
|
| 358 | + var reduceResult = function (result) { |
| 359 | + return result.pubRestrictionEntry || result.rangeEntry || result.bitField || result; |
| 360 | + }; |
| 361 | + |
311 | 362 | var offset = 0;
|
| 363 | + |
312 | 364 | var getSchemaResult = function (schema, bits) {
|
313 | 365 | var value = bits.slice(offset, offset + schema.size);
|
314 | 366 | offset += schema.size;
|
|
331 | 383 | reduceQueue(sectionSchema.queue, schema, value, result);
|
332 | 384 | }
|
333 | 385 |
|
334 |
| - return result.bitField || result.rangeEntry || result; |
| 386 | + return reduceResult(result); |
335 | 387 | };
|
336 | 388 |
|
337 | 389 | var getBlockResult = function (blockSchema, bits) {
|
|
346 | 398 | reduceQueue(blockSchema.queue, schema, value, result);
|
347 | 399 | }
|
348 | 400 |
|
349 |
| - return result.bitField || result.rangeEntry || result; |
| 401 | + return reduceResult(result); |
350 | 402 | };
|
351 | 403 |
|
352 | 404 | var getResult = function () {
|
|
0 commit comments