Skip to content
Snippets Groups Projects
Commit 1b747d5b authored by catch's avatar catch
Browse files

Issue #3432599 by amateescu, alecsmrekar, larowlan: The default configuration...

Issue #3432599 by amateescu, alecsmrekar, larowlan: The default configuration of the oEmbed source plugin makes pages uncacheable
parent d80d0e8f
No related branches found
No related tags found
29 merge requests!11131[10.4.x-only-DO-NOT-MERGE]: Issue ##2842525 Ajax attached to Views exposed filter form does not trigger callbacks,!9470[10.3.x-only-DO-NOT-MERGE]: #3331771 Fix file_get_contents(): Passing null to parameter,!8540Issue #3457061: Bootstrap Modal dialog Not closing after 10.3.0 Update,!8528Issue #3456871 by Tim Bozeman: Support NULL services,!8373Issue #3427374 by danflanagan8, Vighneshh: taxonomy_tid ViewsArgumentDefault...,!7526Expose roles in response,!7352Draft: Resolve #3203489 "Set filename as",!3878Removed unused condition head title for views,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3133core/modules/system/css/components/hidden.module.css,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2794Issue #3100732: Allow specifying `meta` data on JSON:API objects,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2062Issue #3246454: Add weekly granularity to views date sort,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493
Pipeline #126219 canceled
Pipeline: drupal

#126224

    ...@@ -257,7 +257,7 @@ public function getMetadata(MediaInterface $media, $name) { ...@@ -257,7 +257,7 @@ public function getMetadata(MediaInterface $media, $name) {
    return parent::getMetadata($media, 'default_name'); return parent::getMetadata($media, 'default_name');
    case 'thumbnail_uri': case 'thumbnail_uri':
    return $this->getLocalThumbnailUri($resource) ?: parent::getMetadata($media, 'thumbnail_uri'); return $this->getLocalThumbnailUri($resource, $media) ?: parent::getMetadata($media, 'thumbnail_uri');
    case 'type': case 'type':
    return $resource->getType(); return $resource->getType();
    ...@@ -387,6 +387,8 @@ public function defaultConfiguration() { ...@@ -387,6 +387,8 @@ public function defaultConfiguration() {
    * *
    * @param \Drupal\media\OEmbed\Resource $resource * @param \Drupal\media\OEmbed\Resource $resource
    * The oEmbed resource. * The oEmbed resource.
    * @param \Drupal\media\MediaInterface|null $media
    * The media entity that contains the resource.
    * *
    * @return string|null * @return string|null
    * The local thumbnail URI, or NULL if it could not be downloaded, or if the * The local thumbnail URI, or NULL if it could not be downloaded, or if the
    ...@@ -397,7 +399,15 @@ public function defaultConfiguration() { ...@@ -397,7 +399,15 @@ public function defaultConfiguration() {
    * toggle-able. See https://www.drupal.org/project/drupal/issues/2962751 for * toggle-able. See https://www.drupal.org/project/drupal/issues/2962751 for
    * more information. * more information.
    */ */
    protected function getLocalThumbnailUri(Resource $resource) { protected function getLocalThumbnailUri(Resource $resource, MediaInterface $media = NULL) {
    if (is_null($media)) {
    @trigger_error('Calling ' . __METHOD__ . '() without the $media argument is deprecated in drupal:10.3.0 and it will be required in drupal:11.0.0. See https://www.drupal.org/node/3432920', E_USER_DEPRECATED);
    $token_data = [];
    }
    else {
    $token_data = ['date' => $media->getCreatedTime()];
    }
    // If there is no remote thumbnail, there's nothing for us to fetch here. // If there is no remote thumbnail, there's nothing for us to fetch here.
    $remote_thumbnail_url = $resource->getThumbnailUrl(); $remote_thumbnail_url = $resource->getThumbnailUrl();
    if (!$remote_thumbnail_url) { if (!$remote_thumbnail_url) {
    ...@@ -409,7 +419,11 @@ protected function getLocalThumbnailUri(Resource $resource) { ...@@ -409,7 +419,11 @@ protected function getLocalThumbnailUri(Resource $resource) {
    // contain HTML, the tags will be removed and XML entities will be decoded. // contain HTML, the tags will be removed and XML entities will be decoded.
    $configuration = $this->getConfiguration(); $configuration = $this->getConfiguration();
    $directory = $configuration['thumbnails_directory']; $directory = $configuration['thumbnails_directory'];
    $directory = $this->token->replace($directory); // The thumbnail directory might contain a date token, so we pass in the
    // creation date of the media entity so that the token won't rely on the
    // current request time, making the current request have a max-age of 0.
    // @see system_tokens() for $type == 'date'.
    $directory = $this->token->replace($directory, $token_data);
    $directory = PlainTextOutput::renderFromHtml($directory); $directory = PlainTextOutput::renderFromHtml($directory);
    // The local thumbnail doesn't exist yet, so try to download it. First, // The local thumbnail doesn't exist yet, so try to download it. First,
    ......
    ...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
    namespace Drupal\Tests\media\Kernel; namespace Drupal\Tests\media\Kernel;
    use Drupal\Component\Utility\Crypt; use Drupal\Component\Utility\Crypt;
    use Drupal\Core\Cache\Cache;
    use Drupal\Core\Render\RenderContext;
    use Drupal\media\Entity\Media; use Drupal\media\Entity\Media;
    use Drupal\media\OEmbed\Resource; use Drupal\media\OEmbed\Resource;
    use Drupal\media\OEmbed\ResourceFetcherInterface; use Drupal\media\OEmbed\ResourceFetcherInterface;
    ...@@ -170,6 +172,16 @@ public function testThumbnailUri(string $remote_thumbnail_url, array $thumbnail_ ...@@ -170,6 +172,16 @@ public function testThumbnailUri(string $remote_thumbnail_url, array $thumbnail_
    /** @var \Drupal\Core\Image\Image $image */ /** @var \Drupal\Core\Image\Image $image */
    $image = $this->container->get('image.factory')->get($expected_uri); $image = $this->container->get('image.factory')->get($expected_uri);
    $this->assertTrue($image->isValid()); $this->assertTrue($image->isValid());
    // Check that the current date token as per the default configuration of the
    // oEmbed source plugin doesn't make a render context uncacheable.
    $context = new RenderContext();
    \Drupal::service('renderer')->executeInRenderContext($context, function () use ($source, $media) {
    return $source->getMetadata($media, 'thumbnail_uri');
    });
    /** @var \Drupal\Core\Render\BubbleableMetadata $bubbleable_metadata */
    $bubbleable_metadata = $context->pop();
    $this->assertSame(Cache::PERMANENT, $bubbleable_metadata->getCacheMaxAge());
    } }
    } }
    • catch @catch

      mentioned in commit 03813e23

      ·

      mentioned in commit 03813e23

      Toggle commit list
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment