Index: third_party/WebKit/Source/web/tests/WebFrameTest.cpp |
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp |
index 914463ffe762c6ca0ed2198d2c850c74719a9632..8cfb002787d51fd1a114a7b432ef9af83133fbe8 100644 |
--- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp |
+++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp |
@@ -8923,4 +8923,30 @@ TEST_F(WebFrameTest, ScriptPriority) |
client.verifyAllRequests(); |
} |
+class MultipleDataChunkDelegate : public WebURLLoaderTestDelegate { |
+public: |
+ void didReceiveData(WebURLLoaderClient* originalClient, WebURLLoader* loader, const char* data, int dataLength, int encodedDataLength) override |
+ { |
+ EXPECT_GT(dataLength, 16); |
+ originalClient->didReceiveData(loader, data, 16, 16, 16); |
+ // This didReceiveData call shouldn't crash due to a failed assertion. |
+ originalClient->didReceiveData(loader, data + 16, dataLength - 16, encodedDataLength - 16, dataLength - 16); |
+ } |
+}; |
+ |
+TEST_F(WebFrameTest, ImageDocumentDecodeError) |
+{ |
+ std::string url = m_baseURL + "not_an_image.ico"; |
+ URLTestHelpers::registerMockedURLLoad(toKURL(url), "not_an_image.ico", "image/x-icon"); |
+ MultipleDataChunkDelegate delegate; |
+ Platform::current()->getURLLoaderMockFactory()->setLoaderDelegate(&delegate); |
+ FrameTestHelpers::WebViewHelper helper; |
+ helper.initializeAndLoad(url, true); |
+ Platform::current()->getURLLoaderMockFactory()->setLoaderDelegate(nullptr); |
+ |
+ Document* document = toLocalFrame(helper.webView()->page()->mainFrame())->document(); |
+ EXPECT_TRUE(document->isImageDocument()); |
+ EXPECT_EQ(Resource::DecodeError, toImageDocument(document)->cachedImage()->getStatus()); |
+} |
+ |
} // namespace blink |