Changeset 54646 in webkit
- Timestamp:
- Feb 11, 2010 12:30:34 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r54638 r54646 1 2010-02-10 Oliver Hunt <oliver@apple.com> 2 3 Reviewed by Gavin Barraclough. 4 5 postMessage does not send ImageData 6 https://bugs.webkit.org/show_bug.cgi?id=34825 7 8 Add test for postMessage passing ImageData 9 10 Update a few other tests to cover the fact that ImageData's constructor 11 is now available on the window object. 12 13 * fast/dom/Window/window-postmessage-clone-expected.txt: 14 * fast/dom/Window/window-postmessage-clone.html: 15 * fast/dom/Window/window-properties-expected.txt: 16 * fast/dom/Window/window-property-descriptors-expected.txt: 17 * fast/dom/prototype-inheritance-2-expected.txt: 18 * fast/dom/prototype-inheritance-expected.txt: 19 * fast/js/global-constructors-expected.txt: 20 1 21 2010-02-10 Beth Dakin <bdakin@apple.com> 2 22 -
trunk/LayoutTests/fast/dom/Window/window-postmessage-clone-expected.txt
r53774 r54646 19 19 PASS: eventData is [object File] of type object 20 20 PASS: eventData is [object FileList] of type object 21 PASS: eventData is [object ImageData] of type object 22 PASS: eventData is [object ImageData] of type object 21 23 PASS: eventData is done of type string 22 24 -
trunk/LayoutTests/fast/dom/Window/window-postmessage-clone.html
r54047 r54646 17 17 function equal(actual, expected) 18 18 { 19 if (actual === expected) 20 return true; 19 21 if (typeof actual !== typeof expected) 20 22 return false; 21 if (actual === expected)22 return true;23 23 if ((actual instanceof Date) || (expected instanceof Date)) { 24 24 if ((actual instanceof Date) && (expected instanceof Date)) … … 41 41 if (actual.constructor !== expected.constructor) 42 42 return false; 43 var keys = Object.keys(actual); 43 try { 44 var keys = Object.keys(actual); 45 } catch(e) { 46 return false; 47 } 48 try { 44 49 if (!equal(keys, Object.keys(expected))) 45 50 return false; 51 } catch(e) { 52 return false; 53 } 46 54 for (var i = 0; i < keys.length; i++) { 47 55 if (!equal(actual[keys[i]], expected[keys[i]])) … … 76 84 eventData = evt.data; 77 85 if (evt.data !== evt.data) 78 console.innerHTML += "MessageEvent.data does not produce the same value on multiple queries. ";86 console.innerHTML += "MessageEvent.data does not produce the same value on multiple queries.<br>"; 79 87 shouldBe("eventData", messages.shift()); 80 88 … … 130 138 tryPostMessage('window', true); 131 139 132 var fileInput = document.getElementById("fileInput"); 133 var fileRect = fileInput.getClientRects()[0]; 134 var targetX = fileRect.left + fileRect.width / 2; 135 var targetY = fileRect.top + fileRect.height / 2; 136 eventSender.beginDragWithFiles(['get-file-upload.html']); 137 eventSender.mouseMoveTo(targetX, targetY); 138 eventSender.mouseUp(); 139 tryPostMessage('fileInput.files[0]', false, fileInput.files[0]); 140 tryPostMessage('fileInput.files', false, fileInput.files); 140 if (window.eventSender) { 141 var fileInput = document.getElementById("fileInput"); 142 var fileRect = fileInput.getClientRects()[0]; 143 var targetX = fileRect.left + fileRect.width / 2; 144 var targetY = fileRect.top + fileRect.height / 2; 145 eventSender.beginDragWithFiles(['get-file-upload.html']); 146 eventSender.mouseMoveTo(targetX, targetY); 147 eventSender.mouseUp(); 148 tryPostMessage('fileInput.files[0]', false, fileInput.files[0]); 149 tryPostMessage('fileInput.files', false, fileInput.files); 150 } 151 var imageData = document.createElement("canvas").getContext("2d").createImageData(10,10); 152 for (var i = 0; i < imageData.data.length * 4; i++) 153 imageData.data[i] = i % 256; 154 var mutatedImageData = document.createElement("canvas").getContext("2d").createImageData(10,10); 155 for (var i = 0; i < imageData.data.length * 4; i++) 156 mutatedImageData.data[i] = i % 256; 157 tryPostMessage('imageData', false, imageData); 158 tryPostMessage('mutatedImageData', false, imageData); 159 for (var i = 0; i < imageData.data.length * 4; i++) 160 mutatedImageData.data[i] = 0; 141 161 142 162 tryPostMessage('"done"'); -
trunk/LayoutTests/fast/dom/Window/window-properties-expected.txt
r54143 r54646 1045 1045 window.Image [object ImageConstructor] 1046 1046 window.Image.prototype [printed above as window.Element.prototype] 1047 window.ImageData [object ImageDataConstructor] 1048 window.ImageData.prototype [object ImageDataPrototype] 1047 1049 window.KeyboardEvent [object KeyboardEventConstructor] 1048 1050 window.KeyboardEvent.prototype [printed above as window.Event.prototype] -
trunk/LayoutTests/fast/dom/Window/window-property-descriptors-expected.txt
r53727 r54646 115 115 PASS typeof Object.getOwnPropertyDescriptor(window, 'HTMLVideoElement') is 'object' 116 116 PASS typeof Object.getOwnPropertyDescriptor(window, 'Image') is 'object' 117 PASS typeof Object.getOwnPropertyDescriptor(window, 'ImageData') is 'object' 117 118 PASS typeof Object.getOwnPropertyDescriptor(window, 'Infinity') is 'object' 118 119 PASS typeof Object.getOwnPropertyDescriptor(window, 'JSON') is 'object' -
trunk/LayoutTests/fast/dom/prototype-inheritance-2-expected.txt
r53722 r54646 265 265 Never found HTMLTableSectionElement 266 266 Never found Image 267 Never found ImageData 267 268 Never found MessageChannel 268 269 Never found MessagePort -
trunk/LayoutTests/fast/dom/prototype-inheritance-expected.txt
r53722 r54646 216 216 PASS inner.Image.isInner is true 217 217 PASS inner.Image.constructor.isInner is true 218 PASS inner.ImageData.isInner is true 219 PASS inner.ImageData.constructor.isInner is true 218 220 PASS inner.KeyboardEvent.isInner is true 219 221 PASS inner.KeyboardEvent.constructor.isInner is true -
trunk/LayoutTests/fast/js/global-constructors-expected.txt
r53722 r54646 108 108 PASS HTMLVideoElement.toString() is '[object HTMLVideoElementConstructor]' 109 109 PASS Image.toString() is '[object ImageConstructor]' 110 PASS ImageData.toString() is '[object ImageDataConstructor]' 110 111 PASS KeyboardEvent.toString() is '[object KeyboardEventConstructor]' 111 112 PASS MediaError.toString() is '[object MediaErrorConstructor]' -
trunk/WebCore/ChangeLog
r54645 r54646 1 2010-02-10 Oliver Hunt <oliver@apple.com> 2 3 Reviewed by Gavin Barraclough. 4 5 postMessage does not send ImageData 6 https://bugs.webkit.org/show_bug.cgi?id=34825 7 8 Implement serialisation of ImageData, and for testing reasons 9 expose the ImageData constructor (which should already have 10 been exposed). 11 12 * bindings/js/SerializedScriptValue.cpp: 13 (WebCore::SerializedImageData::create): 14 (WebCore::SerializedImageData::width): 15 (WebCore::SerializedImageData::height): 16 (WebCore::SerializedImageData::data): 17 (WebCore::SerializedImageData::SerializedImageData): 18 (WebCore::SerializedScriptValueData::SerializedScriptValueData): 19 (WebCore::SharedSerializedData::asImageData): 20 (WebCore::SerializingTreeWalker::convertIfTerminal): 21 (WebCore::DeserializingTreeWalker::convertIfTerminal): 22 (WebCore::TeardownTreeWalker::convertIfTerminal): 23 * bindings/js/SerializedScriptValue.h: 24 (WebCore::SerializedScriptValueData::): 25 (WebCore::SerializedScriptValueData::asImageData): 26 * html/canvas/CanvasPixelArray.h: 27 (WebCore::CanvasPixelArray::data): 28 * page/DOMWindow.idl: 29 1 30 2010-02-10 Adam Barth <abarth@webkit.org> 2 31 -
trunk/WebCore/bindings/js/SerializedScriptValue.cpp
r54023 r54646 30 30 #include "File.h" 31 31 #include "FileList.h" 32 #include "ImageData.h" 32 33 #include "JSDOMGlobalObject.h" 33 34 #include "JSFile.h" 34 35 #include "JSFileList.h" 36 #include "JSImageData.h" 35 37 #include <JavaScriptCore/APICast.h> 36 38 #include <runtime/DateInstance.h> … … 38 40 #include <runtime/JSLock.h> 39 41 #include <runtime/PropertyNameArray.h> 42 #include <wtf/ByteArray.h> 40 43 #include <wtf/HashTraits.h> 41 44 #include <wtf/Vector.h> … … 166 169 }; 167 170 171 class SerializedImageData : public SharedSerializedData { 172 public: 173 static PassRefPtr<SerializedImageData> create(const ImageData* imageData) 174 { 175 return adoptRef(new SerializedImageData(imageData)); 176 } 177 178 unsigned width() const { return m_width; } 179 unsigned height() const { return m_height; } 180 WTF::ByteArray* data() const { return m_storage.get(); } 181 private: 182 SerializedImageData(const ImageData* imageData) 183 : m_width(imageData->width()) 184 , m_height(imageData->height()) 185 { 186 WTF::ByteArray* array = imageData->data()->data(); 187 m_storage = WTF::ByteArray::create(array->length()); 188 memcpy(m_storage->data(), array->data(), array->length()); 189 } 190 unsigned m_width; 191 unsigned m_height; 192 RefPtr<WTF::ByteArray> m_storage; 193 }; 194 168 195 SerializedScriptValueData::SerializedScriptValueData(RefPtr<SerializedObject> data) 169 196 : m_type(ObjectType) … … 184 211 } 185 212 213 SerializedScriptValueData::SerializedScriptValueData(const ImageData* imageData) 214 : m_type(ImageDataType) 215 , m_sharedData(SerializedImageData::create(imageData)) 216 { 217 } 218 186 219 SerializedScriptValueData::SerializedScriptValueData(const File* file) 187 220 : m_type(FileType) … … 203 236 { 204 237 return static_cast<SerializedFileList*>(this); 238 } 239 240 SerializedImageData* SharedSerializedData::asImageData() 241 { 242 return static_cast<SerializedImageData*>(this); 205 243 } 206 244 … … 534 572 if (obj->inherits(&JSFileList::s_info)) 535 573 return SerializedScriptValueData(toFileList(obj)); 574 if (obj->inherits(&JSImageData::s_info)) 575 return SerializedScriptValueData(toImageData(obj)); 536 576 537 577 CallData unusedData; … … 710 750 return toJS(m_exec, static_cast<JSDOMGlobalObject*>(m_globalObject), result.get()); 711 751 } 752 case SerializedScriptValueData::ImageDataType: { 753 if (!m_isDOMGlobalObject) 754 return jsNull(); 755 SerializedImageData* serializedImageData = value.asImageData(); 756 RefPtr<ImageData> result = ImageData::create(serializedImageData->width(), serializedImageData->height()); 757 memcpy(result->data()->data()->data(), serializedImageData->data()->data(), serializedImageData->data()->length()); 758 return toJS(m_exec, static_cast<JSDOMGlobalObject*>(m_globalObject), result.get()); 759 } 712 760 case SerializedScriptValueData::EmptyType: 713 761 ASSERT_NOT_REACHED(); … … 869 917 case SerializedScriptValueData::FileType: 870 918 case SerializedScriptValueData::FileListType: 919 case SerializedScriptValueData::ImageDataType: 871 920 return true; 872 921 } -
trunk/WebCore/bindings/js/SerializedScriptValue.h
r53969 r54646 36 36 class File; 37 37 class FileList; 38 class ImageData; 38 39 class SerializedArray; 39 40 class SerializedFileList; 41 class SerializedImageData; 40 42 class SerializedObject; 41 43 … … 46 48 SerializedObject* asObject(); 47 49 SerializedFileList* asFileList(); 50 SerializedImageData* asImageData(); 48 51 }; 49 52 … … 61 64 StringType, 62 65 FileType, 63 FileListType 66 FileListType, 67 ImageDataType 64 68 }; 65 69 … … 87 91 explicit SerializedScriptValueData(const File*); 88 92 explicit SerializedScriptValueData(const FileList*); 93 explicit SerializedScriptValueData(const ImageData*); 89 94 90 95 explicit SerializedScriptValueData(JSC::JSValue value) … … 141 146 ASSERT(m_sharedData); 142 147 return m_sharedData->asFileList(); 148 } 149 150 SerializedImageData* asImageData() const 151 { 152 ASSERT(m_type == ImageDataType); 153 ASSERT(m_sharedData); 154 return m_sharedData->asImageData(); 143 155 } 144 156 -
trunk/WebCore/html/canvas/CanvasPixelArray.h
r49734 r54646 43 43 44 44 WTF::ByteArray* data() { return m_data.get(); } 45 const WTF::ByteArray* data() const { return m_data.get(); } 45 46 unsigned length() const { return m_data->length(); } 46 47 -
trunk/WebCore/page/DOMWindow.idl
r54085 r54646 442 442 443 443 attribute CanvasRenderingContext2DConstructor CanvasRenderingContext2D; 444 attribute ImageDataConstructor ImageData; 444 445 attribute [Conditional=3D_CANVAS] WebGLRenderingContextConstructor WebGLRenderingContext; 445 446 attribute TextMetricsConstructor TextMetrics;
Note: See TracChangeset
for help on using the changeset viewer.