| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/offscreencanvas/OffscreenCanvas.h" | 5 #include "core/offscreencanvas/OffscreenCanvas.h" |
| 6 | 6 |
| 7 #include "core/dom/ExceptionCode.h" | 7 #include "core/dom/ExceptionCode.h" |
| 8 #include "core/fileapi/Blob.h" | 8 #include "core/fileapi/Blob.h" |
| 9 #include "core/html/ImageData.h" | 9 #include "core/html/ImageData.h" |
| 10 #include "core/html/canvas/CanvasAsyncBlobCreator.h" | 10 #include "core/html/canvas/CanvasAsyncBlobCreator.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 : m_size(size), m_originClean(true) {} | 25 : m_size(size), m_originClean(true) {} |
| 26 | 26 |
| 27 OffscreenCanvas* OffscreenCanvas::create(unsigned width, unsigned height) { | 27 OffscreenCanvas* OffscreenCanvas::create(unsigned width, unsigned height) { |
| 28 return new OffscreenCanvas( | 28 return new OffscreenCanvas( |
| 29 IntSize(clampTo<int>(width), clampTo<int>(height))); | 29 IntSize(clampTo<int>(width), clampTo<int>(height))); |
| 30 } | 30 } |
| 31 | 31 |
| 32 void OffscreenCanvas::setWidth(unsigned width, ExceptionState& exceptionState) { | 32 void OffscreenCanvas::setWidth(unsigned width, ExceptionState& exceptionState) { |
| 33 // If this OffscreenCanvas is transferred control by an html canvas, | 33 // If this OffscreenCanvas is transferred control by an html canvas, |
| 34 // its size is determined by html canvas's size and cannot be resized. | 34 // its size is determined by html canvas's size and cannot be resized. |
| 35 if (m_canvasId >= 0) { | 35 if (hasPlaceholderCanvas()) { |
| 36 exceptionState.throwDOMException(InvalidStateError, | 36 exceptionState.throwDOMException(InvalidStateError, |
| 37 "Resizing is not allowed on an " | 37 "Resizing is not allowed on an " |
| 38 "OffscreenCanvas that has been " | 38 "OffscreenCanvas that has been " |
| 39 "transferred control from a canvas."); | 39 "transferred control from a canvas."); |
| 40 return; | 40 return; |
| 41 } | 41 } |
| 42 m_size.setWidth(clampTo<int>(width)); | 42 m_size.setWidth(clampTo<int>(width)); |
| 43 } | 43 } |
| 44 | 44 |
| 45 void OffscreenCanvas::setHeight(unsigned height, | 45 void OffscreenCanvas::setHeight(unsigned height, |
| 46 ExceptionState& exceptionState) { | 46 ExceptionState& exceptionState) { |
| 47 // Same comment as above. | 47 // Same comment as above. |
| 48 if (m_canvasId >= 0) { | 48 if (hasPlaceholderCanvas()) { |
| 49 exceptionState.throwDOMException(InvalidStateError, | 49 exceptionState.throwDOMException(InvalidStateError, |
| 50 "Resizing is not allowed on an " | 50 "Resizing is not allowed on an " |
| 51 "OffscreenCanvas that has been " | 51 "OffscreenCanvas that has been " |
| 52 "transferred control from a canvas."); | 52 "transferred control from a canvas."); |
| 53 return; | 53 return; |
| 54 } | 54 } |
| 55 m_size.setHeight(clampTo<int>(height)); | 55 m_size.setHeight(clampTo<int>(height)); |
| 56 } | 56 } |
| 57 | 57 |
| 58 void OffscreenCanvas::setNeutered() { | 58 void OffscreenCanvas::setNeutered() { |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 bool OffscreenCanvas::isAccelerated() const { | 177 bool OffscreenCanvas::isAccelerated() const { |
| 178 return m_context && m_context->isAccelerated(); | 178 return m_context && m_context->isAccelerated(); |
| 179 } | 179 } |
| 180 | 180 |
| 181 OffscreenCanvasFrameDispatcher* OffscreenCanvas::getOrCreateFrameDispatcher() { | 181 OffscreenCanvasFrameDispatcher* OffscreenCanvas::getOrCreateFrameDispatcher() { |
| 182 if (!m_frameDispatcher) { | 182 if (!m_frameDispatcher) { |
| 183 // The frame dispatcher connects the current thread of OffscreenCanvas | 183 // The frame dispatcher connects the current thread of OffscreenCanvas |
| 184 // (either main or worker) to the browser process and remains unchanged | 184 // (either main or worker) to the browser process and remains unchanged |
| 185 // throughout the lifetime of this OffscreenCanvas. | 185 // throughout the lifetime of this OffscreenCanvas. |
| 186 m_frameDispatcher = wrapUnique(new OffscreenCanvasFrameDispatcherImpl( | 186 m_frameDispatcher = wrapUnique(new OffscreenCanvasFrameDispatcherImpl( |
| 187 m_clientId, m_sinkId, m_localId, m_nonceHigh, m_nonceLow, width(), | 187 m_clientId, m_sinkId, m_localId, m_nonceHigh, m_nonceLow, |
| 188 height())); | 188 m_placeholderCanvasId, width(), height())); |
| 189 } | 189 } |
| 190 return m_frameDispatcher.get(); | 190 return m_frameDispatcher.get(); |
| 191 } | 191 } |
| 192 | 192 |
| 193 ScriptPromise OffscreenCanvas::convertToBlob(ScriptState* scriptState, | 193 ScriptPromise OffscreenCanvas::convertToBlob(ScriptState* scriptState, |
| 194 const ImageEncodeOptions& options, | 194 const ImageEncodeOptions& options, |
| 195 ExceptionState& exceptionState) { | 195 ExceptionState& exceptionState) { |
| 196 if (this->isNeutered()) { | 196 if (this->isNeutered()) { |
| 197 exceptionState.throwDOMException(InvalidStateError, | 197 exceptionState.throwDOMException(InvalidStateError, |
| 198 "OffscreenCanvas object is detached."); | 198 "OffscreenCanvas object is detached."); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 asyncCreator->scheduleAsyncBlobCreation(options.quality()); | 235 asyncCreator->scheduleAsyncBlobCreation(options.quality()); |
| 236 | 236 |
| 237 return resolver->promise(); | 237 return resolver->promise(); |
| 238 } | 238 } |
| 239 | 239 |
| 240 DEFINE_TRACE(OffscreenCanvas) { | 240 DEFINE_TRACE(OffscreenCanvas) { |
| 241 visitor->trace(m_context); | 241 visitor->trace(m_context); |
| 242 } | 242 } |
| 243 | 243 |
| 244 } // namespace blink | 244 } // namespace blink |
| OLD | NEW |