WordPress.org

Make WordPress Core

Ticket #37941: 37941.2.diff

File 37941.2.diff, 4.2 KB (added by nicola.peluchetti, 3 years ago)
  • src/wp-includes/class-wp-admin-bar.php

    diff --git a/src/wp-includes/class-wp-admin-bar.php b/src/wp-includes/class-wp-admin-bar.php
    index 72b7ce4111..25830d1309 100644
    a b class WP_Admin_Bar { 
    153153                        $args['meta'] = wp_parse_args( $args['meta'], $defaults['meta'] );
    154154                }
    155155
     156                if ( isset( $args['meta'], $args['meta']['target'] ) && '_blank' === strtolower( $args['meta']['target'] ) ) {
     157                        $rel = 'noopener noreferrer';
     158
     159                        if ( isset( $args['meta']['rel'] ) ) {
     160                                $rel .= ' ' . $args['meta']['rel'];
     161                        }
     162
     163                        $args['meta']['rel'] = $rel;
     164                }
     165
    156166                $args = wp_parse_args( $args, $defaults );
    157167
    158168                $back_compat_parents = array(
  • tests/phpunit/tests/adminbar.php

    diff --git a/tests/phpunit/tests/adminbar.php b/tests/phpunit/tests/adminbar.php
    index 9eff0e150e..eee38442c3 100644
    a b class Tests_AdminBar extends WP_UnitTestCase { 
    7979                );
    8080        }
    8181
     82        /**
     83         * @ticket 37941
     84         */
     85        public function test_it_adds_rel_to_target_blank_links() {
     86                $admin_bar = new WP_Admin_Bar;
     87
     88                $admin_bar->add_node(
     89                        array(
     90                                'id'   => 'test-node',
     91                                'meta' => [ 'target' => '_blank' ],
     92                        )
     93                );
     94
     95                $test_node = $admin_bar->get_node( 'test-node' );
     96
     97                $this->assertEquals(
     98                        [ 'target' => '_blank', 'rel' => 'noopener noreferrer' ],
     99                        $test_node->meta
     100                );
     101
     102                $admin_bar->add_node(
     103                        array(
     104                                'id'   => 'test-node-2',
     105                                'meta' => [ 'target' => '_BLANK' ],
     106                        )
     107                );
     108
     109                $test_node_2 = $admin_bar->get_node( 'test-node-2' );
     110
     111                $this->assertEquals(
     112                        [ 'target' => '_BLANK', 'rel' => 'noopener noreferrer' ],
     113                        $test_node_2->meta
     114                );
     115
     116                $admin_bar->add_node(
     117                        array(
     118                                'id'   => 'test-node-3',
     119                                'meta' => [ 'target' => '_blank', 'rel' => 'nofollow' ],
     120                        )
     121                );
     122
     123                $test_node_3 = $admin_bar->get_node( 'test-node-3' );
     124
     125                $this->assertEquals(
     126                        [ 'target' => '_blank', 'rel' => 'noopener noreferrer nofollow' ],
     127                        $test_node_3->meta
     128                );
     129        }
     130
    82131        /**
    83132         * @ticket 25162
    84133         * @group ms-excluded