Loading dom/base/nsContentUtils.cpp +28 −3 Original line number Diff line number Diff line Loading @@ -7600,9 +7600,27 @@ void nsContentUtils::SetKeyboardIndicatorsOnRemoteChildren( }); } bool nsContentUtils::IPCDataTransferItemHasKnownFlavor( const IPCDataTransferItem& aItem) { // Unknown types are converted to kCustomTypesMime. // FIXME(bug 1776879) text/plain is converted to text/unicode still. if (aItem.flavor().EqualsASCII(kCustomTypesMime) || aItem.flavor().EqualsASCII(kUnicodeMime)) { return true; } for (const char* format : DataTransfer::kKnownFormats) { if (aItem.flavor().EqualsASCII(format)) { return true; } } return false; } nsresult nsContentUtils::IPCTransferableToTransferable( const IPCDataTransfer& aDataTransfer, bool aAddDataFlavor, nsITransferable* aTransferable, IShmemAllocator* aAllocator) { nsITransferable* aTransferable, IShmemAllocator* aAllocator, bool aFilterUnknownFlavors) { auto release = MakeScopeExit([&] { const nsTArray<IPCDataTransferItem>& items = aDataTransfer.items(); for (const auto& item : items) { Loading @@ -7615,6 +7633,13 @@ nsresult nsContentUtils::IPCTransferableToTransferable( nsresult rv; const nsTArray<IPCDataTransferItem>& items = aDataTransfer.items(); for (const auto& item : items) { if (aFilterUnknownFlavors && !IPCDataTransferItemHasKnownFlavor(item)) { NS_WARNING( "Ignoring unknown flavor in " "nsContentUtils::IPCTransferableToTransferable"); continue; } if (aAddDataFlavor) { aTransferable->AddDataFlavor(item.flavor().get()); } Loading Loading @@ -7691,11 +7716,11 @@ nsresult nsContentUtils::IPCTransferableToTransferable( const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, nsIPrincipal* aRequestingPrincipal, const nsContentPolicyType& aContentPolicyType, bool aAddDataFlavor, nsITransferable* aTransferable, IShmemAllocator* aAllocator) { nsITransferable* aTransferable, IShmemAllocator* aAllocator, bool aFilterUnknownFlavors) { aTransferable->SetIsPrivateData(aIsPrivateData); nsresult rv = IPCTransferableToTransferable(aDataTransfer, aAddDataFlavor, aTransferable, aAllocator); aTransferable, aAllocator, aFilterUnknownFlavors); NS_ENSURE_SUCCESS(rv, rv); aTransferable->SetRequestingPrincipal(aRequestingPrincipal); Loading dom/base/nsContentUtils.h +5 −2 Original line number Diff line number Diff line Loading @@ -2884,17 +2884,20 @@ class nsContentUtils { */ static bool IsFlavorImage(const nsACString& aFlavor); static bool IPCDataTransferItemHasKnownFlavor( const mozilla::dom::IPCDataTransferItem& aItem); static nsresult IPCTransferableToTransferable( const mozilla::dom::IPCDataTransfer& aDataTransfer, bool aAddDataFlavor, nsITransferable* aTransferable, mozilla::ipc::IShmemAllocator* aAllocator); mozilla::ipc::IShmemAllocator* aAllocator, bool aFilterUnknownFlavors); static nsresult IPCTransferableToTransferable( const mozilla::dom::IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, nsIPrincipal* aRequestingPrincipal, const nsContentPolicyType& aContentPolicyType, bool aAddDataFlavor, nsITransferable* aTransferable, mozilla::ipc::IShmemAllocator* aAllocator); mozilla::ipc::IShmemAllocator* aAllocator, bool aFilterUnknownFlavors); static nsresult IPCTransferableItemToVariant( const mozilla::dom::IPCDataTransferItem& aDataTransferItem, Loading dom/events/DataTransfer.cpp +2 −23 Original line number Diff line number Diff line Loading @@ -888,27 +888,6 @@ already_AddRefed<nsITransferable> DataTransfer::GetTransferable( const uint32_t baseLength = sizeof(uint32_t) + 1; uint32_t totalCustomLength = baseLength; const char* knownFormats[] = {kTextMime, kHTMLMime, kNativeHTMLMime, kRTFMime, kURLMime, kURLDataMime, kURLDescriptionMime, kURLPrivateMime, kPNGImageMime, kJPEGImageMime, kGIFImageMime, kNativeImageMime, kFileMime, kFilePromiseMime, kFilePromiseURLMime, kFilePromiseDestFilename, kFilePromiseDirectoryMime, kMozTextInternal, kHTMLContext, kHTMLInfo, kImageRequestMime}; /* * Two passes are made here to iterate over all of the types. First, look for Loading Loading @@ -945,8 +924,8 @@ already_AddRefed<nsITransferable> DataTransfer::GetTransferable( // If the data is of one of the well-known formats, use it directly. bool isCustomFormat = true; for (uint32_t f = 0; f < ArrayLength(knownFormats); f++) { if (type.EqualsASCII(knownFormats[f])) { for (const char* format : kKnownFormats) { if (type.EqualsASCII(format)) { isCustomFormat = false; break; } Loading dom/events/DataTransfer.h +23 −0 Original line number Diff line number Diff line Loading @@ -393,6 +393,29 @@ class DataTransfer final : public nsISupports, public nsWrapperCache { bool aPlainTextOnly, nsTArray<nsCString>* aResult); // Formats that are "known" and won't be converted to the kCustomTypesMime. static inline const char* const kKnownFormats[] = {kTextMime, kHTMLMime, kNativeHTMLMime, kRTFMime, kURLMime, kURLDataMime, kURLDescriptionMime, kURLPrivateMime, kPNGImageMime, kJPEGImageMime, kGIFImageMime, kNativeImageMime, kFileMime, kFilePromiseMime, kFilePromiseURLMime, kFilePromiseDestFilename, kFilePromiseDirectoryMime, kMozTextInternal, kHTMLContext, kHTMLInfo, kImageRequestMime}; protected: // Non-text items are ignored. // Loading dom/events/RemoteDragStartData.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,13 @@ void RemoteDragStartData::AddInitialDnDDataTo( for (uint32_t i = 0; i < mDataTransfer.Length(); ++i) { nsTArray<IPCDataTransferItem>& itemArray = mDataTransfer[i].items(); for (auto& item : itemArray) { if (!nsContentUtils::IPCDataTransferItemHasKnownFlavor(item)) { NS_WARNING( "Ignoring unknown flavor in " "RemoteDragStartData::AddInitialDnDDataTo"); continue; } RefPtr<nsVariantCC> variant = new nsVariantCC(); // Special case kFilePromiseMime so that we get the right // nsIFlavorDataProvider for it. Loading Loading
dom/base/nsContentUtils.cpp +28 −3 Original line number Diff line number Diff line Loading @@ -7600,9 +7600,27 @@ void nsContentUtils::SetKeyboardIndicatorsOnRemoteChildren( }); } bool nsContentUtils::IPCDataTransferItemHasKnownFlavor( const IPCDataTransferItem& aItem) { // Unknown types are converted to kCustomTypesMime. // FIXME(bug 1776879) text/plain is converted to text/unicode still. if (aItem.flavor().EqualsASCII(kCustomTypesMime) || aItem.flavor().EqualsASCII(kUnicodeMime)) { return true; } for (const char* format : DataTransfer::kKnownFormats) { if (aItem.flavor().EqualsASCII(format)) { return true; } } return false; } nsresult nsContentUtils::IPCTransferableToTransferable( const IPCDataTransfer& aDataTransfer, bool aAddDataFlavor, nsITransferable* aTransferable, IShmemAllocator* aAllocator) { nsITransferable* aTransferable, IShmemAllocator* aAllocator, bool aFilterUnknownFlavors) { auto release = MakeScopeExit([&] { const nsTArray<IPCDataTransferItem>& items = aDataTransfer.items(); for (const auto& item : items) { Loading @@ -7615,6 +7633,13 @@ nsresult nsContentUtils::IPCTransferableToTransferable( nsresult rv; const nsTArray<IPCDataTransferItem>& items = aDataTransfer.items(); for (const auto& item : items) { if (aFilterUnknownFlavors && !IPCDataTransferItemHasKnownFlavor(item)) { NS_WARNING( "Ignoring unknown flavor in " "nsContentUtils::IPCTransferableToTransferable"); continue; } if (aAddDataFlavor) { aTransferable->AddDataFlavor(item.flavor().get()); } Loading Loading @@ -7691,11 +7716,11 @@ nsresult nsContentUtils::IPCTransferableToTransferable( const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, nsIPrincipal* aRequestingPrincipal, const nsContentPolicyType& aContentPolicyType, bool aAddDataFlavor, nsITransferable* aTransferable, IShmemAllocator* aAllocator) { nsITransferable* aTransferable, IShmemAllocator* aAllocator, bool aFilterUnknownFlavors) { aTransferable->SetIsPrivateData(aIsPrivateData); nsresult rv = IPCTransferableToTransferable(aDataTransfer, aAddDataFlavor, aTransferable, aAllocator); aTransferable, aAllocator, aFilterUnknownFlavors); NS_ENSURE_SUCCESS(rv, rv); aTransferable->SetRequestingPrincipal(aRequestingPrincipal); Loading
dom/base/nsContentUtils.h +5 −2 Original line number Diff line number Diff line Loading @@ -2884,17 +2884,20 @@ class nsContentUtils { */ static bool IsFlavorImage(const nsACString& aFlavor); static bool IPCDataTransferItemHasKnownFlavor( const mozilla::dom::IPCDataTransferItem& aItem); static nsresult IPCTransferableToTransferable( const mozilla::dom::IPCDataTransfer& aDataTransfer, bool aAddDataFlavor, nsITransferable* aTransferable, mozilla::ipc::IShmemAllocator* aAllocator); mozilla::ipc::IShmemAllocator* aAllocator, bool aFilterUnknownFlavors); static nsresult IPCTransferableToTransferable( const mozilla::dom::IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, nsIPrincipal* aRequestingPrincipal, const nsContentPolicyType& aContentPolicyType, bool aAddDataFlavor, nsITransferable* aTransferable, mozilla::ipc::IShmemAllocator* aAllocator); mozilla::ipc::IShmemAllocator* aAllocator, bool aFilterUnknownFlavors); static nsresult IPCTransferableItemToVariant( const mozilla::dom::IPCDataTransferItem& aDataTransferItem, Loading
dom/events/DataTransfer.cpp +2 −23 Original line number Diff line number Diff line Loading @@ -888,27 +888,6 @@ already_AddRefed<nsITransferable> DataTransfer::GetTransferable( const uint32_t baseLength = sizeof(uint32_t) + 1; uint32_t totalCustomLength = baseLength; const char* knownFormats[] = {kTextMime, kHTMLMime, kNativeHTMLMime, kRTFMime, kURLMime, kURLDataMime, kURLDescriptionMime, kURLPrivateMime, kPNGImageMime, kJPEGImageMime, kGIFImageMime, kNativeImageMime, kFileMime, kFilePromiseMime, kFilePromiseURLMime, kFilePromiseDestFilename, kFilePromiseDirectoryMime, kMozTextInternal, kHTMLContext, kHTMLInfo, kImageRequestMime}; /* * Two passes are made here to iterate over all of the types. First, look for Loading Loading @@ -945,8 +924,8 @@ already_AddRefed<nsITransferable> DataTransfer::GetTransferable( // If the data is of one of the well-known formats, use it directly. bool isCustomFormat = true; for (uint32_t f = 0; f < ArrayLength(knownFormats); f++) { if (type.EqualsASCII(knownFormats[f])) { for (const char* format : kKnownFormats) { if (type.EqualsASCII(format)) { isCustomFormat = false; break; } Loading
dom/events/DataTransfer.h +23 −0 Original line number Diff line number Diff line Loading @@ -393,6 +393,29 @@ class DataTransfer final : public nsISupports, public nsWrapperCache { bool aPlainTextOnly, nsTArray<nsCString>* aResult); // Formats that are "known" and won't be converted to the kCustomTypesMime. static inline const char* const kKnownFormats[] = {kTextMime, kHTMLMime, kNativeHTMLMime, kRTFMime, kURLMime, kURLDataMime, kURLDescriptionMime, kURLPrivateMime, kPNGImageMime, kJPEGImageMime, kGIFImageMime, kNativeImageMime, kFileMime, kFilePromiseMime, kFilePromiseURLMime, kFilePromiseDestFilename, kFilePromiseDirectoryMime, kMozTextInternal, kHTMLContext, kHTMLInfo, kImageRequestMime}; protected: // Non-text items are ignored. // Loading
dom/events/RemoteDragStartData.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,13 @@ void RemoteDragStartData::AddInitialDnDDataTo( for (uint32_t i = 0; i < mDataTransfer.Length(); ++i) { nsTArray<IPCDataTransferItem>& itemArray = mDataTransfer[i].items(); for (auto& item : itemArray) { if (!nsContentUtils::IPCDataTransferItemHasKnownFlavor(item)) { NS_WARNING( "Ignoring unknown flavor in " "RemoteDragStartData::AddInitialDnDDataTo"); continue; } RefPtr<nsVariantCC> variant = new nsVariantCC(); // Special case kFilePromiseMime so that we get the right // nsIFlavorDataProvider for it. Loading