Make WordPress Core

Ticket #44306: slow-post-embeds.php

File slow-post-embeds.php, 1.1 KB (added by westonruter, 3 years ago)

Demonstration showing how a slow-loading wp-embed.js can cause post embeds to fail to get sized

Line 
1<?php
2/**
3 * Plugin Name: Slow Post Embeds
4 * Description: This tests an (uncommon) scenario where a post embed iframe finishes loading before the host page is able to load wp-embed.js and fire the DOMContentLoaded event. In this scenario (filed as <a href="https://core.trac.wordpress.org/ticket/44306">#44306</a>), the embed will fail to get the height set since the host page missed the height message from the post embed window.
5 * Author: Weston Ruter
6 */
7
8namespace Slow_Post_Embeds;
9
10const QUERY_VAR = 'slow_redirect_url';
11
12add_filter(
13        'script_loader_src',
14        static function ( $url, $handle ) {
15                if ( 'wp-embed' === $handle ) {
16                        $url = add_query_arg(
17                                [
18                                        QUERY_VAR    => rawurlencode( $url ),
19                                        'cache_bust' => wp_rand(),
20                                ],
21                                home_url( '/' )
22                        );
23                }
24                return $url;
25        },
26        10,
27        2
28);
29
30add_action(
31        'template_redirect',
32        static function () {
33                if ( ! isset( $_GET[ QUERY_VAR ] ) ) {
34                        return;
35                }
36
37                $url = wp_validate_redirect( wp_unslash( $_GET[ QUERY_VAR ] ) );
38                if ( ! $url ) {
39                        return;
40                }
41
42                sleep( 3 );
43                wp_redirect( $url, 302 );
44                exit;
45        }
46);