Commit 888b21f3 authored by Julian Pustkuchen's avatar Julian Pustkuchen Committed by Joshua Sedler
Browse files

Issue #3323553: Add data-cookieconsent for blocked scripts naming the Cookies Service ID

parent d58a9064
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ use Drupal\cookies\CookiesKnockOutService;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Asset\AttachedAssetsInterface;
use Drupal\asset_injector\AssetInjectorInterface;
use Drupal\cookies\Constants\CookiesConstants;
use Drupal\cookies_asset_injector\Constants\CookiesAssetInjectorConstants;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
@@ -187,7 +188,7 @@ function cookies_asset_injector_js_alter(&$javascript, AttachedAssetsInterface $
          // Consent is required, so we have to block this library, until
          // consent is given:
          if (isset($javascript[$filePath])) {
            $javascript[$filePath]['attributes']['type'] = 'text/plain';
            $javascript[$filePath]['attributes']['type'] = CookiesConstants::COOKIES_SCRIPT_KO_TYPE;
            $javascript[$filePath]['attributes']['id'] = CookiesAssetInjectorConstants::COOKIES_ASSET_INJECTOR_BLOCKED_SCRIPT_ID_PREFIX . Html::cleanCssIdentifier($blockedAsset->id());
            $javascript[$filePath]['attributes']['data-cookieconsent'] = Html::cleanCssIdentifier($cookiesServiceId);
          }
+8 −2
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
 * Contains cookies_facebook_pixel.module.
 */

use Drupal\cookies\Constants\CookiesConstants;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Template\Attribute;
use Drupal\cookies\CookiesKnockOutService;
@@ -42,7 +43,11 @@ function cookies_facebook_pixel_page_attachments(&$page) {
          $attr = (isset($head_tag[0]['#attributes'])) ? $head_tag[0]['#attributes'] : [];
          $attr = array_merge(
            $attr,
            ['type' => 'text/plain', 'id' => "cookies_{$script}"]
            [
              'type' => CookiesConstants::COOKIES_SCRIPT_KO_TYPE,
              'id' => "cookies_{$script}",
              'data-cookieconsent' => 'facebook_pixel',
            ],
          );
          $page["#attached"]["html_head"][$key][0]['#attributes'] = new Attribute($attr);
          break;
@@ -63,8 +68,9 @@ function cookies_facebook_pixel_js_alter(array &$javascript, AttachedAssetsInter
    $script = $modulePath . '/js/facebook_pixel.js';
    if (isset($javascript[$script])) {
      $javascript[$script]['preprocess'] = FALSE;
      $javascript[$script]['attributes']['type'] = 'text/plain';
      $javascript[$script]['attributes']['type'] = CookiesConstants::COOKIES_SCRIPT_KO_TYPE;
      $javascript[$script]['attributes']['id'] = 'facebook_tracking_pixel_script';
      $javascript[$script]['attributes']['data-cookieconsent'] = 'facebook_pixel';
    }
  }
}
+4 −3
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Drupal\Tests\cookies_facebook_pixel\FunctionalJavascript;

use Drupal\cookies\Constants\CookiesConstants;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\Tests\cookies\Traits\CookiesCacheClearTrait;

@@ -88,11 +89,11 @@ class CookiesFacebookPixelFunctionalJavascriptTest extends WebDriverTestBase {
    $this->drupalGet('/node/' . $node->id());
    // Consent denied, expected result:
    // @codingStandardsIgnoreStart
    // <script src="/modules/custom/facebook_pixel/js/facebook_pixel.js?v=XXXXXXX" type="text/plain" id="facebook_tracking_pixel_script"></script>.
    // <script src="/modules/custom/facebook_pixel/js/facebook_pixel.js?v=XXXXXXX" type="CookiesConstants::COOKIES_SCRIPT_KO_TYPE" id="facebook_tracking_pixel_script"></script>.
    // @codingStandardsIgnoreEnd
    $session->elementExists('css', 'script#facebook_tracking_pixel_script');
    $session->elementAttributeContains('css', 'script#facebook_tracking_pixel_script', 'type', 'text/plain');
    $session->elementAttributeContains('css', 'script[src*="facebook_pixel.js"]', 'type', 'text/plain');
    $session->elementAttributeContains('css', 'script#facebook_tracking_pixel_script', 'type', CookiesConstants::COOKIES_SCRIPT_KO_TYPE);
    $session->elementAttributeContains('css', 'script[src*="facebook_pixel.js"]', 'type', CookiesConstants::COOKIES_SCRIPT_KO_TYPE);

    // Fire consent script, accept all cookies:
    $script = "var options = { all: true };
+1 −1
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@
      ).each(function heal(i, element) {
        const $element = $(element);
        // Heal 'iframe','embed', 'object', 'img', 'a'
        // Knock in 'text/plain' -> 'text/javascript':
        // Knock in CookiesConstants::COOKIES_SCRIPT_KO_TYPE -> 'text/javascript':
        if ($element.hasClass("cookies-filter-replaced--type")) {
          if ($element.attr("type") === "text/plain") {
            $element.removeAttr("type");
+5 −1
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Drupal\cookies_filter\Services;

use Drupal\cookies\Constants\CookiesConstants;
use Drupal\filter\FilterProcessResult;
use Symfony\Component\DomCrawler\Crawler;
use Drupal\Core\Entity\EntityTypeManagerInterface;
@@ -132,6 +133,7 @@ class CookiesFilterElementTypesService {
            }

            $domElement->setAttribute('data-src', $src);
            $domElement->setAttribute('data-cookieconsent', $serviceId);
            $domElement->setAttribute('class', 'cookies-filter-processed cookies-filter-replaced--src cookies-filter-service--' . $serviceId . ' ' . $domElement->getAttribute('class'));
            $domElement->removeAttribute('src');
            break;
@@ -151,6 +153,7 @@ class CookiesFilterElementTypesService {
            }

            $domElement->setAttribute('data-data', $data);
            $domElement->setAttribute('data-cookieconsent', $serviceId);
            $domElement->setAttribute('class', 'cookies-filter-processed cookies-filter-replaced--data cookies-filter-service--' . $serviceId . ' ' . $domElement->getAttribute('class'));
            $domElement->removeAttribute('data');
            break;
@@ -162,7 +165,8 @@ class CookiesFilterElementTypesService {
              $domElement->removeAttribute('src');
              $domElement->setAttribute('class', 'cookies-filter-replaced--src ' . $domElement->getAttribute('class'));
            }
            $domElement->setAttribute('type', 'text/plain');
            $domElement->setAttribute('type', CookiesConstants::COOKIES_SCRIPT_KO_TYPE);
            $domElement->setAttribute('data-cookieconsent', $serviceId);
            $domElement->setAttribute('class', 'cookies-filter-processed cookies-filter-replaced--type cookies-filter-service--' . $serviceId . ' ' . $domElement->getAttribute('class'));
            break;

Loading