diff --git a/dom/events/DataTransfer.cpp b/dom/events/DataTransfer.cpp index 03bc14dd8ca4..bc0dfa6f7f55 100644 --- a/dom/events/DataTransfer.cpp +++ b/dom/events/DataTransfer.cpp @@ -1306,7 +1306,8 @@ DataTransfer::CacheExternalData(const char* aFormat, uint32_t aIndex, // all platforms, so just check for the types that can actually be imported // XXXndeakin there are some other formats but those are platform specific. const char* kFormats[] = { kFileMime, kHTMLMime, kURLMime, kURLDataMime, - kUnicodeMime }; + kUnicodeMime, kPNGImageMime, kJPEGImageMime, + kGIFImageMime }; void DataTransfer::CacheExternalDragFormats() @@ -1383,7 +1384,8 @@ DataTransfer::CacheExternalClipboardFormats() // all platforms, so just check for the types that can actually be imported. // Note that the loop below assumes that kCustomTypesMime will be first. const char* formats[] = { kCustomTypesMime, kFileMime, kHTMLMime, kRTFMime, - kURLMime, kURLDataMime, kUnicodeMime }; + kURLMime, kURLDataMime, kUnicodeMime, kPNGImageMime, + kJPEGImageMime, kGIFImageMime }; for (uint32_t f = 0; f < mozilla::ArrayLength(formats); ++f) { // check each format one at a time diff --git a/dom/events/DataTransferItem.cpp b/dom/events/DataTransferItem.cpp index 5943a60aa55f..c4f15fb1b3f4 100644 --- a/dom/events/DataTransferItem.cpp +++ b/dom/events/DataTransferItem.cpp @@ -26,6 +26,9 @@ struct FileMimeNameData FileMimeNameData kFileMimeNameMap[] = { { kFileMime, "GenericFileName" }, + { kJPEGImageMime, "GenericImageNameJPEG" }, + { kGIFImageMime, "GenericImageNameGIF" }, + { kPNGImageMime, "GenericImageNamePNG" }, }; already_AddRefed @@ -190,8 +193,9 @@ DataTransferItem::FillInExternalData() } if (Kind() == KIND_FILE) { - // Because this is an external piece of data, mType is kFileMime. We want to - // convert whatever type happens to actually be stored into a dom::File. + // Because this is an external piece of data, mType is one of kFileMime, + // kPNGImageMime, kJPEGImageMime, or kGIFImageMime. We want to convert + // whatever type happens to actually be stored into a dom::File. RefPtr file = FileFromISupports(data); if (!file) { diff --git a/dom/events/test/mochitest.ini b/dom/events/test/mochitest.ini index 9ac62dbd1b4f..db8c8d0c78a0 100644 --- a/dom/events/test/mochitest.ini +++ b/dom/events/test/mochitest.ini @@ -200,3 +200,4 @@ skip-if = buildapp == 'b2g' # no wheel events on b2g [test_bug1264380.html] run-if = (e10s && os != "win") # Bug 1270043, crash at windows platforms; Bug1264380 comment 20, nsDragService::InvokeDragSessionImpl behaves differently among platform implementations in non-e10s mode which prevents us to check the validity of nsIDragService::getCurrentSession() consistently via synthesize mouse clicks in non-e10s mode. [test_passive_listeners.html] +[test_paste_image.html] diff --git a/dom/events/test/test_paste_image.html b/dom/events/test/test_paste_image.html new file mode 100644 index 000000000000..716fafeaf05b --- /dev/null +++ b/dom/events/test/test_paste_image.html @@ -0,0 +1,196 @@ + +Test for bug 891247 + + + + + + + +
+ +
+ +