Index: Source/core/page/ImageBitmapFactories.h |
diff --git a/Source/core/page/ImageBitmapFactories.h b/Source/core/page/ImageBitmapFactories.h |
index 05feca4ffc17d90f247e869bd42b51f43ae72575..23c34d98c66c55a1611f9a2587e4ffadf5aab7d3 100644 |
--- a/Source/core/page/ImageBitmapFactories.h |
+++ b/Source/core/page/ImageBitmapFactories.h |
@@ -32,9 +32,16 @@ |
#define ImageBitmapFactories_h |
#include "bindings/v8/ScriptPromiseResolver.h" |
+#include "bindings/v8/ScriptState.h" |
+#include "core/fileapi/FileReaderLoader.h" |
+#include "core/fileapi/FileReaderLoaderClient.h" |
+#include "core/platform/graphics/IntRect.h" |
+#include "wtf/Forward.h" |
+#include "wtf/HashSet.h" |
namespace WebCore { |
+class Blob; |
class CanvasRenderingContext2D; |
class EventTarget; |
class ExceptionState; |
@@ -43,23 +50,64 @@ class HTMLImageElement; |
class HTMLVideoElement; |
class ImageBitmap; |
class ImageData; |
+class ScriptExecutionContext; |
+ |
+class ImageBitmapFactories { |
+ |
+class ImageBitmapLoader; |
+public: |
+ static ScriptObject createImageBitmap(EventTarget*, HTMLImageElement*, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, HTMLImageElement*, int sx, int sy, int sw, int sh, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, HTMLVideoElement*, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, HTMLVideoElement*, int sx, int sy, int sw, int sh, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, CanvasRenderingContext2D*, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, CanvasRenderingContext2D*, int sx, int sy, int sw, int sh, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, HTMLCanvasElement*, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, HTMLCanvasElement*, int sx, int sy, int sw, int sh, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, Blob*, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, Blob*, int sx, int sy, int sw, int sh, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, ImageData*, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, ImageData*, int sx, int sy, int sw, int sh, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, ImageBitmap*, ExceptionState&); |
+ static ScriptObject createImageBitmap(EventTarget*, ImageBitmap*, int sx, int sy, int sw, int sh, ExceptionState&); |
+ |
+ void didStartLoading(PassRefPtr<ImageBitmapLoader>); |
+ void didFinishLoading(PassRefPtr<ImageBitmapLoader>); |
+ |
+private: |
+ class ImageBitmapLoader : public RefCounted<ImageBitmapLoader>, public FileReaderLoaderClient { |
+ public: |
+ static PassRefPtr<ImageBitmapLoader> create(ImageBitmapFactories* factory, PassRefPtr<ScriptPromiseResolver> resolver, IntRect* cropRect) |
do-not-use
2013/08/12 15:36:15
It is confusing to take an IntRect raw pointer in
|
+ { |
+ RefPtr<ImageBitmapLoader> imageBitmapLoader = adoptRef(new ImageBitmapLoader(factory, resolver, cropRect)); |
do-not-use
2013/08/12 15:36:15
nit: We don't really need this local variable.
arbesfeld
2013/08/12 15:49:40
Done.
|
+ return imageBitmapLoader.release(); |
+ } |
+ |
+ void loadBlobAsync(ScriptExecutionContext*, Blob*); |
+ |
+ ~ImageBitmapLoader() { } |
+ |
+ private: |
+ ImageBitmapLoader(ImageBitmapFactories*, PassRefPtr<ScriptPromiseResolver>, IntRect*); |
+ |
+ void rejectPromise(); |
+ |
+ // FileReaderLoaderClient |
+ virtual void didStartLoading() { } |
do-not-use
2013/08/12 15:36:15
Missing OVERRIDE (below as well)
arbesfeld
2013/08/12 15:49:40
Done.
|
+ virtual void didReceiveData() { } |
+ virtual void didFinishLoading(); |
+ virtual void didFail(FileError::ErrorCode); |
+ |
+ ScriptState* m_scriptState; |
+ FileReaderLoader m_loader; |
+ ImageBitmapFactories* m_factory; |
+ RefPtr<ScriptPromiseResolver> m_resolver; |
+ IntRect* m_cropRect; |
do-not-use
2013/08/12 15:36:15
Why does m_cropRect need to be a pointer? Do we ne
arbesfeld
2013/08/12 15:49:40
ImageBitmaps created with no x/y/w/h arguments are
|
+ }; |
+ |
+ HashSet<RefPtr<ImageBitmapLoader> > m_pendingLoaders; |
+}; |
-namespace ImageBitmapFactories { |
- |
-ScriptObject createImageBitmap(EventTarget*, HTMLImageElement*, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, HTMLImageElement*, int sx, int sy, int sw, int sh, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, HTMLVideoElement*, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, HTMLVideoElement*, int sx, int sy, int sw, int sh, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, CanvasRenderingContext2D*, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, CanvasRenderingContext2D*, int sx, int sy, int sw, int sh, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, HTMLCanvasElement*, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, HTMLCanvasElement*, int sx, int sy, int sw, int sh, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, ImageData*, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, ImageData*, int sx, int sy, int sw, int sh, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, ImageBitmap*, ExceptionState&); |
-ScriptObject createImageBitmap(EventTarget*, ImageBitmap*, int sx, int sy, int sw, int sh, ExceptionState&); |
- |
-} // namesapce ImageBitmapFactories |
} // namespace WebCore |
#endif // ImageBitmapFactories_h |