| 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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 imageElement, cropRect, &(imageElement->document()), defaultOptions); | 120 imageElement, cropRect, &(imageElement->document()), defaultOptions); |
| 121 cropRect = IntRect(-m_image->width() / 2, -m_image->height() / 2, | 121 cropRect = IntRect(-m_image->width() / 2, -m_image->height() / 2, |
| 122 m_image->width(), m_image->height()); | 122 m_image->width(), m_image->height()); |
| 123 ImageBitmap* imageBitmapExteriorCrop = ImageBitmap::create( | 123 ImageBitmap* imageBitmapExteriorCrop = ImageBitmap::create( |
| 124 imageElement, cropRect, &(imageElement->document()), defaultOptions); | 124 imageElement, cropRect, &(imageElement->document()), defaultOptions); |
| 125 cropRect = IntRect(-m_image->width(), -m_image->height(), m_image->width(), | 125 cropRect = IntRect(-m_image->width(), -m_image->height(), m_image->width(), |
| 126 m_image->height()); | 126 m_image->height()); |
| 127 ImageBitmap* imageBitmapOutsideCrop = ImageBitmap::create( | 127 ImageBitmap* imageBitmapOutsideCrop = ImageBitmap::create( |
| 128 imageElement, cropRect, &(imageElement->document()), defaultOptions); | 128 imageElement, cropRect, &(imageElement->document()), defaultOptions); |
| 129 | 129 |
| 130 ASSERT_NE(imageBitmapNoCrop->bitmapImage()->imageForCurrentFrame( | 130 ASSERT_NE(imageBitmapNoCrop->bitmapImage()->imageForCurrentFrame(), |
| 131 ColorBehavior::transformToTargetForTesting()), | 131 imageElement->cachedImage()->getImage()->imageForCurrentFrame()); |
| 132 imageElement->cachedImage()->getImage()->imageForCurrentFrame( | 132 ASSERT_NE(imageBitmapInteriorCrop->bitmapImage()->imageForCurrentFrame(), |
| 133 ColorBehavior::transformToTargetForTesting())); | 133 imageElement->cachedImage()->getImage()->imageForCurrentFrame()); |
| 134 ASSERT_NE(imageBitmapInteriorCrop->bitmapImage()->imageForCurrentFrame( | 134 ASSERT_NE(imageBitmapExteriorCrop->bitmapImage()->imageForCurrentFrame(), |
| 135 ColorBehavior::transformToTargetForTesting()), | 135 imageElement->cachedImage()->getImage()->imageForCurrentFrame()); |
| 136 imageElement->cachedImage()->getImage()->imageForCurrentFrame( | |
| 137 ColorBehavior::transformToTargetForTesting())); | |
| 138 ASSERT_NE(imageBitmapExteriorCrop->bitmapImage()->imageForCurrentFrame( | |
| 139 ColorBehavior::transformToTargetForTesting()), | |
| 140 imageElement->cachedImage()->getImage()->imageForCurrentFrame( | |
| 141 ColorBehavior::transformToTargetForTesting())); | |
| 142 | 136 |
| 143 StaticBitmapImage* emptyImage = imageBitmapOutsideCrop->bitmapImage(); | 137 StaticBitmapImage* emptyImage = imageBitmapOutsideCrop->bitmapImage(); |
| 144 ASSERT_NE(emptyImage->imageForCurrentFrame( | 138 ASSERT_NE(emptyImage->imageForCurrentFrame(), |
| 145 ColorBehavior::transformToTargetForTesting()), | 139 imageElement->cachedImage()->getImage()->imageForCurrentFrame()); |
| 146 imageElement->cachedImage()->getImage()->imageForCurrentFrame( | |
| 147 ColorBehavior::transformToTargetForTesting())); | |
| 148 } | 140 } |
| 149 | 141 |
| 150 // Verifies that ImageBitmaps constructed from HTMLImageElements hold a | 142 // Verifies that ImageBitmaps constructed from HTMLImageElements hold a |
| 151 // reference to the original Image if the HTMLImageElement src is changed. | 143 // reference to the original Image if the HTMLImageElement src is changed. |
| 152 TEST_F(ImageBitmapTest, ImageBitmapSourceChanged) { | 144 TEST_F(ImageBitmapTest, ImageBitmapSourceChanged) { |
| 153 HTMLImageElement* image = HTMLImageElement::create(*Document::create()); | 145 HTMLImageElement* image = HTMLImageElement::create(*Document::create()); |
| 154 ImageResourceContent* originalImageResource = | 146 ImageResourceContent* originalImageResource = |
| 155 ImageResourceContent::create(StaticBitmapImage::create(m_image).get()); | 147 ImageResourceContent::create(StaticBitmapImage::create(m_image).get()); |
| 156 image->setImageResource(originalImageResource); | 148 image->setImageResource(originalImageResource); |
| 157 | 149 |
| 158 const ImageBitmapOptions defaultOptions; | 150 const ImageBitmapOptions defaultOptions; |
| 159 Optional<IntRect> cropRect = | 151 Optional<IntRect> cropRect = |
| 160 IntRect(0, 0, m_image->width(), m_image->height()); | 152 IntRect(0, 0, m_image->width(), m_image->height()); |
| 161 ImageBitmap* imageBitmap = ImageBitmap::create( | 153 ImageBitmap* imageBitmap = ImageBitmap::create( |
| 162 image, cropRect, &(image->document()), defaultOptions); | 154 image, cropRect, &(image->document()), defaultOptions); |
| 163 // As we are applying color space conversion for the "default" mode, | 155 // As we are applying color space conversion for the "default" mode, |
| 164 // this verifies that the color corrected image is not the same as the | 156 // this verifies that the color corrected image is not the same as the |
| 165 // source. | 157 // source. |
| 166 ASSERT_NE(imageBitmap->bitmapImage()->imageForCurrentFrame( | 158 ASSERT_NE(imageBitmap->bitmapImage()->imageForCurrentFrame(), |
| 167 ColorBehavior::transformToTargetForTesting()), | 159 originalImageResource->getImage()->imageForCurrentFrame()); |
| 168 originalImageResource->getImage()->imageForCurrentFrame( | |
| 169 ColorBehavior::transformToTargetForTesting())); | |
| 170 | 160 |
| 171 ImageResourceContent* newImageResource = | 161 ImageResourceContent* newImageResource = |
| 172 ImageResourceContent::create(StaticBitmapImage::create(m_image2).get()); | 162 ImageResourceContent::create(StaticBitmapImage::create(m_image2).get()); |
| 173 image->setImageResource(newImageResource); | 163 image->setImageResource(newImageResource); |
| 174 | 164 |
| 175 { | 165 { |
| 176 ASSERT_NE(imageBitmap->bitmapImage()->imageForCurrentFrame( | 166 ASSERT_NE(imageBitmap->bitmapImage()->imageForCurrentFrame(), |
| 177 ColorBehavior::transformToTargetForTesting()), | 167 originalImageResource->getImage()->imageForCurrentFrame()); |
| 178 originalImageResource->getImage()->imageForCurrentFrame( | 168 SkImage* image1 = imageBitmap->bitmapImage()->imageForCurrentFrame().get(); |
| 179 ColorBehavior::transformToTargetForTesting())); | |
| 180 SkImage* image1 = | |
| 181 imageBitmap->bitmapImage() | |
| 182 ->imageForCurrentFrame(ColorBehavior::transformToTargetForTesting()) | |
| 183 .get(); | |
| 184 ASSERT_NE(image1, nullptr); | 169 ASSERT_NE(image1, nullptr); |
| 185 SkImage* image2 = | 170 SkImage* image2 = |
| 186 originalImageResource->getImage() | 171 originalImageResource->getImage()->imageForCurrentFrame().get(); |
| 187 ->imageForCurrentFrame(ColorBehavior::transformToTargetForTesting()) | |
| 188 .get(); | |
| 189 ASSERT_NE(image2, nullptr); | 172 ASSERT_NE(image2, nullptr); |
| 190 ASSERT_NE(image1, image2); | 173 ASSERT_NE(image1, image2); |
| 191 } | 174 } |
| 192 | 175 |
| 193 { | 176 { |
| 194 ASSERT_NE(imageBitmap->bitmapImage()->imageForCurrentFrame( | 177 ASSERT_NE(imageBitmap->bitmapImage()->imageForCurrentFrame(), |
| 195 ColorBehavior::transformToTargetForTesting()), | 178 newImageResource->getImage()->imageForCurrentFrame()); |
| 196 newImageResource->getImage()->imageForCurrentFrame( | 179 SkImage* image1 = imageBitmap->bitmapImage()->imageForCurrentFrame().get(); |
| 197 ColorBehavior::transformToTargetForTesting())); | |
| 198 SkImage* image1 = | |
| 199 imageBitmap->bitmapImage() | |
| 200 ->imageForCurrentFrame(ColorBehavior::transformToTargetForTesting()) | |
| 201 .get(); | |
| 202 ASSERT_NE(image1, nullptr); | 180 ASSERT_NE(image1, nullptr); |
| 203 SkImage* image2 = | 181 SkImage* image2 = |
| 204 newImageResource->getImage() | 182 newImageResource->getImage()->imageForCurrentFrame().get(); |
| 205 ->imageForCurrentFrame(ColorBehavior::transformToTargetForTesting()) | |
| 206 .get(); | |
| 207 ASSERT_NE(image2, nullptr); | 183 ASSERT_NE(image2, nullptr); |
| 208 ASSERT_NE(image1, image2); | 184 ASSERT_NE(image1, image2); |
| 209 } | 185 } |
| 210 } | 186 } |
| 211 | 187 |
| 212 enum class ColorSpaceConversion : uint8_t { | 188 enum class ColorSpaceConversion : uint8_t { |
| 213 NONE = 0, | 189 NONE = 0, |
| 214 DEFAULT_NOT_COLOR_CORRECTED = 1, | 190 DEFAULT_NOT_COLOR_CORRECTED = 1, |
| 215 DEFAULT_COLOR_CORRECTED = 2, | 191 DEFAULT_COLOR_CORRECTED = 2, |
| 216 SRGB = 3, | 192 SRGB = 3, |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 for (uint8_t i = static_cast<uint8_t>( | 255 for (uint8_t i = static_cast<uint8_t>( |
| 280 ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED); | 256 ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED); |
| 281 i <= static_cast<uint8_t>(ColorSpaceConversion::LAST); i++) { | 257 i <= static_cast<uint8_t>(ColorSpaceConversion::LAST); i++) { |
| 282 ColorSpaceConversion colorSpaceConversion = | 258 ColorSpaceConversion colorSpaceConversion = |
| 283 static_cast<ColorSpaceConversion>(i); | 259 static_cast<ColorSpaceConversion>(i); |
| 284 ImageBitmapOptions options = | 260 ImageBitmapOptions options = |
| 285 prepareBitmapOptionsAndSetRuntimeFlags(colorSpaceConversion); | 261 prepareBitmapOptionsAndSetRuntimeFlags(colorSpaceConversion); |
| 286 ImageBitmap* imageBitmap = ImageBitmap::create( | 262 ImageBitmap* imageBitmap = ImageBitmap::create( |
| 287 imageElement, cropRect, &(imageElement->document()), options); | 263 imageElement, cropRect, &(imageElement->document()), options); |
| 288 | 264 |
| 289 // ColorBehavior::ignore() is used instead of | |
| 290 // ColorBehavior::transformToTargetForTesting() to avoid color conversion to | |
| 291 // display color profile, as we want to solely rely on the color correction | |
| 292 // that happens in ImageBitmap create method. | |
| 293 SkImage* convertedImage = | 265 SkImage* convertedImage = |
| 294 imageBitmap->bitmapImage() | 266 imageBitmap->bitmapImage()->imageForCurrentFrame().get(); |
| 295 ->imageForCurrentFrame(ColorBehavior::ignore()) | |
| 296 .get(); | |
| 297 | 267 |
| 298 switch (colorSpaceConversion) { | 268 switch (colorSpaceConversion) { |
| 299 case ColorSpaceConversion::NONE: | 269 case ColorSpaceConversion::NONE: |
| 300 NOTREACHED(); | 270 NOTREACHED(); |
| 301 break; | 271 break; |
| 302 case ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED: | 272 case ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED: |
| 303 colorSpace = ColorBehavior::globalTargetColorSpace().ToSkColorSpace(); | 273 colorSpace = ColorBehavior::globalTargetColorSpace().ToSkColorSpace(); |
| 304 colorFormat = colorFormat32; | 274 colorFormat = colorFormat32; |
| 305 break; | 275 break; |
| 306 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: | 276 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 SkColorSpaceXform::ColorFormat colorFormat = colorFormat32; | 348 SkColorSpaceXform::ColorFormat colorFormat = colorFormat32; |
| 379 | 349 |
| 380 for (uint8_t i = static_cast<uint8_t>( | 350 for (uint8_t i = static_cast<uint8_t>( |
| 381 ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED); | 351 ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED); |
| 382 i <= static_cast<uint8_t>(ColorSpaceConversion::LAST); i++) { | 352 i <= static_cast<uint8_t>(ColorSpaceConversion::LAST); i++) { |
| 383 ColorSpaceConversion colorSpaceConversion = | 353 ColorSpaceConversion colorSpaceConversion = |
| 384 static_cast<ColorSpaceConversion>(i); | 354 static_cast<ColorSpaceConversion>(i); |
| 385 options = prepareBitmapOptionsAndSetRuntimeFlags(colorSpaceConversion); | 355 options = prepareBitmapOptionsAndSetRuntimeFlags(colorSpaceConversion); |
| 386 ImageBitmap* imageBitmap = | 356 ImageBitmap* imageBitmap = |
| 387 ImageBitmap::create(sourceImageBitmap, cropRect, options); | 357 ImageBitmap::create(sourceImageBitmap, cropRect, options); |
| 388 // ColorBehavior::ignore() is used instead of | |
| 389 // ColorBehavior::transformToTargetForTesting() to avoid color conversion to | |
| 390 // display color profile, as we want to solely rely on the color correction | |
| 391 // that happens in ImageBitmap create method. | |
| 392 SkImage* convertedImage = | 358 SkImage* convertedImage = |
| 393 imageBitmap->bitmapImage() | 359 imageBitmap->bitmapImage()->imageForCurrentFrame().get(); |
| 394 ->imageForCurrentFrame(ColorBehavior::ignore()) | |
| 395 .get(); | |
| 396 | 360 |
| 397 switch (colorSpaceConversion) { | 361 switch (colorSpaceConversion) { |
| 398 case ColorSpaceConversion::NONE: | 362 case ColorSpaceConversion::NONE: |
| 399 NOTREACHED(); | 363 NOTREACHED(); |
| 400 break; | 364 break; |
| 401 case ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED: | 365 case ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED: |
| 402 colorSpace = ColorBehavior::globalTargetColorSpace().ToSkColorSpace(); | 366 colorSpace = ColorBehavior::globalTargetColorSpace().ToSkColorSpace(); |
| 403 colorFormat = colorFormat32; | 367 colorFormat = colorFormat32; |
| 404 break; | 368 break; |
| 405 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: | 369 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 for (uint8_t i = static_cast<uint8_t>( | 432 for (uint8_t i = static_cast<uint8_t>( |
| 469 ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED); | 433 ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED); |
| 470 i <= static_cast<uint8_t>(ColorSpaceConversion::LAST); i++) { | 434 i <= static_cast<uint8_t>(ColorSpaceConversion::LAST); i++) { |
| 471 ColorSpaceConversion colorSpaceConversion = | 435 ColorSpaceConversion colorSpaceConversion = |
| 472 static_cast<ColorSpaceConversion>(i); | 436 static_cast<ColorSpaceConversion>(i); |
| 473 ImageBitmapOptions options = | 437 ImageBitmapOptions options = |
| 474 prepareBitmapOptionsAndSetRuntimeFlags(colorSpaceConversion); | 438 prepareBitmapOptionsAndSetRuntimeFlags(colorSpaceConversion); |
| 475 ImageBitmap* imageBitmap = ImageBitmap::create( | 439 ImageBitmap* imageBitmap = ImageBitmap::create( |
| 476 StaticBitmapImage::create(image), cropRect, options); | 440 StaticBitmapImage::create(image), cropRect, options); |
| 477 | 441 |
| 478 // ColorBehavior::ignore() is used instead of | |
| 479 // ColorBehavior::transformToTargetForTesting() to avoid color conversion to | |
| 480 // display color profile, as we want to solely rely on the color correction | |
| 481 // that happens in ImageBitmap create method. | |
| 482 SkImage* convertedImage = | 442 SkImage* convertedImage = |
| 483 imageBitmap->bitmapImage() | 443 imageBitmap->bitmapImage()->imageForCurrentFrame().get(); |
| 484 ->imageForCurrentFrame(ColorBehavior::ignore()) | |
| 485 .get(); | |
| 486 | 444 |
| 487 switch (colorSpaceConversion) { | 445 switch (colorSpaceConversion) { |
| 488 case ColorSpaceConversion::NONE: | 446 case ColorSpaceConversion::NONE: |
| 489 NOTREACHED(); | 447 NOTREACHED(); |
| 490 break; | 448 break; |
| 491 case ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED: | 449 case ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED: |
| 492 colorSpace = ColorBehavior::globalTargetColorSpace().ToSkColorSpace(); | 450 colorSpace = ColorBehavior::globalTargetColorSpace().ToSkColorSpace(); |
| 493 colorFormat = colorFormat32; | 451 colorFormat = colorFormat32; |
| 494 break; | 452 break; |
| 495 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: | 453 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 for (uint8_t i = | 507 for (uint8_t i = |
| 550 static_cast<uint8_t>(ColorSpaceConversion::DEFAULT_COLOR_CORRECTED); | 508 static_cast<uint8_t>(ColorSpaceConversion::DEFAULT_COLOR_CORRECTED); |
| 551 i <= static_cast<uint8_t>(ColorSpaceConversion::LAST); i++) { | 509 i <= static_cast<uint8_t>(ColorSpaceConversion::LAST); i++) { |
| 552 ColorSpaceConversion colorSpaceConversion = | 510 ColorSpaceConversion colorSpaceConversion = |
| 553 static_cast<ColorSpaceConversion>(i); | 511 static_cast<ColorSpaceConversion>(i); |
| 554 ImageBitmapOptions options = | 512 ImageBitmapOptions options = |
| 555 prepareBitmapOptionsAndSetRuntimeFlags(colorSpaceConversion); | 513 prepareBitmapOptionsAndSetRuntimeFlags(colorSpaceConversion); |
| 556 ImageBitmap* imageBitmap = | 514 ImageBitmap* imageBitmap = |
| 557 ImageBitmap::create(imageData, cropRect, options); | 515 ImageBitmap::create(imageData, cropRect, options); |
| 558 | 516 |
| 559 // ColorBehavior::ignore() is used instead of | |
| 560 // ColorBehavior::transformToTargetForTesting() to avoid color conversion to | |
| 561 // display color profile, as we want to solely rely on the color correction | |
| 562 // that happens in ImageBitmap create method. | |
| 563 SkImage* convertedImage = | 517 SkImage* convertedImage = |
| 564 imageBitmap->bitmapImage() | 518 imageBitmap->bitmapImage()->imageForCurrentFrame().get(); |
| 565 ->imageForCurrentFrame(ColorBehavior::ignore()) | |
| 566 .get(); | |
| 567 | 519 |
| 568 switch (colorSpaceConversion) { | 520 switch (colorSpaceConversion) { |
| 569 case ColorSpaceConversion::NONE: | 521 case ColorSpaceConversion::NONE: |
| 570 NOTREACHED(); | 522 NOTREACHED(); |
| 571 break; | 523 break; |
| 572 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: | 524 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: |
| 573 case ColorSpaceConversion::SRGB: | 525 case ColorSpaceConversion::SRGB: |
| 574 colorSpace = SkColorSpace::MakeSRGB(); | 526 colorSpace = SkColorSpace::MakeSRGB(); |
| 575 colorFormat = colorFormat32; | 527 colorFormat = colorFormat32; |
| 576 break; | 528 break; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 600 colorSpaceXform->apply(colorFormat, transformedPixel.get(), colorFormat32, | 552 colorSpaceXform->apply(colorFormat, transformedPixel.get(), colorFormat32, |
| 601 srcPixel.get(), 1, | 553 srcPixel.get(), 1, |
| 602 SkAlphaType::kUnpremul_SkAlphaType); | 554 SkAlphaType::kUnpremul_SkAlphaType); |
| 603 int compare = std::memcmp(convertedPixel.get(), transformedPixel.get(), | 555 int compare = std::memcmp(convertedPixel.get(), transformedPixel.get(), |
| 604 imageInfo.bytesPerPixel()); | 556 imageInfo.bytesPerPixel()); |
| 605 ASSERT_EQ(compare, 0); | 557 ASSERT_EQ(compare, 0); |
| 606 } | 558 } |
| 607 } | 559 } |
| 608 | 560 |
| 609 } // namespace blink | 561 } // namespace blink |
| OLD | NEW |