forked from WordPress/wordpress-develop
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwpCrossOriginIsolation.php
More file actions
125 lines (96 loc) · 3.99 KB
/
wpCrossOriginIsolation.php
File metadata and controls
125 lines (96 loc) · 3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
/**
* Tests for cross-origin isolation functions.
*
* @group media
* @covers ::wp_set_up_cross_origin_isolation
* @covers ::wp_start_cross_origin_isolation_output_buffer
*/
class Tests_Media_wpCrossOriginIsolation extends WP_UnitTestCase {
/**
* Original HTTP_USER_AGENT value.
*
* @var string|null
*/
private $original_user_agent;
public function set_up() {
parent::set_up();
$this->original_user_agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : null;
}
public function tear_down() {
if ( null === $this->original_user_agent ) {
unset( $_SERVER['HTTP_USER_AGENT'] );
} else {
$_SERVER['HTTP_USER_AGENT'] = $this->original_user_agent;
}
// Clean up any output buffers started during tests.
while ( ob_get_level() > 1 ) {
ob_end_clean();
}
remove_all_filters( 'wp_client_side_media_processing_enabled' );
parent::tear_down();
}
public function test_returns_early_when_client_side_processing_disabled() {
add_filter( 'wp_client_side_media_processing_enabled', '__return_false' );
// Should not error or start an output buffer.
$level_before = ob_get_level();
wp_set_up_cross_origin_isolation();
$level_after = ob_get_level();
$this->assertSame( $level_before, $level_after );
}
public function test_returns_early_when_no_screen() {
// No screen is set, so it should return early.
$level_before = ob_get_level();
wp_set_up_cross_origin_isolation();
$level_after = ob_get_level();
$this->assertSame( $level_before, $level_after );
}
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
public function test_starts_output_buffer_for_chrome_137() {
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36';
$level_before = ob_get_level();
wp_start_cross_origin_isolation_output_buffer();
$level_after = ob_get_level();
$this->assertSame( $level_before + 1, $level_after, 'Output buffer should be started for Chrome 137.' );
ob_end_clean();
}
public function test_does_not_start_output_buffer_for_chrome_136() {
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36';
$level_before = ob_get_level();
wp_start_cross_origin_isolation_output_buffer();
$level_after = ob_get_level();
$this->assertSame( $level_before, $level_after, 'Output buffer should not be started for Chrome < 137.' );
}
public function test_does_not_start_output_buffer_for_firefox() {
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 10.0; rv:128.0) Gecko/20100101 Firefox/128.0';
$level_before = ob_get_level();
wp_start_cross_origin_isolation_output_buffer();
$level_after = ob_get_level();
$this->assertSame( $level_before, $level_after, 'Output buffer should not be started for Firefox.' );
}
public function test_does_not_start_output_buffer_for_safari() {
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15';
$level_before = ob_get_level();
wp_start_cross_origin_isolation_output_buffer();
$level_after = ob_get_level();
$this->assertSame( $level_before, $level_after, 'Output buffer should not be started for Safari.' );
}
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
public function test_output_buffer_adds_crossorigin_attributes() {
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36';
// Start an outer buffer to capture the callback-processed output.
ob_start();
wp_start_cross_origin_isolation_output_buffer();
echo '<img src="https://external.example.com/image.jpg" />';
// Flush the inner buffer to trigger the callback, sending processed output to the outer buffer.
ob_end_flush();
$output = ob_get_clean();
$this->assertStringContainsString( 'crossorigin="anonymous"', $output );
}
}