| 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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 return IntSize(); | 58 return IntSize(); |
| 59 } | 59 } |
| 60 | 60 |
| 61 static IntSize sizeFor(HTMLVideoElement* video) | 61 static IntSize sizeFor(HTMLVideoElement* video) |
| 62 { | 62 { |
| 63 if (MediaPlayer* player = video->player()) | 63 if (MediaPlayer* player = video->player()) |
| 64 return player->naturalSize(); | 64 return player->naturalSize(); |
| 65 return IntSize(); | 65 return IntSize(); |
| 66 } | 66 } |
| 67 | 67 |
| 68 static ScriptPromise fulfillImageBitmap(ExecutionContext* context, PassRefPtrWil
lBeRawPtr<ImageBitmap> imageBitmap) | 68 static ScriptPromise fulfillImageBitmap(ScriptState* scriptState, PassRefPtrWill
BeRawPtr<ImageBitmap> imageBitmap) |
| 69 { | 69 { |
| 70 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(conte
xt); | 70 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
| 71 ScriptPromise promise = resolver->promise(); | 71 ScriptPromise promise = resolver->promise(); |
| 72 if (imageBitmap) { | 72 if (imageBitmap) { |
| 73 resolver->resolve(imageBitmap); | 73 resolver->resolve(imageBitmap); |
| 74 } else { | 74 } else { |
| 75 resolver->reject(ScriptValue(v8::Null(toIsolate(context)), toIsolate(con
text))); | 75 resolver->reject(ScriptValue(v8::Null(scriptState->isolate()), scriptSta
te->isolate())); |
| 76 } | 76 } |
| 77 return promise; | 77 return promise; |
| 78 } | 78 } |
| 79 | 79 |
| 80 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLImageElement* image, ExceptionState& exceptionState) | 80 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, HTMLImageElement* image, ExceptionState& exceptionStat
e) |
| 81 { | 81 { |
| 82 LayoutSize s = sizeFor(image); | 82 LayoutSize s = sizeFor(image); |
| 83 return createImageBitmap(eventTarget, image, 0, 0, s.width(), s.height(), ex
ceptionState); | 83 return createImageBitmap(scriptState, eventTarget, image, 0, 0, s.width(), s
.height(), exceptionState); |
| 84 } | 84 } |
| 85 | 85 |
| 86 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLImageElement* image, int sx, int sy, int sw, int sh, ExceptionState& excepti
onState) | 86 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, HTMLImageElement* image, int sx, int sy, int sw, int s
h, ExceptionState& exceptionState) |
| 87 { | 87 { |
| 88 // This variant does not work in worker threads. | 88 // This variant does not work in worker threads. |
| 89 ASSERT(eventTarget.toDOMWindow()); | 89 ASSERT(eventTarget.toDOMWindow()); |
| 90 | 90 |
| 91 if (!image->cachedImage()) { | 91 if (!image->cachedImage()) { |
| 92 exceptionState.throwDOMException(InvalidStateError, "No image can be ret
rieved from the provided element."); | 92 exceptionState.throwDOMException(InvalidStateError, "No image can be ret
rieved from the provided element."); |
| 93 return ScriptPromise(); | 93 return ScriptPromise(); |
| 94 } | 94 } |
| 95 if (image->cachedImage()->image()->isSVGImage()) { | 95 if (image->cachedImage()->image()->isSVGImage()) { |
| 96 exceptionState.throwDOMException(InvalidStateError, "The image element c
ontains an SVG image, which is unsupported."); | 96 exceptionState.throwDOMException(InvalidStateError, "The image element c
ontains an SVG image, which is unsupported."); |
| 97 return ScriptPromise(); | 97 return ScriptPromise(); |
| 98 } | 98 } |
| 99 if (!sw || !sh) { | 99 if (!sw || !sh) { |
| 100 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 100 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
| 101 return ScriptPromise(); | 101 return ScriptPromise(); |
| 102 } | 102 } |
| 103 if (!image->cachedImage()->image()->currentFrameHasSingleSecurityOrigin()) { | 103 if (!image->cachedImage()->image()->currentFrameHasSingleSecurityOrigin()) { |
| 104 exceptionState.throwSecurityError("The source image contains image data
from multiple origins."); | 104 exceptionState.throwSecurityError("The source image contains image data
from multiple origins."); |
| 105 return ScriptPromise(); | 105 return ScriptPromise(); |
| 106 } | 106 } |
| 107 if (!image->cachedImage()->passesAccessControlCheck(eventTarget.toDOMWindow(
)->document()->securityOrigin()) && eventTarget.toDOMWindow()->document()->secur
ityOrigin()->taintsCanvas(image->src())) { | 107 if (!image->cachedImage()->passesAccessControlCheck(eventTarget.toDOMWindow(
)->document()->securityOrigin()) && eventTarget.toDOMWindow()->document()->secur
ityOrigin()->taintsCanvas(image->src())) { |
| 108 exceptionState.throwSecurityError("Cross-origin access to the source ima
ge is denied."); | 108 exceptionState.throwSecurityError("Cross-origin access to the source ima
ge is denied."); |
| 109 return ScriptPromise(); | 109 return ScriptPromise(); |
| 110 } | 110 } |
| 111 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 111 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
| 112 return fulfillImageBitmap(eventTarget.executionContext(), ImageBitmap::creat
e(image, IntRect(sx, sy, sw, sh))); | 112 return fulfillImageBitmap(scriptState, ImageBitmap::create(image, IntRect(sx
, sy, sw, sh))); |
| 113 } | 113 } |
| 114 | 114 |
| 115 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLVideoElement* video, ExceptionState& exceptionState) | 115 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, HTMLVideoElement* video, ExceptionState& exceptionStat
e) |
| 116 { | 116 { |
| 117 IntSize s = sizeFor(video); | 117 IntSize s = sizeFor(video); |
| 118 return createImageBitmap(eventTarget, video, 0, 0, s.width(), s.height(), ex
ceptionState); | 118 return createImageBitmap(scriptState, eventTarget, video, 0, 0, s.width(), s
.height(), exceptionState); |
| 119 } | 119 } |
| 120 | 120 |
| 121 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLVideoElement* video, int sx, int sy, int sw, int sh, ExceptionState& excepti
onState) | 121 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, HTMLVideoElement* video, int sx, int sy, int sw, int s
h, ExceptionState& exceptionState) |
| 122 { | 122 { |
| 123 // This variant does not work in worker threads. | 123 // This variant does not work in worker threads. |
| 124 ASSERT(eventTarget.toDOMWindow()); | 124 ASSERT(eventTarget.toDOMWindow()); |
| 125 | 125 |
| 126 if (!video->player()) { | 126 if (!video->player()) { |
| 127 exceptionState.throwDOMException(InvalidStateError, "No player can be re
trieved from the provided video element."); | 127 exceptionState.throwDOMException(InvalidStateError, "No player can be re
trieved from the provided video element."); |
| 128 return ScriptPromise(); | 128 return ScriptPromise(); |
| 129 } | 129 } |
| 130 if (video->networkState() == HTMLMediaElement::NETWORK_EMPTY) { | 130 if (video->networkState() == HTMLMediaElement::NETWORK_EMPTY) { |
| 131 exceptionState.throwDOMException(InvalidStateError, "The provided elemen
t has not retrieved data."); | 131 exceptionState.throwDOMException(InvalidStateError, "The provided elemen
t has not retrieved data."); |
| 132 return ScriptPromise(); | 132 return ScriptPromise(); |
| 133 } | 133 } |
| 134 if (video->player()->readyState() <= MediaPlayer::HaveMetadata) { | 134 if (video->player()->readyState() <= MediaPlayer::HaveMetadata) { |
| 135 exceptionState.throwDOMException(InvalidStateError, "The provided elemen
t's player has no current data."); | 135 exceptionState.throwDOMException(InvalidStateError, "The provided elemen
t's player has no current data."); |
| 136 return ScriptPromise(); | 136 return ScriptPromise(); |
| 137 } | 137 } |
| 138 if (!sw || !sh) { | 138 if (!sw || !sh) { |
| 139 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 139 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
| 140 return ScriptPromise(); | 140 return ScriptPromise(); |
| 141 } | 141 } |
| 142 if (!video->hasSingleSecurityOrigin()) { | 142 if (!video->hasSingleSecurityOrigin()) { |
| 143 exceptionState.throwSecurityError("The source video contains image data
from multiple origins."); | 143 exceptionState.throwSecurityError("The source video contains image data
from multiple origins."); |
| 144 return ScriptPromise(); | 144 return ScriptPromise(); |
| 145 } | 145 } |
| 146 if (!video->player()->didPassCORSAccessCheck() && eventTarget.toDOMWindow()-
>document()->securityOrigin()->taintsCanvas(video->currentSrc())) { | 146 if (!video->player()->didPassCORSAccessCheck() && eventTarget.toDOMWindow()-
>document()->securityOrigin()->taintsCanvas(video->currentSrc())) { |
| 147 exceptionState.throwSecurityError("Cross-origin access to the source vid
eo is denied."); | 147 exceptionState.throwSecurityError("Cross-origin access to the source vid
eo is denied."); |
| 148 return ScriptPromise(); | 148 return ScriptPromise(); |
| 149 } | 149 } |
| 150 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 150 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
| 151 return fulfillImageBitmap(eventTarget.executionContext(), ImageBitmap::creat
e(video, IntRect(sx, sy, sw, sh))); | 151 return fulfillImageBitmap(scriptState, ImageBitmap::create(video, IntRect(sx
, sy, sw, sh))); |
| 152 } | 152 } |
| 153 | 153 |
| 154 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
CanvasRenderingContext2D* context, ExceptionState& exceptionState) | 154 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, CanvasRenderingContext2D* context, ExceptionState& exc
eptionState) |
| 155 { | 155 { |
| 156 return createImageBitmap(eventTarget, context->canvas(), exceptionState); | 156 return createImageBitmap(scriptState, eventTarget, context->canvas(), except
ionState); |
| 157 } | 157 } |
| 158 | 158 |
| 159 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
CanvasRenderingContext2D* context, int sx, int sy, int sw, int sh, ExceptionStat
e& exceptionState) | 159 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, CanvasRenderingContext2D* context, int sx, int sy, int
sw, int sh, ExceptionState& exceptionState) |
| 160 { | 160 { |
| 161 return createImageBitmap(eventTarget, context->canvas(), sx, sy, sw, sh, exc
eptionState); | 161 return createImageBitmap(scriptState, eventTarget, context->canvas(), sx, sy
, sw, sh, exceptionState); |
| 162 } | 162 } |
| 163 | 163 |
| 164 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLCanvasElement* canvas, ExceptionState& exceptionState) | 164 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, HTMLCanvasElement* canvas, ExceptionState& exceptionSt
ate) |
| 165 { | 165 { |
| 166 return createImageBitmap(eventTarget, canvas, 0, 0, canvas->width(), canvas-
>height(), exceptionState); | 166 return createImageBitmap(scriptState, eventTarget, canvas, 0, 0, canvas->wid
th(), canvas->height(), exceptionState); |
| 167 } | 167 } |
| 168 | 168 |
| 169 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
HTMLCanvasElement* canvas, int sx, int sy, int sw, int sh, ExceptionState& excep
tionState) | 169 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, HTMLCanvasElement* canvas, int sx, int sy, int sw, int
sh, ExceptionState& exceptionState) |
| 170 { | 170 { |
| 171 // This variant does not work in worker threads. | 171 // This variant does not work in worker threads. |
| 172 ASSERT(eventTarget.toDOMWindow()); | 172 ASSERT(eventTarget.toDOMWindow()); |
| 173 | 173 |
| 174 if (!canvas->originClean()) { | 174 if (!canvas->originClean()) { |
| 175 exceptionState.throwSecurityError("The canvas element provided is tainte
d with cross-origin data."); | 175 exceptionState.throwSecurityError("The canvas element provided is tainte
d with cross-origin data."); |
| 176 return ScriptPromise(); | 176 return ScriptPromise(); |
| 177 } | 177 } |
| 178 if (!sw || !sh) { | 178 if (!sw || !sh) { |
| 179 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 179 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
| 180 return ScriptPromise(); | 180 return ScriptPromise(); |
| 181 } | 181 } |
| 182 | 182 |
| 183 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 183 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
| 184 return fulfillImageBitmap(eventTarget.executionContext(), canvas->buffer() ?
ImageBitmap::create(canvas, IntRect(sx, sy, sw, sh)) : nullptr); | 184 return fulfillImageBitmap(scriptState, canvas->buffer() ? ImageBitmap::creat
e(canvas, IntRect(sx, sy, sw, sh)) : nullptr); |
| 185 } | 185 } |
| 186 | 186 |
| 187 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
Blob* blob, ExceptionState& exceptionState) | 187 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, Blob* blob, ExceptionState& exceptionState) |
| 188 { | 188 { |
| 189 RefPtrWillBeRawPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBi
tmapLoader::create(from(eventTarget), eventTarget.executionContext(), IntRect())
; | 189 RefPtrWillBeRawPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBi
tmapLoader::create(from(eventTarget), eventTarget.executionContext(), IntRect())
; |
| 190 ScriptPromise promise = loader->promise(); | 190 ScriptPromise promise = loader->promise(); |
| 191 from(eventTarget).addLoader(loader); | 191 from(eventTarget).addLoader(loader); |
| 192 loader->loadBlobAsync(eventTarget.executionContext(), blob); | 192 loader->loadBlobAsync(eventTarget.executionContext(), blob); |
| 193 return promise; | 193 return promise; |
| 194 } | 194 } |
| 195 | 195 |
| 196 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
Blob* blob, int sx, int sy, int sw, int sh, ExceptionState& exceptionState) | 196 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, Blob* blob, int sx, int sy, int sw, int sh, ExceptionS
tate& exceptionState) |
| 197 { | 197 { |
| 198 if (!sw || !sh) { | 198 if (!sw || !sh) { |
| 199 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 199 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
| 200 return ScriptPromise(); | 200 return ScriptPromise(); |
| 201 } | 201 } |
| 202 RefPtrWillBeRawPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBi
tmapLoader::create(from(eventTarget), eventTarget.executionContext(), IntRect(sx
, sy, sw, sh)); | 202 RefPtrWillBeRawPtr<ImageBitmapLoader> loader = ImageBitmapFactories::ImageBi
tmapLoader::create(from(eventTarget), eventTarget.executionContext(), IntRect(sx
, sy, sw, sh)); |
| 203 ScriptPromise promise = loader->promise(); | 203 ScriptPromise promise = loader->promise(); |
| 204 from(eventTarget).addLoader(loader); | 204 from(eventTarget).addLoader(loader); |
| 205 loader->loadBlobAsync(eventTarget.executionContext(), blob); | 205 loader->loadBlobAsync(eventTarget.executionContext(), blob); |
| 206 return promise; | 206 return promise; |
| 207 } | 207 } |
| 208 | 208 |
| 209 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
ImageData* data, ExceptionState& exceptionState) | 209 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, ImageData* data, ExceptionState& exceptionState) |
| 210 { | 210 { |
| 211 return createImageBitmap(eventTarget, data, 0, 0, data->width(), data->heigh
t(), exceptionState); | 211 return createImageBitmap(scriptState, eventTarget, data, 0, 0, data->width()
, data->height(), exceptionState); |
| 212 } | 212 } |
| 213 | 213 |
| 214 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
ImageData* data, int sx, int sy, int sw, int sh, ExceptionState& exceptionState) | 214 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, ImageData* data, int sx, int sy, int sw, int sh, Excep
tionState& exceptionState) |
| 215 { | 215 { |
| 216 if (!sw || !sh) { | 216 if (!sw || !sh) { |
| 217 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 217 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
| 218 return ScriptPromise(); | 218 return ScriptPromise(); |
| 219 } | 219 } |
| 220 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 220 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
| 221 return fulfillImageBitmap(eventTarget.executionContext(), ImageBitmap::creat
e(data, IntRect(sx, sy, sw, sh))); | 221 return fulfillImageBitmap(scriptState, ImageBitmap::create(data, IntRect(sx,
sy, sw, sh))); |
| 222 } | 222 } |
| 223 | 223 |
| 224 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
ImageBitmap* bitmap, ExceptionState& exceptionState) | 224 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, ImageBitmap* bitmap, ExceptionState& exceptionState) |
| 225 { | 225 { |
| 226 return createImageBitmap(eventTarget, bitmap, 0, 0, bitmap->width(), bitmap-
>height(), exceptionState); | 226 return createImageBitmap(scriptState, eventTarget, bitmap, 0, 0, bitmap->wid
th(), bitmap->height(), exceptionState); |
| 227 } | 227 } |
| 228 | 228 |
| 229 ScriptPromise ImageBitmapFactories::createImageBitmap(EventTarget& eventTarget,
ImageBitmap* bitmap, int sx, int sy, int sw, int sh, ExceptionState& exceptionSt
ate) | 229 ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState,
EventTarget& eventTarget, ImageBitmap* bitmap, int sx, int sy, int sw, int sh, E
xceptionState& exceptionState) |
| 230 { | 230 { |
| 231 if (!sw || !sh) { | 231 if (!sw || !sh) { |
| 232 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); | 232 exceptionState.throwDOMException(IndexSizeError, String::format("The sou
rce %s provided is 0.", sw ? "height" : "width")); |
| 233 return ScriptPromise(); | 233 return ScriptPromise(); |
| 234 } | 234 } |
| 235 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 | 235 // FIXME: make ImageBitmap creation asynchronous crbug.com/258082 |
| 236 return fulfillImageBitmap(eventTarget.executionContext(), ImageBitmap::creat
e(bitmap, IntRect(sx, sy, sw, sh))); | 236 return fulfillImageBitmap(scriptState, ImageBitmap::create(bitmap, IntRect(s
x, sy, sw, sh))); |
| 237 } | 237 } |
| 238 | 238 |
| 239 const char* ImageBitmapFactories::supplementName() | 239 const char* ImageBitmapFactories::supplementName() |
| 240 { | 240 { |
| 241 return "ImageBitmapFactories"; | 241 return "ImageBitmapFactories"; |
| 242 } | 242 } |
| 243 | 243 |
| 244 ImageBitmapFactories& ImageBitmapFactories::from(EventTarget& eventTarget) | 244 ImageBitmapFactories& ImageBitmapFactories::from(EventTarget& eventTarget) |
| 245 { | 245 { |
| 246 if (DOMWindow* window = eventTarget.toDOMWindow()) | 246 if (DOMWindow* window = eventTarget.toDOMWindow()) |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 { | 333 { |
| 334 rejectPromise(); | 334 rejectPromise(); |
| 335 } | 335 } |
| 336 | 336 |
| 337 void ImageBitmapFactories::ImageBitmapLoader::trace(Visitor* visitor) | 337 void ImageBitmapFactories::ImageBitmapLoader::trace(Visitor* visitor) |
| 338 { | 338 { |
| 339 visitor->trace(m_factory); | 339 visitor->trace(m_factory); |
| 340 } | 340 } |
| 341 | 341 |
| 342 } // namespace WebCore | 342 } // namespace WebCore |
| OLD | NEW |