Skip to content

Commit e10b43d

Browse files
hen consent is not given don't write cookies, extractDomain was doing so while trying to find the root.
1 parent 07e24d8 commit e10b43d

File tree

2 files changed

+110
-6
lines changed

2 files changed

+110
-6
lines changed

src/lib/pubcidHandler.js

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,24 @@ export default class PubcidHandler {
157157
*/
158158
deletePubcid({all = true} = {}) {
159159
const {name} = this.config;
160-
if (all) {
161-
deleteValue(COOKIE, name, this.getDomain(COOKIE));
162-
deleteValue(LOCAL_STORAGE, name, this.getDomain(LOCAL_STORAGE));
163-
} else {
164-
deleteValue(this.typeEnabled, name);
160+
if (all || this.typeEnabled == COOKIE) {
161+
//Don't call getDomain as it may write out temp cookies so copy getDomain functionality here
162+
if (this.config.cookieDomain !== undefined) {
163+
deleteValue(COOKIE, name, this.config.cookieDomain);
164+
} else if (this.cachedDomain !== undefined) {
165+
deleteValue(COOKIE, name, this.cachedDomain);
166+
} else {
167+
//Just attempt to delete any cookie matching name and domain, don't care about success
168+
const parts = this.getHostname().split('.');
169+
for (let i = 0, len = parts.length; i < len; ++i) {
170+
const currDomain = parts.slice(i).join('.');
171+
deleteValue(COOKIE, name, currDomain);
172+
}
173+
}
174+
}
175+
176+
if (all || this.typeEnabled == LOCAL_STORAGE) {
177+
deleteValue(LOCAL_STORAGE, name, ''); //domain doesn't do anything for LOCAL_STORAGE
165178
}
166179
}
167180

@@ -192,9 +205,18 @@ export default class PubcidHandler {
192205
return this.cachedDomain
193206
}
194207
else {
195-
this.cachedDomain = extractDomain(document.location.hostname);
208+
this.cachedDomain = extractDomain(this.getHostname());
196209
return this.cachedDomain;
197210
}
198211
}
199212
}
213+
214+
/**
215+
* Wrapper for global value of document.location.hostname
216+
* allows for easier unit testing to mock hostname.
217+
* @returns {String} document.location.hostname
218+
*/
219+
getHostname(){
220+
return document.location.hostname;
221+
}
200222
}

test/lib/pubcidHandler.spec.js

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,4 +657,86 @@ describe('PubcidHandler', ()=> {
657657
expect(domain).to.be.undefined;
658658
});
659659
});
660+
661+
describe('deletePubcid', ()=> {
662+
let deleteStub;
663+
before(()=>{
664+
deleteStub = sinon.stub(storageUtils, 'deleteValue');
665+
clearAll();
666+
});
667+
668+
after(()=>{
669+
deleteStub.restore();
670+
})
671+
672+
beforeEach(() => {
673+
deleteStub.resetHistory();
674+
});
675+
676+
afterEach(() => {
677+
clearAll();
678+
});
679+
680+
it('delete Cookie From Config', ()=>{
681+
const expectedDomain = 'hello.cookie';
682+
const expectedPubcidName = '_foobar';
683+
const options = {cookieDomain: expectedDomain, name: expectedPubcidName, type: COOKIE};
684+
const handler = new PubcidHandler(options);
685+
expect(deleteStub).to.have.not.been.called;
686+
handler.deletePubcid({all: false});
687+
expect(deleteStub).to.have.been.calledOnceWith(COOKIE, expectedPubcidName, expectedDomain)
688+
});
689+
690+
it('delete Cookie From Cached Domain', ()=>{
691+
const expectedDomain = undefined;
692+
const cachedDomain = 'foobar.com';
693+
const expectedPubcidName = '_foobar';
694+
const options = {cookieDomain: expectedDomain, name: expectedPubcidName, type: COOKIE};
695+
const handler = new PubcidHandler(options);
696+
handler.cachedDomain = cachedDomain;
697+
expect(deleteStub).to.have.not.been.called;
698+
handler.deletePubcid({all: false});
699+
expect(deleteStub).to.have.been.calledOnceWith(COOKIE, expectedPubcidName, cachedDomain)
700+
});
701+
702+
it('delete Cookie From Hostname', ()=>{
703+
const expectedDomain = undefined;
704+
const expectedPubcidName = '_foobar';
705+
const options = {cookieDomain: expectedDomain, name: expectedPubcidName, type: COOKIE};
706+
const handler = new PubcidHandler(options);
707+
708+
let getHostnameStub = sinon.stub(handler, 'getHostname').returns("foo.bar.baz");
709+
710+
expect(deleteStub).to.have.not.been.called;
711+
handler.deletePubcid({all: false});
712+
sinon.assert.callCount(deleteStub, 3);
713+
expect(deleteStub).to.have.been.calledWith(COOKIE, expectedPubcidName, "foo.bar.baz");
714+
expect(deleteStub).to.have.been.calledWith(COOKIE, expectedPubcidName, "bar.baz");
715+
expect(deleteStub).to.have.been.calledWith(COOKIE, expectedPubcidName, "baz");
716+
717+
getHostnameStub.restore();
718+
});
719+
720+
it('delete Pubcid from Local Storage', ()=>{
721+
const expectedDomain = "foobar.com";
722+
const expectedPubcidName = '_foobar';
723+
const options = {cookieDomain: expectedDomain, name: expectedPubcidName, type: LOCAL_STORAGE};
724+
const handler = new PubcidHandler(options);
725+
expect(deleteStub).to.have.not.been.called;
726+
handler.deletePubcid({all: false});
727+
expect(deleteStub).to.have.been.calledOnceWith(LOCAL_STORAGE, expectedPubcidName, '');
728+
});
729+
730+
it('delete Pubcid from All', ()=>{
731+
const expectedDomain = "foobar.com";
732+
const expectedPubcidName = '_foobar';
733+
const options = {cookieDomain: expectedDomain, name: expectedPubcidName, type: LOCAL_STORAGE};
734+
const handler = new PubcidHandler(options);
735+
expect(deleteStub).to.have.not.been.called;
736+
handler.deletePubcid();
737+
sinon.assert.callCount(deleteStub, 2);
738+
expect(deleteStub).to.have.been.calledWith(COOKIE, expectedPubcidName, expectedDomain)
739+
expect(deleteStub).to.have.been.calledWith(LOCAL_STORAGE, expectedPubcidName, '');
740+
});
741+
});
660742
});

0 commit comments

Comments
 (0)