Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(738)

Unified Diff: third_party/WebKit/Source/platform/feature_policy/FeaturePolicyTest.cpp

Issue 2520223002: Replicate a parsed feature policy representation so it doesn't need to be parsed in the browser pro… (Closed)
Patch Set: Replicate a parsed feature policy representation so it doesn't need to be parsed in the browser pro… Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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));

Powered by Google App Engine
This is Rietveld 408576698