Index: Source/core/fetch/ResourceFetcherTest.cpp |
diff --git a/Source/core/fetch/ResourceFetcherTest.cpp b/Source/core/fetch/ResourceFetcherTest.cpp |
index 1527e1d66d2a9322980e639f27435569b495f21c..5b1760ade6027b195cc207f3b294cfa1703f5dda 100644 |
--- a/Source/core/fetch/ResourceFetcherTest.cpp |
+++ b/Source/core/fetch/ResourceFetcherTest.cpp |
@@ -37,8 +37,11 @@ |
#include "core/fetch/ImageResource.h" |
#include "core/fetch/MemoryCache.h" |
#include "core/fetch/ResourcePtr.h" |
+#include "core/frame/FrameView.h" |
#include "core/html/HTMLDocument.h" |
#include "core/loader/DocumentLoader.h" |
+#include "core/page/Page.h" |
+#include "core/testing/DummyPageHolder.h" |
#include "platform/network/ResourceRequest.h" |
#include "platform/weborigin/KURL.h" |
#include "platform/weborigin/SecurityOrigin.h" |
@@ -46,9 +49,9 @@ |
namespace blink { |
-class ResourceFetcherTest : public ::testing::Test { |
+class ResourceFetcherUpgradeTest : public ::testing::Test { |
public: |
- ResourceFetcherTest() |
+ ResourceFetcherUpgradeTest() |
: secureURL(ParsedURLString, "https://secureorigin.test/image.png") |
, exampleOrigin(SecurityOrigin::create(KURL(ParsedURLString, "https://example.test/"))) |
, secureOrigin(SecurityOrigin::create(secureURL)) |
@@ -116,7 +119,7 @@ protected: |
RefPtrWillBePersistent<Document> document; |
}; |
-TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) |
+TEST_F(ResourceFetcherUpgradeTest, StartLoadAfterFrameDetach) |
{ |
EXPECT_EQ(fetcher->frame(), static_cast<LocalFrame*>(0)); |
@@ -128,7 +131,7 @@ TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) |
EXPECT_EQ(memoryCache()->resourceForURL(secureURL), static_cast<Resource*>(0)); |
} |
-TEST_F(ResourceFetcherTest, UpgradeInsecureResourceRequests) |
+TEST_F(ResourceFetcherUpgradeTest, UpgradeInsecureResourceRequests) |
{ |
struct TestCase { |
const char* original; |
@@ -172,7 +175,7 @@ TEST_F(ResourceFetcherTest, UpgradeInsecureResourceRequests) |
} |
} |
-TEST_F(ResourceFetcherTest, DoNotUpgradeInsecureResourceRequests) |
+TEST_F(ResourceFetcherUpgradeTest, DoNotUpgradeInsecureResourceRequests) |
{ |
document->setSecurityOrigin(secureOrigin); |
document->setInsecureContentPolicy(SecurityContext::InsecureContentDoNotUpgrade); |
@@ -190,7 +193,7 @@ TEST_F(ResourceFetcherTest, DoNotUpgradeInsecureResourceRequests) |
expectUpgrade("ftp://example.test:1212/image.png", "ftp://example.test:1212/image.png"); |
} |
-TEST_F(ResourceFetcherTest, MonitorInsecureResourceRequests) |
+TEST_F(ResourceFetcherUpgradeTest, MonitorInsecureResourceRequests) |
{ |
document->setSecurityOrigin(secureOrigin); |
document->setInsecureContentPolicy(SecurityContext::InsecureContentMonitor); |
@@ -208,7 +211,7 @@ TEST_F(ResourceFetcherTest, MonitorInsecureResourceRequests) |
expectUpgrade("ftp://example.test:1212/image.png", "ftp://example.test:1212/image.png"); |
} |
-TEST_F(ResourceFetcherTest, SendPreferHeader) |
+TEST_F(ResourceFetcherUpgradeTest, SendPreferHeader) |
{ |
struct TestCase { |
const char* toRequest; |
@@ -237,4 +240,69 @@ TEST_F(ResourceFetcherTest, SendPreferHeader) |
} |
} |
+class ResourceFetcherHintsTest : public ::testing::Test { |
+public: |
+ ResourceFetcherHintsTest() { } |
+ |
+protected: |
+ virtual void SetUp() |
+ { |
+ dummyPageHolder = DummyPageHolder::create(IntSize(500, 500)); |
+ dummyPageHolder->page().setDeviceScaleFactor(1.0); |
+ documentLoader = DocumentLoader::create(&dummyPageHolder->frame(), ResourceRequest("http://www.example.com"), SubstituteData()); |
+ document = toHTMLDocument(&dummyPageHolder->document()); |
+ fetcher = documentLoader->fetcher(); |
+ fetcher->setDocument(document.get()); |
+ } |
+ |
+ void expectHeader(const char* input, const char* headerName, bool isPresent, const char* headerValue) |
+ { |
+ KURL inputURL(ParsedURLString, input); |
+ FetchRequest fetchRequest = FetchRequest(ResourceRequest(inputURL), FetchInitiatorInfo()); |
+ fetcher->addClientHintsIfNeccessary(fetchRequest); |
+ |
+ EXPECT_STREQ(isPresent ? headerValue : "", |
+ fetchRequest.resourceRequest().httpHeaderField(headerName).utf8().data()); |
+ } |
+ |
+ OwnPtr<DummyPageHolder> dummyPageHolder; |
+ // 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; |
+ RefPtrWillBePersistent<Document> document; |
+ RefPtrWillBePersistent<ResourceFetcher> fetcher; |
+}; |
+ |
+TEST_F(ResourceFetcherHintsTest, MonitorDPRHints) |
+{ |
+ expectHeader("http://www.example.com/1.gif", "DPR", false, ""); |
+ dummyPageHolder->frame().setShouldSendDPRHint(); |
+ expectHeader("http://www.example.com/1.gif", "DPR", true, "1"); |
+ dummyPageHolder->page().setDeviceScaleFactor(2.5); |
+ expectHeader("http://www.example.com/1.gif", "DPR", true, "2.5"); |
+ expectHeader("http://www.example.com/1.gif", "RW", false, ""); |
+} |
+ |
+TEST_F(ResourceFetcherHintsTest, MonitorRWHints) |
+{ |
+ expectHeader("http://www.example.com/1.gif", "RW", false, ""); |
+ dummyPageHolder->frame().setShouldSendRWHint(); |
+ expectHeader("http://www.example.com/1.gif", "RW", true, "500"); |
+ dummyPageHolder->frameView().setLayoutSizeFixedToFrameSize(false); |
+ dummyPageHolder->frameView().setLayoutSize(IntSize(800, 800)); |
+ expectHeader("http://www.example.com/1.gif", "RW", true, "800"); |
+ expectHeader("http://www.example.com/1.gif", "DPR", false, ""); |
+} |
+ |
+TEST_F(ResourceFetcherHintsTest, MonitorBothHints) |
+{ |
+ expectHeader("http://www.example.com/1.gif", "DPR", false, ""); |
+ expectHeader("http://www.example.com/1.gif", "RW", false, ""); |
+ |
+ dummyPageHolder->frame().setShouldSendDPRHint(); |
+ dummyPageHolder->frame().setShouldSendRWHint(); |
+ expectHeader("http://www.example.com/1.gif", "DPR", true, "1"); |
+ expectHeader("http://www.example.com/1.gif", "RW", true, "500"); |
+} |
+ |
} // namespace |