From 829b444f6513cc897b22e09b53a64f47078a76c3 Mon Sep 17 00:00:00 2001
From: mattab <matthieu.aubry@gmail.com>
Date: Tue, 27 Sep 2016 15:58:43 +1300
Subject: [PATCH] Delete UID cookie only when found

---
 core/Tracker/IgnoreCookie.php                     | 15 +++++++++++----
 core/Tracker/Request.php                          |  6 +++---
 .../PrivacyManager/DoNotTrackHeaderChecker.php    |  3 +--
 tests/PHPUnit/Unit/Tracker/RequestTest.php        |  8 ++++----
 4 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/core/Tracker/IgnoreCookie.php b/core/Tracker/IgnoreCookie.php
index 4e28a3161d..83c62d00a3 100644
--- a/core/Tracker/IgnoreCookie.php
+++ b/core/Tracker/IgnoreCookie.php
@@ -22,7 +22,7 @@ class IgnoreCookie
      *
      * @return Cookie
      */
-    public static function getTrackingCookie()
+    private static function getTrackingCookie()
     {
         $cookie_name = @Config::getInstance()->Tracker['cookie_name'];
         $cookie_path = @Config::getInstance()->Tracker['cookie_path'];
@@ -30,6 +30,14 @@ class IgnoreCookie
         return new Cookie($cookie_name, null, $cookie_path);
     }
 
+    public static function deleteThirdPartyCookieUIDIfExists()
+    {
+        $trackingCookie = self::getTrackingCookie();
+        if ($trackingCookie->isCookieFound()) {
+            $trackingCookie->delete();
+        }
+    }
+
     /**
      * Get ignore (visit) cookie
      *
@@ -54,10 +62,9 @@ class IgnoreCookie
         } else {
             $ignoreCookie->set('ignore', '*');
             $ignoreCookie->save();
-
-            $trackingCookie = self::getTrackingCookie();
-            $trackingCookie->delete();
         }
+
+        self::deleteThirdPartyCookieUIDIfExists();
     }
 
     /**
diff --git a/core/Tracker/Request.php b/core/Tracker/Request.php
index b6f3163046..dd594b9974 100644
--- a/core/Tracker/Request.php
+++ b/core/Tracker/Request.php
@@ -614,13 +614,13 @@ class Request
 
         Common::printDebug("We manage the cookie...");
 
-        $cookie = $this->makeThirdPartyCookie();
+        $cookie = $this->makeThirdPartyCookieUID();
         // idcookie has been generated in handleNewVisit or we simply propagate the old value
         $cookie->set(0, bin2hex($idVisitor));
         $cookie->save();
     }
 
-    protected function makeThirdPartyCookie()
+    protected function makeThirdPartyCookieUID()
     {
         $cookie = new Cookie(
             $this->getCookieName(),
@@ -684,7 +684,7 @@ class Request
             // - By default, reads the first party cookie ID
             $useThirdPartyCookie = $this->shouldUseThirdPartyCookie();
             if ($useThirdPartyCookie) {
-                $cookie = $this->makeThirdPartyCookie();
+                $cookie = $this->makeThirdPartyCookieUID();
                 $idVisitor = $cookie->get(0);
                 if ($idVisitor !== false
                     && strlen($idVisitor) == Tracker::LENGTH_HEX_ID_STRING
diff --git a/plugins/PrivacyManager/DoNotTrackHeaderChecker.php b/plugins/PrivacyManager/DoNotTrackHeaderChecker.php
index 108ec45748..c8c6f9df9b 100644
--- a/plugins/PrivacyManager/DoNotTrackHeaderChecker.php
+++ b/plugins/PrivacyManager/DoNotTrackHeaderChecker.php
@@ -44,8 +44,7 @@ class DoNotTrackHeaderChecker
 
         if($exclude) {
 
-            $trackingCookie = IgnoreCookie::getTrackingCookie();
-            $trackingCookie->delete();
+            IgnoreCookie::deleteThirdPartyCookieUIDIfExists();
 
             // this is an optional supplement to the site's tracking status resource at:
             //     /.well-known/dnt
diff --git a/tests/PHPUnit/Unit/Tracker/RequestTest.php b/tests/PHPUnit/Unit/Tracker/RequestTest.php
index 7eb38059a2..e3964369ff 100644
--- a/tests/PHPUnit/Unit/Tracker/RequestTest.php
+++ b/tests/PHPUnit/Unit/Tracker/RequestTest.php
@@ -451,14 +451,14 @@ class RequestTest extends UnitTestCase
 
     public function test_makeThirdPartyCookie_ShouldReturnAnInstanceOfCookie()
     {
-        $cookie = $this->request->makeThirdPartyCookie();
+        $cookie = $this->request->makeThirdPartyCookieUID();
 
         $this->assertTrue($cookie instanceof Cookie);
     }
 
     public function test_makeThirdPartyCookie_ShouldPreconfigureTheCookieInstance()
     {
-        $cookie = $this->request->makeThirdPartyCookie();
+        $cookie = $this->request->makeThirdPartyCookieUID();
 
         $this->assertCookieContains('COOKIE _pk_uid', $cookie);
         $this->assertCookieContains('expire: 1450750817', $cookie);
@@ -595,9 +595,9 @@ class TestRequest extends Request
         return parent::getCookiePath();
     }
 
-    public function makeThirdPartyCookie()
+    public function makeThirdPartyCookieUID()
     {
-        return parent::makeThirdPartyCookie();
+        return parent::makeThirdPartyCookieUID();
     }
 
     public function setIsAuthenticated()
-- 
GitLab