| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 } | 219 } |
| 220 | 220 |
| 221 TEST(ImageResourceTest, MultipartImage) { | 221 TEST(ImageResourceTest, MultipartImage) { |
| 222 ResourceFetcher* fetcher = | 222 ResourceFetcher* fetcher = |
| 223 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); | 223 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); |
| 224 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 224 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 225 ScopedRegisteredURL scopedRegisteredURL(testURL); | 225 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 226 | 226 |
| 227 // Emulate starting a real load, but don't expect any "real" | 227 // Emulate starting a real load, but don't expect any "real" |
| 228 // WebURLLoaderClient callbacks. | 228 // WebURLLoaderClient callbacks. |
| 229 ImageResource* cachedImage = ImageResource::create(ResourceRequest(testURL)); | 229 ImageResource* imageResource = |
| 230 cachedImage->setIdentifier(createUniqueIdentifier()); | 230 ImageResource::create(ResourceRequest(testURL)); |
| 231 fetcher->startLoad(cachedImage); | 231 imageResource->setIdentifier(createUniqueIdentifier()); |
| 232 fetcher->startLoad(imageResource); |
| 232 | 233 |
| 233 Persistent<MockImageResourceClient> client = | 234 Persistent<MockImageResourceClient> client = |
| 234 new MockImageResourceClient(cachedImage); | 235 new MockImageResourceClient(imageResource); |
| 235 EXPECT_EQ(Resource::Pending, cachedImage->getStatus()); | 236 EXPECT_EQ(Resource::Pending, imageResource->getStatus()); |
| 236 | 237 |
| 237 // Send the multipart response. No image or data buffer is created. Note that | 238 // Send the multipart response. No image or data buffer is created. Note that |
| 238 // the response must be routed through ResourceLoader to ensure the load is | 239 // the response must be routed through ResourceLoader to ensure the load is |
| 239 // flagged as multipart. | 240 // flagged as multipart. |
| 240 ResourceResponse multipartResponse(KURL(), "multipart/x-mixed-replace", 0, | 241 ResourceResponse multipartResponse(KURL(), "multipart/x-mixed-replace", 0, |
| 241 nullAtom, String()); | 242 nullAtom, String()); |
| 242 multipartResponse.setMultipartBoundary("boundary", strlen("boundary")); | 243 multipartResponse.setMultipartBoundary("boundary", strlen("boundary")); |
| 243 cachedImage->loader()->didReceiveResponse( | 244 imageResource->loader()->didReceiveResponse( |
| 244 WrappedResourceResponse(multipartResponse), nullptr); | 245 WrappedResourceResponse(multipartResponse), nullptr); |
| 245 EXPECT_FALSE(cachedImage->resourceBuffer()); | 246 EXPECT_FALSE(imageResource->resourceBuffer()); |
| 246 EXPECT_FALSE(cachedImage->getContent()->hasImage()); | 247 EXPECT_FALSE(imageResource->getContent()->hasImage()); |
| 247 EXPECT_EQ(0, client->imageChangedCount()); | 248 EXPECT_EQ(0, client->imageChangedCount()); |
| 248 EXPECT_FALSE(client->notifyFinishedCalled()); | 249 EXPECT_FALSE(client->notifyFinishedCalled()); |
| 249 EXPECT_EQ("multipart/x-mixed-replace", cachedImage->response().mimeType()); | 250 EXPECT_EQ("multipart/x-mixed-replace", imageResource->response().mimeType()); |
| 250 | 251 |
| 251 const char firstPart[] = | 252 const char firstPart[] = |
| 252 "--boundary\n" | 253 "--boundary\n" |
| 253 "Content-Type: image/svg+xml\n\n"; | 254 "Content-Type: image/svg+xml\n\n"; |
| 254 cachedImage->appendData(firstPart, strlen(firstPart)); | 255 imageResource->appendData(firstPart, strlen(firstPart)); |
| 255 // Send the response for the first real part. No image or data buffer is | 256 // Send the response for the first real part. No image or data buffer is |
| 256 // created. | 257 // created. |
| 257 EXPECT_FALSE(cachedImage->resourceBuffer()); | 258 EXPECT_FALSE(imageResource->resourceBuffer()); |
| 258 EXPECT_FALSE(cachedImage->getContent()->hasImage()); | 259 EXPECT_FALSE(imageResource->getContent()->hasImage()); |
| 259 EXPECT_EQ(0, client->imageChangedCount()); | 260 EXPECT_EQ(0, client->imageChangedCount()); |
| 260 EXPECT_FALSE(client->notifyFinishedCalled()); | 261 EXPECT_FALSE(client->notifyFinishedCalled()); |
| 261 EXPECT_EQ("image/svg+xml", cachedImage->response().mimeType()); | 262 EXPECT_EQ("image/svg+xml", imageResource->response().mimeType()); |
| 262 | 263 |
| 263 const char secondPart[] = | 264 const char secondPart[] = |
| 264 "<svg xmlns='http://www.w3.org/2000/svg' width='1' height='1'><rect " | 265 "<svg xmlns='http://www.w3.org/2000/svg' width='1' height='1'><rect " |
| 265 "width='1' height='1' fill='green'/></svg>\n"; | 266 "width='1' height='1' fill='green'/></svg>\n"; |
| 266 // The first bytes arrive. The data buffer is created, but no image is | 267 // The first bytes arrive. The data buffer is created, but no image is |
| 267 // created. | 268 // created. |
| 268 cachedImage->appendData(secondPart, strlen(secondPart)); | 269 imageResource->appendData(secondPart, strlen(secondPart)); |
| 269 EXPECT_TRUE(cachedImage->resourceBuffer()); | 270 EXPECT_TRUE(imageResource->resourceBuffer()); |
| 270 EXPECT_FALSE(cachedImage->getContent()->hasImage()); | 271 EXPECT_FALSE(imageResource->getContent()->hasImage()); |
| 271 EXPECT_EQ(0, client->imageChangedCount()); | 272 EXPECT_EQ(0, client->imageChangedCount()); |
| 272 EXPECT_FALSE(client->notifyFinishedCalled()); | 273 EXPECT_FALSE(client->notifyFinishedCalled()); |
| 273 | 274 |
| 274 // Add a client to check an assertion error doesn't happen | 275 // Add a client to check an assertion error doesn't happen |
| 275 // (crbug.com/630983). | 276 // (crbug.com/630983). |
| 276 Persistent<MockImageResourceClient> client2 = | 277 Persistent<MockImageResourceClient> client2 = |
| 277 new MockImageResourceClient(cachedImage); | 278 new MockImageResourceClient(imageResource); |
| 278 EXPECT_EQ(0, client2->imageChangedCount()); | 279 EXPECT_EQ(0, client2->imageChangedCount()); |
| 279 EXPECT_FALSE(client2->notifyFinishedCalled()); | 280 EXPECT_FALSE(client2->notifyFinishedCalled()); |
| 280 | 281 |
| 281 const char thirdPart[] = "--boundary"; | 282 const char thirdPart[] = "--boundary"; |
| 282 cachedImage->appendData(thirdPart, strlen(thirdPart)); | 283 imageResource->appendData(thirdPart, strlen(thirdPart)); |
| 283 ASSERT_TRUE(cachedImage->resourceBuffer()); | 284 ASSERT_TRUE(imageResource->resourceBuffer()); |
| 284 EXPECT_EQ(strlen(secondPart) - 1, cachedImage->resourceBuffer()->size()); | 285 EXPECT_EQ(strlen(secondPart) - 1, imageResource->resourceBuffer()->size()); |
| 285 | 286 |
| 286 // This part finishes. The image is created, callbacks are sent, and the data | 287 // This part finishes. The image is created, callbacks are sent, and the data |
| 287 // buffer is cleared. | 288 // buffer is cleared. |
| 288 cachedImage->loader()->didFinishLoading(0.0, 0, 0); | 289 imageResource->loader()->didFinishLoading(0.0, 0, 0); |
| 289 EXPECT_TRUE(cachedImage->resourceBuffer()); | 290 EXPECT_TRUE(imageResource->resourceBuffer()); |
| 290 EXPECT_FALSE(cachedImage->errorOccurred()); | 291 EXPECT_FALSE(imageResource->errorOccurred()); |
| 291 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 292 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 292 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 293 EXPECT_FALSE(imageResource->getContent()->getImage()->isNull()); |
| 293 EXPECT_EQ(1, cachedImage->getContent()->getImage()->width()); | 294 EXPECT_EQ(1, imageResource->getContent()->getImage()->width()); |
| 294 EXPECT_EQ(1, cachedImage->getContent()->getImage()->height()); | 295 EXPECT_EQ(1, imageResource->getContent()->getImage()->height()); |
| 295 EXPECT_EQ(1, client->imageChangedCount()); | 296 EXPECT_EQ(1, client->imageChangedCount()); |
| 296 EXPECT_TRUE(client->notifyFinishedCalled()); | 297 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 297 EXPECT_EQ(1, client2->imageChangedCount()); | 298 EXPECT_EQ(1, client2->imageChangedCount()); |
| 298 EXPECT_TRUE(client2->notifyFinishedCalled()); | 299 EXPECT_TRUE(client2->notifyFinishedCalled()); |
| 299 } | 300 } |
| 300 | 301 |
| 301 TEST(ImageResourceTest, CancelOnDetach) { | 302 TEST(ImageResourceTest, CancelOnDetach) { |
| 302 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 303 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 303 ScopedRegisteredURL scopedRegisteredURL(testURL); | 304 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 304 | 305 |
| 305 ResourceFetcher* fetcher = | 306 ResourceFetcher* fetcher = |
| 306 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); | 307 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); |
| 307 | 308 |
| 308 // Emulate starting a real load. | 309 // Emulate starting a real load. |
| 309 ImageResource* cachedImage = ImageResource::create(ResourceRequest(testURL)); | 310 ImageResource* imageResource = |
| 310 cachedImage->setIdentifier(createUniqueIdentifier()); | 311 ImageResource::create(ResourceRequest(testURL)); |
| 312 imageResource->setIdentifier(createUniqueIdentifier()); |
| 311 | 313 |
| 312 fetcher->startLoad(cachedImage); | 314 fetcher->startLoad(imageResource); |
| 313 memoryCache()->add(cachedImage); | 315 memoryCache()->add(imageResource); |
| 314 | 316 |
| 315 Persistent<MockImageResourceClient> client = | 317 Persistent<MockImageResourceClient> client = |
| 316 new MockImageResourceClient(cachedImage); | 318 new MockImageResourceClient(imageResource); |
| 317 EXPECT_EQ(Resource::Pending, cachedImage->getStatus()); | 319 EXPECT_EQ(Resource::Pending, imageResource->getStatus()); |
| 318 | 320 |
| 319 // The load should still be alive, but a timer should be started to cancel the | 321 // The load should still be alive, but a timer should be started to cancel the |
| 320 // load inside removeClient(). | 322 // load inside removeClient(). |
| 321 client->removeAsClient(); | 323 client->removeAsClient(); |
| 322 EXPECT_EQ(Resource::Pending, cachedImage->getStatus()); | 324 EXPECT_EQ(Resource::Pending, imageResource->getStatus()); |
| 323 EXPECT_TRUE(memoryCache()->resourceForURL(testURL)); | 325 EXPECT_TRUE(memoryCache()->resourceForURL(testURL)); |
| 324 | 326 |
| 325 // Trigger the cancel timer, ensure the load was cancelled and the resource | 327 // Trigger the cancel timer, ensure the load was cancelled and the resource |
| 326 // was evicted from the cache. | 328 // was evicted from the cache. |
| 327 blink::testing::runPendingTasks(); | 329 blink::testing::runPendingTasks(); |
| 328 EXPECT_EQ(Resource::LoadError, cachedImage->getStatus()); | 330 EXPECT_EQ(Resource::LoadError, imageResource->getStatus()); |
| 329 EXPECT_FALSE(memoryCache()->resourceForURL(testURL)); | 331 EXPECT_FALSE(memoryCache()->resourceForURL(testURL)); |
| 330 } | 332 } |
| 331 | 333 |
| 332 TEST(ImageResourceTest, DecodedDataRemainsWhileHasClients) { | 334 TEST(ImageResourceTest, DecodedDataRemainsWhileHasClients) { |
| 333 ImageResource* cachedImage = ImageResource::create(ResourceRequest()); | 335 ImageResource* imageResource = ImageResource::create(ResourceRequest()); |
| 334 cachedImage->setStatus(Resource::Pending); | 336 imageResource->setStatus(Resource::Pending); |
| 335 | 337 |
| 336 Persistent<MockImageResourceClient> client = | 338 Persistent<MockImageResourceClient> client = |
| 337 new MockImageResourceClient(cachedImage); | 339 new MockImageResourceClient(imageResource); |
| 338 | 340 |
| 339 // Send the image response. | 341 // Send the image response. |
| 340 cachedImage->responseReceived( | 342 imageResource->responseReceived( |
| 341 ResourceResponse(KURL(), "multipart/x-mixed-replace", 0, nullAtom, | 343 ResourceResponse(KURL(), "multipart/x-mixed-replace", 0, nullAtom, |
| 342 String()), | 344 String()), |
| 343 nullptr); | 345 nullptr); |
| 344 | 346 |
| 345 cachedImage->responseReceived( | 347 imageResource->responseReceived( |
| 346 ResourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage), nullAtom, | 348 ResourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage), nullAtom, |
| 347 String()), | 349 String()), |
| 348 nullptr); | 350 nullptr); |
| 349 cachedImage->appendData(reinterpret_cast<const char*>(kJpegImage), | 351 imageResource->appendData(reinterpret_cast<const char*>(kJpegImage), |
| 350 sizeof(kJpegImage)); | 352 sizeof(kJpegImage)); |
| 351 EXPECT_NE(0u, cachedImage->encodedSizeMemoryUsageForTesting()); | 353 EXPECT_NE(0u, imageResource->encodedSizeMemoryUsageForTesting()); |
| 352 cachedImage->finish(); | 354 imageResource->finish(); |
| 353 EXPECT_EQ(0u, cachedImage->encodedSizeMemoryUsageForTesting()); | 355 EXPECT_EQ(0u, imageResource->encodedSizeMemoryUsageForTesting()); |
| 354 EXPECT_FALSE(cachedImage->errorOccurred()); | 356 EXPECT_FALSE(imageResource->errorOccurred()); |
| 355 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 357 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 356 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 358 EXPECT_FALSE(imageResource->getContent()->getImage()->isNull()); |
| 357 EXPECT_TRUE(client->notifyFinishedCalled()); | 359 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 358 | 360 |
| 359 // The prune comes when the ImageResource still has clients. The image should | 361 // The prune comes when the ImageResource still has clients. The image should |
| 360 // not be deleted. | 362 // not be deleted. |
| 361 cachedImage->prune(); | 363 imageResource->prune(); |
| 362 EXPECT_TRUE(cachedImage->isAlive()); | 364 EXPECT_TRUE(imageResource->isAlive()); |
| 363 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 365 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 364 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 366 EXPECT_FALSE(imageResource->getContent()->getImage()->isNull()); |
| 365 | 367 |
| 366 // The ImageResource no longer has clients. The decoded image data should be | 368 // The ImageResource no longer has clients. The decoded image data should be |
| 367 // deleted by prune. | 369 // deleted by prune. |
| 368 client->removeAsClient(); | 370 client->removeAsClient(); |
| 369 cachedImage->prune(); | 371 imageResource->prune(); |
| 370 EXPECT_FALSE(cachedImage->isAlive()); | 372 EXPECT_FALSE(imageResource->isAlive()); |
| 371 EXPECT_TRUE(cachedImage->getContent()->hasImage()); | 373 EXPECT_TRUE(imageResource->getContent()->hasImage()); |
| 372 // TODO(hajimehoshi): Should check cachedImage doesn't have decoded image | 374 // TODO(hajimehoshi): Should check imageResource doesn't have decoded image |
| 373 // data. | 375 // data. |
| 374 } | 376 } |
| 375 | 377 |
| 376 TEST(ImageResourceTest, UpdateBitmapImages) { | 378 TEST(ImageResourceTest, UpdateBitmapImages) { |
| 377 ImageResource* cachedImage = ImageResource::create(ResourceRequest()); | 379 ImageResource* imageResource = ImageResource::create(ResourceRequest()); |
| 378 cachedImage->setStatus(Resource::Pending); | 380 imageResource->setStatus(Resource::Pending); |
| 379 | 381 |
| 380 Persistent<MockImageResourceClient> client = | 382 Persistent<MockImageResourceClient> client = |
| 381 new MockImageResourceClient(cachedImage); | 383 new MockImageResourceClient(imageResource); |
| 382 | 384 |
| 383 // Send the image response. | 385 // Send the image response. |
| 384 cachedImage->responseReceived( | 386 imageResource->responseReceived( |
| 385 ResourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage), nullAtom, | 387 ResourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage), nullAtom, |
| 386 String()), | 388 String()), |
| 387 nullptr); | 389 nullptr); |
| 388 cachedImage->appendData(reinterpret_cast<const char*>(kJpegImage), | 390 imageResource->appendData(reinterpret_cast<const char*>(kJpegImage), |
| 389 sizeof(kJpegImage)); | 391 sizeof(kJpegImage)); |
| 390 cachedImage->finish(); | 392 imageResource->finish(); |
| 391 EXPECT_FALSE(cachedImage->errorOccurred()); | 393 EXPECT_FALSE(imageResource->errorOccurred()); |
| 392 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 394 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 393 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 395 EXPECT_FALSE(imageResource->getContent()->getImage()->isNull()); |
| 394 EXPECT_EQ(2, client->imageChangedCount()); | 396 EXPECT_EQ(2, client->imageChangedCount()); |
| 395 EXPECT_TRUE(client->notifyFinishedCalled()); | 397 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 396 EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage()); | 398 EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage()); |
| 397 } | 399 } |
| 398 | 400 |
| 399 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinished) { | 401 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinished) { |
| 400 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 402 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 401 ScopedRegisteredURL scopedRegisteredURL(testURL); | 403 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 402 ResourceRequest request = ResourceRequest(testURL); | 404 ResourceRequest request = ResourceRequest(testURL); |
| 403 request.setLoFiState(WebURLRequest::LoFiOn); | 405 request.setLoFiState(WebURLRequest::LoFiOn); |
| 404 ImageResource* cachedImage = ImageResource::create(request); | 406 ImageResource* imageResource = ImageResource::create(request); |
| 405 cachedImage->setStatus(Resource::Pending); | 407 imageResource->setStatus(Resource::Pending); |
| 406 | 408 |
| 407 Persistent<MockImageResourceClient> client = | 409 Persistent<MockImageResourceClient> client = |
| 408 new MockImageResourceClient(cachedImage); | 410 new MockImageResourceClient(imageResource); |
| 409 ResourceFetcher* fetcher = | 411 ResourceFetcher* fetcher = |
| 410 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); | 412 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); |
| 411 | 413 |
| 412 // Send the image response. | 414 // Send the image response. |
| 413 ResourceResponse resourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage), | 415 ResourceResponse resourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage), |
| 414 nullAtom, String()); | 416 nullAtom, String()); |
| 415 resourceResponse.addHTTPHeaderField("chrome-proxy-content-transform", | 417 resourceResponse.addHTTPHeaderField("chrome-proxy-content-transform", |
| 416 "empty-image"); | 418 "empty-image"); |
| 417 | 419 |
| 418 cachedImage->responseReceived(resourceResponse, nullptr); | 420 imageResource->responseReceived(resourceResponse, nullptr); |
| 419 cachedImage->appendData(reinterpret_cast<const char*>(kJpegImage), | 421 imageResource->appendData(reinterpret_cast<const char*>(kJpegImage), |
| 420 sizeof(kJpegImage)); | 422 sizeof(kJpegImage)); |
| 421 cachedImage->finish(); | 423 imageResource->finish(); |
| 422 EXPECT_FALSE(cachedImage->errorOccurred()); | 424 EXPECT_FALSE(imageResource->errorOccurred()); |
| 423 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 425 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 424 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 426 EXPECT_FALSE(imageResource->getContent()->getImage()->isNull()); |
| 425 EXPECT_EQ(2, client->imageChangedCount()); | 427 EXPECT_EQ(2, client->imageChangedCount()); |
| 426 EXPECT_EQ(1, client->imageNotifyFinishedCount()); | 428 EXPECT_EQ(1, client->imageNotifyFinishedCount()); |
| 427 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged()); | 429 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged()); |
| 428 // The client should have been notified that the image load completed. | 430 // The client should have been notified that the image load completed. |
| 429 EXPECT_TRUE(client->notifyFinishedCalled()); | 431 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 430 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished()); | 432 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished()); |
| 431 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished()); | 433 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished()); |
| 432 EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage()); | 434 EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage()); |
| 433 EXPECT_EQ(1, cachedImage->getContent()->getImage()->width()); | 435 EXPECT_EQ(1, imageResource->getContent()->getImage()->width()); |
| 434 EXPECT_EQ(1, cachedImage->getContent()->getImage()->height()); | 436 EXPECT_EQ(1, imageResource->getContent()->getImage()->height()); |
| 435 | 437 |
| 436 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading. | 438 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading. |
| 437 cachedImage->reloadIfLoFiOrPlaceholderImage(fetcher, Resource::kReloadAlways); | 439 imageResource->reloadIfLoFiOrPlaceholderImage(fetcher, |
| 438 EXPECT_FALSE(cachedImage->errorOccurred()); | 440 Resource::kReloadAlways); |
| 439 EXPECT_FALSE(cachedImage->resourceBuffer()); | 441 EXPECT_FALSE(imageResource->errorOccurred()); |
| 440 EXPECT_FALSE(cachedImage->getContent()->hasImage()); | 442 EXPECT_FALSE(imageResource->resourceBuffer()); |
| 443 EXPECT_FALSE(imageResource->getContent()->hasImage()); |
| 441 EXPECT_EQ(3, client->imageChangedCount()); | 444 EXPECT_EQ(3, client->imageChangedCount()); |
| 442 EXPECT_EQ(1, client->imageNotifyFinishedCount()); | 445 EXPECT_EQ(1, client->imageNotifyFinishedCount()); |
| 443 | 446 |
| 444 cachedImage->loader()->didReceiveResponse( | 447 imageResource->loader()->didReceiveResponse( |
| 445 WrappedResourceResponse(resourceResponse), nullptr); | 448 WrappedResourceResponse(resourceResponse), nullptr); |
| 446 cachedImage->loader()->didReceiveData( | 449 imageResource->loader()->didReceiveData( |
| 447 reinterpret_cast<const char*>(kJpegImage2), sizeof(kJpegImage2)); | 450 reinterpret_cast<const char*>(kJpegImage2), sizeof(kJpegImage2)); |
| 448 cachedImage->loader()->didFinishLoading(0.0, sizeof(kJpegImage2), | 451 imageResource->loader()->didFinishLoading(0.0, sizeof(kJpegImage2), |
| 449 sizeof(kJpegImage2)); | 452 sizeof(kJpegImage2)); |
| 450 EXPECT_FALSE(cachedImage->errorOccurred()); | 453 EXPECT_FALSE(imageResource->errorOccurred()); |
| 451 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 454 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 452 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 455 EXPECT_FALSE(imageResource->getContent()->getImage()->isNull()); |
| 453 EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnLastImageChanged()); | 456 EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnLastImageChanged()); |
| 454 EXPECT_TRUE(client->notifyFinishedCalled()); | 457 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 455 | 458 |
| 456 // The client should not have been notified of completion again. | 459 // The client should not have been notified of completion again. |
| 457 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished()); | 460 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished()); |
| 458 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished()); | 461 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished()); |
| 459 | 462 |
| 460 EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage()); | 463 EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage()); |
| 461 EXPECT_EQ(50, cachedImage->getContent()->getImage()->width()); | 464 EXPECT_EQ(50, imageResource->getContent()->getImage()->width()); |
| 462 EXPECT_EQ(50, cachedImage->getContent()->getImage()->height()); | 465 EXPECT_EQ(50, imageResource->getContent()->getImage()->height()); |
| 463 } | 466 } |
| 464 | 467 |
| 465 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderDuringFetch) { | 468 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderDuringFetch) { |
| 466 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 469 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 467 ScopedRegisteredURL scopedRegisteredURL(testURL); | 470 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 468 | 471 |
| 469 ResourceRequest request(testURL); | 472 ResourceRequest request(testURL); |
| 470 request.setLoFiState(WebURLRequest::LoFiOn); | 473 request.setLoFiState(WebURLRequest::LoFiOn); |
| 471 FetchRequest fetchRequest(request, FetchInitiatorInfo()); | 474 FetchRequest fetchRequest(request, FetchInitiatorInfo()); |
| 472 ResourceFetcher* fetcher = | 475 ResourceFetcher* fetcher = |
| 473 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); | 476 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); |
| 474 | 477 |
| 475 ImageResource* cachedImage = ImageResource::fetch(fetchRequest, fetcher); | 478 ImageResource* imageResource = ImageResource::fetch(fetchRequest, fetcher); |
| 476 Persistent<MockImageResourceClient> client = | 479 Persistent<MockImageResourceClient> client = |
| 477 new MockImageResourceClient(cachedImage); | 480 new MockImageResourceClient(imageResource); |
| 478 | 481 |
| 479 // Send the image response. | 482 // Send the image response. |
| 480 ResourceResponse initialResourceResponse( | 483 ResourceResponse initialResourceResponse( |
| 481 testURL, "image/jpeg", sizeof(kJpegImage), nullAtom, String()); | 484 testURL, "image/jpeg", sizeof(kJpegImage), nullAtom, String()); |
| 482 initialResourceResponse.addHTTPHeaderField("chrome-proxy", "q=low"); | 485 initialResourceResponse.addHTTPHeaderField("chrome-proxy", "q=low"); |
| 483 | 486 |
| 484 cachedImage->loader()->didReceiveResponse( | 487 imageResource->loader()->didReceiveResponse( |
| 485 WrappedResourceResponse(initialResourceResponse)); | 488 WrappedResourceResponse(initialResourceResponse)); |
| 486 cachedImage->loader()->didReceiveData( | 489 imageResource->loader()->didReceiveData( |
| 487 reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage)); | 490 reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage)); |
| 488 | 491 |
| 489 EXPECT_FALSE(cachedImage->errorOccurred()); | 492 EXPECT_FALSE(imageResource->errorOccurred()); |
| 490 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 493 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 491 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 494 EXPECT_FALSE(imageResource->getContent()->getImage()->isNull()); |
| 492 EXPECT_EQ(1, client->imageChangedCount()); | 495 EXPECT_EQ(1, client->imageChangedCount()); |
| 493 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged()); | 496 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged()); |
| 494 EXPECT_FALSE(client->notifyFinishedCalled()); | 497 EXPECT_FALSE(client->notifyFinishedCalled()); |
| 495 EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage()); | 498 EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage()); |
| 496 EXPECT_EQ(1, cachedImage->getContent()->getImage()->width()); | 499 EXPECT_EQ(1, imageResource->getContent()->getImage()->width()); |
| 497 EXPECT_EQ(1, cachedImage->getContent()->getImage()->height()); | 500 EXPECT_EQ(1, imageResource->getContent()->getImage()->height()); |
| 498 | 501 |
| 499 // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading. | 502 // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading. |
| 500 cachedImage->reloadIfLoFiOrPlaceholderImage(fetcher, Resource::kReloadAlways); | 503 imageResource->reloadIfLoFiOrPlaceholderImage(fetcher, |
| 501 EXPECT_FALSE(cachedImage->errorOccurred()); | 504 Resource::kReloadAlways); |
| 502 EXPECT_FALSE(cachedImage->resourceBuffer()); | 505 EXPECT_FALSE(imageResource->errorOccurred()); |
| 503 EXPECT_FALSE(cachedImage->getContent()->hasImage()); | 506 EXPECT_FALSE(imageResource->resourceBuffer()); |
| 507 EXPECT_FALSE(imageResource->getContent()->hasImage()); |
| 504 EXPECT_EQ(2, client->imageChangedCount()); | 508 EXPECT_EQ(2, client->imageChangedCount()); |
| 505 EXPECT_EQ(0U, client->encodedSizeOnLastImageChanged()); | 509 EXPECT_EQ(0U, client->encodedSizeOnLastImageChanged()); |
| 506 // The client should not have been notified of completion yet, since the image | 510 // The client should not have been notified of completion yet, since the image |
| 507 // is still loading. | 511 // is still loading. |
| 508 EXPECT_FALSE(client->notifyFinishedCalled()); | 512 EXPECT_FALSE(client->notifyFinishedCalled()); |
| 509 | 513 |
| 510 cachedImage->loader()->didReceiveResponse( | 514 imageResource->loader()->didReceiveResponse( |
| 511 WrappedResourceResponse(ResourceResponse( | 515 WrappedResourceResponse(ResourceResponse( |
| 512 testURL, "image/jpeg", sizeof(kJpegImage2), nullAtom, String())), | 516 testURL, "image/jpeg", sizeof(kJpegImage2), nullAtom, String())), |
| 513 nullptr); | 517 nullptr); |
| 514 cachedImage->loader()->didReceiveData( | 518 imageResource->loader()->didReceiveData( |
| 515 reinterpret_cast<const char*>(kJpegImage2), sizeof(kJpegImage2)); | 519 reinterpret_cast<const char*>(kJpegImage2), sizeof(kJpegImage2)); |
| 516 cachedImage->loader()->didFinishLoading(0.0, sizeof(kJpegImage2), | 520 imageResource->loader()->didFinishLoading(0.0, sizeof(kJpegImage2), |
| 517 sizeof(kJpegImage2)); | 521 sizeof(kJpegImage2)); |
| 518 | 522 |
| 519 EXPECT_FALSE(cachedImage->errorOccurred()); | 523 EXPECT_FALSE(imageResource->errorOccurred()); |
| 520 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 524 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 521 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 525 EXPECT_FALSE(imageResource->getContent()->getImage()->isNull()); |
| 522 EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnLastImageChanged()); | 526 EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnLastImageChanged()); |
| 523 // The client should have been notified of completion only after the reload | 527 // The client should have been notified of completion only after the reload |
| 524 // completed. | 528 // completed. |
| 525 EXPECT_TRUE(client->notifyFinishedCalled()); | 529 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 526 EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnNotifyFinished()); | 530 EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnNotifyFinished()); |
| 527 EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnImageNotifyFinished()); | 531 EXPECT_EQ(sizeof(kJpegImage2), client->encodedSizeOnImageNotifyFinished()); |
| 528 EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage()); | 532 EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage()); |
| 529 EXPECT_EQ(50, cachedImage->getContent()->getImage()->width()); | 533 EXPECT_EQ(50, imageResource->getContent()->getImage()->width()); |
| 530 EXPECT_EQ(50, cachedImage->getContent()->getImage()->height()); | 534 EXPECT_EQ(50, imageResource->getContent()->getImage()->height()); |
| 531 } | 535 } |
| 532 | 536 |
| 533 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderForPlaceholder) { | 537 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderForPlaceholder) { |
| 534 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 538 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 535 ScopedRegisteredURL scopedRegisteredURL(testURL); | 539 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 536 | 540 |
| 537 ResourceFetcher* fetcher = | 541 ResourceFetcher* fetcher = |
| 538 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); | 542 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); |
| 539 FetchRequest request(testURL, FetchInitiatorInfo()); | 543 FetchRequest request(testURL, FetchInitiatorInfo()); |
| 540 request.setAllowImagePlaceholder(); | 544 request.setAllowImagePlaceholder(); |
| 541 ImageResource* image = ImageResource::fetch(request, fetcher); | 545 ImageResource* imageResource = ImageResource::fetch(request, fetcher); |
| 542 EXPECT_EQ(FetchRequest::AllowPlaceholder, | 546 EXPECT_EQ(FetchRequest::AllowPlaceholder, |
| 543 request.placeholderImageRequestType()); | 547 request.placeholderImageRequestType()); |
| 544 EXPECT_EQ("bytes=0-2047", image->resourceRequest().httpHeaderField("range")); | 548 EXPECT_EQ("bytes=0-2047", |
| 549 imageResource->resourceRequest().httpHeaderField("range")); |
| 545 Persistent<MockImageResourceClient> client = | 550 Persistent<MockImageResourceClient> client = |
| 546 new MockImageResourceClient(image); | 551 new MockImageResourceClient(imageResource); |
| 547 | 552 |
| 548 ResourceResponse response(testURL, "image/jpeg", | 553 ResourceResponse response(testURL, "image/jpeg", |
| 549 kJpegImageSubrangeWithDimensionsLength, nullAtom, | 554 kJpegImageSubrangeWithDimensionsLength, nullAtom, |
| 550 String()); | 555 String()); |
| 551 response.setHTTPStatusCode(206); | 556 response.setHTTPStatusCode(206); |
| 552 response.setHTTPHeaderField( | 557 response.setHTTPHeaderField( |
| 553 "content-range", buildContentRange(kJpegImageSubrangeWithDimensionsLength, | 558 "content-range", buildContentRange(kJpegImageSubrangeWithDimensionsLength, |
| 554 sizeof(kJpegImage))); | 559 sizeof(kJpegImage))); |
| 555 image->loader()->didReceiveResponse(WrappedResourceResponse(response)); | 560 imageResource->loader()->didReceiveResponse( |
| 556 image->loader()->didReceiveData(reinterpret_cast<const char*>(kJpegImage), | 561 WrappedResourceResponse(response)); |
| 557 kJpegImageSubrangeWithDimensionsLength); | 562 imageResource->loader()->didReceiveData( |
| 558 image->loader()->didFinishLoading(0.0, kJpegImageSubrangeWithDimensionsLength, | 563 reinterpret_cast<const char*>(kJpegImage), |
| 559 kJpegImageSubrangeWithDimensionsLength); | 564 kJpegImageSubrangeWithDimensionsLength); |
| 565 imageResource->loader()->didFinishLoading( |
| 566 0.0, kJpegImageSubrangeWithDimensionsLength, |
| 567 kJpegImageSubrangeWithDimensionsLength); |
| 560 | 568 |
| 561 EXPECT_EQ(Resource::Cached, image->getStatus()); | 569 EXPECT_EQ(Resource::Cached, imageResource->getStatus()); |
| 562 EXPECT_TRUE(image->isPlaceholder()); | 570 EXPECT_TRUE(imageResource->isPlaceholder()); |
| 563 | 571 |
| 564 image->reloadIfLoFiOrPlaceholderImage(fetcher, Resource::kReloadAlways); | 572 imageResource->reloadIfLoFiOrPlaceholderImage(fetcher, |
| 573 Resource::kReloadAlways); |
| 565 | 574 |
| 566 EXPECT_EQ(Resource::Pending, image->getStatus()); | 575 EXPECT_EQ(Resource::Pending, imageResource->getStatus()); |
| 567 EXPECT_FALSE(image->isPlaceholder()); | 576 EXPECT_FALSE(imageResource->isPlaceholder()); |
| 568 EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range")); | 577 EXPECT_EQ(nullAtom, |
| 569 EXPECT_EQ(static_cast<int>(WebCachePolicy::BypassingCache), | 578 imageResource->resourceRequest().httpHeaderField("range")); |
| 570 static_cast<int>(image->resourceRequest().getCachePolicy())); | 579 EXPECT_EQ( |
| 580 static_cast<int>(WebCachePolicy::BypassingCache), |
| 581 static_cast<int>(imageResource->resourceRequest().getCachePolicy())); |
| 571 | 582 |
| 572 image->loader()->cancel(); | 583 imageResource->loader()->cancel(); |
| 573 } | 584 } |
| 574 | 585 |
| 575 TEST(ImageResourceTest, SVGImage) { | 586 TEST(ImageResourceTest, SVGImage) { |
| 576 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo"); | 587 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo"); |
| 577 ImageResource* imageResource = ImageResource::create(ResourceRequest(url)); | 588 ImageResource* imageResource = ImageResource::create(ResourceRequest(url)); |
| 578 Persistent<MockImageResourceClient> client = | 589 Persistent<MockImageResourceClient> client = |
| 579 new MockImageResourceClient(imageResource); | 590 new MockImageResourceClient(imageResource); |
| 580 | 591 |
| 581 receiveResponse(imageResource, url, "image/svg+xml", kSvgImage, | 592 receiveResponse(imageResource, url, "image/svg+xml", kSvgImage, |
| 582 strlen(kSvgImage)); | 593 strlen(kSvgImage)); |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 843 EXPECT_TRUE(client2->notifyFinishedCalled()); | 854 EXPECT_TRUE(client2->notifyFinishedCalled()); |
| 844 } | 855 } |
| 845 | 856 |
| 846 TEST(ImageResourceTest, CancelOnDecodeError) { | 857 TEST(ImageResourceTest, CancelOnDecodeError) { |
| 847 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 858 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 848 ScopedRegisteredURL scopedRegisteredURL(testURL); | 859 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 849 | 860 |
| 850 ResourceFetcher* fetcher = | 861 ResourceFetcher* fetcher = |
| 851 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); | 862 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); |
| 852 FetchRequest request(testURL, FetchInitiatorInfo()); | 863 FetchRequest request(testURL, FetchInitiatorInfo()); |
| 853 ImageResource* cachedImage = ImageResource::fetch(request, fetcher); | 864 ImageResource* imageResource = ImageResource::fetch(request, fetcher); |
| 854 | 865 |
| 855 cachedImage->loader()->didReceiveResponse( | 866 imageResource->loader()->didReceiveResponse( |
| 856 WrappedResourceResponse( | 867 WrappedResourceResponse( |
| 857 ResourceResponse(testURL, "image/jpeg", 18, nullAtom, String())), | 868 ResourceResponse(testURL, "image/jpeg", 18, nullAtom, String())), |
| 858 nullptr); | 869 nullptr); |
| 859 cachedImage->loader()->didReceiveData("notactuallyanimage", 18); | 870 imageResource->loader()->didReceiveData("notactuallyanimage", 18); |
| 860 EXPECT_EQ(Resource::DecodeError, cachedImage->getStatus()); | 871 EXPECT_EQ(Resource::DecodeError, imageResource->getStatus()); |
| 861 EXPECT_FALSE(cachedImage->isLoading()); | 872 EXPECT_FALSE(imageResource->isLoading()); |
| 862 } | 873 } |
| 863 | 874 |
| 864 TEST(ImageResourceTest, FetchDisallowPlaceholder) { | 875 TEST(ImageResourceTest, FetchDisallowPlaceholder) { |
| 865 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 876 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 866 ScopedRegisteredURL scopedRegisteredURL(testURL); | 877 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 867 | 878 |
| 868 FetchRequest request(testURL, FetchInitiatorInfo()); | 879 FetchRequest request(testURL, FetchInitiatorInfo()); |
| 869 ImageResource* image = ImageResource::fetch( | 880 ImageResource* imageResource = ImageResource::fetch( |
| 870 request, | 881 request, |
| 871 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); | 882 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); |
| 872 EXPECT_EQ(FetchRequest::DisallowPlaceholder, | 883 EXPECT_EQ(FetchRequest::DisallowPlaceholder, |
| 873 request.placeholderImageRequestType()); | 884 request.placeholderImageRequestType()); |
| 874 EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range")); | 885 EXPECT_EQ(nullAtom, |
| 875 EXPECT_FALSE(image->isPlaceholder()); | 886 imageResource->resourceRequest().httpHeaderField("range")); |
| 887 EXPECT_FALSE(imageResource->isPlaceholder()); |
| 876 Persistent<MockImageResourceClient> client = | 888 Persistent<MockImageResourceClient> client = |
| 877 new MockImageResourceClient(image); | 889 new MockImageResourceClient(imageResource); |
| 878 | 890 |
| 879 image->loader()->didReceiveResponse(WrappedResourceResponse(ResourceResponse( | 891 imageResource->loader()->didReceiveResponse( |
| 880 testURL, "image/jpeg", sizeof(kJpegImage), nullAtom, String()))); | 892 WrappedResourceResponse(ResourceResponse( |
| 881 image->loader()->didReceiveData(reinterpret_cast<const char*>(kJpegImage), | 893 testURL, "image/jpeg", sizeof(kJpegImage), nullAtom, String()))); |
| 882 sizeof(kJpegImage)); | 894 imageResource->loader()->didReceiveData( |
| 883 image->loader()->didFinishLoading(0.0, sizeof(kJpegImage), | 895 reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage)); |
| 884 sizeof(kJpegImage)); | 896 imageResource->loader()->didFinishLoading(0.0, sizeof(kJpegImage), |
| 897 sizeof(kJpegImage)); |
| 885 | 898 |
| 886 EXPECT_EQ(Resource::Cached, image->getStatus()); | 899 EXPECT_EQ(Resource::Cached, imageResource->getStatus()); |
| 887 EXPECT_EQ(sizeof(kJpegImage), image->encodedSize()); | 900 EXPECT_EQ(sizeof(kJpegImage), imageResource->encodedSize()); |
| 888 EXPECT_FALSE(image->isPlaceholder()); | 901 EXPECT_FALSE(imageResource->isPlaceholder()); |
| 889 EXPECT_LT(0, client->imageChangedCount()); | 902 EXPECT_LT(0, client->imageChangedCount()); |
| 890 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged()); | 903 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged()); |
| 891 EXPECT_TRUE(client->notifyFinishedCalled()); | 904 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 892 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished()); | 905 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished()); |
| 893 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished()); | 906 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished()); |
| 894 | 907 |
| 895 ASSERT_TRUE(image->getContent()->hasImage()); | 908 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 896 EXPECT_EQ(1, image->getContent()->getImage()->width()); | 909 EXPECT_EQ(1, imageResource->getContent()->getImage()->width()); |
| 897 EXPECT_EQ(1, image->getContent()->getImage()->height()); | 910 EXPECT_EQ(1, imageResource->getContent()->getImage()->height()); |
| 898 EXPECT_TRUE(image->getContent()->getImage()->isBitmapImage()); | 911 EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage()); |
| 899 } | 912 } |
| 900 | 913 |
| 901 TEST(ImageResourceTest, FetchAllowPlaceholderDataURL) { | 914 TEST(ImageResourceTest, FetchAllowPlaceholderDataURL) { |
| 902 KURL testURL(ParsedURLString, | 915 KURL testURL(ParsedURLString, |
| 903 "data:image/jpeg;base64," + | 916 "data:image/jpeg;base64," + |
| 904 base64Encode(reinterpret_cast<const char*>(kJpegImage), | 917 base64Encode(reinterpret_cast<const char*>(kJpegImage), |
| 905 sizeof(kJpegImage))); | 918 sizeof(kJpegImage))); |
| 906 FetchRequest request(testURL, FetchInitiatorInfo()); | 919 FetchRequest request(testURL, FetchInitiatorInfo()); |
| 907 request.setAllowImagePlaceholder(); | 920 request.setAllowImagePlaceholder(); |
| 908 ImageResource* image = ImageResource::fetch( | 921 ImageResource* imageResource = ImageResource::fetch( |
| 909 request, | 922 request, |
| 910 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); | 923 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); |
| 911 EXPECT_EQ(FetchRequest::DisallowPlaceholder, | 924 EXPECT_EQ(FetchRequest::DisallowPlaceholder, |
| 912 request.placeholderImageRequestType()); | 925 request.placeholderImageRequestType()); |
| 913 EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range")); | 926 EXPECT_EQ(nullAtom, |
| 914 EXPECT_FALSE(image->isPlaceholder()); | 927 imageResource->resourceRequest().httpHeaderField("range")); |
| 928 EXPECT_FALSE(imageResource->isPlaceholder()); |
| 915 } | 929 } |
| 916 | 930 |
| 917 TEST(ImageResourceTest, FetchAllowPlaceholderPostRequest) { | 931 TEST(ImageResourceTest, FetchAllowPlaceholderPostRequest) { |
| 918 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 932 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 919 ScopedRegisteredURL scopedRegisteredURL(testURL); | 933 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 920 ResourceRequest resourceRequest(testURL); | 934 ResourceRequest resourceRequest(testURL); |
| 921 resourceRequest.setHTTPMethod("POST"); | 935 resourceRequest.setHTTPMethod("POST"); |
| 922 FetchRequest request(resourceRequest, FetchInitiatorInfo()); | 936 FetchRequest request(resourceRequest, FetchInitiatorInfo()); |
| 923 request.setAllowImagePlaceholder(); | 937 request.setAllowImagePlaceholder(); |
| 924 ImageResource* image = ImageResource::fetch( | 938 ImageResource* imageResource = ImageResource::fetch( |
| 925 request, | 939 request, |
| 926 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); | 940 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); |
| 927 EXPECT_EQ(FetchRequest::DisallowPlaceholder, | 941 EXPECT_EQ(FetchRequest::DisallowPlaceholder, |
| 928 request.placeholderImageRequestType()); | 942 request.placeholderImageRequestType()); |
| 929 EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range")); | 943 EXPECT_EQ(nullAtom, |
| 930 EXPECT_FALSE(image->isPlaceholder()); | 944 imageResource->resourceRequest().httpHeaderField("range")); |
| 945 EXPECT_FALSE(imageResource->isPlaceholder()); |
| 931 | 946 |
| 932 image->loader()->cancel(); | 947 imageResource->loader()->cancel(); |
| 933 } | 948 } |
| 934 | 949 |
| 935 TEST(ImageResourceTest, FetchAllowPlaceholderExistingRangeHeader) { | 950 TEST(ImageResourceTest, FetchAllowPlaceholderExistingRangeHeader) { |
| 936 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 951 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 937 ScopedRegisteredURL scopedRegisteredURL(testURL); | 952 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 938 ResourceRequest resourceRequest(testURL); | 953 ResourceRequest resourceRequest(testURL); |
| 939 resourceRequest.setHTTPHeaderField("range", "bytes=128-255"); | 954 resourceRequest.setHTTPHeaderField("range", "bytes=128-255"); |
| 940 FetchRequest request(resourceRequest, FetchInitiatorInfo()); | 955 FetchRequest request(resourceRequest, FetchInitiatorInfo()); |
| 941 request.setAllowImagePlaceholder(); | 956 request.setAllowImagePlaceholder(); |
| 942 ImageResource* image = ImageResource::fetch( | 957 ImageResource* imageResource = ImageResource::fetch( |
| 943 request, | 958 request, |
| 944 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); | 959 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); |
| 945 EXPECT_EQ(FetchRequest::DisallowPlaceholder, | 960 EXPECT_EQ(FetchRequest::DisallowPlaceholder, |
| 946 request.placeholderImageRequestType()); | 961 request.placeholderImageRequestType()); |
| 947 EXPECT_EQ("bytes=128-255", image->resourceRequest().httpHeaderField("range")); | 962 EXPECT_EQ("bytes=128-255", |
| 948 EXPECT_FALSE(image->isPlaceholder()); | 963 imageResource->resourceRequest().httpHeaderField("range")); |
| 964 EXPECT_FALSE(imageResource->isPlaceholder()); |
| 949 | 965 |
| 950 image->loader()->cancel(); | 966 imageResource->loader()->cancel(); |
| 951 } | 967 } |
| 952 | 968 |
| 953 TEST(ImageResourceTest, FetchAllowPlaceholderSuccessful) { | 969 TEST(ImageResourceTest, FetchAllowPlaceholderSuccessful) { |
| 954 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 970 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 955 ScopedRegisteredURL scopedRegisteredURL(testURL); | 971 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 956 | 972 |
| 957 FetchRequest request(testURL, FetchInitiatorInfo()); | 973 FetchRequest request(testURL, FetchInitiatorInfo()); |
| 958 request.setAllowImagePlaceholder(); | 974 request.setAllowImagePlaceholder(); |
| 959 ImageResource* image = ImageResource::fetch( | 975 ImageResource* imageResource = ImageResource::fetch( |
| 960 request, | 976 request, |
| 961 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); | 977 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); |
| 962 EXPECT_EQ(FetchRequest::AllowPlaceholder, | 978 EXPECT_EQ(FetchRequest::AllowPlaceholder, |
| 963 request.placeholderImageRequestType()); | 979 request.placeholderImageRequestType()); |
| 964 EXPECT_EQ("bytes=0-2047", image->resourceRequest().httpHeaderField("range")); | 980 EXPECT_EQ("bytes=0-2047", |
| 965 EXPECT_TRUE(image->isPlaceholder()); | 981 imageResource->resourceRequest().httpHeaderField("range")); |
| 982 EXPECT_TRUE(imageResource->isPlaceholder()); |
| 966 Persistent<MockImageResourceClient> client = | 983 Persistent<MockImageResourceClient> client = |
| 967 new MockImageResourceClient(image); | 984 new MockImageResourceClient(imageResource); |
| 968 | 985 |
| 969 ResourceResponse response(testURL, "image/jpeg", | 986 ResourceResponse response(testURL, "image/jpeg", |
| 970 kJpegImageSubrangeWithDimensionsLength, nullAtom, | 987 kJpegImageSubrangeWithDimensionsLength, nullAtom, |
| 971 String()); | 988 String()); |
| 972 response.setHTTPStatusCode(206); | 989 response.setHTTPStatusCode(206); |
| 973 response.setHTTPHeaderField( | 990 response.setHTTPHeaderField( |
| 974 "content-range", buildContentRange(kJpegImageSubrangeWithDimensionsLength, | 991 "content-range", buildContentRange(kJpegImageSubrangeWithDimensionsLength, |
| 975 sizeof(kJpegImage))); | 992 sizeof(kJpegImage))); |
| 976 image->loader()->didReceiveResponse(WrappedResourceResponse(response)); | 993 imageResource->loader()->didReceiveResponse( |
| 977 image->loader()->didReceiveData(reinterpret_cast<const char*>(kJpegImage), | 994 WrappedResourceResponse(response)); |
| 978 kJpegImageSubrangeWithDimensionsLength); | 995 imageResource->loader()->didReceiveData( |
| 979 image->loader()->didFinishLoading(0.0, kJpegImageSubrangeWithDimensionsLength, | 996 reinterpret_cast<const char*>(kJpegImage), |
| 980 kJpegImageSubrangeWithDimensionsLength); | 997 kJpegImageSubrangeWithDimensionsLength); |
| 998 imageResource->loader()->didFinishLoading( |
| 999 0.0, kJpegImageSubrangeWithDimensionsLength, |
| 1000 kJpegImageSubrangeWithDimensionsLength); |
| 981 | 1001 |
| 982 EXPECT_EQ(Resource::Cached, image->getStatus()); | 1002 EXPECT_EQ(Resource::Cached, imageResource->getStatus()); |
| 983 EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, image->encodedSize()); | 1003 EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, |
| 984 EXPECT_TRUE(image->isPlaceholder()); | 1004 imageResource->encodedSize()); |
| 1005 EXPECT_TRUE(imageResource->isPlaceholder()); |
| 985 EXPECT_LT(0, client->imageChangedCount()); | 1006 EXPECT_LT(0, client->imageChangedCount()); |
| 986 EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, | 1007 EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, |
| 987 client->encodedSizeOnLastImageChanged()); | 1008 client->encodedSizeOnLastImageChanged()); |
| 988 EXPECT_TRUE(client->notifyFinishedCalled()); | 1009 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 989 EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, | 1010 EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, |
| 990 client->encodedSizeOnNotifyFinished()); | 1011 client->encodedSizeOnNotifyFinished()); |
| 991 EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, | 1012 EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, |
| 992 client->encodedSizeOnImageNotifyFinished()); | 1013 client->encodedSizeOnImageNotifyFinished()); |
| 993 | 1014 |
| 994 ASSERT_TRUE(image->getContent()->hasImage()); | 1015 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 995 EXPECT_EQ(1, image->getContent()->getImage()->width()); | 1016 EXPECT_EQ(1, imageResource->getContent()->getImage()->width()); |
| 996 EXPECT_EQ(1, image->getContent()->getImage()->height()); | 1017 EXPECT_EQ(1, imageResource->getContent()->getImage()->height()); |
| 997 EXPECT_FALSE(image->getContent()->getImage()->isBitmapImage()); | 1018 EXPECT_FALSE(imageResource->getContent()->getImage()->isBitmapImage()); |
| 998 EXPECT_FALSE(image->getContent()->getImage()->isSVGImage()); | 1019 EXPECT_FALSE(imageResource->getContent()->getImage()->isSVGImage()); |
| 999 } | 1020 } |
| 1000 | 1021 |
| 1001 TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessful) { | 1022 TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessful) { |
| 1002 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 1023 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 1003 ScopedRegisteredURL scopedRegisteredURL(testURL); | 1024 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 1004 | 1025 |
| 1005 FetchRequest request(testURL, FetchInitiatorInfo()); | 1026 FetchRequest request(testURL, FetchInitiatorInfo()); |
| 1006 request.setAllowImagePlaceholder(); | 1027 request.setAllowImagePlaceholder(); |
| 1007 ImageResource* image = ImageResource::fetch( | 1028 ImageResource* imageResource = ImageResource::fetch( |
| 1008 request, | 1029 request, |
| 1009 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); | 1030 ResourceFetcher::create(ImageResourceTestMockFetchContext::create())); |
| 1010 EXPECT_EQ(FetchRequest::AllowPlaceholder, | 1031 EXPECT_EQ(FetchRequest::AllowPlaceholder, |
| 1011 request.placeholderImageRequestType()); | 1032 request.placeholderImageRequestType()); |
| 1012 EXPECT_EQ("bytes=0-2047", image->resourceRequest().httpHeaderField("range")); | 1033 EXPECT_EQ("bytes=0-2047", |
| 1013 EXPECT_TRUE(image->isPlaceholder()); | 1034 imageResource->resourceRequest().httpHeaderField("range")); |
| 1035 EXPECT_TRUE(imageResource->isPlaceholder()); |
| 1014 Persistent<MockImageResourceClient> client = | 1036 Persistent<MockImageResourceClient> client = |
| 1015 new MockImageResourceClient(image); | 1037 new MockImageResourceClient(imageResource); |
| 1016 | 1038 |
| 1017 const char kBadData[] = "notanimageresponse"; | 1039 const char kBadData[] = "notanimageresponse"; |
| 1018 | 1040 |
| 1019 image->loader()->didReceiveResponse(WrappedResourceResponse(ResourceResponse( | 1041 imageResource->loader()->didReceiveResponse( |
| 1020 testURL, "image/jpeg", sizeof(kBadData), nullAtom, String()))); | 1042 WrappedResourceResponse(ResourceResponse( |
| 1021 image->loader()->didReceiveData(kBadData, sizeof(kBadData)); | 1043 testURL, "image/jpeg", sizeof(kBadData), nullAtom, String()))); |
| 1044 imageResource->loader()->didReceiveData(kBadData, sizeof(kBadData)); |
| 1022 | 1045 |
| 1023 // The dimensions could not be extracted, so the full original image should be | 1046 // The dimensions could not be extracted, so the full original image should be |
| 1024 // loading. | 1047 // loading. |
| 1025 EXPECT_EQ(Resource::Pending, image->getStatus()); | 1048 EXPECT_EQ(Resource::Pending, imageResource->getStatus()); |
| 1026 EXPECT_FALSE(image->isPlaceholder()); | 1049 EXPECT_FALSE(imageResource->isPlaceholder()); |
| 1027 EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range")); | 1050 EXPECT_EQ(nullAtom, |
| 1028 EXPECT_EQ(static_cast<int>(WebCachePolicy::BypassingCache), | 1051 imageResource->resourceRequest().httpHeaderField("range")); |
| 1029 static_cast<int>(image->resourceRequest().getCachePolicy())); | 1052 EXPECT_EQ( |
| 1053 static_cast<int>(WebCachePolicy::BypassingCache), |
| 1054 static_cast<int>(imageResource->resourceRequest().getCachePolicy())); |
| 1030 EXPECT_FALSE(client->notifyFinishedCalled()); | 1055 EXPECT_FALSE(client->notifyFinishedCalled()); |
| 1031 EXPECT_EQ(0, client->imageNotifyFinishedCount()); | 1056 EXPECT_EQ(0, client->imageNotifyFinishedCount()); |
| 1032 | 1057 |
| 1033 image->loader()->didReceiveResponse(WrappedResourceResponse(ResourceResponse( | 1058 imageResource->loader()->didReceiveResponse( |
| 1034 testURL, "image/jpeg", sizeof(kJpegImage), nullAtom, String()))); | 1059 WrappedResourceResponse(ResourceResponse( |
| 1035 image->loader()->didReceiveData(reinterpret_cast<const char*>(kJpegImage), | 1060 testURL, "image/jpeg", sizeof(kJpegImage), nullAtom, String()))); |
| 1036 sizeof(kJpegImage)); | 1061 imageResource->loader()->didReceiveData( |
| 1037 image->loader()->didFinishLoading(0.0, sizeof(kJpegImage), | 1062 reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage)); |
| 1038 sizeof(kJpegImage)); | 1063 imageResource->loader()->didFinishLoading(0.0, sizeof(kJpegImage), |
| 1064 sizeof(kJpegImage)); |
| 1039 | 1065 |
| 1040 EXPECT_EQ(Resource::Cached, image->getStatus()); | 1066 EXPECT_EQ(Resource::Cached, imageResource->getStatus()); |
| 1041 EXPECT_EQ(sizeof(kJpegImage), image->encodedSize()); | 1067 EXPECT_EQ(sizeof(kJpegImage), imageResource->encodedSize()); |
| 1042 EXPECT_FALSE(image->isPlaceholder()); | 1068 EXPECT_FALSE(imageResource->isPlaceholder()); |
| 1043 EXPECT_LT(0, client->imageChangedCount()); | 1069 EXPECT_LT(0, client->imageChangedCount()); |
| 1044 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged()); | 1070 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnLastImageChanged()); |
| 1045 EXPECT_TRUE(client->notifyFinishedCalled()); | 1071 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 1046 EXPECT_EQ(1, client->imageNotifyFinishedCount()); | 1072 EXPECT_EQ(1, client->imageNotifyFinishedCount()); |
| 1047 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished()); | 1073 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnNotifyFinished()); |
| 1048 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished()); | 1074 EXPECT_EQ(sizeof(kJpegImage), client->encodedSizeOnImageNotifyFinished()); |
| 1049 | 1075 |
| 1050 ASSERT_TRUE(image->getContent()->hasImage()); | 1076 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 1051 EXPECT_EQ(1, image->getContent()->getImage()->width()); | 1077 EXPECT_EQ(1, imageResource->getContent()->getImage()->width()); |
| 1052 EXPECT_EQ(1, image->getContent()->getImage()->height()); | 1078 EXPECT_EQ(1, imageResource->getContent()->getImage()->height()); |
| 1053 EXPECT_TRUE(image->getContent()->getImage()->isBitmapImage()); | 1079 EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage()); |
| 1054 } | 1080 } |
| 1055 | 1081 |
| 1056 TEST(ImageResourceTest, FetchAllowPlaceholderThenDisallowPlaceholder) { | 1082 TEST(ImageResourceTest, FetchAllowPlaceholderThenDisallowPlaceholder) { |
| 1057 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 1083 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 1058 ScopedRegisteredURL scopedRegisteredURL(testURL); | 1084 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 1059 | 1085 |
| 1060 ResourceFetcher* fetcher = | 1086 ResourceFetcher* fetcher = |
| 1061 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); | 1087 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); |
| 1062 FetchRequest placeholderRequest(testURL, FetchInitiatorInfo()); | 1088 FetchRequest placeholderRequest(testURL, FetchInitiatorInfo()); |
| 1063 placeholderRequest.setAllowImagePlaceholder(); | 1089 placeholderRequest.setAllowImagePlaceholder(); |
| 1064 ImageResource* image = ImageResource::fetch(placeholderRequest, fetcher); | 1090 ImageResource* imageResource = |
| 1091 ImageResource::fetch(placeholderRequest, fetcher); |
| 1065 Persistent<MockImageResourceClient> client = | 1092 Persistent<MockImageResourceClient> client = |
| 1066 new MockImageResourceClient(image); | 1093 new MockImageResourceClient(imageResource); |
| 1067 | 1094 |
| 1068 FetchRequest nonPlaceholderRequest(testURL, FetchInitiatorInfo()); | 1095 FetchRequest nonPlaceholderRequest(testURL, FetchInitiatorInfo()); |
| 1069 ImageResource* secondImage = | 1096 ImageResource* secondImageResource = |
| 1070 ImageResource::fetch(nonPlaceholderRequest, fetcher); | 1097 ImageResource::fetch(nonPlaceholderRequest, fetcher); |
| 1071 EXPECT_EQ(image, secondImage); | 1098 EXPECT_EQ(imageResource, secondImageResource); |
| 1072 EXPECT_EQ(Resource::Pending, image->getStatus()); | 1099 EXPECT_EQ(Resource::Pending, imageResource->getStatus()); |
| 1073 EXPECT_FALSE(image->isPlaceholder()); | 1100 EXPECT_FALSE(imageResource->isPlaceholder()); |
| 1074 EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range")); | 1101 EXPECT_EQ(nullAtom, |
| 1075 EXPECT_EQ(static_cast<int>(WebCachePolicy::UseProtocolCachePolicy), | 1102 imageResource->resourceRequest().httpHeaderField("range")); |
| 1076 static_cast<int>(image->resourceRequest().getCachePolicy())); | 1103 EXPECT_EQ( |
| 1104 static_cast<int>(WebCachePolicy::UseProtocolCachePolicy), |
| 1105 static_cast<int>(imageResource->resourceRequest().getCachePolicy())); |
| 1077 EXPECT_FALSE(client->notifyFinishedCalled()); | 1106 EXPECT_FALSE(client->notifyFinishedCalled()); |
| 1078 | 1107 |
| 1079 image->loader()->cancel(); | 1108 imageResource->loader()->cancel(); |
| 1080 } | 1109 } |
| 1081 | 1110 |
| 1082 TEST(ImageResourceTest, | 1111 TEST(ImageResourceTest, |
| 1083 FetchAllowPlaceholderThenDisallowPlaceholderAfterLoaded) { | 1112 FetchAllowPlaceholderThenDisallowPlaceholderAfterLoaded) { |
| 1084 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 1113 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 1085 ScopedRegisteredURL scopedRegisteredURL(testURL); | 1114 ScopedRegisteredURL scopedRegisteredURL(testURL); |
| 1086 | 1115 |
| 1087 ResourceFetcher* fetcher = | 1116 ResourceFetcher* fetcher = |
| 1088 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); | 1117 ResourceFetcher::create(ImageResourceTestMockFetchContext::create()); |
| 1089 FetchRequest placeholderRequest(testURL, FetchInitiatorInfo()); | 1118 FetchRequest placeholderRequest(testURL, FetchInitiatorInfo()); |
| 1090 placeholderRequest.setAllowImagePlaceholder(); | 1119 placeholderRequest.setAllowImagePlaceholder(); |
| 1091 ImageResource* image = ImageResource::fetch(placeholderRequest, fetcher); | 1120 ImageResource* imageResource = |
| 1121 ImageResource::fetch(placeholderRequest, fetcher); |
| 1092 Persistent<MockImageResourceClient> client = | 1122 Persistent<MockImageResourceClient> client = |
| 1093 new MockImageResourceClient(image); | 1123 new MockImageResourceClient(imageResource); |
| 1094 | 1124 |
| 1095 ResourceResponse response(testURL, "image/jpeg", | 1125 ResourceResponse response(testURL, "image/jpeg", |
| 1096 kJpegImageSubrangeWithDimensionsLength, nullAtom, | 1126 kJpegImageSubrangeWithDimensionsLength, nullAtom, |
| 1097 String()); | 1127 String()); |
| 1098 response.setHTTPStatusCode(206); | 1128 response.setHTTPStatusCode(206); |
| 1099 response.setHTTPHeaderField( | 1129 response.setHTTPHeaderField( |
| 1100 "content-range", buildContentRange(kJpegImageSubrangeWithDimensionsLength, | 1130 "content-range", buildContentRange(kJpegImageSubrangeWithDimensionsLength, |
| 1101 sizeof(kJpegImage))); | 1131 sizeof(kJpegImage))); |
| 1102 image->loader()->didReceiveResponse(WrappedResourceResponse(response)); | 1132 imageResource->loader()->didReceiveResponse( |
| 1103 image->loader()->didReceiveData(reinterpret_cast<const char*>(kJpegImage), | 1133 WrappedResourceResponse(response)); |
| 1104 kJpegImageSubrangeWithDimensionsLength); | 1134 imageResource->loader()->didReceiveData( |
| 1105 image->loader()->didFinishLoading(0.0, kJpegImageSubrangeWithDimensionsLength, | 1135 reinterpret_cast<const char*>(kJpegImage), |
| 1106 kJpegImageSubrangeWithDimensionsLength); | 1136 kJpegImageSubrangeWithDimensionsLength); |
| 1137 imageResource->loader()->didFinishLoading( |
| 1138 0.0, kJpegImageSubrangeWithDimensionsLength, |
| 1139 kJpegImageSubrangeWithDimensionsLength); |
| 1107 | 1140 |
| 1108 EXPECT_EQ(Resource::Cached, image->getStatus()); | 1141 EXPECT_EQ(Resource::Cached, imageResource->getStatus()); |
| 1109 EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, image->encodedSize()); | 1142 EXPECT_EQ(kJpegImageSubrangeWithDimensionsLength, |
| 1110 EXPECT_TRUE(image->isPlaceholder()); | 1143 imageResource->encodedSize()); |
| 1144 EXPECT_TRUE(imageResource->isPlaceholder()); |
| 1111 EXPECT_LT(0, client->imageChangedCount()); | 1145 EXPECT_LT(0, client->imageChangedCount()); |
| 1112 EXPECT_TRUE(client->notifyFinishedCalled()); | 1146 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 1113 | 1147 |
| 1114 FetchRequest nonPlaceholderRequest(testURL, FetchInitiatorInfo()); | 1148 FetchRequest nonPlaceholderRequest(testURL, FetchInitiatorInfo()); |
| 1115 ImageResource* secondImage = | 1149 ImageResource* secondImageResource = |
| 1116 ImageResource::fetch(nonPlaceholderRequest, fetcher); | 1150 ImageResource::fetch(nonPlaceholderRequest, fetcher); |
| 1117 EXPECT_EQ(image, secondImage); | 1151 EXPECT_EQ(imageResource, secondImageResource); |
| 1118 EXPECT_EQ(Resource::Pending, image->getStatus()); | 1152 EXPECT_EQ(Resource::Pending, imageResource->getStatus()); |
| 1119 EXPECT_FALSE(image->isPlaceholder()); | 1153 EXPECT_FALSE(imageResource->isPlaceholder()); |
| 1120 EXPECT_EQ(nullAtom, image->resourceRequest().httpHeaderField("range")); | 1154 EXPECT_EQ(nullAtom, |
| 1121 EXPECT_EQ(static_cast<int>(WebCachePolicy::UseProtocolCachePolicy), | 1155 imageResource->resourceRequest().httpHeaderField("range")); |
| 1122 static_cast<int>(image->resourceRequest().getCachePolicy())); | 1156 EXPECT_EQ( |
| 1157 static_cast<int>(WebCachePolicy::UseProtocolCachePolicy), |
| 1158 static_cast<int>(imageResource->resourceRequest().getCachePolicy())); |
| 1123 | 1159 |
| 1124 image->loader()->cancel(); | 1160 imageResource->loader()->cancel(); |
| 1125 } | 1161 } |
| 1126 | 1162 |
| 1127 TEST(ImageResourceTest, PeriodicFlushTest) { | 1163 TEST(ImageResourceTest, PeriodicFlushTest) { |
| 1128 TestingPlatformSupportWithMockScheduler platform; | 1164 TestingPlatformSupportWithMockScheduler platform; |
| 1129 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); | 1165 KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); |
| 1130 URLTestHelpers::registerMockedURLLoad(testURL, "cancelTest.html", | 1166 URLTestHelpers::registerMockedURLLoad(testURL, "cancelTest.html", |
| 1131 "text/html"); | 1167 "text/html"); |
| 1132 ResourceRequest request = ResourceRequest(testURL); | 1168 ResourceRequest request = ResourceRequest(testURL); |
| 1133 ImageResource* cachedImage = ImageResource::create(request); | 1169 ImageResource* imageResource = ImageResource::create(request); |
| 1134 cachedImage->setStatus(Resource::Pending); | 1170 imageResource->setStatus(Resource::Pending); |
| 1135 | 1171 |
| 1136 Persistent<MockImageResourceClient> client = | 1172 Persistent<MockImageResourceClient> client = |
| 1137 new MockImageResourceClient(cachedImage); | 1173 new MockImageResourceClient(imageResource); |
| 1138 | 1174 |
| 1139 // Send the image response. | 1175 // Send the image response. |
| 1140 ResourceResponse resourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage2), | 1176 ResourceResponse resourceResponse(KURL(), "image/jpeg", sizeof(kJpegImage2), |
| 1141 nullAtom, String()); | 1177 nullAtom, String()); |
| 1142 resourceResponse.addHTTPHeaderField("chrome-proxy", "q=low"); | 1178 resourceResponse.addHTTPHeaderField("chrome-proxy", "q=low"); |
| 1143 | 1179 |
| 1144 cachedImage->responseReceived(resourceResponse, nullptr); | 1180 imageResource->responseReceived(resourceResponse, nullptr); |
| 1145 | 1181 |
| 1146 // This is number is sufficiently large amount of bytes necessary for the | 1182 // This is number is sufficiently large amount of bytes necessary for the |
| 1147 // image to be created (since the size is known). This was determined by | 1183 // image to be created (since the size is known). This was determined by |
| 1148 // appending one byte at a time (with flushes) until the image was decoded. | 1184 // appending one byte at a time (with flushes) until the image was decoded. |
| 1149 size_t meaningfulImageSize = 280; | 1185 size_t meaningfulImageSize = 280; |
| 1150 cachedImage->appendData(reinterpret_cast<const char*>(kJpegImage2), | 1186 imageResource->appendData(reinterpret_cast<const char*>(kJpegImage2), |
| 1151 meaningfulImageSize); | 1187 meaningfulImageSize); |
| 1152 size_t bytesSent = meaningfulImageSize; | 1188 size_t bytesSent = meaningfulImageSize; |
| 1153 | 1189 |
| 1154 EXPECT_FALSE(cachedImage->errorOccurred()); | 1190 EXPECT_FALSE(imageResource->errorOccurred()); |
| 1155 EXPECT_TRUE(cachedImage->getContent()->hasImage()); | 1191 EXPECT_TRUE(imageResource->getContent()->hasImage()); |
| 1156 EXPECT_EQ(1, client->imageChangedCount()); | 1192 EXPECT_EQ(1, client->imageChangedCount()); |
| 1157 | 1193 |
| 1158 platform.runForPeriodSeconds(1.); | 1194 platform.runForPeriodSeconds(1.); |
| 1159 platform.advanceClockSeconds(1.); | 1195 platform.advanceClockSeconds(1.); |
| 1160 | 1196 |
| 1161 // Sanity check that we created an image after appending |meaningfulImageSize| | 1197 // Sanity check that we created an image after appending |meaningfulImageSize| |
| 1162 // bytes just once. | 1198 // bytes just once. |
| 1163 EXPECT_FALSE(cachedImage->errorOccurred()); | 1199 EXPECT_FALSE(imageResource->errorOccurred()); |
| 1164 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 1200 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 1165 EXPECT_EQ(1, client->imageChangedCount()); | 1201 EXPECT_EQ(1, client->imageChangedCount()); |
| 1166 | 1202 |
| 1167 for (int flushCount = 1; flushCount <= 3; ++flushCount) { | 1203 for (int flushCount = 1; flushCount <= 3; ++flushCount) { |
| 1168 // For each of the iteration that appends data, we don't expect | 1204 // For each of the iteration that appends data, we don't expect |
| 1169 // |imageChangeCount()| to change, since the time is adjusted by 0.2001 | 1205 // |imageChangeCount()| to change, since the time is adjusted by 0.2001 |
| 1170 // seconds (it's greater than 0.2 to avoid double precision problems). | 1206 // seconds (it's greater than 0.2 to avoid double precision problems). |
| 1171 // After 5 appends, we breach the flush interval and the flush count | 1207 // After 5 appends, we breach the flush interval and the flush count |
| 1172 // increases. | 1208 // increases. |
| 1173 for (int i = 0; i < 5; ++i) { | 1209 for (int i = 0; i < 5; ++i) { |
| 1174 SCOPED_TRACE(i); | 1210 SCOPED_TRACE(i); |
| 1175 cachedImage->appendData( | 1211 imageResource->appendData( |
| 1176 reinterpret_cast<const char*>(kJpegImage2) + bytesSent, 1); | 1212 reinterpret_cast<const char*>(kJpegImage2) + bytesSent, 1); |
| 1177 | 1213 |
| 1178 EXPECT_FALSE(cachedImage->errorOccurred()); | 1214 EXPECT_FALSE(imageResource->errorOccurred()); |
| 1179 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 1215 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 1180 EXPECT_EQ(flushCount, client->imageChangedCount()); | 1216 EXPECT_EQ(flushCount, client->imageChangedCount()); |
| 1181 | 1217 |
| 1182 ++bytesSent; | 1218 ++bytesSent; |
| 1183 platform.runForPeriodSeconds(0.2001); | 1219 platform.runForPeriodSeconds(0.2001); |
| 1184 } | 1220 } |
| 1185 } | 1221 } |
| 1186 | 1222 |
| 1187 // Increasing time by a large number only causes one extra flush. | 1223 // Increasing time by a large number only causes one extra flush. |
| 1188 platform.runForPeriodSeconds(10.); | 1224 platform.runForPeriodSeconds(10.); |
| 1189 platform.advanceClockSeconds(10.); | 1225 platform.advanceClockSeconds(10.); |
| 1190 EXPECT_FALSE(cachedImage->errorOccurred()); | 1226 EXPECT_FALSE(imageResource->errorOccurred()); |
| 1191 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 1227 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 1192 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 1228 EXPECT_FALSE(imageResource->getContent()->getImage()->isNull()); |
| 1193 EXPECT_EQ(4, client->imageChangedCount()); | 1229 EXPECT_EQ(4, client->imageChangedCount()); |
| 1194 | 1230 |
| 1195 // Append the rest of the data and finish (which causes another flush). | 1231 // Append the rest of the data and finish (which causes another flush). |
| 1196 cachedImage->appendData( | 1232 imageResource->appendData( |
| 1197 reinterpret_cast<const char*>(kJpegImage2) + bytesSent, | 1233 reinterpret_cast<const char*>(kJpegImage2) + bytesSent, |
| 1198 sizeof(kJpegImage2) - bytesSent); | 1234 sizeof(kJpegImage2) - bytesSent); |
| 1199 cachedImage->finish(); | 1235 imageResource->finish(); |
| 1200 | 1236 |
| 1201 EXPECT_FALSE(cachedImage->errorOccurred()); | 1237 EXPECT_FALSE(imageResource->errorOccurred()); |
| 1202 ASSERT_TRUE(cachedImage->getContent()->hasImage()); | 1238 ASSERT_TRUE(imageResource->getContent()->hasImage()); |
| 1203 EXPECT_FALSE(cachedImage->getContent()->getImage()->isNull()); | 1239 EXPECT_FALSE(imageResource->getContent()->getImage()->isNull()); |
| 1204 EXPECT_EQ(5, client->imageChangedCount()); | 1240 EXPECT_EQ(5, client->imageChangedCount()); |
| 1205 EXPECT_TRUE(client->notifyFinishedCalled()); | 1241 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 1206 EXPECT_TRUE(cachedImage->getContent()->getImage()->isBitmapImage()); | 1242 EXPECT_TRUE(imageResource->getContent()->getImage()->isBitmapImage()); |
| 1207 EXPECT_EQ(50, cachedImage->getContent()->getImage()->width()); | 1243 EXPECT_EQ(50, imageResource->getContent()->getImage()->width()); |
| 1208 EXPECT_EQ(50, cachedImage->getContent()->getImage()->height()); | 1244 EXPECT_EQ(50, imageResource->getContent()->getImage()->height()); |
| 1209 | 1245 |
| 1210 WTF::setTimeFunctionsForTesting(nullptr); | 1246 WTF::setTimeFunctionsForTesting(nullptr); |
| 1211 } | 1247 } |
| 1212 | 1248 |
| 1213 } // namespace | 1249 } // namespace |
| 1214 } // namespace blink | 1250 } // namespace blink |
| OLD | NEW |