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

Unified Diff: Source/core/fetch/ResourceFetcherTest.cpp

Issue 901903003: CSP: Adding the 'upgrade-insecure-requests' directive. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: WebSockets + Tests. Created 5 years, 10 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
« no previous file with comments | « Source/core/fetch/ResourceFetcher.cpp ('k') | Source/core/frame/csp/CSPDirectiveList.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/fetch/ResourceFetcherTest.cpp
diff --git a/Source/core/fetch/ResourceFetcherTest.cpp b/Source/core/fetch/ResourceFetcherTest.cpp
index b01276766c8a9cac6005ae74a03415e75628dbae..681f22ca3afe6d6a8f94e1265a3086dfbb7e2707 100644
--- a/Source/core/fetch/ResourceFetcherTest.cpp
+++ b/Source/core/fetch/ResourceFetcherTest.cpp
@@ -40,30 +40,120 @@
#include "core/html/HTMLDocument.h"
#include "core/loader/DocumentLoader.h"
#include "platform/network/ResourceRequest.h"
+#include "platform/weborigin/KURL.h"
+#include "platform/weborigin/SecurityOrigin.h"
-using namespace blink;
+namespace blink {
-namespace {
+class ResourceFetcherTest : public ::testing::Test {
+public:
+ ResourceFetcherTest()
+ : secureURL(ParsedURLString, "https://example.test/image.png")
+ , secureOrigin(SecurityOrigin::create(secureURL))
+ {
+ }
-TEST(ResourceFetcherTest, StartLoadAfterFrameDetach)
+protected:
+ virtual void SetUp()
+ {
+ // Create a ResourceFetcher that has a real DocumentLoader and Document, but is not attached to a LocalFrame.
+ // Technically, we're concerned about what happens after a LocalFrame is detached (rather than before
+ // any attach occurs), but ResourceFetcher can't tell the difference.
+ documentLoader = DocumentLoader::create(0, ResourceRequest(secureURL), SubstituteData());
+ document = Document::create();
+ fetcher = documentLoader->fetcher();
+ fetcher->setDocument(document.get());
+ }
+
+ void expectUpgrade(const char* input, const char* expected)
+ {
+ KURL inputURL(ParsedURLString, input);
+ KURL expectedURL(ParsedURLString, expected);
+
+ FetchRequest fetchRequest = FetchRequest(ResourceRequest(inputURL), FetchInitiatorInfo());
+ fetcher->maybeUpgradeInsecureRequestURL(fetchRequest);
+ EXPECT_STREQ(expectedURL.string().utf8().data(), fetchRequest.resourceRequest().url().string().utf8().data());
+ EXPECT_EQ(expectedURL.protocol(), fetchRequest.resourceRequest().url().protocol());
+ EXPECT_EQ(expectedURL.host(), fetchRequest.resourceRequest().url().host());
+ EXPECT_EQ(expectedURL.port(), fetchRequest.resourceRequest().url().port());
+ EXPECT_EQ(expectedURL.hasPort(), fetchRequest.resourceRequest().url().hasPort());
+ EXPECT_EQ(expectedURL.path(), fetchRequest.resourceRequest().url().path());
+ }
+
+ KURL secureURL;
+ RefPtr<SecurityOrigin> secureOrigin;
+
+ // We don't use the DocumentLoader directly in any tests, but need to keep it around as long
+ // as the ResourceFetcher and Document live due to indirect usage.
+ RefPtr<DocumentLoader> documentLoader;
+ RefPtrWillBeRawPtr<ResourceFetcher> fetcher;
+ RefPtrWillBePersistent<Document> document;
+};
+
+TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach)
{
- KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.jpg");
-
- // Create a ResourceFetcher that has a real DocumentLoader and Document, but is not attached to a LocalFrame.
- // Technically, we're concerned about what happens after a LocalFrame is detached (rather than before
- // any attach occurs), but ResourceFetcher can't tell the difference.
- RefPtr<DocumentLoader> documentLoader = DocumentLoader::create(0, ResourceRequest(testURL), SubstituteData());
- RefPtrWillBeRawPtr<HTMLDocument> document = HTMLDocument::create();
- RefPtrWillBeRawPtr<ResourceFetcher> fetcher(documentLoader->fetcher());
- fetcher->setDocument(document.get());
EXPECT_EQ(fetcher->frame(), static_cast<LocalFrame*>(0));
// Try to request a url. The request should fail, no resource should be returned,
// and no resource should be present in the cache.
- FetchRequest fetchRequest = FetchRequest(ResourceRequest(testURL), FetchInitiatorInfo());
+ FetchRequest fetchRequest = FetchRequest(ResourceRequest(secureURL), FetchInitiatorInfo());
ResourcePtr<ImageResource> image = fetcher->fetchImage(fetchRequest);
EXPECT_EQ(image.get(), static_cast<ImageResource*>(0));
- EXPECT_EQ(memoryCache()->resourceForURL(testURL), static_cast<Resource*>(0));
+ EXPECT_EQ(memoryCache()->resourceForURL(secureURL), static_cast<Resource*>(0));
+}
+
+TEST_F(ResourceFetcherTest, UpgradeInsecureResourceRequests)
+{
+ document->setSecurityOrigin(secureOrigin);
+ document->setInsecureContentPolicy(SecurityContext::InsecureContentUpgrade);
+
+ expectUpgrade("http://example.test/image.png", "https://example.test/image.png");
+ expectUpgrade("http://example.test:80/image.png", "https://example.test:443/image.png");
+ expectUpgrade("http://example.test:1212/image.png", "https://example.test:1212/image.png");
+
+ expectUpgrade("https://example.test/image.png", "https://example.test/image.png");
+ expectUpgrade("https://example.test:80/image.png", "https://example.test:80/image.png");
+ expectUpgrade("https://example.test:1212/image.png", "https://example.test:1212/image.png");
+
+ expectUpgrade("ftp://example.test/image.png", "ftp://example.test/image.png");
+ expectUpgrade("ftp://example.test:21/image.png", "ftp://example.test:21/image.png");
+ expectUpgrade("ftp://example.test:1212/image.png", "ftp://example.test:1212/image.png");
+}
+
+TEST_F(ResourceFetcherTest, DoNotUpgradeInsecureResourceRequests)
+{
+ document->setSecurityOrigin(secureOrigin);
+ document->setInsecureContentPolicy(SecurityContext::InsecureContentDoNotUpgrade);
+
+ expectUpgrade("http://example.test/image.png", "http://example.test/image.png");
+ expectUpgrade("http://example.test:80/image.png", "http://example.test:80/image.png");
+ expectUpgrade("http://example.test:1212/image.png", "http://example.test:1212/image.png");
+
+ expectUpgrade("https://example.test/image.png", "https://example.test/image.png");
+ expectUpgrade("https://example.test:80/image.png", "https://example.test:80/image.png");
+ expectUpgrade("https://example.test:1212/image.png", "https://example.test:1212/image.png");
+
+ expectUpgrade("ftp://example.test/image.png", "ftp://example.test/image.png");
+ expectUpgrade("ftp://example.test:21/image.png", "ftp://example.test:21/image.png");
+ expectUpgrade("ftp://example.test:1212/image.png", "ftp://example.test:1212/image.png");
+}
+
+TEST_F(ResourceFetcherTest, MonitorInsecureResourceRequests)
+{
+ document->setSecurityOrigin(secureOrigin);
+ document->setInsecureContentPolicy(SecurityContext::InsecureContentMonitor);
+
+ expectUpgrade("http://example.test/image.png", "http://example.test/image.png");
+ expectUpgrade("http://example.test:80/image.png", "http://example.test:80/image.png");
+ expectUpgrade("http://example.test:1212/image.png", "http://example.test:1212/image.png");
+
+ expectUpgrade("https://example.test/image.png", "https://example.test/image.png");
+ expectUpgrade("https://example.test:80/image.png", "https://example.test:80/image.png");
+ expectUpgrade("https://example.test:1212/image.png", "https://example.test:1212/image.png");
+
+ expectUpgrade("ftp://example.test/image.png", "ftp://example.test/image.png");
+ expectUpgrade("ftp://example.test:21/image.png", "ftp://example.test:21/image.png");
+ expectUpgrade("ftp://example.test:1212/image.png", "ftp://example.test:1212/image.png");
}
} // namespace
« no previous file with comments | « Source/core/fetch/ResourceFetcher.cpp ('k') | Source/core/frame/csp/CSPDirectiveList.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698