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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 | 78 |
79 SkBitmap m_bitmap, m_bitmap2; | 79 SkBitmap m_bitmap, m_bitmap2; |
80 OwnPtr<MemoryCache> m_testingMemoryCache; | 80 OwnPtr<MemoryCache> m_testingMemoryCache; |
81 OwnPtr<MemoryCache> m_globalMemoryCache; | 81 OwnPtr<MemoryCache> m_globalMemoryCache; |
82 }; | 82 }; |
83 | 83 |
84 // Verifies that the image resource held by an ImageBitmap is the same as the | 84 // Verifies that the image resource held by an ImageBitmap is the same as the |
85 // one held by the HTMLImageElement. | 85 // one held by the HTMLImageElement. |
86 TEST_F(ImageBitmapTest, ImageResourceConsistency) | 86 TEST_F(ImageBitmapTest, ImageResourceConsistency) |
87 { | 87 { |
88 RefPtr<HTMLImageElement> imageElement = HTMLImageElement::create(Document::c
reate().get()); | 88 RefPtr<HTMLImageElement> imageElement = HTMLImageElement::create(*Document::
create().get()); |
89 imageElement->setImageResource(new ImageResource(BitmapImage::create(NativeI
mageSkia::create(m_bitmap)).get())); | 89 imageElement->setImageResource(new ImageResource(BitmapImage::create(NativeI
mageSkia::create(m_bitmap)).get())); |
90 | 90 |
91 RefPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imageElement.get
(), IntRect(0, 0, m_bitmap.width(), m_bitmap.height())); | 91 RefPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imageElement.get
(), IntRect(0, 0, m_bitmap.width(), m_bitmap.height())); |
92 RefPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::create(imageEleme
nt.get(), IntRect(m_bitmap.width() / 2, m_bitmap.height() / 2, m_bitmap.width()
/ 2, m_bitmap.height() / 2)); | 92 RefPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::create(imageEleme
nt.get(), IntRect(m_bitmap.width() / 2, m_bitmap.height() / 2, m_bitmap.width()
/ 2, m_bitmap.height() / 2)); |
93 RefPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::create(imageEleme
nt.get(), IntRect(-m_bitmap.width() / 2, -m_bitmap.height() / 2, m_bitmap.width(
), m_bitmap.height())); | 93 RefPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::create(imageEleme
nt.get(), IntRect(-m_bitmap.width() / 2, -m_bitmap.height() / 2, m_bitmap.width(
), m_bitmap.height())); |
94 RefPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create(imageElemen
t.get(), IntRect(-m_bitmap.width(), -m_bitmap.height(), m_bitmap.width(), m_bitm
ap.height())); | 94 RefPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create(imageElemen
t.get(), IntRect(-m_bitmap.width(), -m_bitmap.height(), m_bitmap.width(), m_bitm
ap.height())); |
95 | 95 |
96 ASSERT_EQ(imageBitmapNoCrop->bitmapImage().get(), imageElement->cachedImage(
)->image()); | 96 ASSERT_EQ(imageBitmapNoCrop->bitmapImage().get(), imageElement->cachedImage(
)->image()); |
97 ASSERT_EQ(imageBitmapInteriorCrop->bitmapImage().get(), imageElement->cached
Image()->image()); | 97 ASSERT_EQ(imageBitmapInteriorCrop->bitmapImage().get(), imageElement->cached
Image()->image()); |
98 ASSERT_EQ(imageBitmapExteriorCrop->bitmapImage().get(), imageElement->cached
Image()->image()); | 98 ASSERT_EQ(imageBitmapExteriorCrop->bitmapImage().get(), imageElement->cached
Image()->image()); |
99 | 99 |
100 RefPtr<Image> emptyImage = imageBitmapOutsideCrop->bitmapImage(); | 100 RefPtr<Image> emptyImage = imageBitmapOutsideCrop->bitmapImage(); |
101 ASSERT_NE(emptyImage.get(), imageElement->cachedImage()->image()); | 101 ASSERT_NE(emptyImage.get(), imageElement->cachedImage()->image()); |
102 } | 102 } |
103 | 103 |
104 // Verifies that HTMLImageElements are given an elevated CacheLiveResourcePriori
ty when used to construct an ImageBitmap. | 104 // Verifies that HTMLImageElements are given an elevated CacheLiveResourcePriori
ty when used to construct an ImageBitmap. |
105 // ImageBitmaps that have crop rects outside of the bounds of the HTMLImageEleme
nt do not have elevated CacheLiveResourcePriority. | 105 // ImageBitmaps that have crop rects outside of the bounds of the HTMLImageEleme
nt do not have elevated CacheLiveResourcePriority. |
106 TEST_F(ImageBitmapTest, ImageBitmapLiveResourcePriority) | 106 TEST_F(ImageBitmapTest, ImageBitmapLiveResourcePriority) |
107 { | 107 { |
108 RefPtr<HTMLImageElement> imageNoCrop = HTMLImageElement::create(Document::cr
eate().get()); | 108 RefPtr<HTMLImageElement> imageNoCrop = HTMLImageElement::create(*Document::c
reate().get()); |
109 ResourcePtr<ImageResource> cachedImageNoCrop = new ImageResource(BitmapImage
::create(NativeImageSkia::create(m_bitmap)).get()); | 109 ResourcePtr<ImageResource> cachedImageNoCrop = new ImageResource(BitmapImage
::create(NativeImageSkia::create(m_bitmap)).get()); |
110 imageNoCrop->setImageResource(cachedImageNoCrop.get()); | 110 imageNoCrop->setImageResource(cachedImageNoCrop.get()); |
111 | 111 |
112 RefPtr<HTMLImageElement> imageInteriorCrop = HTMLImageElement::create(Docume
nt::create().get()); | 112 RefPtr<HTMLImageElement> imageInteriorCrop = HTMLImageElement::create(*Docum
ent::create().get()); |
113 ResourcePtr<ImageResource> cachedImageInteriorCrop = new ImageResource(Bitma
pImage::create(NativeImageSkia::create(m_bitmap)).get()); | 113 ResourcePtr<ImageResource> cachedImageInteriorCrop = new ImageResource(Bitma
pImage::create(NativeImageSkia::create(m_bitmap)).get()); |
114 imageInteriorCrop->setImageResource(cachedImageInteriorCrop.get()); | 114 imageInteriorCrop->setImageResource(cachedImageInteriorCrop.get()); |
115 | 115 |
116 RefPtr<HTMLImageElement> imageExteriorCrop = HTMLImageElement::create(Docume
nt::create().get()); | 116 RefPtr<HTMLImageElement> imageExteriorCrop = HTMLImageElement::create(*Docum
ent::create().get()); |
117 ResourcePtr<ImageResource> cachedImageExteriorCrop = new ImageResource(Bitma
pImage::create(NativeImageSkia::create(m_bitmap)).get()); | 117 ResourcePtr<ImageResource> cachedImageExteriorCrop = new ImageResource(Bitma
pImage::create(NativeImageSkia::create(m_bitmap)).get()); |
118 imageExteriorCrop->setImageResource(cachedImageExteriorCrop.get()); | 118 imageExteriorCrop->setImageResource(cachedImageExteriorCrop.get()); |
119 | 119 |
120 RefPtr<HTMLImageElement> imageOutsideCrop = HTMLImageElement::create(Documen
t::create().get()); | 120 RefPtr<HTMLImageElement> imageOutsideCrop = HTMLImageElement::create(*Docume
nt::create().get()); |
121 ResourcePtr<ImageResource> cachedImageOutsideCrop = new ImageResource(Bitmap
Image::create(NativeImageSkia::create(m_bitmap)).get()); | 121 ResourcePtr<ImageResource> cachedImageOutsideCrop = new ImageResource(Bitmap
Image::create(NativeImageSkia::create(m_bitmap)).get()); |
122 imageOutsideCrop->setImageResource(cachedImageOutsideCrop.get()); | 122 imageOutsideCrop->setImageResource(cachedImageOutsideCrop.get()); |
123 | 123 |
124 MockImageResourceClient mockClient1, mockClient2, mockClient3, mockClient4; | 124 MockImageResourceClient mockClient1, mockClient2, mockClient3, mockClient4; |
125 cachedImageNoCrop->addClient(&mockClient1); | 125 cachedImageNoCrop->addClient(&mockClient1); |
126 cachedImageInteriorCrop->addClient(&mockClient2); | 126 cachedImageInteriorCrop->addClient(&mockClient2); |
127 cachedImageExteriorCrop->addClient(&mockClient3); | 127 cachedImageExteriorCrop->addClient(&mockClient3); |
128 cachedImageOutsideCrop->addClient(&mockClient4); | 128 cachedImageOutsideCrop->addClient(&mockClient4); |
129 | 129 |
130 memoryCache()->add(cachedImageNoCrop.get()); | 130 memoryCache()->add(cachedImageNoCrop.get()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 ASSERT_EQ(imageExteriorCrop->cachedImage()->cacheLiveResourcePriority(), Res
ource::CacheLiveResourcePriorityLow); | 163 ASSERT_EQ(imageExteriorCrop->cachedImage()->cacheLiveResourcePriority(), Res
ource::CacheLiveResourcePriorityLow); |
164 ASSERT_EQ(imageOutsideCrop->cachedImage()->cacheLiveResourcePriority(), Reso
urce::CacheLiveResourcePriorityLow); | 164 ASSERT_EQ(imageOutsideCrop->cachedImage()->cacheLiveResourcePriority(), Reso
urce::CacheLiveResourcePriorityLow); |
165 | 165 |
166 // There is still an ImageBitmap that references this image. | 166 // There is still an ImageBitmap that references this image. |
167 ASSERT_EQ(imageInteriorCrop->cachedImage()->cacheLiveResourcePriority(), Res
ource::CacheLiveResourcePriorityHigh); | 167 ASSERT_EQ(imageInteriorCrop->cachedImage()->cacheLiveResourcePriority(), Res
ource::CacheLiveResourcePriorityHigh); |
168 } | 168 } |
169 | 169 |
170 // Verifies that ImageBitmaps constructed from HTMLImageElements hold a referenc
e to the original Image if the HTMLImageElement src is changed. | 170 // Verifies that ImageBitmaps constructed from HTMLImageElements hold a referenc
e to the original Image if the HTMLImageElement src is changed. |
171 TEST_F(ImageBitmapTest, ImageBitmapSourceChanged) | 171 TEST_F(ImageBitmapTest, ImageBitmapSourceChanged) |
172 { | 172 { |
173 RefPtr<HTMLImageElement> image = HTMLImageElement::create(Document::create()
.get()); | 173 RefPtr<HTMLImageElement> image = HTMLImageElement::create(*Document::create(
).get()); |
174 ResourcePtr<ImageResource> originalImageResource = new ImageResource(BitmapI
mage::create(NativeImageSkia::create(m_bitmap)).get()); | 174 ResourcePtr<ImageResource> originalImageResource = new ImageResource(BitmapI
mage::create(NativeImageSkia::create(m_bitmap)).get()); |
175 image->setImageResource(originalImageResource.get()); | 175 image->setImageResource(originalImageResource.get()); |
176 | 176 |
177 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image.get(), IntRect(0
, 0, m_bitmap.width(), m_bitmap.height())); | 177 RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image.get(), IntRect(0
, 0, m_bitmap.width(), m_bitmap.height())); |
178 ASSERT_EQ(imageBitmap->bitmapImage().get(), originalImageResource->image()); | 178 ASSERT_EQ(imageBitmap->bitmapImage().get(), originalImageResource->image()); |
179 | 179 |
180 ResourcePtr<ImageResource> newImageResource = new ImageResource(BitmapImage:
:create(NativeImageSkia::create(m_bitmap2)).get()); | 180 ResourcePtr<ImageResource> newImageResource = new ImageResource(BitmapImage:
:create(NativeImageSkia::create(m_bitmap2)).get()); |
181 image->setImageResource(newImageResource.get()); | 181 image->setImageResource(newImageResource.get()); |
182 | 182 |
183 // The ImageBitmap should contain the same data as the original cached image
but should no longer hold a reference. | 183 // The ImageBitmap should contain the same data as the original cached image
but should no longer hold a reference. |
184 ASSERT_NE(imageBitmap->bitmapImage().get(), originalImageResource->image()); | 184 ASSERT_NE(imageBitmap->bitmapImage().get(), originalImageResource->image()); |
185 ASSERT_EQ(imageBitmap->bitmapImage()->nativeImageForCurrentFrame()->bitmap()
.pixelRef()->pixels(), | 185 ASSERT_EQ(imageBitmap->bitmapImage()->nativeImageForCurrentFrame()->bitmap()
.pixelRef()->pixels(), |
186 originalImageResource->image()->nativeImageForCurrentFrame()->bitmap().p
ixelRef()->pixels()); | 186 originalImageResource->image()->nativeImageForCurrentFrame()->bitmap().p
ixelRef()->pixels()); |
187 | 187 |
188 ASSERT_NE(imageBitmap->bitmapImage().get(), newImageResource->image()); | 188 ASSERT_NE(imageBitmap->bitmapImage().get(), newImageResource->image()); |
189 ASSERT_NE(imageBitmap->bitmapImage()->nativeImageForCurrentFrame()->bitmap()
.pixelRef()->pixels(), | 189 ASSERT_NE(imageBitmap->bitmapImage()->nativeImageForCurrentFrame()->bitmap()
.pixelRef()->pixels(), |
190 newImageResource->image()->nativeImageForCurrentFrame()->bitmap().pixelR
ef()->pixels()); | 190 newImageResource->image()->nativeImageForCurrentFrame()->bitmap().pixelR
ef()->pixels()); |
191 } | 191 } |
192 | 192 |
193 // Verifies that ImageBitmaps constructed from ImageBitmaps hold onto their own
Image. | 193 // Verifies that ImageBitmaps constructed from ImageBitmaps hold onto their own
Image. |
194 TEST_F(ImageBitmapTest, ImageResourceLifetime) | 194 TEST_F(ImageBitmapTest, ImageResourceLifetime) |
195 { | 195 { |
196 RefPtr<HTMLCanvasElement> canvasElement = HTMLCanvasElement::create(Document
::create().get()); | 196 RefPtr<HTMLCanvasElement> canvasElement = HTMLCanvasElement::create(*Documen
t::create().get()); |
197 canvasElement->setHeight(40); | 197 canvasElement->setHeight(40); |
198 canvasElement->setWidth(40); | 198 canvasElement->setWidth(40); |
199 RefPtr<ImageBitmap> imageBitmapDerived; | 199 RefPtr<ImageBitmap> imageBitmapDerived; |
200 { | 200 { |
201 RefPtr<ImageBitmap> imageBitmapFromCanvas = ImageBitmap::create(canvasEl
ement.get(), IntRect(0, 0, canvasElement->width(), canvasElement->height())); | 201 RefPtr<ImageBitmap> imageBitmapFromCanvas = ImageBitmap::create(canvasEl
ement.get(), IntRect(0, 0, canvasElement->width(), canvasElement->height())); |
202 imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas.get(), In
tRect(0, 0, 20, 20)); | 202 imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas.get(), In
tRect(0, 0, 20, 20)); |
203 } | 203 } |
204 CanvasRenderingContext* context = canvasElement->getContext("2d"); | 204 CanvasRenderingContext* context = canvasElement->getContext("2d"); |
205 TrackExceptionState es; | 205 TrackExceptionState es; |
206 static_cast<CanvasRenderingContext2D*>(context)->drawImage(imageBitmapDerive
d.get(), 0, 0, es); | 206 static_cast<CanvasRenderingContext2D*>(context)->drawImage(imageBitmapDerive
d.get(), 0, 0, es); |
207 } | 207 } |
208 | 208 |
209 } // namespace | 209 } // namespace |
OLD | NEW |