| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/common/feature_policy/feature_policy.h" | 5 #include "content/common/feature_policy/feature_policy.h" |
| 6 | 6 |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 #include "url/gurl.h" | 8 #include "url/gurl.h" |
| 9 | 9 |
| 10 namespace content { | 10 namespace content { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 FeaturePolicyTest() | 47 FeaturePolicyTest() |
| 48 : feature_list_({{kDefaultOnFeature, &kDefaultOnFeatureDfn}, | 48 : feature_list_({{kDefaultOnFeature, &kDefaultOnFeatureDfn}, |
| 49 {kDefaultSelfFeature, &kDefaultSelfFeatureDfn}, | 49 {kDefaultSelfFeature, &kDefaultSelfFeatureDfn}, |
| 50 {kDefaultOffFeature, &kDefaultOffFeatureDfn}}) {} | 50 {kDefaultOffFeature, &kDefaultOffFeatureDfn}}) {} |
| 51 | 51 |
| 52 ~FeaturePolicyTest() override {} | 52 ~FeaturePolicyTest() override {} |
| 53 | 53 |
| 54 std::unique_ptr<FeaturePolicy> CreateFromParentPolicy( | 54 std::unique_ptr<FeaturePolicy> CreateFromParentPolicy( |
| 55 const FeaturePolicy* parent, | 55 const FeaturePolicy* parent, |
| 56 const url::Origin& origin) { | 56 const url::Origin& origin) { |
| 57 return FeaturePolicy::CreateFromParentPolicy(parent, nullptr, origin, | 57 ParsedFeaturePolicyHeader empty_container_policy; |
| 58 feature_list_); | 58 return FeaturePolicy::CreateFromParentPolicy(parent, empty_container_policy, |
| 59 origin, feature_list_); |
| 59 } | 60 } |
| 60 | 61 |
| 61 std::unique_ptr<FeaturePolicy> CreateFromParentWithFramePolicy( | 62 std::unique_ptr<FeaturePolicy> CreateFromParentWithFramePolicy( |
| 62 const FeaturePolicy* parent, | 63 const FeaturePolicy* parent, |
| 63 const ParsedFeaturePolicyHeader* frame_policy, | 64 const ParsedFeaturePolicyHeader& frame_policy, |
| 64 const url::Origin& origin) { | 65 const url::Origin& origin) { |
| 65 return FeaturePolicy::CreateFromParentPolicy(parent, frame_policy, origin, | 66 return FeaturePolicy::CreateFromParentPolicy(parent, frame_policy, origin, |
| 66 feature_list_); | 67 feature_list_); |
| 67 } | 68 } |
| 68 url::Origin origin_a_ = url::Origin(GURL("https://example.com/")); | 69 url::Origin origin_a_ = url::Origin(GURL("https://example.com/")); |
| 69 url::Origin origin_b_ = url::Origin(GURL("https://example.net/")); | 70 url::Origin origin_b_ = url::Origin(GURL("https://example.net/")); |
| 70 url::Origin origin_c_ = url::Origin(GURL("https://example.org/")); | 71 url::Origin origin_c_ = url::Origin(GURL("https://example.org/")); |
| 71 | 72 |
| 72 private: | 73 private: |
| 73 // Contains the list of controlled features, so that we are guaranteed to | 74 // Contains the list of controlled features, so that we are guaranteed to |
| (...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 664 // +-------------------------------------------------+ | 665 // +-------------------------------------------------+ |
| 665 // Default-self feature should be enabled in cross-origin child frame because | 666 // Default-self feature should be enabled in cross-origin child frame because |
| 666 // permission was delegated through frame policy. | 667 // permission was delegated through frame policy. |
| 667 // This is the same scenario as when the iframe is declared as | 668 // This is the same scenario as when the iframe is declared as |
| 668 // <iframe allow="default-self"> | 669 // <iframe allow="default-self"> |
| 669 std::unique_ptr<FeaturePolicy> policy1 = | 670 std::unique_ptr<FeaturePolicy> policy1 = |
| 670 CreateFromParentPolicy(nullptr, origin_a_); | 671 CreateFromParentPolicy(nullptr, origin_a_); |
| 671 ParsedFeaturePolicyHeader frame_policy = { | 672 ParsedFeaturePolicyHeader frame_policy = { |
| 672 {{"default-self", false, {origin_b_}}}}; | 673 {{"default-self", false, {origin_b_}}}}; |
| 673 std::unique_ptr<FeaturePolicy> policy2 = | 674 std::unique_ptr<FeaturePolicy> policy2 = |
| 674 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy, origin_b_); | 675 CreateFromParentWithFramePolicy(policy1.get(), frame_policy, origin_b_); |
| 675 EXPECT_TRUE( | 676 EXPECT_TRUE( |
| 676 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); | 677 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); |
| 677 EXPECT_FALSE( | 678 EXPECT_FALSE( |
| 678 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); | 679 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); |
| 679 EXPECT_FALSE( | 680 EXPECT_FALSE( |
| 680 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); | 681 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); |
| 681 EXPECT_FALSE( | 682 EXPECT_FALSE( |
| 682 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); | 683 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); |
| 683 EXPECT_TRUE( | 684 EXPECT_TRUE( |
| 684 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); | 685 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 699 // +------------------------------------------+ | 700 // +------------------------------------------+ |
| 700 // Default-self feature should be enabled in cross-origin child frame because | 701 // Default-self feature should be enabled in cross-origin child frame because |
| 701 // permission was delegated through frame policy. | 702 // permission was delegated through frame policy. |
| 702 // This is the same scenario that arises when the iframe is declared as | 703 // This is the same scenario that arises when the iframe is declared as |
| 703 // <iframe allowfullscreen> | 704 // <iframe allowfullscreen> |
| 704 std::unique_ptr<FeaturePolicy> policy1 = | 705 std::unique_ptr<FeaturePolicy> policy1 = |
| 705 CreateFromParentPolicy(nullptr, origin_a_); | 706 CreateFromParentPolicy(nullptr, origin_a_); |
| 706 ParsedFeaturePolicyHeader frame_policy = { | 707 ParsedFeaturePolicyHeader frame_policy = { |
| 707 {{"default-self", true, std::vector<url::Origin>()}}}; | 708 {{"default-self", true, std::vector<url::Origin>()}}}; |
| 708 std::unique_ptr<FeaturePolicy> policy2 = | 709 std::unique_ptr<FeaturePolicy> policy2 = |
| 709 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy, origin_b_); | 710 CreateFromParentWithFramePolicy(policy1.get(), frame_policy, origin_b_); |
| 710 EXPECT_TRUE( | 711 EXPECT_TRUE( |
| 711 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); | 712 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); |
| 712 EXPECT_FALSE( | 713 EXPECT_FALSE( |
| 713 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); | 714 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); |
| 714 EXPECT_FALSE( | 715 EXPECT_FALSE( |
| 715 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); | 716 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); |
| 716 EXPECT_FALSE( | 717 EXPECT_FALSE( |
| 717 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); | 718 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); |
| 718 EXPECT_TRUE( | 719 EXPECT_TRUE( |
| 719 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); | 720 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 745 // | +-------------------------------------------------+ | | 746 // | +-------------------------------------------------+ | |
| 746 // +-----------------------------------------------------+ | 747 // +-----------------------------------------------------+ |
| 747 // Default-self feature should be enabled in cross-origin child frames 2 and | 748 // Default-self feature should be enabled in cross-origin child frames 2 and |
| 748 // 3. Feature should be disabled in frame 4 because it was not further | 749 // 3. Feature should be disabled in frame 4 because it was not further |
| 749 // delegated through frame policy. | 750 // delegated through frame policy. |
| 750 std::unique_ptr<FeaturePolicy> policy1 = | 751 std::unique_ptr<FeaturePolicy> policy1 = |
| 751 CreateFromParentPolicy(nullptr, origin_a_); | 752 CreateFromParentPolicy(nullptr, origin_a_); |
| 752 ParsedFeaturePolicyHeader frame_policy1 = { | 753 ParsedFeaturePolicyHeader frame_policy1 = { |
| 753 {{"default-self", false, {origin_b_}}}}; | 754 {{"default-self", false, {origin_b_}}}}; |
| 754 std::unique_ptr<FeaturePolicy> policy2 = | 755 std::unique_ptr<FeaturePolicy> policy2 = |
| 755 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy1, origin_b_); | 756 CreateFromParentWithFramePolicy(policy1.get(), frame_policy1, origin_b_); |
| 756 ParsedFeaturePolicyHeader frame_policy2 = { | 757 ParsedFeaturePolicyHeader frame_policy2 = { |
| 757 {{"default-self", false, {origin_c_}}}}; | 758 {{"default-self", false, {origin_c_}}}}; |
| 758 std::unique_ptr<FeaturePolicy> policy3 = | 759 std::unique_ptr<FeaturePolicy> policy3 = |
| 759 CreateFromParentWithFramePolicy(policy2.get(), &frame_policy2, origin_c_); | 760 CreateFromParentWithFramePolicy(policy2.get(), frame_policy2, origin_c_); |
| 760 std::unique_ptr<FeaturePolicy> policy4 = | 761 std::unique_ptr<FeaturePolicy> policy4 = |
| 761 CreateFromParentWithFramePolicy(policy2.get(), nullptr, origin_c_); | 762 CreateFromParentPolicy(policy2.get(), origin_c_); |
| 762 EXPECT_FALSE( | 763 EXPECT_FALSE( |
| 763 policy3->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); | 764 policy3->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); |
| 764 EXPECT_FALSE( | 765 EXPECT_FALSE( |
| 765 policy3->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); | 766 policy3->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); |
| 766 EXPECT_TRUE( | 767 EXPECT_TRUE( |
| 767 policy3->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); | 768 policy3->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); |
| 768 EXPECT_FALSE( | 769 EXPECT_FALSE( |
| 769 policy4->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); | 770 policy4->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); |
| 770 EXPECT_FALSE( | 771 EXPECT_FALSE( |
| 771 policy4->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); | 772 policy4->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 790 // | |No Policy | | | 791 // | |No Policy | | |
| 791 // | +-------------+ | | 792 // | +-------------+ | |
| 792 // +-------------------------------------+ | 793 // +-------------------------------------+ |
| 793 // Default-on feature should be disabled in both same-origin and cross-origin | 794 // Default-on feature should be disabled in both same-origin and cross-origin |
| 794 // child frames because permission was removed through frame policy. | 795 // child frames because permission was removed through frame policy. |
| 795 std::unique_ptr<FeaturePolicy> policy1 = | 796 std::unique_ptr<FeaturePolicy> policy1 = |
| 796 CreateFromParentPolicy(nullptr, origin_a_); | 797 CreateFromParentPolicy(nullptr, origin_a_); |
| 797 ParsedFeaturePolicyHeader frame_policy1 = { | 798 ParsedFeaturePolicyHeader frame_policy1 = { |
| 798 {{"default-on", false, std::vector<url::Origin>()}}}; | 799 {{"default-on", false, std::vector<url::Origin>()}}}; |
| 799 std::unique_ptr<FeaturePolicy> policy2 = | 800 std::unique_ptr<FeaturePolicy> policy2 = |
| 800 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy1, origin_a_); | 801 CreateFromParentWithFramePolicy(policy1.get(), frame_policy1, origin_a_); |
| 801 ParsedFeaturePolicyHeader frame_policy2 = { | 802 ParsedFeaturePolicyHeader frame_policy2 = { |
| 802 {{"default-on", false, std::vector<url::Origin>()}}}; | 803 {{"default-on", false, std::vector<url::Origin>()}}}; |
| 803 std::unique_ptr<FeaturePolicy> policy3 = | 804 std::unique_ptr<FeaturePolicy> policy3 = |
| 804 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy2, origin_b_); | 805 CreateFromParentWithFramePolicy(policy1.get(), frame_policy2, origin_b_); |
| 805 EXPECT_TRUE(policy1->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_a_)); | 806 EXPECT_TRUE(policy1->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_a_)); |
| 806 EXPECT_TRUE(policy1->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_b_)); | 807 EXPECT_TRUE(policy1->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_b_)); |
| 807 EXPECT_TRUE(policy1->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_c_)); | 808 EXPECT_TRUE(policy1->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_c_)); |
| 808 EXPECT_FALSE( | 809 EXPECT_FALSE( |
| 809 policy2->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_a_)); | 810 policy2->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_a_)); |
| 810 EXPECT_FALSE( | 811 EXPECT_FALSE( |
| 811 policy2->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_b_)); | 812 policy2->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_b_)); |
| 812 EXPECT_FALSE( | 813 EXPECT_FALSE( |
| 813 policy2->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_c_)); | 814 policy2->IsFeatureEnabledForOrigin(kDefaultOnFeature, origin_c_)); |
| 814 EXPECT_FALSE( | 815 EXPECT_FALSE( |
| (...skipping 22 matching lines...) Expand all Loading... |
| 837 // | +-------------+ | | 838 // | +-------------+ | |
| 838 // +------------------------------------------------+ | 839 // +------------------------------------------------+ |
| 839 // Default-off feature should be disabled in both same-origin and cross-origin | 840 // Default-off feature should be disabled in both same-origin and cross-origin |
| 840 // child frames because they did not declare their own policy to enable it. | 841 // child frames because they did not declare their own policy to enable it. |
| 841 std::unique_ptr<FeaturePolicy> policy1 = | 842 std::unique_ptr<FeaturePolicy> policy1 = |
| 842 CreateFromParentPolicy(nullptr, origin_a_); | 843 CreateFromParentPolicy(nullptr, origin_a_); |
| 843 policy1->SetHeaderPolicy({{{"default-off", false, {origin_a_}}}}); | 844 policy1->SetHeaderPolicy({{{"default-off", false, {origin_a_}}}}); |
| 844 ParsedFeaturePolicyHeader frame_policy1 = { | 845 ParsedFeaturePolicyHeader frame_policy1 = { |
| 845 {{"default-off", false, {origin_a_}}}}; | 846 {{"default-off", false, {origin_a_}}}}; |
| 846 std::unique_ptr<FeaturePolicy> policy2 = | 847 std::unique_ptr<FeaturePolicy> policy2 = |
| 847 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy1, origin_a_); | 848 CreateFromParentWithFramePolicy(policy1.get(), frame_policy1, origin_a_); |
| 848 ParsedFeaturePolicyHeader frame_policy2 = { | 849 ParsedFeaturePolicyHeader frame_policy2 = { |
| 849 {{"default-off", false, {origin_b_}}}}; | 850 {{"default-off", false, {origin_b_}}}}; |
| 850 std::unique_ptr<FeaturePolicy> policy3 = | 851 std::unique_ptr<FeaturePolicy> policy3 = |
| 851 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy2, origin_b_); | 852 CreateFromParentWithFramePolicy(policy1.get(), frame_policy2, origin_b_); |
| 852 EXPECT_TRUE( | 853 EXPECT_TRUE( |
| 853 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_a_)); | 854 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_a_)); |
| 854 EXPECT_FALSE( | 855 EXPECT_FALSE( |
| 855 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_b_)); | 856 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_b_)); |
| 856 EXPECT_FALSE( | 857 EXPECT_FALSE( |
| 857 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_c_)); | 858 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_c_)); |
| 858 EXPECT_FALSE( | 859 EXPECT_FALSE( |
| 859 policy2->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_a_)); | 860 policy2->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_a_)); |
| 860 EXPECT_FALSE( | 861 EXPECT_FALSE( |
| 861 policy2->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_b_)); | 862 policy2->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_b_)); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 888 // +------------------------------------------------+ | 889 // +------------------------------------------------+ |
| 889 // Default-off feature should be enabled in both same-origin and cross-origin | 890 // Default-off feature should be enabled in both same-origin and cross-origin |
| 890 // child frames because it is delegated through the parent's frame policy, and | 891 // child frames because it is delegated through the parent's frame policy, and |
| 891 // they declare their own policy to enable it. | 892 // they declare their own policy to enable it. |
| 892 std::unique_ptr<FeaturePolicy> policy1 = | 893 std::unique_ptr<FeaturePolicy> policy1 = |
| 893 CreateFromParentPolicy(nullptr, origin_a_); | 894 CreateFromParentPolicy(nullptr, origin_a_); |
| 894 policy1->SetHeaderPolicy({{{"default-off", false, {origin_a_}}}}); | 895 policy1->SetHeaderPolicy({{{"default-off", false, {origin_a_}}}}); |
| 895 ParsedFeaturePolicyHeader frame_policy1 = { | 896 ParsedFeaturePolicyHeader frame_policy1 = { |
| 896 {{"default-off", false, {origin_a_}}}}; | 897 {{"default-off", false, {origin_a_}}}}; |
| 897 std::unique_ptr<FeaturePolicy> policy2 = | 898 std::unique_ptr<FeaturePolicy> policy2 = |
| 898 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy1, origin_a_); | 899 CreateFromParentWithFramePolicy(policy1.get(), frame_policy1, origin_a_); |
| 899 policy2->SetHeaderPolicy({{{"default-off", false, {origin_a_}}}}); | 900 policy2->SetHeaderPolicy({{{"default-off", false, {origin_a_}}}}); |
| 900 ParsedFeaturePolicyHeader frame_policy2 = { | 901 ParsedFeaturePolicyHeader frame_policy2 = { |
| 901 {{"default-off", false, {origin_b_}}}}; | 902 {{"default-off", false, {origin_b_}}}}; |
| 902 std::unique_ptr<FeaturePolicy> policy3 = | 903 std::unique_ptr<FeaturePolicy> policy3 = |
| 903 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy2, origin_b_); | 904 CreateFromParentWithFramePolicy(policy1.get(), frame_policy2, origin_b_); |
| 904 policy3->SetHeaderPolicy({{{"default-off", false, {origin_b_}}}}); | 905 policy3->SetHeaderPolicy({{{"default-off", false, {origin_b_}}}}); |
| 905 EXPECT_TRUE( | 906 EXPECT_TRUE( |
| 906 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_a_)); | 907 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_a_)); |
| 907 EXPECT_FALSE( | 908 EXPECT_FALSE( |
| 908 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_b_)); | 909 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_b_)); |
| 909 EXPECT_FALSE( | 910 EXPECT_FALSE( |
| 910 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_c_)); | 911 policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_c_)); |
| 911 EXPECT_TRUE( | 912 EXPECT_TRUE( |
| 912 policy2->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_a_)); | 913 policy2->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_a_)); |
| 913 EXPECT_FALSE( | 914 EXPECT_FALSE( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 942 // Default-self feature should be disabled in both cross-origin child frames | 943 // Default-self feature should be disabled in both cross-origin child frames |
| 943 // by frame policy, even though the parent frame's header policy would | 944 // by frame policy, even though the parent frame's header policy would |
| 944 // otherwise enable it. This is true regardless of the child frame's header | 945 // otherwise enable it. This is true regardless of the child frame's header |
| 945 // policy. | 946 // policy. |
| 946 std::unique_ptr<FeaturePolicy> policy1 = | 947 std::unique_ptr<FeaturePolicy> policy1 = |
| 947 CreateFromParentPolicy(nullptr, origin_a_); | 948 CreateFromParentPolicy(nullptr, origin_a_); |
| 948 policy1->SetHeaderPolicy({{{"default-self", false, {origin_a_, origin_b_}}}}); | 949 policy1->SetHeaderPolicy({{{"default-self", false, {origin_a_, origin_b_}}}}); |
| 949 ParsedFeaturePolicyHeader frame_policy1 = { | 950 ParsedFeaturePolicyHeader frame_policy1 = { |
| 950 {{"default-self", false, std::vector<url::Origin>()}}}; | 951 {{"default-self", false, std::vector<url::Origin>()}}}; |
| 951 std::unique_ptr<FeaturePolicy> policy2 = | 952 std::unique_ptr<FeaturePolicy> policy2 = |
| 952 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy1, origin_b_); | 953 CreateFromParentWithFramePolicy(policy1.get(), frame_policy1, origin_b_); |
| 953 ParsedFeaturePolicyHeader frame_policy2 = { | 954 ParsedFeaturePolicyHeader frame_policy2 = { |
| 954 {{"default-self", false, std::vector<url::Origin>()}}}; | 955 {{"default-self", false, std::vector<url::Origin>()}}}; |
| 955 std::unique_ptr<FeaturePolicy> policy3 = | 956 std::unique_ptr<FeaturePolicy> policy3 = |
| 956 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy2, origin_b_); | 957 CreateFromParentWithFramePolicy(policy1.get(), frame_policy2, origin_b_); |
| 957 policy3->SetHeaderPolicy({{{"default-self", false, {origin_b_}}}}); | 958 policy3->SetHeaderPolicy({{{"default-self", false, {origin_b_}}}}); |
| 958 EXPECT_FALSE( | 959 EXPECT_FALSE( |
| 959 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); | 960 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); |
| 960 EXPECT_FALSE( | 961 EXPECT_FALSE( |
| 961 policy3->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); | 962 policy3->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); |
| 962 } | 963 } |
| 963 | 964 |
| 964 TEST_F(FeaturePolicyTest, TestCombineFrameAndHeaderPolicies) { | 965 TEST_F(FeaturePolicyTest, TestCombineFrameAndHeaderPolicies) { |
| 965 // +-------------------------------------------------+ | 966 // +-------------------------------------------------+ |
| 966 // |(1)Origin A | | 967 // |(1)Origin A | |
| (...skipping 17 matching lines...) Expand all Loading... |
| 984 // | | +-------------+ | | | 985 // | | +-------------+ | | |
| 985 // | +---------------------------------------------+ | | 986 // | +---------------------------------------------+ | |
| 986 // +-------------------------------------------------+ | 987 // +-------------------------------------------------+ |
| 987 // Default-self feature should be enabled in cross-origin child frames 2 and | 988 // Default-self feature should be enabled in cross-origin child frames 2 and |
| 988 // 4. Feature should be disabled in frame 3 by frame policy. | 989 // 4. Feature should be disabled in frame 3 by frame policy. |
| 989 std::unique_ptr<FeaturePolicy> policy1 = | 990 std::unique_ptr<FeaturePolicy> policy1 = |
| 990 CreateFromParentPolicy(nullptr, origin_a_); | 991 CreateFromParentPolicy(nullptr, origin_a_); |
| 991 ParsedFeaturePolicyHeader frame_policy1 = { | 992 ParsedFeaturePolicyHeader frame_policy1 = { |
| 992 {{"default-self", false, {origin_b_}}}}; | 993 {{"default-self", false, {origin_b_}}}}; |
| 993 std::unique_ptr<FeaturePolicy> policy2 = | 994 std::unique_ptr<FeaturePolicy> policy2 = |
| 994 CreateFromParentWithFramePolicy(policy1.get(), &frame_policy1, origin_b_); | 995 CreateFromParentWithFramePolicy(policy1.get(), frame_policy1, origin_b_); |
| 995 policy2->SetHeaderPolicy( | 996 policy2->SetHeaderPolicy( |
| 996 {{{"default-self", true, std::vector<url::Origin>()}}}); | 997 {{{"default-self", true, std::vector<url::Origin>()}}}); |
| 997 ParsedFeaturePolicyHeader frame_policy2 = { | 998 ParsedFeaturePolicyHeader frame_policy2 = { |
| 998 {{"default-self", false, std::vector<url::Origin>()}}}; | 999 {{"default-self", false, std::vector<url::Origin>()}}}; |
| 999 std::unique_ptr<FeaturePolicy> policy3 = | 1000 std::unique_ptr<FeaturePolicy> policy3 = |
| 1000 CreateFromParentWithFramePolicy(policy2.get(), &frame_policy2, origin_c_); | 1001 CreateFromParentWithFramePolicy(policy2.get(), frame_policy2, origin_c_); |
| 1001 std::unique_ptr<FeaturePolicy> policy4 = | 1002 std::unique_ptr<FeaturePolicy> policy4 = |
| 1002 CreateFromParentWithFramePolicy(policy2.get(), nullptr, origin_c_); | 1003 CreateFromParentPolicy(policy2.get(), origin_c_); |
| 1003 EXPECT_TRUE( | 1004 EXPECT_TRUE( |
| 1004 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); | 1005 policy1->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_a_)); |
| 1005 EXPECT_TRUE( | 1006 EXPECT_TRUE( |
| 1006 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); | 1007 policy2->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_b_)); |
| 1007 EXPECT_FALSE( | 1008 EXPECT_FALSE( |
| 1008 policy3->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); | 1009 policy3->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); |
| 1009 EXPECT_TRUE( | 1010 EXPECT_TRUE( |
| 1010 policy4->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); | 1011 policy4->IsFeatureEnabledForOrigin(kDefaultSelfFeature, origin_c_)); |
| 1011 } | 1012 } |
| 1012 } // namespace content | 1013 } // namespace content |
| OLD | NEW |