Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(639)

Side by Side Diff: third_party/WebKit/Source/core/frame/ImageBitmapTest.cpp

Issue 2727133002: Remove ColorBehavior argument to Image::imageForCurrentFrame (Closed)
Patch Set: Rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/frame/ImageBitmap.cpp ('k') | third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698