-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add WPT tests for feature policy frame policy
1. Without specifying allow attribute, frame policy inherits correctly. 2. With allow attribute, frame policy inherits from and overrides header policy correctly. Updating allowfullscreen and allowpaymentrequest correctly updates frame policy. 3. Frame policy is not affected by the frame's document policy. Bug: 732003 Change-Id: Ib41f883a779f11c564c91cfc03ff1224330108f5 Reviewed-on: https://chromium-review.googlesource.com/850896 Commit-Queue: Luna Lu <[email protected]> Reviewed-by: Ian Clelland <[email protected]> Cr-Commit-Position: refs/heads/master@{#542837}
- Loading branch information
Showing
9 changed files
with
395 additions
and
0 deletions.
There are no files selected for viewing
84 changes: 84 additions & 0 deletions
84
feature-policy/feature-policy-frame-policy-allowed-for-all.https.sub.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
<!DOCTYPE html> | ||
<body> | ||
<script src=/resources/testharness.js></script> | ||
<script src=/resources/testharnessreport.js></script> | ||
<script src=/feature-policy/resources/featurepolicy.js></script> | ||
<!-- Feature-Policy: fullscreen *; --> | ||
<script> | ||
'use strict'; | ||
var same_origin = 'https://{{domains[]}}:{{ports[https][0]}}'; | ||
var cross_origin = 'https://{{domains[www]}}:{{ports[https][0]}}'; | ||
var same_origin_src = '/feature-policy/resources/feature-policy-allowedfeatures.html'; | ||
var cross_origin_src = cross_origin + same_origin_src; | ||
var policies = [ | ||
{allow: "*", sameOriginTestExpect: true, crossOriginTestExpect: true}, | ||
{allow: "'self'", sameOriginTestExpect: true, crossOriginTestExpect: false}, | ||
{allow: "'none'", sameOriginTestExpect: false, crossOriginTestExpect: false}, | ||
{allow: "'self' " + cross_origin + " https://www.example.com", sameOriginTestExpect: true, crossOriginTestExpect: true}]; | ||
var pipe_front = '?pipe=sub|header(Feature-Policy,fullscreen '; | ||
var pipe_end = ';)'; | ||
var header_policies = ["*", "'self'", "'none'"]; | ||
|
||
// Test that frame.policy inherits from parent's header policy when allow | ||
// attribute is not specified. | ||
test(function() { | ||
test_frame_policy('fullscreen', same_origin_src, true); | ||
}, 'Test frame policy on same origin iframe inherit from header policy.'); | ||
test(function() { | ||
test_frame_policy('fullscreen', cross_origin_src, true); | ||
}, 'Test frame policy on cross origin iframe inherit from header policy.'); | ||
|
||
// Test frame policy with allow attribute set to be one of the policies above. | ||
for (var i = 0; i < policies.length; i++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', same_origin_src, policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + '".'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', cross_origin_src, policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + '".'); | ||
} | ||
|
||
// Test that the header policy of the iframe document does not change the | ||
// frame policy. | ||
for (var i = 0; i < policies.length; i++) { | ||
for (var j = 0; j < header_policies.length; j++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', | ||
same_origin_src + pipe_front + header_policies[j] + pipe_end, | ||
policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + | ||
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', | ||
cross_origin_src + pipe_front + header_policies[j] + pipe_end, | ||
policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + | ||
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".'); | ||
} | ||
} | ||
|
||
// Test that the allow attribute overrides allowfullscreen. | ||
for (var i = 0; i < policies.length; i++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', same_origin_src, policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + | ||
'" and allowfullscreen.'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', cross_origin_src, policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + | ||
'" and allowfullscreen.'); | ||
} | ||
</script> | ||
</body> |
1 change: 1 addition & 0 deletions
1
feature-policy/feature-policy-frame-policy-allowed-for-all.https.sub.html.sub.headers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Feature-Policy: fullscreen *; |
84 changes: 84 additions & 0 deletions
84
feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
<!DOCTYPE html> | ||
<body> | ||
<script src=/resources/testharness.js></script> | ||
<script src=/resources/testharnessreport.js></script> | ||
<script src=/feature-policy/resources/featurepolicy.js></script> | ||
<!-- Feature-Policy: fullscreen 'self'; --> | ||
<script> | ||
'use strict'; | ||
var same_origin = 'https://{{domains[]}}:{{ports[https][0]}}'; | ||
var cross_origin = 'https://{{domains[www]}}:{{ports[https][0]}}'; | ||
var same_origin_src = '/feature-policy/resources/feature-policy-allowedfeatures.html'; | ||
var cross_origin_src = cross_origin + same_origin_src; | ||
var policies = [ | ||
{allow: "*", sameOriginTestExpect: true, crossOriginTestExpect: true}, | ||
{allow: "'self'", sameOriginTestExpect: true, crossOriginTestExpect: false}, | ||
{allow: "'none'", sameOriginTestExpect: false, crossOriginTestExpect: false}, | ||
{allow: "'self' " + cross_origin + " https://www.example.com", sameOriginTestExpect: true, crossOriginTestExpect: true}]; | ||
var pipe_front = '?pipe=sub|header(Feature-Policy,fullscreen '; | ||
var pipe_end = ';)'; | ||
var header_policies = ["*", "'self'", "'none'"]; | ||
|
||
// Test that frame.policy inherits from parent's header policy when allow | ||
// attribute is not specified. | ||
test(function() { | ||
test_frame_policy('fullscreen', same_origin_src, true); | ||
}, 'Test frame policy on same origin iframe inherit from header policy.'); | ||
test(function() { | ||
test_frame_policy('fullscreen', cross_origin_src, false); | ||
}, 'Test frame policy on cross origin iframe inherit from header policy.'); | ||
|
||
// Test frame policy with allow attribute set to be one of the policies above. | ||
for (var i = 0; i < policies.length; i++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', same_origin_src, policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + '".'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', cross_origin_src, policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + '".'); | ||
} | ||
|
||
// Test that the header policy of the iframe document does not change the | ||
// frame policy. | ||
for (var i = 0; i < policies.length; i++) { | ||
for (var j = 0; j < header_policies.length; j++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', | ||
same_origin_src + pipe_front + header_policies[j] + pipe_end, | ||
policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + | ||
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', | ||
cross_origin_src + pipe_front + header_policies[j] + pipe_end, | ||
policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + | ||
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".'); | ||
} | ||
} | ||
|
||
// Test that the allow attribute overrides allowfullscreen. | ||
for (var i = 0; i < policies.length; i++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', same_origin_src, policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + | ||
'" and allowfullscreen.'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', cross_origin_src, policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + | ||
'" and allowfullscreen.'); | ||
} | ||
</script> | ||
</body> |
1 change: 1 addition & 0 deletions
1
feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html.sub.headers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Feature-Policy: fullscreen 'self'; |
109 changes: 109 additions & 0 deletions
109
feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
<!DOCTYPE html> | ||
<body> | ||
<script src=/resources/testharness.js></script> | ||
<script src=/resources/testharnessreport.js></script> | ||
<script src=/feature-policy/resources/featurepolicy.js></script> | ||
<!-- Feature-Policy: fullscreen 'self' cross_origin https://www.example.com; --> | ||
<script> | ||
'use strict'; | ||
var same_origin = 'https://{{domains[]}}:{{ports[https][0]}}'; | ||
var cross_origin = 'https://{{domains[www]}}:{{ports[https][0]}}'; | ||
var cross_origin1 = 'https://{{domains[www1]}}:{{ports[https][0]}}'; | ||
var same_origin_src = '/feature-policy/resources/feature-policy-allowedfeatures.html'; | ||
var cross_origin_src = cross_origin + same_origin_src; | ||
var cross_origin_src1 = cross_origin1 + same_origin_src; | ||
// Test feature policy with same_origin_src and cross_origin_src. | ||
var policies = [ | ||
{allow: "*", sameOriginTestExpect: true, crossOriginTestExpect: true, crossOrigin1TestExpect: true}, | ||
{allow: "'self'", sameOriginTestExpect: true, crossOriginTestExpect: false, crossOrigin1TestExpect: false}, | ||
{allow: "'none'", sameOriginTestExpect: false, crossOriginTestExpect: false, crossOrigin1TestExpect: false}, | ||
{allow: "'self' " + cross_origin + " https://www.example.com", sameOriginTestExpect: true, crossOriginTestExpect: true, crossOrigin1TestExpect: false}]; | ||
var pipe_front = '?pipe=sub|header(Feature-Policy,fullscreen '; | ||
var pipe_end = ';)'; | ||
var header_policies = ["*", "'self'", "'none'"]; | ||
|
||
// Test that frame.policy inherits from parent's header policy when allow | ||
// attribute is not specified. | ||
test(function() { | ||
test_frame_policy('fullscreen', same_origin_src, true); | ||
}, 'Test frame policy on same origin iframe inherit from header policy.'); | ||
test(function() { | ||
test_frame_policy('fullscreen', cross_origin_src, true); | ||
}, 'Test frame policy on cross origin iframe inherit from header policy.'); | ||
test(function() { | ||
test_frame_policy('fullscreen', cross_origin_src1, false); | ||
}, 'Test frame policy on another cross origin iframe inherit from header policy.'); | ||
|
||
// Test frame policy with allow attribute set to be one of the policies above. | ||
for (var i = 0; i < policies.length; i++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', same_origin_src, policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + '".'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', cross_origin_src, policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + '".'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', cross_origin_src1, policies[i].crossOrigin1TestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on another cross origin iframe with allow = "' + policies[i].allow + '".'); | ||
} | ||
|
||
// Test that the header policy of the iframe document does not change the | ||
// frame policy. | ||
for (var i = 0; i < policies.length; i++) { | ||
for (var j = 0; j < header_policies.length; j++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', | ||
same_origin_src + pipe_front + header_policies[j] + pipe_end, | ||
policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + | ||
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', | ||
cross_origin_src + pipe_front + header_policies[j] + pipe_end, | ||
policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + | ||
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', | ||
cross_origin_src1 + pipe_front + header_policies[j] + pipe_end, | ||
policies[i].crossOrigin1TestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on another cross origin iframe with allow = "' + policies[i].allow + | ||
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".'); | ||
} | ||
} | ||
|
||
// Test that the allow attribute overrides allowfullscreen. | ||
for (var i = 0; i < policies.length; i++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', same_origin_src, policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + | ||
'" and allowfullscreen.'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', cross_origin_src, policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + | ||
'" and allowfullscreen.'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', cross_origin_src1, policies[i].crossOrigin1TestExpect, | ||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true); | ||
}, 'Test frame policy on another cross origin iframe with allow = "' + policies[i].allow + | ||
'" and allowfullscreen.'); | ||
} | ||
</script> | ||
</body> |
1 change: 1 addition & 0 deletions
1
feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html.sub.headers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Feature-Policy: fullscreen 'self' https://{{domains[www]}}:{{ports[https][0]}} https://www.example.com; |
84 changes: 84 additions & 0 deletions
84
feature-policy/feature-policy-frame-policy-disallowed-for-all.https.sub.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
<!DOCTYPE html> | ||
<body> | ||
<script src=/resources/testharness.js></script> | ||
<script src=/resources/testharnessreport.js></script> | ||
<script src=/feature-policy/resources/featurepolicy.js></script> | ||
<!-- Feature-Policy: fullscreen 'none'; --> | ||
<script> | ||
'use strict'; | ||
var same_origin = 'https://{{domains[]}}:{{ports[https][0]}}'; | ||
var cross_origin = 'https://{{domains[www]}}:{{ports[https][0]}}'; | ||
var same_origin_src = '/feature-policy/resources/feature-policy-allowedfeatures.html'; | ||
var cross_origin_src = cross_origin + same_origin_src; | ||
var policies = [ | ||
{allow: "*", sameOriginTestExpect: false, crossOriginTestExpect: false}, | ||
{allow: "'self'", sameOriginTestExpect: false, crossOriginTestExpect: false}, | ||
{allow: "'none'", sameOriginTestExpect: false, crossOriginTestExpect: false}, | ||
{allow: "'self' " + cross_origin + " https://www.example.com", sameOriginTestExpect: false, crossOriginTestExpect: false}]; | ||
var pipe_front = '?pipe=sub|header(Feature-Policy,fullscreen '; | ||
var pipe_end = ';)'; | ||
var header_policies = ["*", "'self'", "'none'"]; | ||
|
||
// Test that frame.policy inherits from parent's header policy when allow | ||
// attribute is not specified. | ||
test(function() { | ||
test_frame_policy('fullscreen', same_origin_src, false); | ||
}, 'Test frame policy on same origin iframe inherit from header policy.'); | ||
test(function() { | ||
test_frame_policy('fullscreen', cross_origin_src, false); | ||
}, 'Test frame policy on cross origin iframe inherit from header policy.'); | ||
|
||
// Test frame policy with allow attribute set to be one of the policies above. | ||
for (var i = 0; i < policies.length; i++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', same_origin_src, policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + '".'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', cross_origin_src, policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + '".'); | ||
} | ||
|
||
// Test that the header policy of the iframe document does not change the | ||
// frame policy. | ||
for (var i = 0; i < policies.length; i++) { | ||
for (var j = 0; j < header_policies.length; j++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', | ||
same_origin_src + pipe_front + header_policies[j] + pipe_end, | ||
policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + | ||
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', | ||
cross_origin_src + pipe_front + header_policies[j] + pipe_end, | ||
policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';'); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + | ||
'" and header policy = "Feature-Policy: fullscreen ' + header_policies[j] + ';".'); | ||
} | ||
} | ||
|
||
// Test that the allow attribute overrides allowfullscreen. | ||
for (var i = 0; i < policies.length; i++) { | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', same_origin_src, policies[i].sameOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true); | ||
}, 'Test frame policy on same origin iframe with allow = "' + policies[i].allow + | ||
'" and allowfullscreen.'); | ||
test(function() { | ||
test_frame_policy( | ||
'fullscreen', cross_origin_src, policies[i].crossOriginTestExpect, | ||
'fullscreen ' + policies[i].allow + ';', /*allowfullscreen*/true); | ||
}, 'Test frame policy on cross origin iframe with allow = "' + policies[i].allow + | ||
'" and allowfullscreen.'); | ||
} | ||
</script> | ||
</body> |
1 change: 1 addition & 0 deletions
1
feature-policy/feature-policy-frame-policy-disallowed-for-all.https.sub.html.sub.headers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Feature-Policy: fullscreen 'none'; |
Oops, something went wrong.