Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorThomas Steur <thomas.steur@gmail.com>2015-06-08 02:36:00 +0300
committerThomas Steur <thomas.steur@gmail.com>2015-06-08 04:08:56 +0300
commitc6985edb229abf4a5328fe27d371bd4d01b617f7 (patch)
treed06ef3b57694e542fea821eeda0dd683557125de /js
parentb0bf81ce98e65c54c59a2fcdf17752e14141f0c1 (diff)
refs #7494 make sure to apply disableCookies before any other method that could potentially set a cookie
Diffstat (limited to 'js')
-rw-r--r--js/piwik.js81
1 files changed, 57 insertions, 24 deletions
diff --git a/js/piwik.js b/js/piwik.js
index b6e63bd5fe..b9a1c0657f 100644
--- a/js/piwik.js
+++ b/js/piwik.js
@@ -2747,6 +2747,7 @@ if (typeof Piwik !== 'object') {
* Sets the Visitor ID cookie
*/
function setVisitorIdCookie(visitorIdCookieValues) {
+
if(!configTrackerSiteId) {
// when called before Site ID was set
return;
@@ -2826,10 +2827,16 @@ if (typeof Piwik !== 'object') {
// Temporarily allow cookies just to delete the existing ones
configCookiesDisabled = false;
- deleteCookie(getCookieName('id'), configCookiePath, configCookieDomain);
- deleteCookie(getCookieName('ses'), configCookiePath, configCookieDomain);
- deleteCookie(getCookieName('cvar'), configCookiePath, configCookieDomain);
- deleteCookie(getCookieName('ref'), configCookiePath, configCookieDomain);
+
+ var cookiesToDelete = ['id', 'ses', 'cvar', 'ref'];
+ var index, cookieName;
+
+ for (index = 0; index < cookiesToDelete.length; index++) {
+ cookieName = getCookieName(cookiesToDelete[index]);
+ if (0 !== getCookie(cookieName)) {
+ deleteCookie(cookieName, configCookiePath, configCookieDomain);
+ }
+ }
configCookiesDisabled = savedConfigCookiesDisabled;
}
@@ -4726,6 +4733,10 @@ if (typeof Piwik !== 'object') {
disableCookies: function () {
configCookiesDisabled = true;
browserFeatures.cookie = '0';
+
+ if (configTrackerSiteId) {
+ deleteCookies();
+ }
},
/**
@@ -5274,6 +5285,46 @@ if (typeof Piwik !== 'object') {
};
}
+ /**
+ * Applies the given methods in the given order if they are present in paq.
+ *
+ * @param {Array} paq
+ * @param {Array} methodsToApply an array containing method names in the order that they should be applied
+ * eg ['setSiteId', 'setTrackerUrl']
+ * @returns {Array} the modified paq array with the methods that were already applied set to undefined
+ */
+ function applyMethodsInOrder(paq, methodsToApply)
+ {
+ var appliedMethods = {};
+ var index, iterator;
+
+ for (index = 0; index < methodsToApply.length; index++) {
+ var methodNameToApply = methodsToApply[index];
+ appliedMethods[methodNameToApply] = 1;
+
+ for (iterator = 0; iterator < paq.length; iterator++) {
+ if (paq[iterator] && paq[iterator][0]) {
+ var methodName = paq[iterator][0];
+
+ if (methodNameToApply === methodName) {
+ apply(paq[iterator]);
+ delete paq[iterator];
+
+ if (appliedMethods[methodName] > 1) {
+ if (console !== undefined && console && console.error) {
+ console.error('The method ' + methodName + ' is registered more than once in "paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers');
+ }
+ }
+
+ appliedMethods[methodName]++;
+ }
+ }
+ }
+ }
+
+ return paq;
+ }
+
/************************************************************
* Constructor
************************************************************/
@@ -5286,26 +5337,8 @@ if (typeof Piwik !== 'object') {
asyncTracker = new Tracker();
- var applyFirst = {setTrackerUrl: 1, setAPIUrl: 1, setUserId: 1, setSiteId: 1, disableCookies: 1, enableLinkTracking: 1};
- var methodName;
-
- // find the call to setTrackerUrl or setSiteid (if any) and call them first
- for (iterator = 0; iterator < _paq.length; iterator++) {
- methodName = _paq[iterator][0];
-
- if (applyFirst[methodName]) {
- apply(_paq[iterator]);
- delete _paq[iterator];
-
- if (applyFirst[methodName] > 1) {
- if (console !== undefined && console && console.error) {
- console.error('The method ' + methodName + ' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers');
- }
- }
-
- applyFirst[methodName]++;
- }
- }
+ var applyFirst = ['disableCookies', 'setTrackerUrl', 'setAPIUrl', 'setUserId', 'setSiteId', 'enableLinkTracking'];
+ _paq = applyMethodsInOrder(_paq, applyFirst);
// apply the queue of actions
for (iterator = 0; iterator < _paq.length; iterator++) {