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

Side by Side Diff: Source/modules/imagebitmap/ImageBitmapFactories.cpp

Issue 23479016: Introduce Promise mapping to the IDL generator (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Add hasNoValue Created 7 years, 3 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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 return IntSize(); 57 return IntSize();
58 } 58 }
59 59
60 static IntSize sizeFor(HTMLVideoElement* video) 60 static IntSize sizeFor(HTMLVideoElement* video)
61 { 61 {
62 if (MediaPlayer* player = video->player()) 62 if (MediaPlayer* player = video->player())
63 return player->naturalSize(); 63 return player->naturalSize();
64 return IntSize(); 64 return IntSize();
65 } 65 }
66 66
67 static ScriptObject fulfillImageBitmap(ScriptExecutionContext* context, PassRefP tr<ImageBitmap> imageBitmap) 67 static ScriptPromise fulfillImageBitmap(ScriptExecutionContext* context, PassRef Ptr<ImageBitmap> imageBitmap)
68 { 68 {
69 // Promises must be enabled. 69 // Promises must be enabled.
70 ASSERT(RuntimeEnabledFeatures::promiseEnabled()); 70 ASSERT(RuntimeEnabledFeatures::promiseEnabled());
71 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(conte xt); 71 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(conte xt);
72 resolver->fulfill(imageBitmap); 72 resolver->fulfill(imageBitmap);
73 return resolver->promise(); 73 return resolver->promise();
74 } 74 }
75 75
76 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, H TMLImageElement* image, ExceptionState& es) 76 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, HTMLImageElement* image, ExceptionState& es)
77 { 77 {
78 LayoutSize s = sizeFor(image); 78 LayoutSize s = sizeFor(image);
79 return createImageBitmap(eventTarget, image, 0, 0, s.width(), s.height(), es ); 79 return createImageBitmap(eventTarget, image, 0, 0, s.width(), s.height(), es );
80 } 80 }
81 81
82 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, H TMLImageElement* image, int sx, int sy, int sw, int sh, ExceptionState& es) 82 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, HTMLImageElement* image, int sx, int sy, int sw, int sh, ExceptionState& es)
83 { 83 {
84 // This variant does not work in worker threads. 84 // This variant does not work in worker threads.
85 ASSERT(eventTarget->toDOMWindow()); 85 ASSERT(eventTarget->toDOMWindow());
86 86
87 if (!image) { 87 if (!image) {
88 es.throwTypeError(); 88 es.throwTypeError();
89 return ScriptObject(); 89 return ScriptPromise();
90 } 90 }
91 if (!image->cachedImage()) { 91 if (!image->cachedImage()) {
92 es.throwDOMException(InvalidStateError); 92 es.throwDOMException(InvalidStateError);
93 return ScriptObject(); 93 return ScriptPromise();
94 } 94 }
95 if (image->cachedImage()->image()->isSVGImage()) { 95 if (image->cachedImage()->image()->isSVGImage()) {
96 es.throwDOMException(InvalidStateError); 96 es.throwDOMException(InvalidStateError);
97 return ScriptObject(); 97 return ScriptPromise();
98 } 98 }
99 if (!sw || !sh) { 99 if (!sw || !sh) {
100 es.throwDOMException(IndexSizeError); 100 es.throwDOMException(IndexSizeError);
101 return ScriptObject(); 101 return ScriptPromise();
102 } 102 }
103 if (!image->cachedImage()->image()->currentFrameHasSingleSecurityOrigin()) { 103 if (!image->cachedImage()->image()->currentFrameHasSingleSecurityOrigin()) {
104 es.throwDOMException(SecurityError); 104 es.throwDOMException(SecurityError);
105 return ScriptObject(); 105 return ScriptPromise();
106 } 106 }
107 if (!image->cachedImage()->passesAccessControlCheck(eventTarget->toDOMWindow ()->document()->securityOrigin()) 107 if (!image->cachedImage()->passesAccessControlCheck(eventTarget->toDOMWindow ()->document()->securityOrigin())
108 && eventTarget->toDOMWindow()->document()->securityOrigin()->taintsCanvas(im age->src())) { 108 && eventTarget->toDOMWindow()->document()->securityOrigin()->taintsCanvas(im age->src())) {
109 es.throwDOMException(SecurityError); 109 es.throwDOMException(SecurityError);
110 return ScriptObject(); 110 return ScriptPromise();
111 } 111 }
112 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 112 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082
113 return fulfillImageBitmap(eventTarget->scriptExecutionContext(), ImageBitmap ::create(image, IntRect(sx, sy, sw, sh))); 113 return fulfillImageBitmap(eventTarget->scriptExecutionContext(), ImageBitmap ::create(image, IntRect(sx, sy, sw, sh)));
114 } 114 }
115 115
116 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, H TMLVideoElement* video, ExceptionState& es) 116 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, HTMLVideoElement* video, ExceptionState& es)
117 { 117 {
118 IntSize s = sizeFor(video); 118 IntSize s = sizeFor(video);
119 return createImageBitmap(eventTarget, video, 0, 0, s.width(), s.height(), es ); 119 return createImageBitmap(eventTarget, video, 0, 0, s.width(), s.height(), es );
120 } 120 }
121 121
122 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, H TMLVideoElement* video, int sx, int sy, int sw, int sh, ExceptionState& es) 122 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, HTMLVideoElement* video, int sx, int sy, int sw, int sh, ExceptionState& es)
123 { 123 {
124 // This variant does not work in worker threads. 124 // This variant does not work in worker threads.
125 ASSERT(eventTarget->toDOMWindow()); 125 ASSERT(eventTarget->toDOMWindow());
126 126
127 if (!video) { 127 if (!video) {
128 es.throwTypeError(); 128 es.throwTypeError();
129 return ScriptObject(); 129 return ScriptPromise();
130 } 130 }
131 if (!video->player()) { 131 if (!video->player()) {
132 es.throwDOMException(InvalidStateError); 132 es.throwDOMException(InvalidStateError);
133 return ScriptObject(); 133 return ScriptPromise();
134 } 134 }
135 if (video->networkState() == HTMLMediaElement::NETWORK_EMPTY) { 135 if (video->networkState() == HTMLMediaElement::NETWORK_EMPTY) {
136 es.throwDOMException(InvalidStateError); 136 es.throwDOMException(InvalidStateError);
137 return ScriptObject(); 137 return ScriptPromise();
138 } 138 }
139 if (video->player()->readyState() <= MediaPlayer::HaveMetadata) { 139 if (video->player()->readyState() <= MediaPlayer::HaveMetadata) {
140 es.throwDOMException(InvalidStateError); 140 es.throwDOMException(InvalidStateError);
141 return ScriptObject(); 141 return ScriptPromise();
142 } 142 }
143 if (!sw || !sh) { 143 if (!sw || !sh) {
144 es.throwDOMException(IndexSizeError); 144 es.throwDOMException(IndexSizeError);
145 return ScriptObject(); 145 return ScriptPromise();
146 } 146 }
147 if (!video->hasSingleSecurityOrigin()) { 147 if (!video->hasSingleSecurityOrigin()) {
148 es.throwDOMException(SecurityError); 148 es.throwDOMException(SecurityError);
149 return ScriptObject(); 149 return ScriptPromise();
150 } 150 }
151 if (!video->player()->didPassCORSAccessCheck() && eventTarget->toDOMWindow() ->document()->securityOrigin()->taintsCanvas(video->currentSrc())) { 151 if (!video->player()->didPassCORSAccessCheck() && eventTarget->toDOMWindow() ->document()->securityOrigin()->taintsCanvas(video->currentSrc())) {
152 es.throwDOMException(SecurityError); 152 es.throwDOMException(SecurityError);
153 return ScriptObject(); 153 return ScriptPromise();
154 } 154 }
155 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 155 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082
156 return fulfillImageBitmap(eventTarget->scriptExecutionContext(), ImageBitmap ::create(video, IntRect(sx, sy, sw, sh))); 156 return fulfillImageBitmap(eventTarget->scriptExecutionContext(), ImageBitmap ::create(video, IntRect(sx, sy, sw, sh)));
157 } 157 }
158 158
159 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, C anvasRenderingContext2D* context, ExceptionState& es) 159 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, CanvasRenderingContext2D* context, ExceptionState& es)
160 { 160 {
161 return createImageBitmap(eventTarget, context->canvas(), es); 161 return createImageBitmap(eventTarget, context->canvas(), es);
162 } 162 }
163 163
164 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, C anvasRenderingContext2D* context, int sx, int sy, int sw, int sh, ExceptionState & es) 164 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, CanvasRenderingContext2D* context, int sx, int sy, int sw, int sh, ExceptionStat e& es)
165 { 165 {
166 return createImageBitmap(eventTarget, context->canvas(), sx, sy, sw, sh, es) ; 166 return createImageBitmap(eventTarget, context->canvas(), sx, sy, sw, sh, es) ;
167 } 167 }
168 168
169 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, H TMLCanvasElement* canvas, ExceptionState& es) 169 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, HTMLCanvasElement* canvas, ExceptionState& es)
170 { 170 {
171 return createImageBitmap(eventTarget, canvas, 0, 0, canvas->width(), canvas- >height(), es); 171 return createImageBitmap(eventTarget, canvas, 0, 0, canvas->width(), canvas- >height(), es);
172 } 172 }
173 173
174 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, H TMLCanvasElement* canvas, int sx, int sy, int sw, int sh, ExceptionState& es) 174 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, HTMLCanvasElement* canvas, int sx, int sy, int sw, int sh, ExceptionState& es)
175 { 175 {
176 // This variant does not work in worker threads. 176 // This variant does not work in worker threads.
177 ASSERT(eventTarget->toDOMWindow()); 177 ASSERT(eventTarget->toDOMWindow());
178 178
179 if (!canvas) { 179 if (!canvas) {
180 es.throwTypeError(); 180 es.throwTypeError();
181 return ScriptObject(); 181 return ScriptPromise();
182 } 182 }
183 if (!canvas->originClean()) { 183 if (!canvas->originClean()) {
184 es.throwDOMException(InvalidStateError); 184 es.throwDOMException(InvalidStateError);
185 return ScriptObject(); 185 return ScriptPromise();
186 } 186 }
187 if (!sw || !sh) { 187 if (!sw || !sh) {
188 es.throwDOMException(IndexSizeError); 188 es.throwDOMException(IndexSizeError);
189 return ScriptObject(); 189 return ScriptPromise();
190 } 190 }
191 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 191 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082
192 return fulfillImageBitmap(eventTarget->scriptExecutionContext(), ImageBitmap ::create(canvas, IntRect(sx, sy, sw, sh))); 192 return fulfillImageBitmap(eventTarget->scriptExecutionContext(), ImageBitmap ::create(canvas, IntRect(sx, sy, sw, sh)));
193 } 193 }
194 194
195 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, B lob* blob, ExceptionState& es) 195 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, Blob* blob, ExceptionState& es)
196 { 196 {
197 // Promises must be enabled. 197 // Promises must be enabled.
198 ASSERT(RuntimeEnabledFeatures::promiseEnabled()); 198 ASSERT(RuntimeEnabledFeatures::promiseEnabled());
199 199
200 if (!blob) { 200 if (!blob) {
201 es.throwDOMException(TypeError); 201 es.throwDOMException(TypeError);
202 return ScriptObject(); 202 return ScriptPromise();
203 } 203 }
204 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(event Target->scriptExecutionContext()); 204 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(event Target->scriptExecutionContext());
205 RefPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBitmapLoader:: create(from(eventTarget), resolver, IntRect()); 205 RefPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBitmapLoader:: create(from(eventTarget), resolver, IntRect());
206 from(eventTarget)->addLoader(loader); 206 from(eventTarget)->addLoader(loader);
207 loader->loadBlobAsync(eventTarget->scriptExecutionContext(), blob); 207 loader->loadBlobAsync(eventTarget->scriptExecutionContext(), blob);
208 return resolver->promise(); 208 return resolver->promise();
209 } 209 }
210 210
211 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, B lob* blob, int sx, int sy, int sw, int sh, ExceptionState& es) 211 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, Blob* blob, int sx, int sy, int sw, int sh, ExceptionState& es)
212 { 212 {
213 // Promises must be enabled. 213 // Promises must be enabled.
214 ASSERT(RuntimeEnabledFeatures::promiseEnabled()); 214 ASSERT(RuntimeEnabledFeatures::promiseEnabled());
215 215
216 if (!blob) { 216 if (!blob) {
217 es.throwDOMException(TypeError); 217 es.throwDOMException(TypeError);
218 return ScriptObject(); 218 return ScriptPromise();
219 } 219 }
220 if (!sw || !sh) { 220 if (!sw || !sh) {
221 es.throwDOMException(IndexSizeError); 221 es.throwDOMException(IndexSizeError);
222 return ScriptObject(); 222 return ScriptPromise();
223 } 223 }
224 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(event Target->scriptExecutionContext()); 224 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(event Target->scriptExecutionContext());
225 RefPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBitmapLoader:: create(from(eventTarget), resolver, IntRect(sx, sy, sw, sh)); 225 RefPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBitmapLoader:: create(from(eventTarget), resolver, IntRect(sx, sy, sw, sh));
226 from(eventTarget)->addLoader(loader); 226 from(eventTarget)->addLoader(loader);
227 loader->loadBlobAsync(eventTarget->scriptExecutionContext(), blob); 227 loader->loadBlobAsync(eventTarget->scriptExecutionContext(), blob);
228 return resolver->promise(); 228 return resolver->promise();
229 } 229 }
230 230
231 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, I mageData* data, ExceptionState& es) 231 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, ImageData* data, ExceptionState& es)
232 { 232 {
233 return createImageBitmap(eventTarget, data, 0, 0, data->width(), data->heigh t(), es); 233 return createImageBitmap(eventTarget, data, 0, 0, data->width(), data->heigh t(), es);
234 } 234 }
235 235
236 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, I mageData* data, int sx, int sy, int sw, int sh, ExceptionState& es) 236 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, ImageData* data, int sx, int sy, int sw, int sh, ExceptionState& es)
237 { 237 {
238 if (!data) { 238 if (!data) {
239 es.throwTypeError(); 239 es.throwTypeError();
240 return ScriptObject(); 240 return ScriptPromise();
241 } 241 }
242 if (!sw || !sh) { 242 if (!sw || !sh) {
243 es.throwDOMException(IndexSizeError); 243 es.throwDOMException(IndexSizeError);
244 return ScriptObject(); 244 return ScriptPromise();
245 } 245 }
246 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 246 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082
247 return fulfillImageBitmap(eventTarget->scriptExecutionContext(), ImageBitmap ::create(data, IntRect(sx, sy, sw, sh))); 247 return fulfillImageBitmap(eventTarget->scriptExecutionContext(), ImageBitmap ::create(data, IntRect(sx, sy, sw, sh)));
248 } 248 }
249 249
250 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, I mageBitmap* bitmap, ExceptionState& es) 250 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, ImageBitmap* bitmap, ExceptionState& es)
251 { 251 {
252 return createImageBitmap(eventTarget, bitmap, 0, 0, bitmap->width(), bitmap- >height(), es); 252 return createImageBitmap(eventTarget, bitmap, 0, 0, bitmap->width(), bitmap- >height(), es);
253 } 253 }
254 254
255 ScriptObject ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, I mageBitmap* bitmap, int sx, int sy, int sw, int sh, ExceptionState& es) 255 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget, ImageBitmap* bitmap, int sx, int sy, int sw, int sh, ExceptionState& es)
256 { 256 {
257 if (!bitmap) { 257 if (!bitmap) {
258 es.throwTypeError(); 258 es.throwTypeError();
259 return ScriptObject(); 259 return ScriptPromise();
260 } 260 }
261 if (!sw || !sh) { 261 if (!sw || !sh) {
262 es.throwDOMException(IndexSizeError); 262 es.throwDOMException(IndexSizeError);
263 return ScriptObject(); 263 return ScriptPromise();
264 } 264 }
265 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 265 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082
266 return fulfillImageBitmap(eventTarget->scriptExecutionContext(), ImageBitmap ::create(bitmap, IntRect(sx, sy, sw, sh))); 266 return fulfillImageBitmap(eventTarget->scriptExecutionContext(), ImageBitmap ::create(bitmap, IntRect(sx, sy, sw, sh)));
267 } 267 }
268 268
269 const char* ImageBitmapFactories::supplementName() 269 const char* ImageBitmapFactories::supplementName()
270 { 270 {
271 return "ImageBitmapFactories"; 271 return "ImageBitmapFactories";
272 } 272 }
273 273
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 m_resolver->fulfill(imageBitmap.release()); 354 m_resolver->fulfill(imageBitmap.release());
355 m_factory->didFinishLoading(this); 355 m_factory->didFinishLoading(this);
356 } 356 }
357 357
358 void ImageBitmapFactories::ImageBitmapLoader::didFail(FileError::ErrorCode) 358 void ImageBitmapFactories::ImageBitmapLoader::didFail(FileError::ErrorCode)
359 { 359 {
360 rejectPromise(); 360 rejectPromise();
361 } 361 }
362 362
363 } // namespace WebCore 363 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/modules/imagebitmap/ImageBitmapFactories.h ('k') | Source/modules/imagebitmap/ImageBitmapFactories.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698