Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / modules / hal / src / LinkManager / LinkManagerBase.php
index 20adc0802ec29ace3a418f57a60ac43c1723ce88..410265fa3d8d457757cedc4440366cac33abad10 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace Drupal\hal\LinkManager;
 
+use Drupal\serialization\Normalizer\CacheableNormalizerInterface;
+
 /**
  * Defines an abstract base-class for HAL link manager objects.
  */
@@ -39,17 +41,32 @@ abstract class LinkManagerBase {
   /**
    * Gets the link domain.
    *
+   * @param array $context
+   *   Normalization/serialization context.
+   *
    * @return string
    *   The link domain.
+   *
+   * @see \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()
+   * @see \Symfony\Component\Serializer\SerializerInterface::serialize()
+   * @see \Drupal\serialization\Normalizer\CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY
    */
-  protected function getLinkDomain() {
+  protected function getLinkDomain(array $context = []) {
     if (empty($this->linkDomain)) {
       if ($domain = $this->configFactory->get('hal.settings')->get('link_domain')) {
-        $this->linkDomain = rtrim($domain, '/');
+        // Bubble the appropriate cacheability metadata whenever possible.
+        if (isset($context[CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY])) {
+          $context[CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY]->addCacheableDependency($this->configFactory->get('hal.settings'));
+        }
+        return rtrim($domain, '/');
       }
       else {
+        // Bubble the relevant cacheability metadata whenever possible.
+        if (isset($context[CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY])) {
+          $context[CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY]->addCacheContexts(['url.site']);
+        }
         $request = $this->requestStack->getCurrentRequest();
-        $this->linkDomain = $request->getSchemeAndHttpHost() . $request->getBasePath();
+        return $request->getSchemeAndHttpHost() . $request->getBasePath();
       }
     }
     return $this->linkDomain;