OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/site_per_process_browsertest.h" | 5 #include "content/browser/site_per_process_browsertest.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
709 | 709 |
710 protected: | 710 protected: |
711 void SetUpCommandLine(base::CommandLine* command_line) override { | 711 void SetUpCommandLine(base::CommandLine* command_line) override { |
712 SitePerProcessBrowserTest::SetUpCommandLine(command_line); | 712 SitePerProcessBrowserTest::SetUpCommandLine(command_line); |
713 // TODO(iclelland): Remove this switch when Feature Policy ships. | 713 // TODO(iclelland): Remove this switch when Feature Policy ships. |
714 // https://crbug.com/623682 | 714 // https://crbug.com/623682 |
715 command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures, | 715 command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures, |
716 "FeaturePolicy"); | 716 "FeaturePolicy"); |
717 } | 717 } |
718 | 718 |
719 ParsedFeaturePolicyHeader CreateFPHeader(const std::string& feature_name, | 719 ParsedFeaturePolicyHeader CreateFPHeader( |
720 const std::vector<GURL>& origins) { | 720 blink::WebFeaturePolicyFeature feature, |
| 721 const std::vector<GURL>& origins) { |
721 ParsedFeaturePolicyHeader result(1); | 722 ParsedFeaturePolicyHeader result(1); |
722 result[0].feature_name = feature_name; | 723 result[0].feature = feature; |
723 result[0].matches_all_origins = false; | 724 result[0].matches_all_origins = false; |
724 DCHECK(!origins.empty()); | 725 DCHECK(!origins.empty()); |
725 for (const GURL& origin : origins) | 726 for (const GURL& origin : origins) |
726 result[0].origins.push_back(url::Origin(origin)); | 727 result[0].origins.push_back(url::Origin(origin)); |
727 return result; | 728 return result; |
728 } | 729 } |
729 | 730 |
730 ParsedFeaturePolicyHeader CreateFPHeaderMatchesAll( | 731 ParsedFeaturePolicyHeader CreateFPHeaderMatchesAll( |
731 const std::string& feature_name) { | 732 blink::WebFeaturePolicyFeature feature) { |
732 ParsedFeaturePolicyHeader result(1); | 733 ParsedFeaturePolicyHeader result(1); |
733 result[0].feature_name = feature_name; | 734 result[0].feature = feature; |
734 result[0].matches_all_origins = true; | 735 result[0].matches_all_origins = true; |
735 return result; | 736 return result; |
736 } | 737 } |
737 }; | 738 }; |
738 | 739 |
739 bool operator==(const ParsedFeaturePolicyDeclaration& first, | 740 bool operator==(const ParsedFeaturePolicyDeclaration& first, |
740 const ParsedFeaturePolicyDeclaration& second) { | 741 const ParsedFeaturePolicyDeclaration& second) { |
741 return std::tie(first.feature_name, first.matches_all_origins, | 742 return std::tie(first.feature, first.matches_all_origins, first.origins) == |
742 first.origins) == std::tie(second.feature_name, | 743 std::tie(second.feature, second.matches_all_origins, second.origins); |
743 second.matches_all_origins, | |
744 second.origins); | |
745 } | 744 } |
746 | 745 |
747 IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest, | 746 IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest, |
748 SubframeLoadsWithCorrectDeviceScaleFactor) { | 747 SubframeLoadsWithCorrectDeviceScaleFactor) { |
749 GURL main_url(embedded_test_server()->GetURL( | 748 GURL main_url(embedded_test_server()->GetURL( |
750 "a.com", "/cross_site_iframe_factory.html?a(b)")); | 749 "a.com", "/cross_site_iframe_factory.html?a(b)")); |
751 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 750 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
752 | 751 |
753 // On Android forcing device scale factor does not work for tests, therefore | 752 // On Android forcing device scale factor does not work for tests, therefore |
754 // we ensure that make frame and iframe have the same DIP scale there, but | 753 // we ensure that make frame and iframe have the same DIP scale there, but |
(...skipping 8428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9183 TestFeaturePolicyReplicationOnSameOriginNavigation) { | 9182 TestFeaturePolicyReplicationOnSameOriginNavigation) { |
9184 GURL start_url( | 9183 GURL start_url( |
9185 embedded_test_server()->GetURL("a.com", "/feature-policy1.html")); | 9184 embedded_test_server()->GetURL("a.com", "/feature-policy1.html")); |
9186 GURL first_nav_url( | 9185 GURL first_nav_url( |
9187 embedded_test_server()->GetURL("a.com", "/feature-policy2.html")); | 9186 embedded_test_server()->GetURL("a.com", "/feature-policy2.html")); |
9188 GURL second_nav_url(embedded_test_server()->GetURL("a.com", "/title2.html")); | 9187 GURL second_nav_url(embedded_test_server()->GetURL("a.com", "/title2.html")); |
9189 | 9188 |
9190 EXPECT_TRUE(NavigateToURL(shell(), start_url)); | 9189 EXPECT_TRUE(NavigateToURL(shell(), start_url)); |
9191 | 9190 |
9192 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); | 9191 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
9193 EXPECT_EQ(CreateFPHeader("vibrate", {start_url.GetOrigin()}), | 9192 EXPECT_EQ(CreateFPHeader(blink::WebFeaturePolicyFeature::Vibrate, |
| 9193 {start_url.GetOrigin()}), |
9194 root->current_replication_state().feature_policy_header); | 9194 root->current_replication_state().feature_policy_header); |
9195 | 9195 |
9196 // When the main frame navigates to a page with a new policy, it should | 9196 // When the main frame navigates to a page with a new policy, it should |
9197 // overwrite the old one. | 9197 // overwrite the old one. |
9198 EXPECT_TRUE(NavigateToURL(shell(), first_nav_url)); | 9198 EXPECT_TRUE(NavigateToURL(shell(), first_nav_url)); |
9199 EXPECT_EQ(CreateFPHeaderMatchesAll("vibrate"), | 9199 EXPECT_EQ(CreateFPHeaderMatchesAll(blink::WebFeaturePolicyFeature::Vibrate), |
9200 root->current_replication_state().feature_policy_header); | 9200 root->current_replication_state().feature_policy_header); |
9201 | 9201 |
9202 // When the main frame navigates to a page without a policy, the replicated | 9202 // When the main frame navigates to a page without a policy, the replicated |
9203 // policy header should be cleared. | 9203 // policy header should be cleared. |
9204 EXPECT_TRUE(NavigateToURL(shell(), second_nav_url)); | 9204 EXPECT_TRUE(NavigateToURL(shell(), second_nav_url)); |
9205 EXPECT_TRUE(root->current_replication_state().feature_policy_header.empty()); | 9205 EXPECT_TRUE(root->current_replication_state().feature_policy_header.empty()); |
9206 } | 9206 } |
9207 | 9207 |
9208 IN_PROC_BROWSER_TEST_F(SitePerProcessFeaturePolicyBrowserTest, | 9208 IN_PROC_BROWSER_TEST_F(SitePerProcessFeaturePolicyBrowserTest, |
9209 TestFeaturePolicyReplicationOnCrossOriginNavigation) { | 9209 TestFeaturePolicyReplicationOnCrossOriginNavigation) { |
9210 GURL start_url( | 9210 GURL start_url( |
9211 embedded_test_server()->GetURL("a.com", "/feature-policy1.html")); | 9211 embedded_test_server()->GetURL("a.com", "/feature-policy1.html")); |
9212 GURL first_nav_url( | 9212 GURL first_nav_url( |
9213 embedded_test_server()->GetURL("b.com", "/feature-policy2.html")); | 9213 embedded_test_server()->GetURL("b.com", "/feature-policy2.html")); |
9214 GURL second_nav_url(embedded_test_server()->GetURL("c.com", "/title2.html")); | 9214 GURL second_nav_url(embedded_test_server()->GetURL("c.com", "/title2.html")); |
9215 | 9215 |
9216 EXPECT_TRUE(NavigateToURL(shell(), start_url)); | 9216 EXPECT_TRUE(NavigateToURL(shell(), start_url)); |
9217 | 9217 |
9218 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); | 9218 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
9219 EXPECT_EQ(CreateFPHeader("vibrate", {start_url.GetOrigin()}), | 9219 EXPECT_EQ(CreateFPHeader(blink::WebFeaturePolicyFeature::Vibrate, |
| 9220 {start_url.GetOrigin()}), |
9220 root->current_replication_state().feature_policy_header); | 9221 root->current_replication_state().feature_policy_header); |
9221 | 9222 |
9222 // When the main frame navigates to a page with a new policy, it should | 9223 // When the main frame navigates to a page with a new policy, it should |
9223 // overwrite the old one. | 9224 // overwrite the old one. |
9224 EXPECT_TRUE(NavigateToURL(shell(), first_nav_url)); | 9225 EXPECT_TRUE(NavigateToURL(shell(), first_nav_url)); |
9225 EXPECT_EQ(CreateFPHeaderMatchesAll("vibrate"), | 9226 EXPECT_EQ(CreateFPHeaderMatchesAll(blink::WebFeaturePolicyFeature::Vibrate), |
9226 root->current_replication_state().feature_policy_header); | 9227 root->current_replication_state().feature_policy_header); |
9227 | 9228 |
9228 // When the main frame navigates to a page without a policy, the replicated | 9229 // When the main frame navigates to a page without a policy, the replicated |
9229 // policy header should be cleared. | 9230 // policy header should be cleared. |
9230 EXPECT_TRUE(NavigateToURL(shell(), second_nav_url)); | 9231 EXPECT_TRUE(NavigateToURL(shell(), second_nav_url)); |
9231 EXPECT_TRUE(root->current_replication_state().feature_policy_header.empty()); | 9232 EXPECT_TRUE(root->current_replication_state().feature_policy_header.empty()); |
9232 } | 9233 } |
9233 | 9234 |
9234 // Test that the replicated feature policy header is correct in subframes as | 9235 // Test that the replicated feature policy header is correct in subframes as |
9235 // they navigate. | 9236 // they navigate. |
9236 IN_PROC_BROWSER_TEST_F(SitePerProcessFeaturePolicyBrowserTest, | 9237 IN_PROC_BROWSER_TEST_F(SitePerProcessFeaturePolicyBrowserTest, |
9237 TestFeaturePolicyReplicationFromRemoteFrames) { | 9238 TestFeaturePolicyReplicationFromRemoteFrames) { |
9238 GURL main_url( | 9239 GURL main_url( |
9239 embedded_test_server()->GetURL("a.com", "/feature-policy-main.html")); | 9240 embedded_test_server()->GetURL("a.com", "/feature-policy-main.html")); |
9240 GURL first_nav_url( | 9241 GURL first_nav_url( |
9241 embedded_test_server()->GetURL("b.com", "/feature-policy2.html")); | 9242 embedded_test_server()->GetURL("b.com", "/feature-policy2.html")); |
9242 GURL second_nav_url(embedded_test_server()->GetURL("c.com", "/title2.html")); | 9243 GURL second_nav_url(embedded_test_server()->GetURL("c.com", "/title2.html")); |
9243 | 9244 |
9244 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 9245 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
9245 | 9246 |
9246 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); | 9247 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
9247 EXPECT_EQ(CreateFPHeader("vibrate", | 9248 EXPECT_EQ(CreateFPHeader(blink::WebFeaturePolicyFeature::Vibrate, |
9248 {main_url.GetOrigin(), GURL("http://example.com/")}), | 9249 {main_url.GetOrigin(), GURL("http://example.com/")}), |
9249 root->current_replication_state().feature_policy_header); | 9250 root->current_replication_state().feature_policy_header); |
9250 EXPECT_EQ(1UL, root->child_count()); | 9251 EXPECT_EQ(1UL, root->child_count()); |
9251 EXPECT_EQ( | 9252 EXPECT_EQ( |
9252 CreateFPHeader("vibrate", {main_url.GetOrigin()}), | 9253 CreateFPHeader(blink::WebFeaturePolicyFeature::Vibrate, |
| 9254 {main_url.GetOrigin()}), |
9253 root->child_at(0)->current_replication_state().feature_policy_header); | 9255 root->child_at(0)->current_replication_state().feature_policy_header); |
9254 | 9256 |
9255 // Navigate the iframe cross-site. | 9257 // Navigate the iframe cross-site. |
9256 NavigateFrameToURL(root->child_at(0), first_nav_url); | 9258 NavigateFrameToURL(root->child_at(0), first_nav_url); |
9257 EXPECT_EQ( | 9259 EXPECT_EQ( |
9258 CreateFPHeaderMatchesAll("vibrate"), | 9260 CreateFPHeaderMatchesAll(blink::WebFeaturePolicyFeature::Vibrate), |
9259 root->child_at(0)->current_replication_state().feature_policy_header); | 9261 root->child_at(0)->current_replication_state().feature_policy_header); |
9260 | 9262 |
9261 // Navigate the iframe to another location, this one with no policy header | 9263 // Navigate the iframe to another location, this one with no policy header |
9262 NavigateFrameToURL(root->child_at(0), second_nav_url); | 9264 NavigateFrameToURL(root->child_at(0), second_nav_url); |
9263 EXPECT_TRUE(root->child_at(0) | 9265 EXPECT_TRUE(root->child_at(0) |
9264 ->current_replication_state() | 9266 ->current_replication_state() |
9265 .feature_policy_header.empty()); | 9267 .feature_policy_header.empty()); |
9266 | 9268 |
9267 // Navigate the iframe back to a page with a policy | 9269 // Navigate the iframe back to a page with a policy |
9268 NavigateFrameToURL(root->child_at(0), first_nav_url); | 9270 NavigateFrameToURL(root->child_at(0), first_nav_url); |
9269 EXPECT_EQ( | 9271 EXPECT_EQ( |
9270 CreateFPHeaderMatchesAll("vibrate"), | 9272 CreateFPHeaderMatchesAll(blink::WebFeaturePolicyFeature::Vibrate), |
9271 root->child_at(0)->current_replication_state().feature_policy_header); | 9273 root->child_at(0)->current_replication_state().feature_policy_header); |
9272 } | 9274 } |
9273 | 9275 |
9274 // Ensure that an iframe that navigates cross-site doesn't use the same process | 9276 // Ensure that an iframe that navigates cross-site doesn't use the same process |
9275 // as its parent. Then when its parent navigates it via the "srcdoc" attribute, | 9277 // as its parent. Then when its parent navigates it via the "srcdoc" attribute, |
9276 // it must reuse its parent's process. | 9278 // it must reuse its parent's process. |
9277 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 9279 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
9278 IframeSrcdocAfterCrossSiteNavigation) { | 9280 IframeSrcdocAfterCrossSiteNavigation) { |
9279 GURL parent_url(embedded_test_server()->GetURL( | 9281 GURL parent_url(embedded_test_server()->GetURL( |
9280 "a.com", "/cross_site_iframe_factory.html?a(b)")); | 9282 "a.com", "/cross_site_iframe_factory.html?a(b)")); |
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9895 | 9897 |
9896 // Try the same navigation, but use the browser-initiated path. | 9898 // Try the same navigation, but use the browser-initiated path. |
9897 NavigateFrameToURL(root->child_at(0), frame_url); | 9899 NavigateFrameToURL(root->child_at(0), frame_url); |
9898 EXPECT_FALSE(root->child_at(0)->render_manager()->pending_frame_host()); | 9900 EXPECT_FALSE(root->child_at(0)->render_manager()->pending_frame_host()); |
9899 EXPECT_EQ(root->child_at(0)->current_url(), redirected_url); | 9901 EXPECT_EQ(root->child_at(0)->current_url(), redirected_url); |
9900 EXPECT_EQ(b_site_instance, | 9902 EXPECT_EQ(b_site_instance, |
9901 root->child_at(0)->current_frame_host()->GetSiteInstance()); | 9903 root->child_at(0)->current_frame_host()->GetSiteInstance()); |
9902 } | 9904 } |
9903 | 9905 |
9904 } // namespace content | 9906 } // namespace content |
OLD | NEW |