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

Unified Diff: third_party/WebKit/Source/core/html/HTMLIFrameElementTest.cpp

Issue 2923563003: Move container policy logic to frame owner classes. (Closed)
Patch Set: Addressing nits Created 3 years, 6 months 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/core/html/HTMLIFrameElementTest.cpp
diff --git a/third_party/WebKit/Source/core/html/HTMLIFrameElementTest.cpp b/third_party/WebKit/Source/core/html/HTMLIFrameElementTest.cpp
index 5a5b3fb565cbd7453b2e5c9430b86743122075b5..f08d9bff1ded6e01ef7a89beb58acd0430c3b013 100644
--- a/third_party/WebKit/Source/core/html/HTMLIFrameElementTest.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLIFrameElementTest.cpp
@@ -285,4 +285,125 @@ TEST_F(HTMLIFrameElementTest, SameOriginSandboxAttributeContainerPolicy) {
EXPECT_EQ("http://example.net", container_policy[0].origins[0].ToString());
}
+// Test the ConstructContainerPolicy method when no attributes are set on the
+// iframe element.
+TEST_F(HTMLIFrameElementTest, ConstructEmptyContainerPolicy) {
+ Document* document = Document::Create();
+ KURL document_url = KURL(KURL(), "http://example.com");
+ document->SetURL(document_url);
+ document->UpdateSecurityOrigin(SecurityOrigin::Create(document_url));
+
+ HTMLIFrameElement* frame_element = HTMLIFrameElement::Create(*document);
+
+ WebParsedFeaturePolicy container_policy =
+ frame_element->ConstructContainerPolicy();
+ EXPECT_EQ(0UL, container_policy.size());
+}
+
+// Test the ConstructContainerPolicy method when the "allow" attribute is used
+// to enable features in the frame.
+TEST_F(HTMLIFrameElementTest, ConstructContainerPolicy) {
+ Document* document = Document::Create();
+ KURL document_url = KURL(KURL(), "http://example.com");
+ document->SetURL(document_url);
+ document->UpdateSecurityOrigin(SecurityOrigin::Create(document_url));
+
+ HTMLIFrameElement* frame_element = HTMLIFrameElement::Create(*document);
+ frame_element->setAttribute(HTMLNames::allowAttr, "payment usb");
+ WebParsedFeaturePolicy container_policy =
+ frame_element->ConstructContainerPolicy();
+ EXPECT_EQ(2UL, container_policy.size());
+ EXPECT_EQ(WebFeaturePolicyFeature::kPayment, container_policy[0].feature);
+ EXPECT_FALSE(container_policy[0].matches_all_origins);
+ EXPECT_EQ(1UL, container_policy[0].origins.size());
+ EXPECT_TRUE(GetOriginForFeaturePolicy(frame_element)
+ ->IsSameSchemeHostPortAndSuborigin(
+ container_policy[0].origins[0].Get()));
+ EXPECT_EQ(WebFeaturePolicyFeature::kUsb, container_policy[1].feature);
+ EXPECT_FALSE(container_policy[1].matches_all_origins);
+ EXPECT_EQ(1UL, container_policy[1].origins.size());
+ EXPECT_TRUE(GetOriginForFeaturePolicy(frame_element)
+ ->IsSameSchemeHostPortAndSuborigin(
+ container_policy[1].origins[0].Get()));
+}
+
+// Test the ConstructContainerPolicy method when the "allowfullscreen" attribute
+// is used to enable fullscreen in the frame.
+TEST_F(HTMLIFrameElementTest, ConstructContainerPolicyWithAllowFullscreen) {
+ Document* document = Document::Create();
+ KURL document_url = KURL(KURL(), "http://example.com");
+ document->SetURL(document_url);
+ document->UpdateSecurityOrigin(SecurityOrigin::Create(document_url));
+
+ HTMLIFrameElement* frame_element = HTMLIFrameElement::Create(*document);
+ frame_element->SetBooleanAttribute(HTMLNames::allowfullscreenAttr, true);
+
+ WebParsedFeaturePolicy container_policy =
+ frame_element->ConstructContainerPolicy();
+ EXPECT_EQ(1UL, container_policy.size());
+ EXPECT_EQ(WebFeaturePolicyFeature::kFullscreen, container_policy[0].feature);
+ EXPECT_TRUE(container_policy[0].matches_all_origins);
+}
+
+// Test the ConstructContainerPolicy method when the "allowpaymentrequest"
+// attribute is used to enable the paymentrequest API in the frame.
+TEST_F(HTMLIFrameElementTest, ConstructContainerPolicyWithAllowPaymentRequest) {
+ Document* document = Document::Create();
+ KURL document_url = KURL(KURL(), "http://example.com");
+ document->SetURL(document_url);
+ document->UpdateSecurityOrigin(SecurityOrigin::Create(document_url));
+
+ HTMLIFrameElement* frame_element = HTMLIFrameElement::Create(*document);
+ frame_element->setAttribute(HTMLNames::allowAttr, "usb");
+ frame_element->SetBooleanAttribute(HTMLNames::allowpaymentrequestAttr, true);
+
+ WebParsedFeaturePolicy container_policy =
+ frame_element->ConstructContainerPolicy();
+ EXPECT_EQ(2UL, container_policy.size());
+ EXPECT_EQ(WebFeaturePolicyFeature::kUsb, container_policy[0].feature);
+ EXPECT_FALSE(container_policy[0].matches_all_origins);
+ EXPECT_EQ(1UL, container_policy[0].origins.size());
+ EXPECT_TRUE(GetOriginForFeaturePolicy(frame_element)
+ ->IsSameSchemeHostPortAndSuborigin(
+ container_policy[0].origins[0].Get()));
+ EXPECT_EQ(WebFeaturePolicyFeature::kPayment, container_policy[1].feature);
+ EXPECT_TRUE(container_policy[1].matches_all_origins);
+}
+
+// Test the ConstructContainerPolicy method when both "allowfullscreen" and
+// "allowpaymentrequest" attributes are set on the iframe element, and the
+// "allow" attribute is also used to override the paymentrequest feature. In the
+// resulting container policy, the payment and usb features should be enabled
+// only for the frame's origin, (since the allow attribute overrides
+// allowpaymentrequest,) while fullscreen should be enabled for all origins.
+TEST_F(HTMLIFrameElementTest, ConstructContainerPolicyWithAllowAttributes) {
+ Document* document = Document::Create();
+ KURL document_url = KURL(KURL(), "http://example.com");
+ document->SetURL(document_url);
+ document->UpdateSecurityOrigin(SecurityOrigin::Create(document_url));
+
+ HTMLIFrameElement* frame_element = HTMLIFrameElement::Create(*document);
+ frame_element->setAttribute(HTMLNames::allowAttr, "payment usb");
+ frame_element->SetBooleanAttribute(HTMLNames::allowfullscreenAttr, true);
+ frame_element->SetBooleanAttribute(HTMLNames::allowpaymentrequestAttr, true);
+
+ WebParsedFeaturePolicy container_policy =
+ frame_element->ConstructContainerPolicy();
+ EXPECT_EQ(3UL, container_policy.size());
+ EXPECT_EQ(WebFeaturePolicyFeature::kPayment, container_policy[0].feature);
+ EXPECT_FALSE(container_policy[0].matches_all_origins);
+ EXPECT_EQ(1UL, container_policy[0].origins.size());
+ EXPECT_TRUE(GetOriginForFeaturePolicy(frame_element)
+ ->IsSameSchemeHostPortAndSuborigin(
+ container_policy[0].origins[0].Get()));
+ EXPECT_EQ(WebFeaturePolicyFeature::kUsb, container_policy[1].feature);
+ EXPECT_FALSE(container_policy[1].matches_all_origins);
+ EXPECT_EQ(1UL, container_policy[1].origins.size());
+ EXPECT_TRUE(GetOriginForFeaturePolicy(frame_element)
+ ->IsSameSchemeHostPortAndSuborigin(
+ container_policy[1].origins[0].Get()));
+ EXPECT_EQ(WebFeaturePolicyFeature::kFullscreen, container_policy[2].feature);
+ EXPECT_TRUE(container_policy[2].matches_all_origins);
+}
+
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp ('k') | third_party/WebKit/Source/core/html/HTMLPlugInElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698