| Index: third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp b/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp
|
| deleted file mode 100644
|
| index 8801c001e93b971b9b1ac522376d61472385a851..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp
|
| +++ /dev/null
|
| @@ -1,1217 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2013, Google Inc. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions are
|
| - * met:
|
| - *
|
| - * * Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * * Redistributions in binary form must reproduce the above
|
| - * copyright notice, this list of conditions and the following disclaimer
|
| - * in the documentation and/or other materials provided with the
|
| - * distribution.
|
| - * * Neither the name of Google Inc. nor the names of its
|
| - * contributors may be used to endorse or promote products derived from
|
| - * this software without specific prior written permission.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "core/fetch/ImageResource.h"
|
| -
|
| -#include "core/fetch/FetchInitiatorInfo.h"
|
| -#include "core/fetch/FetchRequest.h"
|
| -#include "core/fetch/MemoryCache.h"
|
| -#include "core/fetch/MockImageResourceClient.h"
|
| -#include "core/fetch/MockResourceClient.h"
|
| -#include "core/fetch/ResourceFetcher.h"
|
| -#include "core/fetch/ResourceLoader.h"
|
| -#include "core/fetch/UniqueIdentifier.h"
|
| -#include "platform/SharedBuffer.h"
|
| -#include "platform/exported/WrappedResourceResponse.h"
|
| -#include "platform/graphics/BitmapImage.h"
|
| -#include "platform/graphics/Image.h"
|
| -#include "platform/scheduler/test/fake_web_task_runner.h"
|
| -#include "platform/testing/TestingPlatformSupport.h"
|
| -#include "platform/testing/URLTestHelpers.h"
|
| -#include "platform/testing/UnitTestHelpers.h"
|
| -#include "public/platform/Platform.h"
|
| -#include "public/platform/WebCachePolicy.h"
|
| -#include "public/platform/WebURL.h"
|
| -#include "public/platform/WebURLLoaderMockFactory.h"
|
| -#include "public/platform/WebURLResponse.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "wtf/PtrUtil.h"
|
| -#include "wtf/text/Base64.h"
|
| -#include <memory>
|
| -
|
| -namespace blink {
|
| -
|
| -namespace {
|
| -
|
| -// An image of size 1x1.
|
| -const unsigned char kJpegImage[] = {
|
| - 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01,
|
| - 0x01, 0x01, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x13,
|
| - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68,
|
| - 0x20, 0x47, 0x49, 0x4d, 0x50, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x05, 0x03,
|
| - 0x04, 0x04, 0x04, 0x03, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06,
|
| - 0x07, 0x0c, 0x08, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0b, 0x0b, 0x09, 0x0c,
|
| - 0x11, 0x0f, 0x12, 0x12, 0x11, 0x0f, 0x11, 0x11, 0x13, 0x16, 0x1c, 0x17,
|
| - 0x13, 0x14, 0x1a, 0x15, 0x11, 0x11, 0x18, 0x21, 0x18, 0x1a, 0x1d, 0x1d,
|
| - 0x1f, 0x1f, 0x1f, 0x13, 0x17, 0x22, 0x24, 0x22, 0x1e, 0x24, 0x1c, 0x1e,
|
| - 0x1f, 0x1e, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x05, 0x05, 0x05, 0x07, 0x06,
|
| - 0x07, 0x0e, 0x08, 0x08, 0x0e, 0x1e, 0x14, 0x11, 0x14, 0x1e, 0x1e, 0x1e,
|
| - 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
|
| - 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
|
| - 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
|
| - 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0xff,
|
| - 0xc0, 0x00, 0x11, 0x08, 0x00, 0x01, 0x00, 0x01, 0x03, 0x01, 0x22, 0x00,
|
| - 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, 0x15, 0x00, 0x01,
|
| - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xc4, 0x00, 0x14, 0x10, 0x01, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0xff, 0xc4, 0x00, 0x14, 0x01, 0x01, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| - 0x00, 0xff, 0xc4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
| - 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f,
|
| - 0x00, 0xb2, 0xc0, 0x07, 0xff, 0xd9};
|
| -
|
| -const size_t kJpegImageSubrangeWithDimensionsLength = sizeof(kJpegImage) - 1;
|
| -
|
| -// Ensure that the image decoder can determine the dimensions of kJpegImage from
|
| -// just the first kJpegImageSubrangeWithDimensionsLength bytes. If this test
|
| -// fails, then the test data here probably needs to be updated.
|
| -TEST(ImageResourceTest, DimensionsDecodableFromPartialTestImage) {
|
| - RefPtr<Image> image = BitmapImage::create();
|
| - EXPECT_EQ(
|
| - Image::SizeAvailable,
|
| - image->setData(SharedBuffer::create(
|
| - kJpegImage, kJpegImageSubrangeWithDimensionsLength),
|
| - true));
|
| - EXPECT_TRUE(image->isBitmapImage());
|
| - EXPECT_EQ(1, image->width());
|
| - EXPECT_EQ(1, image->height());
|
| -}
|
| -
|
| -// An image of size 50x50.
|
| -const unsigned char kJpegImage2[] = {
|
| - 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01,
|
| - 0x01, 0x01, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43,
|
| - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x01, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
| - 0xff, 0xff, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0x32, 0x00, 0x32, 0x03,
|
| - 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00,
|
| - 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4, 0x00, 0x14, 0x10,
|
| - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4, 0x00, 0x15, 0x01, 0x01, 0x01,
|
| - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03,
|
| - 0x11, 0x00, 0x3f, 0x00, 0x00, 0x94, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xd9};
|
| -
|
| -const char kSvgImage[] =
|
| - "<svg width=\"200\" height=\"200\" xmlns=\"http://www.w3.org/2000/svg\" "
|
| - "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"
|
| - "<rect x=\"0\" y=\"0\" width=\"100px\" height=\"100px\" fill=\"red\"/>"
|
| - "</svg>";
|
| -
|
| -const char kSvgImage2[] =
|
| - "<svg width=\"300\" height=\"300\" xmlns=\"http://www.w3.org/2000/svg\" "
|
| - "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"
|
| - "<rect x=\"0\" y=\"0\" width=\"200px\" height=\"200px\" fill=\"green\"/>"
|
| - "</svg>";
|
| -
|
| -void receiveResponse(ImageResource* imageResource,
|
| - const KURL& url,
|
| - const AtomicString& mimeType,
|
| - const char* data,
|
| - size_t dataSize) {
|
| - ResourceResponse response;
|
| - response.setURL(url);
|
| - response.setHTTPStatusCode(200);
|
| - response.setMimeType(mimeType);
|
| - imageResource->responseReceived(response, nullptr);
|
| - imageResource->appendData(data, dataSize);
|
| - imageResource->finish();
|
| -}
|
| -
|
| -class ImageResourceTestMockFetchContext : public FetchContext {
|
| - public:
|
| - static ImageResourceTestMockFetchContext* create() {
|
| - return new ImageResourceTestMockFetchContext;
|
| - }
|
| -
|
| - virtual ~ImageResourceTestMockFetchContext() {}
|
| -
|
| - bool allowImage(bool imagesEnabled, const KURL&) const override {
|
| - return true;
|
| - }
|
| - ResourceRequestBlockedReason canRequest(
|
| - Resource::Type,
|
| - const ResourceRequest&,
|
| - const KURL&,
|
| - const ResourceLoaderOptions&,
|
| - bool forPreload,
|
| - FetchRequest::OriginRestriction) const override {
|
| - return ResourceRequestBlockedReason::None;
|
| - }
|
| - bool shouldLoadNewResource(Resource::Type) const override { return true; }
|
| - WebTaskRunner* loadingTaskRunner() const override { return m_runner.get(); }
|
| -
|
| - private:
|
| - ImageResourceTestMockFetchContext()
|
| - : m_runner(WTF::wrapUnique(new scheduler::FakeWebTaskRunner)) {}
|
| -
|
| - std::unique_ptr<scheduler::FakeWebTaskRunner> m_runner;
|
| -};
|
| -
|
| -// Convenience class that registers a mocked URL load on construction, and
|
| -// unregisters it on destruction. This allows for a test to use constructs like
|
| -// ASSERT_TRUE() without needing to worry about unregistering the mocked URL
|
| -// load to avoid putting other tests into inconsistent states in case the
|
| -// assertion fails.
|
| -class ScopedRegisteredURL {
|
| - public:
|
| - ScopedRegisteredURL(const KURL& url,
|
| - const String& fileName = "cancelTest.html",
|
| - const String& mimeType = "text/html")
|
| - : m_url(url) {
|
| - URLTestHelpers::registerMockedURLLoad(m_url, fileName, mimeType);
|
| - }
|
| -
|
| - ~ScopedRegisteredURL() {
|
| - Platform::current()->getURLLoaderMockFactory()->unregisterURL(m_url);
|
| - }
|
| -
|
| - private:
|
| - KURL m_url;
|
| -};
|
| -
|
| -AtomicString buildContentRange(size_t rangeLength, size_t totalLength) {
|
| - return AtomicString(String("bytes 0-" + String::number(rangeLength) + "/" +
|
| - String::number(totalLength)));
|
| -}
|
| -
|
| -TEST(ImageResourceTest, MultipartImage) {
|
| - ResourceFetcher* fetcher =
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create());
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| -
|
| - // Emulate starting a real load, but don't expect any "real"
|
| - // WebURLLoaderClient callbacks.
|
| - ImageResource* cachedImage = ImageResource::create(ResourceRequest(testURL));
|
| - cachedImage->setIdentifier(createUniqueIdentifier());
|
| - fetcher->startLoad(cachedImage);
|
| -
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(cachedImage);
|
| - EXPECT_EQ(Resource::Pending, cachedImage->getStatus());
|
| -
|
| - // Send the multipart response. No image or data buffer is created. Note that
|
| - // the response must be routed through ResourceLoader to ensure the load is
|
| - // flagged as multipart.
|
| - ResourceResponse multipartResponse(KURL(), "multipart/x-mixed-replace", 0,
|
| - nullAtom, String());
|
| - multipartResponse.setMultipartBoundary("boundary", strlen("boundary"));
|
| - cachedImage->loader()->didReceiveResponse(
|
| - WrappedResourceResponse(multipartResponse), nullptr);
|
| - EXPECT_FALSE(cachedImage->resourceBuffer());
|
| - EXPECT_FALSE(cachedImage->getContent()->hasImage());
|
| - EXPECT_EQ(0, client->imageChangedCount());
|
| - EXPECT_FALSE(client->notifyFinishedCalled());
|
| - EXPECT_EQ("multipart/x-mixed-replace", cachedImage->response().mimeType());
|
| -
|
| - const char firstPart[] =
|
| - "--boundary\n"
|
| - "Content-Type: image/svg+xml\n\n";
|
| - cachedImage->appendData(firstPart, strlen(firstPart));
|
| - // Send the response for the first real part. No image or data buffer is
|
| - // created.
|
| - EXPECT_FALSE(cachedImage->resourceBuffer());
|
| - EXPECT_FALSE(cachedImage->getContent()->hasImage());
|
| - EXPECT_EQ(0, client->imageChangedCount());
|
| - EXPECT_FALSE(client->notifyFinishedCalled());
|
| - EXPECT_EQ("image/svg+xml", cachedImage->response().mimeType());
|
| -
|
| - const char secondPart[] =
|
| - "<svg xmlns='http://www.w3.org/2000/svg' width='1' height='1'><rect "
|
| - "width='1' height='1' fill='green'/></svg>\n";
|
| - // The first bytes arrive. The data buffer is created, but no image is
|
| - // created.
|
| - cachedImage->appendData(secondPart, strlen(secondPart));
|
| - EXPECT_TRUE(cachedImage->resourceBuffer());
|
| - EXPECT_FALSE(cachedImage->getContent()->hasImage());
|
| - EXPECT_EQ(0, client->imageChangedCount());
|
| - EXPECT_FALSE(client->notifyFinishedCalled());
|
| -
|
| - // Add a client to check an assertion error doesn't happen
|
| - // (crbug.com/630983).
|
| - Persistent<MockImageResourceClient> client2 =
|
| - new MockImageResourceClient(cachedImage);
|
| - EXPECT_EQ(0, client2->imageChangedCount());
|
| - EXPECT_FALSE(client2->notifyFinishedCalled());
|
| -
|
| - const char thirdPart[] = "--boundary";
|
| - cachedImage->appendData(thirdPart, strlen(thirdPart));
|
| - ASSERT_TRUE(cachedImage->resourceBuffer());
|
| - EXPECT_EQ(strlen(secondPart) - 1, cachedImage->resourceBuffer()->size());
|
| -
|
| - // This part finishes. The image is created, callbacks are sent, and the data
|
| - // buffer is cleared.
|
| - cachedImage->loader()->didFinishLoading(0.0, 0, 0);
|
| - EXPECT_TRUE(cachedImage->resourceBuffer());
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(1, cachedImage->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, cachedImage->getContent()->getImage()->height());
|
| - EXPECT_EQ(1, client->imageChangedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_EQ(1, client2->imageChangedCount());
|
| - EXPECT_TRUE(client2->notifyFinishedCalled());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, CancelOnDetach) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| -
|
| - ResourceFetcher* fetcher =
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create());
|
| -
|
| - // Emulate starting a real load.
|
| - ImageResource* cachedImage = ImageResource::create(ResourceRequest(testURL));
|
| - cachedImage->setIdentifier(createUniqueIdentifier());
|
| -
|
| - fetcher->startLoad(cachedImage);
|
| - memoryCache()->add(cachedImage);
|
| -
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(cachedImage);
|
| - EXPECT_EQ(Resource::Pending, cachedImage->getStatus());
|
| -
|
| - // The load should still be alive, but a timer should be started to cancel the
|
| - // load inside removeClient().
|
| - client->removeAsClient();
|
| - EXPECT_EQ(Resource::Pending, cachedImage->getStatus());
|
| - EXPECT_TRUE(memoryCache()->resourceForURL(testURL));
|
| -
|
| - // Trigger the cancel timer, ensure the load was cancelled and the resource
|
| - // was evicted from the cache.
|
| - blink::testing::runPendingTasks();
|
| - EXPECT_EQ(Resource::LoadError, cachedImage->getStatus());
|
| - EXPECT_FALSE(memoryCache()->resourceForURL(testURL));
|
| -}
|
| -
|
| -TEST(ImageResourceTest, DecodedDataRemainsWhileHasClients) {
|
| - ImageResource* cachedImage = ImageResource::create(ResourceRequest());
|
| - cachedImage->setStatus(Resource::Pending);
|
| -
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(cachedImage);
|
| -
|
| - // Send the image response.
|
| - cachedImage->responseReceived(
|
| - ResourceResponse(KURL(), "multipart/x-mixed-replace", 0, nullAtom,
|
| - String()),
|
| - nullptr);
|
| -
|
| - cachedImage->responseReceived(
|
| - ResourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage), nullAtom,
|
| - String()),
|
| - nullptr);
|
| - cachedImage->appendData(reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage));
|
| - EXPECT_NE(0u, cachedImage->encodedSizeMemoryUsageForTesting());
|
| - cachedImage->finish();
|
| - EXPECT_EQ(0u, cachedImage->encodedSizeMemoryUsageForTesting());
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| -
|
| - // The prune comes when the ImageResource still has clients. The image should
|
| - // not be deleted.
|
| - cachedImage->prune();
|
| - EXPECT_TRUE(cachedImage->isAlive());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull());
|
| -
|
| - // The ImageResource no longer has clients. The decoded image data should be
|
| - // deleted by prune.
|
| - client->removeAsClient();
|
| - cachedImage->prune();
|
| - EXPECT_FALSE(cachedImage->isAlive());
|
| - EXPECT_TRUE(cachedImage->getContent()->hasImage());
|
| - // TODO(hajimehoshi): Should check cachedImage doesn't have decoded image
|
| - // data.
|
| -}
|
| -
|
| -TEST(ImageResourceTest, UpdateBitmapImages) {
|
| - ImageResource* cachedImage = ImageResource::create(ResourceRequest());
|
| - cachedImage->setStatus(Resource::Pending);
|
| -
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(cachedImage);
|
| -
|
| - // Send the image response.
|
| - cachedImage->responseReceived(
|
| - ResourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage), nullAtom,
|
| - String()),
|
| - nullptr);
|
| - cachedImage->appendData(reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage));
|
| - cachedImage->finish();
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(2, client->imageChangedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinished) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| - ResourceRequest request = ResourceRequest(testURL);
|
| - request.setLoFiState(WebURLRequest::LoFiOn);
|
| - ImageResource* cachedImage = ImageResource::create(request);
|
| - cachedImage->setStatus(Resource::Pending);
|
| -
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(cachedImage);
|
| - ResourceFetcher* fetcher =
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create());
|
| -
|
| - // Send the image response.
|
| - ResourceResponse resourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage),
|
| - nullAtom, String());
|
| - resourceResponse.addHTTPHeaderField("chrome-proxy-content-transform",
|
| - "empty-image");
|
| -
|
| - cachedImage->responseReceived(resourceResponse, nullptr);
|
| - cachedImage->appendData(reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage));
|
| - cachedImage->finish();
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(2, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged());
|
| - // The client should have been notified that the image load completed.
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished());
|
| - EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(1, cachedImage->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, cachedImage->getContent()->getImage()->height());
|
| -
|
| - // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading.
|
| - cachedImage->reloadIfLoFiOrPlaceholderImage(fetcher, Resource::kReloadAlways);
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - EXPECT_FALSE(cachedImage->resourceBuffer());
|
| - EXPECT_FALSE(cachedImage->getContent()->hasImage());
|
| - EXPECT_EQ(3, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| -
|
| - cachedImage->loader()->didReceiveResponse(
|
| - WrappedResourceResponse(resourceResponse), nullptr);
|
| - cachedImage->loader()->didReceiveData(
|
| - reinterpret_cast<const char*>(kJpegImage2), sizeof(kJpegImage2));
|
| - cachedImage->loader()->didFinishLoading(0.0, sizeof(kJpegImage2),
|
| - sizeof(kJpegImage2));
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnLastImageChanged());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| -
|
| - // The client should not have been notified of completion again.
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished());
|
| -
|
| - EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(50, cachedImage->getContent()->getImage()->width());
|
| - EXPECT_EQ(50, cachedImage->getContent()->getImage()->height());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderDuringFetch) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| -
|
| - ResourceRequest request(testURL);
|
| - request.setLoFiState(WebURLRequest::LoFiOn);
|
| - FetchRequest fetchRequest(request, FetchInitiatorInfo());
|
| - ResourceFetcher* fetcher =
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create());
|
| -
|
| - ImageResource* cachedImage = ImageResource::fetch(fetchRequest, fetcher);
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(cachedImage);
|
| -
|
| - // Send the image response.
|
| - ResourceResponse initialResourceResponse(
|
| - testURL, "image/jpeg", sizeof(kJpegImage), nullAtom, String());
|
| - initialResourceResponse.addHTTPHeaderField("chrome-proxy", "q=low");
|
| -
|
| - cachedImage->loader()->didReceiveResponse(
|
| - WrappedResourceResponse(initialResourceResponse));
|
| - cachedImage->loader()->didReceiveData(
|
| - reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage));
|
| -
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(1, client->imageChangedCount());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged());
|
| - EXPECT_FALSE(client->notifyFinishedCalled());
|
| - EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(1, cachedImage->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, cachedImage->getContent()->getImage()->height());
|
| -
|
| - // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading.
|
| - cachedImage->reloadIfLoFiOrPlaceholderImage(fetcher, Resource::kReloadAlways);
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - EXPECT_FALSE(cachedImage->resourceBuffer());
|
| - EXPECT_FALSE(cachedImage->getContent()->hasImage());
|
| - EXPECT_EQ(2, client->imageChangedCount());
|
| - EXPECT_EQ(0U, client->encodedSizeOnLastImageChanged());
|
| - // The client should not have been notified of completion yet, since the image
|
| - // is still loading.
|
| - EXPECT_FALSE(client->notifyFinishedCalled());
|
| -
|
| - cachedImage->loader()->didReceiveResponse(
|
| - WrappedResourceResponse(ResourceResponse(
|
| - testURL, "image/jpeg", sizeof(kJpegImage2), nullAtom, String())),
|
| - nullptr);
|
| - cachedImage->loader()->didReceiveData(
|
| - reinterpret_cast<const char*>(kJpegImage2), sizeof(kJpegImage2));
|
| - cachedImage->loader()->didFinishLoading(0.0, sizeof(kJpegImage2),
|
| - sizeof(kJpegImage2));
|
| -
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnLastImageChanged());
|
| - // The client should have been notified of completion only after the reload
|
| - // completed.
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnNotifyFinished());
|
| - EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnImageNotifyFinished());
|
| - EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(50, cachedImage->getContent()->getImage()->width());
|
| - EXPECT_EQ(50, cachedImage->getContent()->getImage()->height());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderForPlaceholder) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| -
|
| - ResourceFetcher* fetcher =
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create());
|
| - FetchRequest request(testURL, FetchInitiatorInfo());
|
| - request.setAllowImagePlaceholder();
|
| - ImageResource* image = ImageResource::fetch(request, fetcher);
|
| - EXPECT_EQ(FetchRequest::AllowPlaceholder,
|
| - request.placeholderImageRequestType());
|
| - EXPECT_EQ("bytes=0-2047", image->resourceRequest().httpHeaderField("range"));
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(image);
|
| -
|
| - ResourceResponse response(testURL, "image/jpeg",
|
| - kJpegImageSubrangeWithDimensionsLength, nullAtom,
|
| - String());
|
| - response.setHTTPStatusCode(206);
|
| - response.setHTTPHeaderField(
|
| - "content-range", buildContentRange(kJpegImageSubrangeWithDimensionsLength,
|
| - sizeof(kJpegImage)));
|
| - image->loader()->didReceiveResponse(WrappedResourceResponse(response));
|
| - image->loader()->didReceiveData(reinterpret_cast<const char*>(kJpegImage),
|
| - kJpegImageSubrangeWithDimensionsLength);
|
| - image->loader()->didFinishLoading(0.0, kJpegImageSubrangeWithDimensionsLength,
|
| - kJpegImageSubrangeWithDimensionsLength);
|
| -
|
| - EXPECT_EQ(Resource::Cached, image->getStatus());
|
| - EXPECT_TRUE(image->isPlaceholder());
|
| -
|
| - image->reloadIfLoFiOrPlaceholderImage(fetcher, Resource::kReloadAlways);
|
| -
|
| - EXPECT_EQ(Resource::Pending, image->getStatus());
|
| - EXPECT_FALSE(image->isPlaceholder());
|
| - EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range"));
|
| - EXPECT_EQ(static_cast<int>(WebCachePolicy::BypassingCache),
|
| - static_cast<int>(image->resourceRequest().getCachePolicy()));
|
| -
|
| - image->loader()->cancel();
|
| -}
|
| -
|
| -TEST(ImageResourceTest, SVGImage) {
|
| - KURL url(ParsedURLString, "http://127.0.0.1:8000/foo");
|
| - ImageResource* imageResource = ImageResource::create(ResourceRequest(url));
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(imageResource);
|
| -
|
| - receiveResponse(imageResource, url, "image/svg+xml", kSvgImage,
|
| - strlen(kSvgImage));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(1, client->imageChangedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isBitmapImage());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, SuccessfulRevalidationJpeg) {
|
| - KURL url(ParsedURLString, "http://127.0.0.1:8000/foo");
|
| - ImageResource* imageResource = ImageResource::create(ResourceRequest(url));
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(imageResource);
|
| -
|
| - receiveResponse(imageResource, url, "image/jpeg",
|
| - reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(2, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->height());
|
| -
|
| - imageResource->setRevalidatingRequest(ResourceRequest(url));
|
| - ResourceResponse response;
|
| - response.setURL(url);
|
| - response.setHTTPStatusCode(304);
|
| -
|
| - imageResource->responseReceived(response, nullptr);
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(2, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->height());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, SuccessfulRevalidationSvg) {
|
| - KURL url(ParsedURLString, "http://127.0.0.1:8000/foo");
|
| - ImageResource* imageResource = ImageResource::create(ResourceRequest(url));
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(imageResource);
|
| -
|
| - receiveResponse(imageResource, url, "image/svg+xml", kSvgImage,
|
| - strlen(kSvgImage));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(1, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(200, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(200, imageResource->getContent()->getImage()->height());
|
| -
|
| - imageResource->setRevalidatingRequest(ResourceRequest(url));
|
| - ResourceResponse response;
|
| - response.setURL(url);
|
| - response.setHTTPStatusCode(304);
|
| - imageResource->responseReceived(response, nullptr);
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(1, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(200, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(200, imageResource->getContent()->getImage()->height());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FailedRevalidationJpegToJpeg) {
|
| - KURL url(ParsedURLString, "http://127.0.0.1:8000/foo");
|
| - ImageResource* imageResource = ImageResource::create(ResourceRequest(url));
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(imageResource);
|
| -
|
| - receiveResponse(imageResource, url, "image/jpeg",
|
| - reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(2, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->height());
|
| -
|
| - imageResource->setRevalidatingRequest(ResourceRequest(url));
|
| - receiveResponse(imageResource, url, "image/jpeg",
|
| - reinterpret_cast<const char*>(kJpegImage2),
|
| - sizeof(kJpegImage2));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(4, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(50, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(50, imageResource->getContent()->getImage()->height());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FailedRevalidationJpegToSvg) {
|
| - KURL url(ParsedURLString, "http://127.0.0.1:8000/foo");
|
| - ImageResource* imageResource = ImageResource::create(ResourceRequest(url));
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(imageResource);
|
| -
|
| - receiveResponse(imageResource, url, "image/jpeg",
|
| - reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(2, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->height());
|
| -
|
| - imageResource->setRevalidatingRequest(ResourceRequest(url));
|
| - receiveResponse(imageResource, url, "image/svg+xml", kSvgImage,
|
| - strlen(kSvgImage));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(3, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(200, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(200, imageResource->getContent()->getImage()->height());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FailedRevalidationSvgToJpeg) {
|
| - KURL url(ParsedURLString, "http://127.0.0.1:8000/foo");
|
| - ImageResource* imageResource = ImageResource::create(ResourceRequest(url));
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(imageResource);
|
| -
|
| - receiveResponse(imageResource, url, "image/svg+xml", kSvgImage,
|
| - strlen(kSvgImage));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(1, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(200, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(200, imageResource->getContent()->getImage()->height());
|
| -
|
| - imageResource->setRevalidatingRequest(ResourceRequest(url));
|
| - receiveResponse(imageResource, url, "image/jpeg",
|
| - reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(3, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->height());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FailedRevalidationSvgToSvg) {
|
| - KURL url(ParsedURLString, "http://127.0.0.1:8000/foo");
|
| - ImageResource* imageResource = ImageResource::create(ResourceRequest(url));
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(imageResource);
|
| -
|
| - receiveResponse(imageResource, url, "image/svg+xml", kSvgImage,
|
| - strlen(kSvgImage));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(1, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(200, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(200, imageResource->getContent()->getImage()->height());
|
| -
|
| - imageResource->setRevalidatingRequest(ResourceRequest(url));
|
| - receiveResponse(imageResource, url, "image/svg+xml", kSvgImage2,
|
| - strlen(kSvgImage2));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(2, client->imageChangedCount());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(300, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(300, imageResource->getContent()->getImage()->height());
|
| -}
|
| -
|
| -// Tests for pruning.
|
| -
|
| -TEST(ImageResourceTest, AddClientAfterPrune) {
|
| - KURL url(ParsedURLString, "http://127.0.0.1:8000/foo");
|
| - ImageResource* imageResource = ImageResource::create(ResourceRequest(url));
|
| -
|
| - // Adds a ResourceClient but not ImageResourceObserver.
|
| - Persistent<MockResourceClient> client1 =
|
| - new MockResourceClient(imageResource);
|
| -
|
| - receiveResponse(imageResource, url, "image/jpeg",
|
| - reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage));
|
| -
|
| - EXPECT_FALSE(imageResource->errorOccurred());
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->height());
|
| - EXPECT_TRUE(client1->notifyFinishedCalled());
|
| -
|
| - client1->removeAsClient();
|
| -
|
| - EXPECT_FALSE(imageResource->isAlive());
|
| -
|
| - imageResource->prune();
|
| -
|
| - EXPECT_TRUE(imageResource->getContent()->hasImage());
|
| -
|
| - // Re-adds a ResourceClient but not ImageResourceObserver.
|
| - Persistent<MockResourceClient> client2 =
|
| - new MockResourceClient(imageResource);
|
| -
|
| - ASSERT_TRUE(imageResource->getContent()->hasImage());
|
| - EXPECT_FALSE(imageResource->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, imageResource->getContent()->getImage()->height());
|
| - EXPECT_TRUE(client2->notifyFinishedCalled());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, CancelOnDecodeError) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| -
|
| - ResourceFetcher* fetcher =
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create());
|
| - FetchRequest request(testURL, FetchInitiatorInfo());
|
| - ImageResource* cachedImage = ImageResource::fetch(request, fetcher);
|
| -
|
| - cachedImage->loader()->didReceiveResponse(
|
| - WrappedResourceResponse(
|
| - ResourceResponse(testURL, "image/jpeg", 18, nullAtom, String())),
|
| - nullptr);
|
| - cachedImage->loader()->didReceiveData("notactuallyanimage", 18);
|
| - EXPECT_EQ(Resource::DecodeError, cachedImage->getStatus());
|
| - EXPECT_FALSE(cachedImage->isLoading());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FetchDisallowPlaceholder) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| -
|
| - FetchRequest request(testURL, FetchInitiatorInfo());
|
| - ImageResource* image = ImageResource::fetch(
|
| - request,
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create()));
|
| - EXPECT_EQ(FetchRequest::DisallowPlaceholder,
|
| - request.placeholderImageRequestType());
|
| - EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range"));
|
| - EXPECT_FALSE(image->isPlaceholder());
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(image);
|
| -
|
| - image->loader()->didReceiveResponse(
|
| - WrappedResourceResponse(ResourceResponse(
|
| - testURL, "image/jpeg", sizeof(kJpegImage), nullAtom, String())));
|
| - image->loader()->didReceiveData(reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage));
|
| - image->loader()->didFinishLoading(0.0, sizeof(kJpegImage),
|
| - sizeof(kJpegImage));
|
| -
|
| - EXPECT_EQ(Resource::Cached, image->getStatus());
|
| - EXPECT_EQ(sizeof(kJpegImage), image->encodedSize());
|
| - EXPECT_FALSE(image->isPlaceholder());
|
| - EXPECT_LT(0, client->imageChangedCount());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished());
|
| -
|
| - ASSERT_TRUE(image->getContent()->hasImage());
|
| - EXPECT_EQ(1, image->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, image->getContent()->getImage()->height());
|
| - EXPECT_TRUE(image->getContent()->getImage()->isBitmapImage());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FetchAllowPlaceholderDataURL) {
|
| - KURL testURL(ParsedURLString,
|
| - "data:image/jpeg;base64," +
|
| - base64Encode(reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage)));
|
| - FetchRequest request(testURL, FetchInitiatorInfo());
|
| - request.setAllowImagePlaceholder();
|
| - ImageResource* image = ImageResource::fetch(
|
| - request,
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create()));
|
| - EXPECT_EQ(FetchRequest::DisallowPlaceholder,
|
| - request.placeholderImageRequestType());
|
| - EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range"));
|
| - EXPECT_FALSE(image->isPlaceholder());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FetchAllowPlaceholderPostRequest) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| - ResourceRequest resourceRequest(testURL);
|
| - resourceRequest.setHTTPMethod("POST");
|
| - FetchRequest request(resourceRequest, FetchInitiatorInfo());
|
| - request.setAllowImagePlaceholder();
|
| - ImageResource* image = ImageResource::fetch(
|
| - request,
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create()));
|
| - EXPECT_EQ(FetchRequest::DisallowPlaceholder,
|
| - request.placeholderImageRequestType());
|
| - EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range"));
|
| - EXPECT_FALSE(image->isPlaceholder());
|
| -
|
| - image->loader()->cancel();
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FetchAllowPlaceholderExistingRangeHeader) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| - ResourceRequest resourceRequest(testURL);
|
| - resourceRequest.setHTTPHeaderField("range", "bytes=128-255");
|
| - FetchRequest request(resourceRequest, FetchInitiatorInfo());
|
| - request.setAllowImagePlaceholder();
|
| - ImageResource* image = ImageResource::fetch(
|
| - request,
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create()));
|
| - EXPECT_EQ(FetchRequest::DisallowPlaceholder,
|
| - request.placeholderImageRequestType());
|
| - EXPECT_EQ("bytes=128-255", image->resourceRequest().httpHeaderField("range"));
|
| - EXPECT_FALSE(image->isPlaceholder());
|
| -
|
| - image->loader()->cancel();
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FetchAllowPlaceholderSuccessful) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| -
|
| - FetchRequest request(testURL, FetchInitiatorInfo());
|
| - request.setAllowImagePlaceholder();
|
| - ImageResource* image = ImageResource::fetch(
|
| - request,
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create()));
|
| - EXPECT_EQ(FetchRequest::AllowPlaceholder,
|
| - request.placeholderImageRequestType());
|
| - EXPECT_EQ("bytes=0-2047", image->resourceRequest().httpHeaderField("range"));
|
| - EXPECT_TRUE(image->isPlaceholder());
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(image);
|
| -
|
| - ResourceResponse response(testURL, "image/jpeg",
|
| - kJpegImageSubrangeWithDimensionsLength, nullAtom,
|
| - String());
|
| - response.setHTTPStatusCode(206);
|
| - response.setHTTPHeaderField(
|
| - "content-range", buildContentRange(kJpegImageSubrangeWithDimensionsLength,
|
| - sizeof(kJpegImage)));
|
| - image->loader()->didReceiveResponse(WrappedResourceResponse(response));
|
| - image->loader()->didReceiveData(reinterpret_cast<const char*>(kJpegImage),
|
| - kJpegImageSubrangeWithDimensionsLength);
|
| - image->loader()->didFinishLoading(0.0, kJpegImageSubrangeWithDimensionsLength,
|
| - kJpegImageSubrangeWithDimensionsLength);
|
| -
|
| - EXPECT_EQ(Resource::Cached, image->getStatus());
|
| - EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, image->encodedSize());
|
| - EXPECT_TRUE(image->isPlaceholder());
|
| - EXPECT_LT(0, client->imageChangedCount());
|
| - EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength,
|
| - client->encodedSizeOnLastImageChanged());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength,
|
| - client->encodedSizeOnNotifyFinished());
|
| - EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength,
|
| - client->encodedSizeOnImageNotifyFinished());
|
| -
|
| - ASSERT_TRUE(image->getContent()->hasImage());
|
| - EXPECT_EQ(1, image->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, image->getContent()->getImage()->height());
|
| - EXPECT_FALSE(image->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_FALSE(image->getContent()->getImage()->isSVGImage());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessful) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| -
|
| - FetchRequest request(testURL, FetchInitiatorInfo());
|
| - request.setAllowImagePlaceholder();
|
| - ImageResource* image = ImageResource::fetch(
|
| - request,
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create()));
|
| - EXPECT_EQ(FetchRequest::AllowPlaceholder,
|
| - request.placeholderImageRequestType());
|
| - EXPECT_EQ("bytes=0-2047", image->resourceRequest().httpHeaderField("range"));
|
| - EXPECT_TRUE(image->isPlaceholder());
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(image);
|
| -
|
| - const char kBadData[] = "notanimageresponse";
|
| -
|
| - image->loader()->didReceiveResponse(
|
| - WrappedResourceResponse(ResourceResponse(
|
| - testURL, "image/jpeg", sizeof(kBadData), nullAtom, String())));
|
| - image->loader()->didReceiveData(kBadData, sizeof(kBadData));
|
| -
|
| - // The dimensions could not be extracted, so the full original image should be
|
| - // loading.
|
| - EXPECT_EQ(Resource::Pending, image->getStatus());
|
| - EXPECT_FALSE(image->isPlaceholder());
|
| - EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range"));
|
| - EXPECT_EQ(static_cast<int>(WebCachePolicy::BypassingCache),
|
| - static_cast<int>(image->resourceRequest().getCachePolicy()));
|
| - EXPECT_FALSE(client->notifyFinishedCalled());
|
| - EXPECT_EQ(0, client->imageNotifyFinishedCount());
|
| -
|
| - image->loader()->didReceiveResponse(
|
| - WrappedResourceResponse(ResourceResponse(
|
| - testURL, "image/jpeg", sizeof(kJpegImage), nullAtom, String())));
|
| - image->loader()->didReceiveData(reinterpret_cast<const char*>(kJpegImage),
|
| - sizeof(kJpegImage));
|
| - image->loader()->didFinishLoading(0.0, sizeof(kJpegImage),
|
| - sizeof(kJpegImage));
|
| -
|
| - EXPECT_EQ(Resource::Cached, image->getStatus());
|
| - EXPECT_EQ(sizeof(kJpegImage), image->encodedSize());
|
| - EXPECT_FALSE(image->isPlaceholder());
|
| - EXPECT_LT(0, client->imageChangedCount());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_EQ(1, client->imageNotifyFinishedCount());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished());
|
| - EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished());
|
| -
|
| - ASSERT_TRUE(image->getContent()->hasImage());
|
| - EXPECT_EQ(1, image->getContent()->getImage()->width());
|
| - EXPECT_EQ(1, image->getContent()->getImage()->height());
|
| - EXPECT_TRUE(image->getContent()->getImage()->isBitmapImage());
|
| -}
|
| -
|
| -TEST(ImageResourceTest, FetchAllowPlaceholderThenDisallowPlaceholder) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| -
|
| - ResourceFetcher* fetcher =
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create());
|
| - FetchRequest placeholderRequest(testURL, FetchInitiatorInfo());
|
| - placeholderRequest.setAllowImagePlaceholder();
|
| - ImageResource* image = ImageResource::fetch(placeholderRequest, fetcher);
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(image);
|
| -
|
| - FetchRequest nonPlaceholderRequest(testURL, FetchInitiatorInfo());
|
| - ImageResource* secondImage =
|
| - ImageResource::fetch(nonPlaceholderRequest, fetcher);
|
| - EXPECT_EQ(image, secondImage);
|
| - EXPECT_EQ(Resource::Pending, image->getStatus());
|
| - EXPECT_FALSE(image->isPlaceholder());
|
| - EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range"));
|
| - EXPECT_EQ(static_cast<int>(WebCachePolicy::UseProtocolCachePolicy),
|
| - static_cast<int>(image->resourceRequest().getCachePolicy()));
|
| - EXPECT_FALSE(client->notifyFinishedCalled());
|
| -
|
| - image->loader()->cancel();
|
| -}
|
| -
|
| -TEST(ImageResourceTest,
|
| - FetchAllowPlaceholderThenDisallowPlaceholderAfterLoaded) {
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - ScopedRegisteredURL scopedRegisteredURL(testURL);
|
| -
|
| - ResourceFetcher* fetcher =
|
| - ResourceFetcher::create(ImageResourceTestMockFetchContext::create());
|
| - FetchRequest placeholderRequest(testURL, FetchInitiatorInfo());
|
| - placeholderRequest.setAllowImagePlaceholder();
|
| - ImageResource* image = ImageResource::fetch(placeholderRequest, fetcher);
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(image);
|
| -
|
| - ResourceResponse response(testURL, "image/jpeg",
|
| - kJpegImageSubrangeWithDimensionsLength, nullAtom,
|
| - String());
|
| - response.setHTTPStatusCode(206);
|
| - response.setHTTPHeaderField(
|
| - "content-range", buildContentRange(kJpegImageSubrangeWithDimensionsLength,
|
| - sizeof(kJpegImage)));
|
| - image->loader()->didReceiveResponse(WrappedResourceResponse(response));
|
| - image->loader()->didReceiveData(reinterpret_cast<const char*>(kJpegImage),
|
| - kJpegImageSubrangeWithDimensionsLength);
|
| - image->loader()->didFinishLoading(0.0, kJpegImageSubrangeWithDimensionsLength,
|
| - kJpegImageSubrangeWithDimensionsLength);
|
| -
|
| - EXPECT_EQ(Resource::Cached, image->getStatus());
|
| - EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, image->encodedSize());
|
| - EXPECT_TRUE(image->isPlaceholder());
|
| - EXPECT_LT(0, client->imageChangedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| -
|
| - FetchRequest nonPlaceholderRequest(testURL, FetchInitiatorInfo());
|
| - ImageResource* secondImage =
|
| - ImageResource::fetch(nonPlaceholderRequest, fetcher);
|
| - EXPECT_EQ(image, secondImage);
|
| - EXPECT_EQ(Resource::Pending, image->getStatus());
|
| - EXPECT_FALSE(image->isPlaceholder());
|
| - EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range"));
|
| - EXPECT_EQ(static_cast<int>(WebCachePolicy::UseProtocolCachePolicy),
|
| - static_cast<int>(image->resourceRequest().getCachePolicy()));
|
| -
|
| - image->loader()->cancel();
|
| -}
|
| -
|
| -TEST(ImageResourceTest, PeriodicFlushTest) {
|
| - TestingPlatformSupportWithMockScheduler platform;
|
| - KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html");
|
| - URLTestHelpers::registerMockedURLLoad(testURL, "cancelTest.html",
|
| - "text/html");
|
| - ResourceRequest request = ResourceRequest(testURL);
|
| - ImageResource* cachedImage = ImageResource::create(request);
|
| - cachedImage->setStatus(Resource::Pending);
|
| -
|
| - Persistent<MockImageResourceClient> client =
|
| - new MockImageResourceClient(cachedImage);
|
| -
|
| - // Send the image response.
|
| - ResourceResponse resourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage2),
|
| - nullAtom, String());
|
| - resourceResponse.addHTTPHeaderField("chrome-proxy", "q=low");
|
| -
|
| - cachedImage->responseReceived(resourceResponse, nullptr);
|
| -
|
| - // This is number is sufficiently large amount of bytes necessary for the
|
| - // image to be created (since the size is known). This was determined by
|
| - // appending one byte at a time (with flushes) until the image was decoded.
|
| - size_t meaningfulImageSize = 280;
|
| - cachedImage->appendData(reinterpret_cast<const char*>(kJpegImage2),
|
| - meaningfulImageSize);
|
| - size_t bytesSent = meaningfulImageSize;
|
| -
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - EXPECT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_EQ(1, client->imageChangedCount());
|
| -
|
| - platform.runForPeriodSeconds(1.);
|
| - platform.advanceClockSeconds(1.);
|
| -
|
| - // Sanity check that we created an image after appending |meaningfulImageSize|
|
| - // bytes just once.
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_EQ(1, client->imageChangedCount());
|
| -
|
| - for (int flushCount = 1; flushCount <= 3; ++flushCount) {
|
| - // For each of the iteration that appends data, we don't expect
|
| - // |imageChangeCount()| to change, since the time is adjusted by 0.2001
|
| - // seconds (it's greater than 0.2 to avoid double precision problems).
|
| - // After 5 appends, we breach the flush interval and the flush count
|
| - // increases.
|
| - for (int i = 0; i < 5; ++i) {
|
| - SCOPED_TRACE(i);
|
| - cachedImage->appendData(
|
| - reinterpret_cast<const char*>(kJpegImage2) + bytesSent, 1);
|
| -
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_EQ(flushCount, client->imageChangedCount());
|
| -
|
| - ++bytesSent;
|
| - platform.runForPeriodSeconds(0.2001);
|
| - }
|
| - }
|
| -
|
| - // Increasing time by a large number only causes one extra flush.
|
| - platform.runForPeriodSeconds(10.);
|
| - platform.advanceClockSeconds(10.);
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(4, client->imageChangedCount());
|
| -
|
| - // Append the rest of the data and finish (which causes another flush).
|
| - cachedImage->appendData(
|
| - reinterpret_cast<const char*>(kJpegImage2) + bytesSent,
|
| - sizeof(kJpegImage2) - bytesSent);
|
| - cachedImage->finish();
|
| -
|
| - EXPECT_FALSE(cachedImage->errorOccurred());
|
| - ASSERT_TRUE(cachedImage->getContent()->hasImage());
|
| - EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull());
|
| - EXPECT_EQ(5, client->imageChangedCount());
|
| - EXPECT_TRUE(client->notifyFinishedCalled());
|
| - EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage());
|
| - EXPECT_EQ(50, cachedImage->getContent()->getImage()->width());
|
| - EXPECT_EQ(50, cachedImage->getContent()->getImage()->height());
|
| -
|
| - WTF::setTimeFunctionsForTesting(nullptr);
|
| -}
|
| -
|
| -} // namespace
|
| -} // namespace blink
|
|
|