WordPress.org

Make WordPress Core

Ticket #37652: 37652.4.diff

File 37652.4.diff, 3.4 KB (added by ocean90, 4 years ago)
  • src/wp-includes/general-template.php

     
    28392839                                        continue;
    28402840                                }
    28412841
    2842                                 if ( 'dns-prefetch' === $relation_type ) {
    2843                                         $url = '//' . $parsed['host'];
    2844                                 } else if ( ! empty( $parsed['scheme'] ) ) {
     2842                                if ( 'preconnect' === $relation_type && ! empty( $parsed['scheme'] ) ) {
    28452843                                        $url = $parsed['scheme'] . '://' . $parsed['host'];
    28462844                                } else {
    2847                                         $url = $parsed['host'];
     2845                                        // Use protocol-relative URLs for dns-prefetch or if scheme is missing.
     2846                                        $url = '//' . $parsed['host'];
    28482847                                }
    28492848                        }
    28502849
  • tests/phpunit/tests/general/resourceHints.php

     
    6666                return $hints;
    6767        }
    6868
     69        /**
     70         * @ticket 37652
     71         */
     72        function test_preconnect() {
     73                $expected = "<link rel='dns-prefetch' href='//s.w.org'>\n" .
     74                            "<link rel='preconnect' href='//wordpress.org'>\n" .
     75                            "<link rel='preconnect' href='https://make.wordpress.org'>\n" .
     76                            "<link rel='preconnect' href='http://google.com'>\n" .
     77                            "<link rel='preconnect' href='http://w.org'>\n";
     78
     79                add_filter( 'wp_resource_hints', array( $this, '_add_preconnect_domains' ), 10, 2 );
     80
     81                $actual = get_echo( 'wp_resource_hints' );
     82
     83                remove_filter( 'wp_resource_hints', array( $this, '_add_preconnect_domains' ) );
     84
     85                $this->assertEquals( $expected, $actual );
     86        }
     87
     88        function _add_preconnect_domains( $hints, $method ) {
     89                if ( 'preconnect' === $method ) {
     90                        $hints[] = '//wordpress.org';
     91                        $hints[] = 'https://make.wordpress.org';
     92                        $hints[] = 'htps://example.com'; // Invalid URLs should be skipped.
     93                        $hints[] = 'http://google.com';
     94                        $hints[] = 'w.org';
     95                }
     96
     97                return $hints;
     98        }
     99
    69100        function test_prerender() {
    70101                $expected = "<link rel='dns-prefetch' href='//s.w.org'>\n" .
    71102                                        "<link rel='prerender' href='https://make.wordpress.org/great-again'>\n" .
     
    176207                $actual = get_echo( 'wp_resource_hints' );
    177208                $this->assertEquals( $expected, $actual );
    178209        }
     210
     211        /**
     212         * @ticket 37652
     213         */
     214        function test_malformed_urls() {
     215                $expected = "<link rel='dns-prefetch' href='//s.w.org'>\n";
     216
     217                // Errant colon.
     218                add_filter( 'wp_resource_hints', array( $this, '_add_malformed_url_errant_colon' ), 10, 2 );
     219                $actual = get_echo( 'wp_resource_hints' );
     220                remove_filter( 'wp_resource_hints', array( $this, '_add_malformed_url_errant_colon' ) );
     221                $this->assertEquals( $expected, $actual );
     222
     223                // Unsupported Scheme.
     224                add_filter( 'wp_resource_hints', array( $this, '_add_malformed_url_unsupported_scheme' ), 10, 2 );
     225                $actual = get_echo( 'wp_resource_hints' );
     226                remove_filter( 'wp_resource_hints', array( $this, '_add_malformed_url_unsupported_scheme' ) );
     227                $this->assertEquals( $expected, $actual );
     228        }
     229
     230        function _add_malformed_url_errant_colon( $hints, $method ) {
     231                if ( 'preconnect' === $method ) {
     232                        $hints[] = '://core.trac.wordpress.org/ticket/37652';
     233                }
     234
     235                return $hints;
     236        }
     237
     238        function _add_malformed_url_unsupported_scheme( $hints, $method ) {
     239                if ( 'preconnect' === $method ) {
     240                        $hints[] = 'git://develop.git.wordpress.org/';
     241                }
     242
     243                return $hints;
     244        }
    179245}