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 13 matching lines...) Expand all Loading... |
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 */ | 29 */ |
30 | 30 |
31 #include "config.h" | 31 #include "config.h" |
32 #include "modules/imagebitmap/ImageBitmapFactories.h" | 32 #include "modules/imagebitmap/ImageBitmapFactories.h" |
33 | 33 |
34 #include "RuntimeEnabledFeatures.h" | |
35 #include "V8ImageBitmap.h" | 34 #include "V8ImageBitmap.h" |
36 #include "bindings/v8/ExceptionMessages.h" | 35 #include "bindings/v8/ExceptionMessages.h" |
37 #include "bindings/v8/ExceptionState.h" | 36 #include "bindings/v8/ExceptionState.h" |
38 #include "bindings/v8/ScriptScope.h" | 37 #include "bindings/v8/ScriptScope.h" |
39 #include "bindings/v8/ScriptState.h" | 38 #include "bindings/v8/ScriptState.h" |
40 #include "core/fileapi/Blob.h" | 39 #include "core/fileapi/Blob.h" |
41 #include "core/html/HTMLCanvasElement.h" | 40 #include "core/html/HTMLCanvasElement.h" |
42 #include "core/html/HTMLImageElement.h" | 41 #include "core/html/HTMLImageElement.h" |
43 #include "core/html/HTMLVideoElement.h" | 42 #include "core/html/HTMLVideoElement.h" |
44 #include "core/html/ImageData.h" | 43 #include "core/html/ImageData.h" |
(...skipping 17 matching lines...) Expand all Loading... |
62 | 61 |
63 static IntSize sizeFor(HTMLVideoElement* video) | 62 static IntSize sizeFor(HTMLVideoElement* video) |
64 { | 63 { |
65 if (MediaPlayer* player = video->player()) | 64 if (MediaPlayer* player = video->player()) |
66 return player->naturalSize(); | 65 return player->naturalSize(); |
67 return IntSize(); | 66 return IntSize(); |
68 } | 67 } |
69 | 68 |
70 static ScriptPromise fulfillImageBitmap(ExecutionContext* context, PassRefPtr<Im
ageBitmap> imageBitmap) | 69 static ScriptPromise fulfillImageBitmap(ExecutionContext* context, PassRefPtr<Im
ageBitmap> imageBitmap) |
71 { | 70 { |
72 // Promises must be enabled. | |
73 ASSERT(RuntimeEnabledFeatures::promiseEnabled()); | |
74 ScriptPromise promise = ScriptPromise::createPending(context); | 71 ScriptPromise promise = ScriptPromise::createPending(context); |
75 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, context); | 72 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, context); |
76 resolver->resolve(imageBitmap); | 73 resolver->resolve(imageBitmap); |
77 return promise; | 74 return promise; |
78 } | 75 } |
79 | 76 |
80 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
HTMLImageElement* image, ExceptionState& es) | 77 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
HTMLImageElement* image, ExceptionState& es) |
81 { | 78 { |
82 LayoutSize s = sizeFor(image); | 79 LayoutSize s = sizeFor(image); |
83 return createImageBitmap(eventTarget, image, 0, 0, s.width(), s.height(), es
); | 80 return createImageBitmap(eventTarget, image, 0, 0, s.width(), s.height(), es
); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 if (!sw || !sh) { | 188 if (!sw || !sh) { |
192 es.throwUninformativeAndGenericDOMException(IndexSizeError); | 189 es.throwUninformativeAndGenericDOMException(IndexSizeError); |
193 return ScriptPromise(); | 190 return ScriptPromise(); |
194 } | 191 } |
195 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 192 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
196 return fulfillImageBitmap(eventTarget->executionContext(), ImageBitmap::crea
te(canvas, IntRect(sx, sy, sw, sh))); | 193 return fulfillImageBitmap(eventTarget->executionContext(), ImageBitmap::crea
te(canvas, IntRect(sx, sy, sw, sh))); |
197 } | 194 } |
198 | 195 |
199 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
Blob* blob, ExceptionState& es) | 196 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
Blob* blob, ExceptionState& es) |
200 { | 197 { |
201 // Promises must be enabled. | |
202 ASSERT(RuntimeEnabledFeatures::promiseEnabled()); | |
203 | |
204 if (!blob) { | 198 if (!blob) { |
205 es.throwUninformativeAndGenericDOMException(TypeError); | 199 es.throwUninformativeAndGenericDOMException(TypeError); |
206 return ScriptPromise(); | 200 return ScriptPromise(); |
207 } | 201 } |
208 ScriptPromise promise = ScriptPromise::createPending(eventTarget->executionC
ontext()); | 202 ScriptPromise promise = ScriptPromise::createPending(eventTarget->executionC
ontext()); |
209 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, eventTarget->executionContext()); | 203 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, eventTarget->executionContext()); |
210 RefPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBitmapLoader::
create(from(eventTarget), resolver, IntRect()); | 204 RefPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBitmapLoader::
create(from(eventTarget), resolver, IntRect()); |
211 from(eventTarget)->addLoader(loader); | 205 from(eventTarget)->addLoader(loader); |
212 loader->loadBlobAsync(eventTarget->executionContext(), blob); | 206 loader->loadBlobAsync(eventTarget->executionContext(), blob); |
213 return promise; | 207 return promise; |
214 } | 208 } |
215 | 209 |
216 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
Blob* blob, int sx, int sy, int sw, int sh, ExceptionState& es) | 210 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
Blob* blob, int sx, int sy, int sw, int sh, ExceptionState& es) |
217 { | 211 { |
218 // Promises must be enabled. | |
219 ASSERT(RuntimeEnabledFeatures::promiseEnabled()); | |
220 | |
221 if (!blob) { | 212 if (!blob) { |
222 es.throwUninformativeAndGenericDOMException(TypeError); | 213 es.throwUninformativeAndGenericDOMException(TypeError); |
223 return ScriptPromise(); | 214 return ScriptPromise(); |
224 } | 215 } |
225 if (!sw || !sh) { | 216 if (!sw || !sh) { |
226 es.throwUninformativeAndGenericDOMException(IndexSizeError); | 217 es.throwUninformativeAndGenericDOMException(IndexSizeError); |
227 return ScriptPromise(); | 218 return ScriptPromise(); |
228 } | 219 } |
229 ScriptPromise promise = ScriptPromise::createPending(eventTarget->executionC
ontext()); | 220 ScriptPromise promise = ScriptPromise::createPending(eventTarget->executionC
ontext()); |
230 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, eventTarget->executionContext()); | 221 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, eventTarget->executionContext()); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 m_resolver->resolve(imageBitmap.release()); | 352 m_resolver->resolve(imageBitmap.release()); |
362 m_factory->didFinishLoading(this); | 353 m_factory->didFinishLoading(this); |
363 } | 354 } |
364 | 355 |
365 void ImageBitmapFactories::ImageBitmapLoader::didFail(FileError::ErrorCode) | 356 void ImageBitmapFactories::ImageBitmapLoader::didFail(FileError::ErrorCode) |
366 { | 357 { |
367 rejectPromise(); | 358 rejectPromise(); |
368 } | 359 } |
369 | 360 |
370 } // namespace WebCore | 361 } // namespace WebCore |
OLD | NEW |