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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 } | 64 } |
65 | 65 |
66 static ScriptPromise fulfillImageBitmap(ExecutionContext* context, PassRefPtr<Im
ageBitmap> imageBitmap) | 66 static ScriptPromise fulfillImageBitmap(ExecutionContext* context, PassRefPtr<Im
ageBitmap> imageBitmap) |
67 { | 67 { |
68 ScriptPromise promise = ScriptPromise::createPending(context); | 68 ScriptPromise promise = ScriptPromise::createPending(context); |
69 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, context); | 69 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, context); |
70 resolver->resolve(imageBitmap); | 70 resolver->resolve(imageBitmap); |
71 return promise; | 71 return promise; |
72 } | 72 } |
73 | 73 |
74 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
HTMLImageElement* image, ExceptionState& exceptionState) | 74 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLImageElement* image, ExceptionState& exceptionState) |
75 { | 75 { |
76 LayoutSize s = sizeFor(image); | 76 LayoutSize s = sizeFor(image); |
77 return createImageBitmap(eventTarget, image, 0, 0, s.width(), s.height(), ex
ceptionState); | 77 return createImageBitmap(eventTarget, image, 0, 0, s.width(), s.height(), ex
ceptionState); |
78 } | 78 } |
79 | 79 |
80 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
HTMLImageElement* image, int sx, int sy, int sw, int sh, ExceptionState& excepti
onState) | 80 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLImageElement* image, int sx, int sy, int sw, int sh, ExceptionState& excepti
onState) |
81 { | 81 { |
82 // This variant does not work in worker threads. | 82 // This variant does not work in worker threads. |
83 ASSERT(eventTarget->toDOMWindow()); | 83 ASSERT(eventTarget.toDOMWindow()); |
84 | 84 |
85 if (!image) { | 85 if (!image) { |
86 exceptionState.throwTypeError("The image element provided is invalid."); | 86 exceptionState.throwTypeError("The image element provided is invalid."); |
87 return ScriptPromise(); | 87 return ScriptPromise(); |
88 } | 88 } |
89 if (!image->cachedImage()) { | 89 if (!image->cachedImage()) { |
90 exceptionState.throwDOMException(InvalidStateError, "No image can be ret
rieved from the provided element."); | 90 exceptionState.throwDOMException(InvalidStateError, "No image can be ret
rieved from the provided element."); |
91 return ScriptPromise(); | 91 return ScriptPromise(); |
92 } | 92 } |
93 if (image->cachedImage()->image()->isSVGImage()) { | 93 if (image->cachedImage()->image()->isSVGImage()) { |
94 exceptionState.throwDOMException(InvalidStateError, "The image element c
ontains an SVG image, which is unsupported."); | 94 exceptionState.throwDOMException(InvalidStateError, "The image element c
ontains an SVG image, which is unsupported."); |
95 return ScriptPromise(); | 95 return ScriptPromise(); |
96 } | 96 } |
97 if (!sw || !sh) { | 97 if (!sw || !sh) { |
98 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 98 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
99 return ScriptPromise(); | 99 return ScriptPromise(); |
100 } | 100 } |
101 if (!image->cachedImage()->image()->currentFrameHasSingleSecurityOrigin()) { | 101 if (!image->cachedImage()->image()->currentFrameHasSingleSecurityOrigin()) { |
102 exceptionState.throwSecurityError("The source image contains image data
from multiple origins."); | 102 exceptionState.throwSecurityError("The source image contains image data
from multiple origins."); |
103 return ScriptPromise(); | 103 return ScriptPromise(); |
104 } | 104 } |
105 if (!image->cachedImage()->passesAccessControlCheck(eventTarget->toDOMWindow
()->document()->securityOrigin()) && eventTarget->toDOMWindow()->document()->sec
urityOrigin()->taintsCanvas(image->src())) { | 105 if (!image->cachedImage()->passesAccessControlCheck(eventTarget.toDOMWindow(
)->document()->securityOrigin()) && eventTarget.toDOMWindow()->document()->secur
ityOrigin()->taintsCanvas(image->src())) { |
106 exceptionState.throwSecurityError("Cross-origin access to the source ima
ge is denied."); | 106 exceptionState.throwSecurityError("Cross-origin access to the source ima
ge is denied."); |
107 return ScriptPromise(); | 107 return ScriptPromise(); |
108 } | 108 } |
109 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 109 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
110 return fulfillImageBitmap(eventTarget->executionContext(), ImageBitmap::crea
te(image, IntRect(sx, sy, sw, sh))); | 110 return fulfillImageBitmap(eventTarget.executionContext(), ImageBitmap::creat
e(image, IntRect(sx, sy, sw, sh))); |
111 } | 111 } |
112 | 112 |
113 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
HTMLVideoElement* video, ExceptionState& exceptionState) | 113 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLVideoElement* video, ExceptionState& exceptionState) |
114 { | 114 { |
115 IntSize s = sizeFor(video); | 115 IntSize s = sizeFor(video); |
116 return createImageBitmap(eventTarget, video, 0, 0, s.width(), s.height(), ex
ceptionState); | 116 return createImageBitmap(eventTarget, video, 0, 0, s.width(), s.height(), ex
ceptionState); |
117 } | 117 } |
118 | 118 |
119 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
HTMLVideoElement* video, int sx, int sy, int sw, int sh, ExceptionState& excepti
onState) | 119 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLVideoElement* video, int sx, int sy, int sw, int sh, ExceptionState& excepti
onState) |
120 { | 120 { |
121 // This variant does not work in worker threads. | 121 // This variant does not work in worker threads. |
122 ASSERT(eventTarget->toDOMWindow()); | 122 ASSERT(eventTarget.toDOMWindow()); |
123 | 123 |
124 if (!video) { | 124 if (!video) { |
125 exceptionState.throwTypeError("The video element provided is invalid."); | 125 exceptionState.throwTypeError("The video element provided is invalid."); |
126 return ScriptPromise(); | 126 return ScriptPromise(); |
127 } | 127 } |
128 if (!video->player()) { | 128 if (!video->player()) { |
129 exceptionState.throwDOMException(InvalidStateError, "No player can be re
trieved from the provided video element."); | 129 exceptionState.throwDOMException(InvalidStateError, "No player can be re
trieved from the provided video element."); |
130 return ScriptPromise(); | 130 return ScriptPromise(); |
131 } | 131 } |
132 if (video->networkState() == HTMLMediaElement::NETWORK_EMPTY) { | 132 if (video->networkState() == HTMLMediaElement::NETWORK_EMPTY) { |
133 exceptionState.throwDOMException(InvalidStateError, "The provided elemen
t has not retrieved data."); | 133 exceptionState.throwDOMException(InvalidStateError, "The provided elemen
t has not retrieved data."); |
134 return ScriptPromise(); | 134 return ScriptPromise(); |
135 } | 135 } |
136 if (video->player()->readyState() <= MediaPlayer::HaveMetadata) { | 136 if (video->player()->readyState() <= MediaPlayer::HaveMetadata) { |
137 exceptionState.throwDOMException(InvalidStateError, "The provided elemen
t's player has no current data."); | 137 exceptionState.throwDOMException(InvalidStateError, "The provided elemen
t's player has no current data."); |
138 return ScriptPromise(); | 138 return ScriptPromise(); |
139 } | 139 } |
140 if (!sw || !sh) { | 140 if (!sw || !sh) { |
141 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 141 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
142 return ScriptPromise(); | 142 return ScriptPromise(); |
143 } | 143 } |
144 if (!video->hasSingleSecurityOrigin()) { | 144 if (!video->hasSingleSecurityOrigin()) { |
145 exceptionState.throwSecurityError("The source video contains image data
from multiple origins."); | 145 exceptionState.throwSecurityError("The source video contains image data
from multiple origins."); |
146 return ScriptPromise(); | 146 return ScriptPromise(); |
147 } | 147 } |
148 if (!video->player()->didPassCORSAccessCheck() && eventTarget->toDOMWindow()
->document()->securityOrigin()->taintsCanvas(video->currentSrc())) { | 148 if (!video->player()->didPassCORSAccessCheck() && eventTarget.toDOMWindow()-
>document()->securityOrigin()->taintsCanvas(video->currentSrc())) { |
149 exceptionState.throwSecurityError("Cross-origin access to the source vid
eo is denied."); | 149 exceptionState.throwSecurityError("Cross-origin access to the source vid
eo is denied."); |
150 return ScriptPromise(); | 150 return ScriptPromise(); |
151 } | 151 } |
152 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 152 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
153 return fulfillImageBitmap(eventTarget->executionContext(), ImageBitmap::crea
te(video, IntRect(sx, sy, sw, sh))); | 153 return fulfillImageBitmap(eventTarget.executionContext(), ImageBitmap::creat
e(video, IntRect(sx, sy, sw, sh))); |
154 } | 154 } |
155 | 155 |
156 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
CanvasRenderingContext2D* context, ExceptionState& exceptionState) | 156 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
CanvasRenderingContext2D* context, ExceptionState& exceptionState) |
157 { | 157 { |
158 return createImageBitmap(eventTarget, context->canvas(), exceptionState); | 158 return createImageBitmap(eventTarget, context->canvas(), exceptionState); |
159 } | 159 } |
160 | 160 |
161 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
CanvasRenderingContext2D* context, int sx, int sy, int sw, int sh, ExceptionStat
e& exceptionState) | 161 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
CanvasRenderingContext2D* context, int sx, int sy, int sw, int sh, ExceptionStat
e& exceptionState) |
162 { | 162 { |
163 return createImageBitmap(eventTarget, context->canvas(), sx, sy, sw, sh, exc
eptionState); | 163 return createImageBitmap(eventTarget, context->canvas(), sx, sy, sw, sh, exc
eptionState); |
164 } | 164 } |
165 | 165 |
166 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
HTMLCanvasElement* canvas, ExceptionState& exceptionState) | 166 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLCanvasElement* canvas, ExceptionState& exceptionState) |
167 { | 167 { |
168 return createImageBitmap(eventTarget, canvas, 0, 0, canvas->width(), canvas-
>height(), exceptionState); | 168 return createImageBitmap(eventTarget, canvas, 0, 0, canvas->width(), canvas-
>height(), exceptionState); |
169 } | 169 } |
170 | 170 |
171 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
HTMLCanvasElement* canvas, int sx, int sy, int sw, int sh, ExceptionState& excep
tionState) | 171 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLCanvasElement* canvas, int sx, int sy, int sw, int sh, ExceptionState& excep
tionState) |
172 { | 172 { |
173 // This variant does not work in worker threads. | 173 // This variant does not work in worker threads. |
174 ASSERT(eventTarget->toDOMWindow()); | 174 ASSERT(eventTarget.toDOMWindow()); |
175 | 175 |
176 if (!canvas) { | 176 if (!canvas) { |
177 exceptionState.throwTypeError("The canvas element provided is invalid.")
; | 177 exceptionState.throwTypeError("The canvas element provided is invalid.")
; |
178 return ScriptPromise(); | 178 return ScriptPromise(); |
179 } | 179 } |
180 if (!canvas->originClean()) { | 180 if (!canvas->originClean()) { |
181 exceptionState.throwSecurityError("The canvas element provided is tainte
d with cross-origin data."); | 181 exceptionState.throwSecurityError("The canvas element provided is tainte
d with cross-origin data."); |
182 return ScriptPromise(); | 182 return ScriptPromise(); |
183 } | 183 } |
184 if (!sw || !sh) { | 184 if (!sw || !sh) { |
185 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 185 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
186 return ScriptPromise(); | 186 return ScriptPromise(); |
187 } | 187 } |
188 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 188 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
189 return fulfillImageBitmap(eventTarget->executionContext(), ImageBitmap::crea
te(canvas, IntRect(sx, sy, sw, sh))); | 189 return fulfillImageBitmap(eventTarget.executionContext(), ImageBitmap::creat
e(canvas, IntRect(sx, sy, sw, sh))); |
190 } | 190 } |
191 | 191 |
192 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
Blob* blob, ExceptionState& exceptionState) | 192 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
Blob* blob, ExceptionState& exceptionState) |
193 { | 193 { |
194 if (!blob) { | 194 if (!blob) { |
195 exceptionState.throwDOMException(TypeError, "The blob provided is invali
d."); | 195 exceptionState.throwDOMException(TypeError, "The blob provided is invali
d."); |
196 return ScriptPromise(); | 196 return ScriptPromise(); |
197 } | 197 } |
198 ScriptPromise promise = ScriptPromise::createPending(eventTarget->executionC
ontext()); | 198 ScriptPromise promise = ScriptPromise::createPending(eventTarget.executionCo
ntext()); |
199 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, eventTarget->executionContext()); | 199 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, eventTarget.executionContext()); |
200 RefPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBitmapLoader::
create(from(eventTarget), resolver, IntRect()); | 200 RefPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBitmapLoader::
create(from(eventTarget), resolver, IntRect()); |
201 from(eventTarget)->addLoader(loader); | 201 from(eventTarget).addLoader(loader); |
202 loader->loadBlobAsync(eventTarget->executionContext(), blob); | 202 loader->loadBlobAsync(eventTarget.executionContext(), blob); |
203 return promise; | 203 return promise; |
204 } | 204 } |
205 | 205 |
206 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
Blob* blob, int sx, int sy, int sw, int sh, ExceptionState& exceptionState) | 206 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
Blob* blob, int sx, int sy, int sw, int sh, ExceptionState& exceptionState) |
207 { | 207 { |
208 if (!blob) { | 208 if (!blob) { |
209 exceptionState.throwDOMException(TypeError, "The blob provided is invali
d."); | 209 exceptionState.throwDOMException(TypeError, "The blob provided is invali
d."); |
210 return ScriptPromise(); | 210 return ScriptPromise(); |
211 } | 211 } |
212 if (!sw || !sh) { | 212 if (!sw || !sh) { |
213 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 213 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
214 return ScriptPromise(); | 214 return ScriptPromise(); |
215 } | 215 } |
216 ScriptPromise promise = ScriptPromise::createPending(eventTarget->executionC
ontext()); | 216 ScriptPromise promise = ScriptPromise::createPending(eventTarget.executionCo
ntext()); |
217 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, eventTarget->executionContext()); | 217 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promi
se, eventTarget.executionContext()); |
218 RefPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBitmapLoader::
create(from(eventTarget), resolver, IntRect(sx, sy, sw, sh)); | 218 RefPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBitmapLoader::
create(from(eventTarget), resolver, IntRect(sx, sy, sw, sh)); |
219 from(eventTarget)->addLoader(loader); | 219 from(eventTarget).addLoader(loader); |
220 loader->loadBlobAsync(eventTarget->executionContext(), blob); | 220 loader->loadBlobAsync(eventTarget.executionContext(), blob); |
221 return promise; | 221 return promise; |
222 } | 222 } |
223 | 223 |
224 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
ImageData* data, ExceptionState& exceptionState) | 224 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
ImageData* data, ExceptionState& exceptionState) |
225 { | 225 { |
226 return createImageBitmap(eventTarget, data, 0, 0, data->width(), data->heigh
t(), exceptionState); | 226 return createImageBitmap(eventTarget, data, 0, 0, data->width(), data->heigh
t(), exceptionState); |
227 } | 227 } |
228 | 228 |
229 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
ImageData* data, int sx, int sy, int sw, int sh, ExceptionState& exceptionState) | 229 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
ImageData* data, int sx, int sy, int sw, int sh, ExceptionState& exceptionState) |
230 { | 230 { |
231 if (!data) { | 231 if (!data) { |
232 exceptionState.throwTypeError("The ImageData provided is invalid."); | 232 exceptionState.throwTypeError("The ImageData provided is invalid."); |
233 return ScriptPromise(); | 233 return ScriptPromise(); |
234 } | 234 } |
235 if (!sw || !sh) { | 235 if (!sw || !sh) { |
236 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 236 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
237 return ScriptPromise(); | 237 return ScriptPromise(); |
238 } | 238 } |
239 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 239 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
240 return fulfillImageBitmap(eventTarget->executionContext(), ImageBitmap::crea
te(data, IntRect(sx, sy, sw, sh))); | 240 return fulfillImageBitmap(eventTarget.executionContext(), ImageBitmap::creat
e(data, IntRect(sx, sy, sw, sh))); |
241 } | 241 } |
242 | 242 |
243 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
ImageBitmap* bitmap, ExceptionState& exceptionState) | 243 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
ImageBitmap* bitmap, ExceptionState& exceptionState) |
244 { | 244 { |
245 return createImageBitmap(eventTarget, bitmap, 0, 0, bitmap->width(), bitmap-
>height(), exceptionState); | 245 return createImageBitmap(eventTarget, bitmap, 0, 0, bitmap->width(), bitmap-
>height(), exceptionState); |
246 } | 246 } |
247 | 247 |
248 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget* eventTarget,
ImageBitmap* bitmap, int sx, int sy, int sw, int sh, ExceptionState& exceptionSt
ate) | 248 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
ImageBitmap* bitmap, int sx, int sy, int sw, int sh, ExceptionState& exceptionSt
ate) |
249 { | 249 { |
250 if (!bitmap) { | 250 if (!bitmap) { |
251 exceptionState.throwTypeError("The ImageBitmap provided is invalid."); | 251 exceptionState.throwTypeError("The ImageBitmap provided is invalid."); |
252 return ScriptPromise(); | 252 return ScriptPromise(); |
253 } | 253 } |
254 if (!sw || !sh) { | 254 if (!sw || !sh) { |
255 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 255 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
256 return ScriptPromise(); | 256 return ScriptPromise(); |
257 } | 257 } |
258 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 258 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
259 return fulfillImageBitmap(eventTarget->executionContext(), ImageBitmap::crea
te(bitmap, IntRect(sx, sy, sw, sh))); | 259 return fulfillImageBitmap(eventTarget.executionContext(), ImageBitmap::creat
e(bitmap, IntRect(sx, sy, sw, sh))); |
260 } | 260 } |
261 | 261 |
262 const char* ImageBitmapFactories::supplementName() | 262 const char* ImageBitmapFactories::supplementName() |
263 { | 263 { |
264 return "ImageBitmapFactories"; | 264 return "ImageBitmapFactories"; |
265 } | 265 } |
266 | 266 |
267 ImageBitmapFactories* ImageBitmapFactories::from(EventTarget* eventTarget) | 267 ImageBitmapFactories& ImageBitmapFactories::from(EventTarget& eventTarget) |
268 { | 268 { |
269 if (DOMWindow* window = eventTarget->toDOMWindow()) | 269 if (DOMWindow* window = eventTarget.toDOMWindow()) |
270 return fromInternal(window); | 270 return fromInternal(*window); |
271 | 271 |
272 ASSERT(eventTarget->executionContext()->isWorkerGlobalScope()); | 272 ASSERT(eventTarget.executionContext()->isWorkerGlobalScope()); |
273 return fromInternal(toWorkerGlobalScope(eventTarget->executionContext())); | 273 return fromInternal(*toWorkerGlobalScope(eventTarget.executionContext())); |
274 } | 274 } |
275 | 275 |
276 template <class T> | 276 template <class T> |
277 ImageBitmapFactories* ImageBitmapFactories::fromInternal(T* object) | 277 ImageBitmapFactories& ImageBitmapFactories::fromInternal(T& object) |
278 { | 278 { |
279 ImageBitmapFactories* supplement = static_cast<ImageBitmapFactories*>(Supple
ment<T>::from(object, supplementName())); | 279 ImageBitmapFactories* supplement = static_cast<ImageBitmapFactories*>(Supple
ment<T>::from(object, supplementName())); |
280 if (!supplement) { | 280 if (!supplement) { |
281 supplement = new ImageBitmapFactories(); | 281 supplement = new ImageBitmapFactories(); |
282 Supplement<T>::provideTo(object, supplementName(), adoptPtr(supplement))
; | 282 Supplement<T>::provideTo(object, supplementName(), adoptPtr(supplement))
; |
283 } | 283 } |
284 return supplement; | 284 return *supplement; |
285 } | 285 } |
286 | 286 |
287 void ImageBitmapFactories::addLoader(PassRefPtr<ImageBitmapLoader> loader) | 287 void ImageBitmapFactories::addLoader(PassRefPtr<ImageBitmapLoader> loader) |
288 { | 288 { |
289 m_pendingLoaders.add(loader); | 289 m_pendingLoaders.add(loader); |
290 } | 290 } |
291 | 291 |
292 void ImageBitmapFactories::didFinishLoading(ImageBitmapLoader* loader) | 292 void ImageBitmapFactories::didFinishLoading(ImageBitmapLoader* loader) |
293 { | 293 { |
294 ASSERT(m_pendingLoaders.contains(loader)); | 294 ASSERT(m_pendingLoaders.contains(loader)); |
295 m_pendingLoaders.remove(loader); | 295 m_pendingLoaders.remove(loader); |
296 } | 296 } |
297 | 297 |
298 ImageBitmapFactories::ImageBitmapLoader::ImageBitmapLoader(ImageBitmapFactories*
factory, PassRefPtr<ScriptPromiseResolver> resolver, const IntRect& cropRect) | 298 ImageBitmapFactories::ImageBitmapLoader::ImageBitmapLoader(ImageBitmapFactories&
factory, PassRefPtr<ScriptPromiseResolver> resolver, const IntRect& cropRect) |
299 : m_scriptState(ScriptState::current()) | 299 : m_scriptState(ScriptState::current()) |
300 , m_loader(FileReaderLoader::ReadAsArrayBuffer, this) | 300 , m_loader(FileReaderLoader::ReadAsArrayBuffer, this) |
301 , m_factory(factory) | 301 , m_factory(&factory) |
302 , m_resolver(resolver) | 302 , m_resolver(resolver) |
303 , m_cropRect(cropRect) | 303 , m_cropRect(cropRect) |
304 { | 304 { |
305 } | 305 } |
306 | 306 |
307 void ImageBitmapFactories::ImageBitmapLoader::loadBlobAsync(ExecutionContext* co
ntext, Blob* blob) | 307 void ImageBitmapFactories::ImageBitmapLoader::loadBlobAsync(ExecutionContext* co
ntext, Blob* blob) |
308 { | 308 { |
309 m_loader.start(context, blob->blobDataHandle()); | 309 m_loader.start(context, blob->blobDataHandle()); |
310 } | 310 } |
311 | 311 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 m_resolver->resolve(imageBitmap.release()); | 348 m_resolver->resolve(imageBitmap.release()); |
349 m_factory->didFinishLoading(this); | 349 m_factory->didFinishLoading(this); |
350 } | 350 } |
351 | 351 |
352 void ImageBitmapFactories::ImageBitmapLoader::didFail(FileError::ErrorCode) | 352 void ImageBitmapFactories::ImageBitmapLoader::didFail(FileError::ErrorCode) |
353 { | 353 { |
354 rejectPromise(); | 354 rejectPromise(); |
355 } | 355 } |
356 | 356 |
357 } // namespace WebCore | 357 } // namespace WebCore |
OLD | NEW |