示例#1
0
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", jpegImage());

  EXPECT_FALSE(imageResource->errorOccurred());
  ASSERT_TRUE(imageResource->hasImage());
  EXPECT_FALSE(imageResource->getImage()->isNull());
  EXPECT_EQ(1, imageResource->getImage()->width());
  EXPECT_EQ(1, imageResource->getImage()->height());
  EXPECT_TRUE(client1->notifyFinishedCalled());

  client1->removeAsClient();

  EXPECT_FALSE(imageResource->isAlive());

  imageResource->prune();

  EXPECT_TRUE(imageResource->hasImage());

  // Re-adds a ResourceClient but not ImageResourceObserver.
  Persistent<MockResourceClient> client2 =
      new MockResourceClient(imageResource);

  ASSERT_TRUE(imageResource->hasImage());
  EXPECT_FALSE(imageResource->getImage()->isNull());
  EXPECT_EQ(1, imageResource->getImage()->width());
  EXPECT_EQ(1, imageResource->getImage()->height());
  EXPECT_TRUE(client2->notifyFinishedCalled());
}
示例#2
0
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);

  Vector<unsigned char> jpeg = jpegImage();
  cachedImage->responseReceived(
      ResourceResponse(KURL(), "image/jpeg", jpeg.size(), nullAtom, String()),
      nullptr);
  cachedImage->appendData(reinterpret_cast<const char*>(jpeg.data()),
                          jpeg.size());
  EXPECT_NE(0u, cachedImage->encodedSizeMemoryUsageForTesting());
  cachedImage->finish();
  EXPECT_EQ(0u, cachedImage->encodedSizeMemoryUsageForTesting());
  EXPECT_FALSE(cachedImage->errorOccurred());
  ASSERT_TRUE(cachedImage->hasImage());
  EXPECT_FALSE(cachedImage->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->hasImage());
  EXPECT_FALSE(cachedImage->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->hasImage());
  // TODO(hajimehoshi): Should check cachedImage doesn't have decoded image
  // data.
}