Index: third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp |
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp |
index 758f79866bae13e8c2ddbc36fcb7efb65a276cb3..f5249a6a5df2cff6255bd78c8788e96ba46ffe6e 100644 |
--- a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp |
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp |
@@ -580,4 +580,86 @@ TEST_F(FrameFetchContextDisplayedCertificateErrorsTest, MemoryCacheCertificateEr |
fetchContext->dispatchDidLoadResourceFromMemoryCache(resource.get(), WebURLRequest::FrameTypeNone, WebURLRequest::RequestContextImage); |
} |
+TEST_F(FrameFetchContextTest, SetIsExternalRequestForPublicDocument) |
+{ |
+ EXPECT_FALSE(document->isHostedInReservedIPRange()); |
+ |
+ struct TestCase { |
+ const char* url; |
+ bool isExternalExpectation; |
+ } cases[] = { |
+ { "http://example.com/", false }, |
+ { "https://example.com/", false }, |
+ { "data:text/html,whatever", false }, |
+ { "file:///etc/passwd", false }, |
+ { "blob:http://example.com/", false }, |
+ |
+ { "http://localhost/", true }, |
+ { "http://127.0.0.1/", true }, |
+ { "http://127.0.0.1:8000/", true }, |
+ { "http://192.168.1.1:8000/", true } |
+ }; |
+ RuntimeEnabledFeatures::setCorsRFC1918Enabled(false); |
+ for (const auto& test : cases) { |
+ ResourceRequest mainRequest(test.url); |
+ fetchContext->addAdditionalRequestHeaders(mainRequest, FetchMainResource); |
+ EXPECT_FALSE(mainRequest.isExternalRequest()); |
+ |
+ ResourceRequest subRequest(test.url); |
+ fetchContext->addAdditionalRequestHeaders(subRequest, FetchSubresource); |
+ EXPECT_FALSE(subRequest.isExternalRequest()); |
+ } |
+ |
+ RuntimeEnabledFeatures::setCorsRFC1918Enabled(true); |
+ for (const auto& test : cases) { |
+ ResourceRequest mainRequest(test.url); |
+ fetchContext->addAdditionalRequestHeaders(mainRequest, FetchMainResource); |
+ EXPECT_EQ(mainRequest.isExternalRequest(), test.isExternalExpectation); |
+ |
+ ResourceRequest subRequest(test.url); |
+ fetchContext->addAdditionalRequestHeaders(subRequest, FetchSubresource); |
+ EXPECT_EQ(subRequest.isExternalRequest(), test.isExternalExpectation); |
+ } |
+} |
+ |
+TEST_F(FrameFetchContextTest, SetIsExternalRequestForPrivateDocument) |
+{ |
+ document->setHostedInReservedIPRange(true); |
+ |
+ struct TestCase { |
+ const char* url; |
+ } cases[] = { |
+ { "http://example.com/" }, |
+ { "https://example.com/" }, |
+ { "data:text/html,whatever" }, |
+ { "file:///etc/passwd" }, |
+ { "blob:http://example.com/" }, |
+ { "http://localhost/" }, |
+ { "http://127.0.0.1/" }, |
+ { "http://127.0.0.1:8000/" }, |
+ { "http://192.168.1.1:8000/" } |
+ }; |
+ RuntimeEnabledFeatures::setCorsRFC1918Enabled(false); |
+ for (const auto& test : cases) { |
+ ResourceRequest mainRequest(test.url); |
+ fetchContext->addAdditionalRequestHeaders(mainRequest, FetchMainResource); |
+ EXPECT_FALSE(mainRequest.isExternalRequest()); |
+ |
+ ResourceRequest subRequest(test.url); |
+ fetchContext->addAdditionalRequestHeaders(subRequest, FetchSubresource); |
+ EXPECT_FALSE(subRequest.isExternalRequest()); |
+ } |
+ |
+ RuntimeEnabledFeatures::setCorsRFC1918Enabled(true); |
+ for (const auto& test : cases) { |
+ ResourceRequest mainRequest(test.url); |
+ fetchContext->addAdditionalRequestHeaders(mainRequest, FetchMainResource); |
+ EXPECT_FALSE(mainRequest.isExternalRequest()); |
+ |
+ ResourceRequest subRequest(test.url); |
+ fetchContext->addAdditionalRequestHeaders(subRequest, FetchSubresource); |
+ EXPECT_FALSE(subRequest.isExternalRequest()); |
+ } |
+} |
+ |
} // namespace blink |