| Index: third_party/WebKit/Source/platform/feature_policy/FeaturePolicyTest.cpp
|
| diff --git a/third_party/WebKit/Source/platform/feature_policy/FeaturePolicyTest.cpp b/third_party/WebKit/Source/platform/feature_policy/FeaturePolicyTest.cpp
|
| index 54ba7bbe975c3a48c023db7a1bca15f65ad5a2bf..b5ec7f27f8ddf8509d098935c6270b73e3e66e49 100644
|
| --- a/third_party/WebKit/Source/platform/feature_policy/FeaturePolicyTest.cpp
|
| +++ b/third_party/WebKit/Source/platform/feature_policy/FeaturePolicyTest.cpp
|
| @@ -87,9 +87,7 @@ TEST_F(FeaturePolicyTest, ParseValidPolicy) {
|
| Vector<String> messages;
|
| for (const char* policyString : kValidPolicies) {
|
| messages.clear();
|
| - std::unique_ptr<FeaturePolicy> policy =
|
| - createFromParentPolicy(nullptr, m_originA);
|
| - policy->setHeaderPolicy(policyString, &messages);
|
| + FeaturePolicy::parseFeaturePolicy(policyString, m_originA.get(), &messages);
|
| EXPECT_EQ(0UL, messages.size());
|
| }
|
| }
|
| @@ -98,13 +96,61 @@ TEST_F(FeaturePolicyTest, ParseInvalidPolicy) {
|
| Vector<String> messages;
|
| for (const char* policyString : kInvalidPolicies) {
|
| messages.clear();
|
| - std::unique_ptr<FeaturePolicy> policy =
|
| - createFromParentPolicy(nullptr, m_originA);
|
| - policy->setHeaderPolicy(policyString, &messages);
|
| + FeaturePolicy::parseFeaturePolicy(policyString, m_originA.get(), &messages);
|
| EXPECT_NE(0UL, messages.size());
|
| }
|
| }
|
|
|
| +TEST_F(FeaturePolicyTest, PolicyParsedCorrectly) {
|
| + Vector<String> messages;
|
| +
|
| + // Empty policy.
|
| + WebParsedFeaturePolicy parsedPolicy =
|
| + FeaturePolicy::parseFeaturePolicy("{}", m_originA.get(), &messages);
|
| + EXPECT_EQ(0UL, parsedPolicy.size());
|
| +
|
| + // Simple policy with "self".
|
| + parsedPolicy = FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"self\"]}", m_originA.get(), &messages);
|
| + EXPECT_EQ(1UL, parsedPolicy.size());
|
| + EXPECT_EQ("default-self", parsedPolicy[0].featureName);
|
| + EXPECT_FALSE(parsedPolicy[0].matchesAllOrigins);
|
| + EXPECT_EQ(1UL, parsedPolicy[0].origins.size());
|
| + EXPECT_TRUE(m_originA->isSameSchemeHostPortAndSuborigin(
|
| + parsedPolicy[0].origins[0].get()));
|
| +
|
| + // Simple policy with *.
|
| + parsedPolicy = FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"*\"]}", m_originA.get(), &messages);
|
| + EXPECT_EQ(1UL, parsedPolicy.size());
|
| + EXPECT_EQ("default-self", parsedPolicy[0].featureName);
|
| + EXPECT_TRUE(parsedPolicy[0].matchesAllOrigins);
|
| + EXPECT_EQ(0UL, parsedPolicy[0].origins.size());
|
| +
|
| + // Complicated policy.
|
| + parsedPolicy = FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"*\"], "
|
| + "\"default-on\": [\"https://example.net\", \"https://example.org\"], "
|
| + "\"default-off\": [\"self\"]}",
|
| + m_originA.get(), &messages);
|
| + EXPECT_EQ(3UL, parsedPolicy.size());
|
| + EXPECT_EQ("default-self", parsedPolicy[0].featureName);
|
| + EXPECT_TRUE(parsedPolicy[0].matchesAllOrigins);
|
| + EXPECT_EQ(0UL, parsedPolicy[0].origins.size());
|
| + EXPECT_EQ("default-on", parsedPolicy[1].featureName);
|
| + EXPECT_FALSE(parsedPolicy[1].matchesAllOrigins);
|
| + EXPECT_EQ(2UL, parsedPolicy[1].origins.size());
|
| + EXPECT_TRUE(m_originB->isSameSchemeHostPortAndSuborigin(
|
| + parsedPolicy[1].origins[0].get()));
|
| + EXPECT_TRUE(m_originC->isSameSchemeHostPortAndSuborigin(
|
| + parsedPolicy[1].origins[1].get()));
|
| + EXPECT_EQ("default-off", parsedPolicy[2].featureName);
|
| + EXPECT_FALSE(parsedPolicy[2].matchesAllOrigins);
|
| + EXPECT_EQ(1UL, parsedPolicy[2].origins.size());
|
| + EXPECT_TRUE(m_originA->isSameSchemeHostPortAndSuborigin(
|
| + parsedPolicy[2].origins[0].get()));
|
| +}
|
| +
|
| TEST_F(FeaturePolicyTest, TestInitialPolicy) {
|
| // +-------------+
|
| // |(1)Origin A |
|
| @@ -175,7 +221,8 @@ TEST_F(FeaturePolicyTest, TestCrossOriginChildCannotEnableFeature) {
|
| createFromParentPolicy(nullptr, m_originA);
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| - policy2->setHeaderPolicy("{\"default-self\": [\"self\"]}", &messages);
|
| + policy2->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"self\"]}", m_originB.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| EXPECT_FALSE(policy2->isFeatureEnabled(kDefaultSelfFeature));
|
| }
|
| @@ -199,7 +246,8 @@ TEST_F(FeaturePolicyTest, TestFrameSelfInheritance) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-self\": [\"self\"]}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"self\"]}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originA);
|
| @@ -233,7 +281,8 @@ TEST_F(FeaturePolicyTest, TestReflexiveFrameSelfInheritance) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-self\": [\"self\"]}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"self\"]}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| @@ -262,7 +311,8 @@ TEST_F(FeaturePolicyTest, TestSelectiveFrameInheritance) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-self\": [\"" ORIGIN_B "\"]}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"" ORIGIN_B "\"]}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| @@ -284,7 +334,8 @@ TEST_F(FeaturePolicyTest, TestPolicyCanBlockSelf) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-on\": []}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-on\": []}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| EXPECT_FALSE(policy1->isFeatureEnabled(kDefaultOnFeature));
|
| }
|
| @@ -302,7 +353,8 @@ TEST_F(FeaturePolicyTest, TestParentPolicyBlocksSameOriginChildPolicy) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-on\": []}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-on\": []}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originA);
|
| @@ -324,7 +376,8 @@ TEST_F(FeaturePolicyTest, TestChildPolicyCanBlockSelf) {
|
| createFromParentPolicy(nullptr, m_originA);
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| - policy2->setHeaderPolicy("{\"default-on\": []}", &messages);
|
| + policy2->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-on\": []}", m_originB.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| EXPECT_FALSE(policy2->isFeatureEnabled(kDefaultOnFeature));
|
| }
|
| @@ -349,7 +402,8 @@ TEST_F(FeaturePolicyTest, TestChildPolicyCanBlockChildren) {
|
| createFromParentPolicy(nullptr, m_originA);
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| - policy2->setHeaderPolicy("{\"default-on\": [\"self\"]}", &messages);
|
| + policy2->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-on\": [\"self\"]}", m_originB.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy3 =
|
| createFromParentPolicy(policy2.get(), m_originC);
|
| @@ -370,7 +424,8 @@ TEST_F(FeaturePolicyTest, TestParentPolicyBlocksCrossOriginChildPolicy) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-on\": []}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-on\": []}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| @@ -394,7 +449,8 @@ TEST_F(FeaturePolicyTest, TestEnableForAllOrigins) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-self\": [\"*\"]}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"*\"]}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| @@ -422,7 +478,8 @@ TEST_F(FeaturePolicyTest, TestDefaultOnEnablesForAllAncestors) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-on\": [\"" ORIGIN_B "\"]}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-on\": [\"" ORIGIN_B "\"]}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| @@ -453,7 +510,8 @@ TEST_F(FeaturePolicyTest, TestDefaultSelfRespectsSameOriginEmbedding) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-self\": [\"" ORIGIN_B "\"]}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"" ORIGIN_B "\"]}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| @@ -484,16 +542,19 @@ TEST_F(FeaturePolicyTest, TestDefaultOffMustBeDelegatedToAllCrossOriginFrames) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-off\": [\"" ORIGIN_B "\"]}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-off\": [\"" ORIGIN_B "\"]}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| - policy2->setHeaderPolicy("{\"default-off\": [\"self\"]}", &messages);
|
| + policy2->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-off\": [\"self\"]}", m_originB.get(), &messages));
|
| std::unique_ptr<FeaturePolicy> policy3 =
|
| createFromParentPolicy(policy2.get(), m_originB);
|
| std::unique_ptr<FeaturePolicy> policy4 =
|
| createFromParentPolicy(policy2.get(), m_originC);
|
| - policy4->setHeaderPolicy("{\"default-off\": [\"self\"]}", &messages);
|
| + policy4->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-off\": [\"self\"]}", m_originC.get(), &messages));
|
| EXPECT_FALSE(policy1->isFeatureEnabled(kDefaultOffFeature));
|
| EXPECT_TRUE(policy2->isFeatureEnabled(kDefaultOffFeature));
|
| EXPECT_FALSE(policy3->isFeatureEnabled(kDefaultOffFeature));
|
| @@ -517,11 +578,13 @@ TEST_F(FeaturePolicyTest, TestReenableForAllOrigins) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-self\": [\"*\"]}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"*\"]}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| - policy2->setHeaderPolicy("{\"default-self\": [\"*\"]}", &messages);
|
| + policy2->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"*\"]}", m_originB.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy3 =
|
| createFromParentPolicy(policy2.get(), m_originA);
|
| @@ -547,11 +610,13 @@ TEST_F(FeaturePolicyTest, TestBlockedFrameCannotReenable) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-self\": [\"self\"]}", &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"self\"]}", m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| - policy2->setHeaderPolicy("{\"default-self\": [\"*\"]}", &messages);
|
| + policy2->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"*\"]}", m_originB.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy3 =
|
| createFromParentPolicy(policy2.get(), m_originA);
|
| @@ -580,13 +645,15 @@ TEST_F(FeaturePolicyTest, TestEnabledFrameCanDelegate) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-self\": [\"self\", \"" ORIGIN_B "\"]}",
|
| - &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"self\", \"" ORIGIN_B "\"]}", m_originA.get(),
|
| + &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| - policy2->setHeaderPolicy("{\"default-self\": [\"self\", \"" ORIGIN_C "\"]}",
|
| - &messages);
|
| + policy2->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"self\", \"" ORIGIN_C "\"]}", m_originB.get(),
|
| + &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy3 =
|
| createFromParentPolicy(policy2.get(), m_originC);
|
| @@ -612,8 +679,9 @@ TEST_F(FeaturePolicyTest, TestEnabledFrameCanDelegateByDefault) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-on\": [\"self\", \"" ORIGIN_B "\"]}",
|
| - &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-on\": [\"self\", \"" ORIGIN_B "\"]}", m_originA.get(),
|
| + &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| @@ -645,8 +713,9 @@ TEST_F(FeaturePolicyTest, TestNonNestedFeaturesDontDelegateByDefault) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-self\": [\"self\", \"" ORIGIN_B "\"]}",
|
| - &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"self\", \"" ORIGIN_B "\"]}", m_originA.get(),
|
| + &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| @@ -680,14 +749,16 @@ TEST_F(FeaturePolicyTest, TestFeaturesAreIndependent) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-self\": [\"self\", \"" ORIGIN_B
|
| - "\"], \"default-on\": [\"self\"]}",
|
| - &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"self\", \"" ORIGIN_B
|
| + "\"], \"default-on\": [\"self\"]}",
|
| + m_originA.get(), &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy2 =
|
| createFromParentPolicy(policy1.get(), m_originB);
|
| - policy2->setHeaderPolicy(
|
| - "{\"default-self\": [\"*\"], \"default-on\": [\"*\"]}", &messages);
|
| + policy2->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-self\": [\"*\"], \"default-on\": [\"*\"]}", m_originB.get(),
|
| + &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| std::unique_ptr<FeaturePolicy> policy3 =
|
| createFromParentPolicy(policy2.get(), m_originC);
|
| @@ -709,8 +780,9 @@ TEST_F(FeaturePolicyTest, TestFeatureEnabledForOrigin) {
|
| Vector<String> messages;
|
| std::unique_ptr<FeaturePolicy> policy1 =
|
| createFromParentPolicy(nullptr, m_originA);
|
| - policy1->setHeaderPolicy("{\"default-off\": [\"self\", \"" ORIGIN_B "\"]}",
|
| - &messages);
|
| + policy1->setHeaderPolicy(FeaturePolicy::parseFeaturePolicy(
|
| + "{\"default-off\": [\"self\", \"" ORIGIN_B "\"]}", m_originA.get(),
|
| + &messages));
|
| EXPECT_EQ(0UL, messages.size());
|
| EXPECT_TRUE(
|
| policy1->isFeatureEnabledForOrigin(kDefaultOffFeature, *m_originA));
|
|
|