1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
8 #include "bindings/core/v8/ScriptWrappable.h"
9 #include "core/CoreExport.h"
10 #include "core/html/HTMLImageElement.h"
11 #include "core/html/canvas/CanvasImageSource.h"
12 #include "platform/geometry/IntRect.h"
13 #include "platform/graphics/Image.h"
14 #include "platform/heap/Handle.h"
15 #include "wtf/PassRefPtr.h"
16 #include "wtf/RefCounted.h"
20 class HTMLCanvasElement
;
21 class HTMLVideoElement
;
24 class CORE_EXPORT ImageBitmap final
: public RefCountedWillBeGarbageCollectedFinalized
<ImageBitmap
>, public ScriptWrappable
, public ImageLoaderClient
, public CanvasImageSource
{
25 DEFINE_WRAPPERTYPEINFO();
26 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(ImageBitmap
);
28 static PassRefPtrWillBeRawPtr
<ImageBitmap
> create(HTMLImageElement
*, const IntRect
&);
29 static PassRefPtrWillBeRawPtr
<ImageBitmap
> create(HTMLVideoElement
*, const IntRect
&);
30 static PassRefPtrWillBeRawPtr
<ImageBitmap
> create(HTMLCanvasElement
*, const IntRect
&);
31 static PassRefPtrWillBeRawPtr
<ImageBitmap
> create(ImageData
*, const IntRect
&);
32 static PassRefPtrWillBeRawPtr
<ImageBitmap
> create(ImageBitmap
*, const IntRect
&);
33 static PassRefPtrWillBeRawPtr
<ImageBitmap
> create(Image
*, const IntRect
&);
35 PassRefPtr
<Image
> bitmapImage() const;
36 PassRefPtrWillBeRawPtr
<HTMLImageElement
> imageElement() const { return m_imageElement
; }
38 IntRect
bitmapRect() const { return m_bitmapRect
; }
40 int width() const { return m_cropRect
.width(); }
41 int height() const { return m_cropRect
.height(); }
42 IntSize
size() const { return m_cropRect
.size(); }
44 ~ImageBitmap() override
;
46 // CanvasImageSource implementation
47 PassRefPtr
<Image
> getSourceImageForCanvas(SourceImageStatus
*) const override
;
48 bool wouldTaintOrigin(SecurityOrigin
*) const override
{ return false; }
49 void adjustDrawRects(FloatRect
* srcRect
, FloatRect
* dstRect
) const override
;
50 FloatSize
elementSize() const override
;
52 DECLARE_VIRTUAL_TRACE();
55 ImageBitmap(HTMLImageElement
*, const IntRect
&);
56 ImageBitmap(HTMLVideoElement
*, const IntRect
&);
57 ImageBitmap(HTMLCanvasElement
*, const IntRect
&);
58 ImageBitmap(ImageData
*, const IntRect
&);
59 ImageBitmap(ImageBitmap
*, const IntRect
&);
60 ImageBitmap(Image
*, const IntRect
&);
63 void notifyImageSourceChanged() override
;
64 bool requestsHighLiveResourceCachePriority() override
{ return true; }
66 // ImageBitmaps constructed from HTMLImageElements hold a reference to the HTMLImageElement until
67 // the image source changes.
68 RefPtrWillBeMember
<HTMLImageElement
> m_imageElement
;
69 RefPtr
<Image
> m_bitmap
;
71 IntRect m_bitmapRect
; // The rect where the underlying Image should be placed in reference to the ImageBitmap.
74 // The offset by which the desired Image is stored internally.
75 // ImageBitmaps constructed from HTMLImageElements reference the entire ImageResource and may have a non-zero bitmap offset.
76 // ImageBitmaps not constructed from HTMLImageElements always pre-crop and store the image at (0, 0).
77 IntPoint m_bitmapOffset
;
83 #endif // ImageBitmap_h