From 987516303fb3269aa29ab30f137f55bc1fa4e227 Mon Sep 17 00:00:00 2001 From: Andreea Pavel Date: Fri, 30 Nov 2018 02:30:22 +0200 Subject: [PATCH] Backed out changeset f9900ac6071c (bug 571074) for failing clipboard at browser/base/content/test/general/browser_clipboard.js on a CLOSED TREE --- dom/base/nsContentAreaDragDrop.cpp | 19 ++- dom/base/nsContentUtils.cpp | 5 +- editor/libeditor/HTMLEditorDataTransfer.cpp | 14 +-- widget/cocoa/nsChildView.mm | 5 +- widget/cocoa/nsClipboard.mm | 5 +- widget/gtk/nsClipboard.cpp | 7 +- widget/gtk/nsDragService.cpp | 11 +- widget/nsITransferable.idl | 2 +- widget/windows/nsDataObj.cpp | 129 +++++++++----------- 9 files changed, 81 insertions(+), 116 deletions(-) diff --git a/dom/base/nsContentAreaDragDrop.cpp b/dom/base/nsContentAreaDragDrop.cpp index 8d71354c8ea1..7f5bbe84f794 100644 --- a/dom/base/nsContentAreaDragDrop.cpp +++ b/dom/base/nsContentAreaDragDrop.cpp @@ -241,9 +241,7 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable, // get the URI from the kFilePromiseURLMime flavor NS_ENSURE_ARG(aTransferable); nsCOMPtr tmp; - rv = aTransferable->GetTransferData(kFilePromiseURLMime, - getter_AddRefs(tmp)); - NS_ENSURE_SUCCESS(rv, rv); + aTransferable->GetTransferData(kFilePromiseURLMime, getter_AddRefs(tmp)); nsCOMPtr supportsString = do_QueryInterface(tmp); if (!supportsString) @@ -258,9 +256,8 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable, rv = NS_NewURI(getter_AddRefs(sourceURI), sourceURLString); NS_ENSURE_SUCCESS(rv, rv); - rv = aTransferable->GetTransferData(kFilePromiseDestFilename, - getter_AddRefs(tmp)); - NS_ENSURE_SUCCESS(rv, rv); + aTransferable->GetTransferData(kFilePromiseDestFilename, + getter_AddRefs(tmp)); supportsString = do_QueryInterface(tmp); if (!supportsString) return NS_ERROR_FAILURE; @@ -278,9 +275,8 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable, // because sandboxing blocks access to MIME-handler info from // content processes. if (XRE_IsParentProcess()) { - rv = aTransferable->GetTransferData(kImageRequestMime, - getter_AddRefs(tmp)); - NS_ENSURE_SUCCESS(rv, rv); + aTransferable->GetTransferData(kImageRequestMime, + getter_AddRefs(tmp)); supportsString = do_QueryInterface(tmp); if (!supportsString) return NS_ERROR_FAILURE; @@ -328,9 +324,8 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable, // get the target directory from the kFilePromiseDirectoryMime // flavor nsCOMPtr dirPrimitive; - rv = aTransferable->GetTransferData(kFilePromiseDirectoryMime, - getter_AddRefs(dirPrimitive)); - NS_ENSURE_SUCCESS(rv, rv); + aTransferable->GetTransferData(kFilePromiseDirectoryMime, + getter_AddRefs(dirPrimitive)); nsCOMPtr destDirectory = do_QueryInterface(dirPrimitive); if (!destDirectory) return NS_ERROR_FAILURE; diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index 964d9e741153..883a9f4490c9 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -8110,10 +8110,7 @@ nsContentUtils::TransferableToIPCTransferable(nsITransferable* aTransferable, } nsCOMPtr data; - if (NS_FAILED(aTransferable->GetTransferData(flavorStr.get(), - getter_AddRefs(data)))) { - continue; - } + aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(data)); nsCOMPtr text = do_QueryInterface(data); nsCOMPtr ctext = do_QueryInterface(data); diff --git a/editor/libeditor/HTMLEditorDataTransfer.cpp b/editor/libeditor/HTMLEditorDataTransfer.cpp index 53784550c4c5..1260e68cecff 100644 --- a/editor/libeditor/HTMLEditorDataTransfer.cpp +++ b/editor/libeditor/HTMLEditorDataTransfer.cpp @@ -1595,11 +1595,8 @@ HTMLEditor::PasteInternal(int32_t aClipboardType, contextTransferable->Init(nullptr); contextTransferable->AddDataFlavor(kHTMLContext); clipboard->GetData(contextTransferable, aClipboardType); - rv = contextTransferable->GetTransferData(kHTMLContext, - getter_AddRefs(contextDataObj)); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } + contextTransferable->GetTransferData(kHTMLContext, + getter_AddRefs(contextDataObj)); nsCOMPtr infoTransferable = do_CreateInstance("@mozilla.org/widget/transferable;1"); @@ -1609,11 +1606,8 @@ HTMLEditor::PasteInternal(int32_t aClipboardType, infoTransferable->Init(nullptr); infoTransferable->AddDataFlavor(kHTMLInfo); clipboard->GetData(infoTransferable, aClipboardType); - rv = infoTransferable->GetTransferData(kHTMLInfo, - getter_AddRefs(infoDataObj)); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } + infoTransferable->GetTransferData(kHTMLInfo, + getter_AddRefs(infoDataObj)); if (contextDataObj) { textDataObj = do_QueryInterface(contextDataObj); diff --git a/widget/cocoa/nsChildView.mm b/widget/cocoa/nsChildView.mm index 1a41e2cd6f13..acb4a5ee3018 100644 --- a/widget/cocoa/nsChildView.mm +++ b/widget/cocoa/nsChildView.mm @@ -6,7 +6,6 @@ #include "mozilla/ArrayUtils.h" #include "mozilla/Logging.h" -#include "mozilla/Unused.h" #include #include @@ -6257,8 +6256,8 @@ provideDataForType:(NSString*)aType // Now request the kFilePromiseMime data, which will invoke the data // provider. If successful, the file will have been created. nsCOMPtr fileDataPrimitive; - Unused << item->GetTransferData(kFilePromiseMime, - getter_AddRefs(fileDataPrimitive)); + item->GetTransferData(kFilePromiseMime, + getter_AddRefs(fileDataPrimitive)); } CFRelease(urlRef); CFRelease(pboardRef); diff --git a/widget/cocoa/nsClipboard.mm b/widget/cocoa/nsClipboard.mm index a850ff7a41fa..1c3506c86f02 100644 --- a/widget/cocoa/nsClipboard.mm +++ b/widget/cocoa/nsClipboard.mm @@ -562,10 +562,7 @@ nsClipboard::PasteboardDictFromTransferable(nsITransferable* aTransferable) flavorStr.EqualsLiteral(kJPGImageMime) || flavorStr.EqualsLiteral(kGIFImageMime) || flavorStr.EqualsLiteral(kNativeImageMime)) { nsCOMPtr transferSupports; - rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(transferSupports)); - if (NS_FAILED(rv)) { - continue; - } + aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(transferSupports)); nsCOMPtr image(do_QueryInterface(transferSupports)); if (!image) { diff --git a/widget/gtk/nsClipboard.cpp b/widget/gtk/nsClipboard.cpp index 7c90446d1ae6..c3f794af2eaa 100644 --- a/widget/gtk/nsClipboard.cpp +++ b/widget/gtk/nsClipboard.cpp @@ -482,9 +482,8 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard, // the transferable for this clipboard and try to get the // text/unicode type for it. rv = trans->GetTransferData("text/unicode", getter_AddRefs(item)); - if (NS_FAILED(rv) || !item) { + if (!item || NS_FAILED(rv)) return; - } nsCOMPtr wideString; wideString = do_QueryInterface(item); @@ -534,7 +533,7 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard, if (selectionTarget == gdk_atom_intern(kHTMLMime, FALSE)) { rv = trans->GetTransferData(kHTMLMime, getter_AddRefs(item)); - if (NS_FAILED(rv) || !item) { + if (!item || NS_FAILED(rv)) { return; } @@ -565,7 +564,7 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard, rv = trans->GetTransferData(target_name, getter_AddRefs(item)); // nothing found? - if (NS_FAILED(rv) || !item) { + if (!item || NS_FAILED(rv)) { g_free(target_name); return; } diff --git a/widget/gtk/nsDragService.cpp b/widget/gtk/nsDragService.cpp index f733d25d216a..bab71977a2d0 100644 --- a/widget/gtk/nsDragService.cpp +++ b/widget/gtk/nsDragService.cpp @@ -1739,16 +1739,11 @@ nsDragService::SourceBeginDrag(GdkDragContext *aContext) for (uint32_t i = 0; i < flavors.Length(); ++i) { if (flavors[i].EqualsLiteral(kFilePromiseDestFilename)) { nsCOMPtr data; - rv = transferable->GetTransferData(kFilePromiseDestFilename, - getter_AddRefs(data)); - if (NS_FAILED(rv)) { - return; - } - + transferable->GetTransferData(kFilePromiseDestFilename, + getter_AddRefs(data)); nsCOMPtr fileName = do_QueryInterface(data); - if (!fileName) { + if (!fileName) return; - } nsAutoString fileNameStr; fileName->GetData(fileNameStr); diff --git a/widget/nsITransferable.idl b/widget/nsITransferable.idl index ca160220db2d..f7521ac4b7aa 100644 --- a/widget/nsITransferable.idl +++ b/widget/nsITransferable.idl @@ -131,7 +131,7 @@ interface nsITransferable : nsISupports * @param aData the data. Some variant of class in nsISupportsPrimitives.idl * @param aDataLen the length of the data */ - [must_use] void getTransferData(in string aFlavor, out nsISupports aData); + void getTransferData(in string aFlavor, out nsISupports aData); /** * Returns the best flavor in the transferable, given those that have diff --git a/widget/windows/nsDataObj.cpp b/widget/windows/nsDataObj.cpp index dfb64efba7bb..367329021e64 100644 --- a/widget/windows/nsDataObj.cpp +++ b/widget/windows/nsDataObj.cpp @@ -897,67 +897,65 @@ nsDataObj::GetDib(const nsACString& inFlavor, FORMATETC &aFormat, STGMEDIUM & aSTG) { + ULONG result = E_FAIL; nsCOMPtr genericDataWrapper; - if (NS_FAILED(mTransferable->GetTransferData(PromiseFlatCString(inFlavor).get(), - getter_AddRefs(genericDataWrapper)))) { - return E_FAIL; - } + mTransferable->GetTransferData(PromiseFlatCString(inFlavor).get(), getter_AddRefs(genericDataWrapper)); + nsCOMPtr image ( do_QueryInterface(genericDataWrapper) ); + if ( image ) { + nsCOMPtr imgTools = do_CreateInstance("@mozilla.org/image/tools;1"); - nsCOMPtr image = do_QueryInterface(genericDataWrapper); - if (!image) { - return E_FAIL; - } + nsAutoString options; + if (aFormat.cfFormat == CF_DIBV5) { + options.AppendLiteral("version=5"); + } else { + options.AppendLiteral("version=3"); + } - nsCOMPtr imgTools = do_CreateInstance("@mozilla.org/image/tools;1"); + nsCOMPtr inputStream; + nsresult rv = imgTools->EncodeImage(image, NS_LITERAL_CSTRING(IMAGE_BMP), + options, getter_AddRefs(inputStream)); + if (NS_FAILED(rv) || !inputStream) { + return E_FAIL; + } - nsAutoString options; - if (aFormat.cfFormat == CF_DIBV5) { - options.AppendLiteral("version=5"); + nsCOMPtr encoder = do_QueryInterface(inputStream); + if (!encoder) { + return E_FAIL; + } + + uint32_t size = 0; + rv = encoder->GetImageBufferUsed(&size); + if (NS_FAILED(rv) || size <= BFH_LENGTH) { + return E_FAIL; + } + + char *src = nullptr; + rv = encoder->GetImageBuffer(&src); + if (NS_FAILED(rv) || !src) { + return E_FAIL; + } + + // We don't want the file header. + src += BFH_LENGTH; + size -= BFH_LENGTH; + + HGLOBAL glob = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, size); + if (!glob) { + DWORD err = ::GetLastError(); + return E_FAIL; + } + + char *dst = (char*) ::GlobalLock(glob); + ::CopyMemory(dst, src, size); + ::GlobalUnlock(glob); + + aSTG.hGlobal = glob; + aSTG.tymed = TYMED_HGLOBAL; + result = S_OK; } else { - options.AppendLiteral("version=3"); + NS_WARNING ( "Definitely not an image on clipboard" ); } - - nsCOMPtr inputStream; - nsresult rv = imgTools->EncodeImage(image, NS_LITERAL_CSTRING(IMAGE_BMP), - options, getter_AddRefs(inputStream)); - if (NS_FAILED(rv) || !inputStream) { - return E_FAIL; - } - - nsCOMPtr encoder = do_QueryInterface(inputStream); - if (!encoder) { - return E_FAIL; - } - - uint32_t size = 0; - rv = encoder->GetImageBufferUsed(&size); - if (NS_FAILED(rv) || size <= BFH_LENGTH) { - return E_FAIL; - } - - char *src = nullptr; - rv = encoder->GetImageBuffer(&src); - if (NS_FAILED(rv) || !src) { - return E_FAIL; - } - - // We don't want the file header. - src += BFH_LENGTH; - size -= BFH_LENGTH; - - HGLOBAL glob = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, size); - if (!glob) { - DWORD err = ::GetLastError(); - return E_FAIL; - } - - char *dst = (char*) ::GlobalLock(glob); - ::CopyMemory(dst, src, size); - ::GlobalUnlock(glob); - - aSTG.hGlobal = glob; - aSTG.tymed = TYMED_HGLOBAL; - return S_OK; + return result; } @@ -1376,11 +1374,9 @@ HRESULT nsDataObj::GetText(const nsACString & aDataFlavor, FORMATETC& aFE, STGME // NOTE: CreateDataFromPrimitive creates new memory, that needs to be deleted nsCOMPtr genericDataWrapper; - nsresult rv = mTransferable->GetTransferData(flavorStr, - getter_AddRefs(genericDataWrapper)); - if (NS_FAILED(rv) || !genericDataWrapper) { + mTransferable->GetTransferData(flavorStr, getter_AddRefs(genericDataWrapper)); + if ( !genericDataWrapper ) return E_FAIL; - } uint32_t len; nsPrimitiveHelpers::CreateDataFromPrimitive( @@ -1488,9 +1484,7 @@ HRESULT nsDataObj::DropFile(FORMATETC& aFE, STGMEDIUM& aSTG) nsresult rv; nsCOMPtr genericDataWrapper; - if (NS_FAILED(mTransferable->GetTransferData(kFileMime, getter_AddRefs(genericDataWrapper)))) { - return E_FAIL; - } + mTransferable->GetTransferData(kFileMime, getter_AddRefs(genericDataWrapper)); nsCOMPtr file ( do_QueryInterface(genericDataWrapper) ); if (!file) return E_FAIL; @@ -1543,10 +1537,7 @@ HRESULT nsDataObj::DropImage(FORMATETC& aFE, STGMEDIUM& aSTG) if (!mCachedTempFile) { nsCOMPtr genericDataWrapper; - if (NS_FAILED(mTransferable->GetTransferData(kNativeImageMime, - getter_AddRefs(genericDataWrapper)))) { - return E_FAIL; - } + mTransferable->GetTransferData(kNativeImageMime, getter_AddRefs(genericDataWrapper)); nsCOMPtr image(do_QueryInterface(genericDataWrapper)); if (!image) return E_FAIL; @@ -2105,8 +2096,7 @@ HRESULT nsDataObj::GetDownloadDetails(nsIURI **aSourceURI, // get the URI from the kFilePromiseURLMime flavor nsCOMPtr urlPrimitive; - nsresult rv = mTransferable->GetTransferData(kFilePromiseURLMime, getter_AddRefs(urlPrimitive)); - NS_ENSURE_SUCCESS(rv, E_FAIL); + mTransferable->GetTransferData(kFilePromiseURLMime, getter_AddRefs(urlPrimitive)); nsCOMPtr srcUrlPrimitive = do_QueryInterface(urlPrimitive); NS_ENSURE_TRUE(srcUrlPrimitive, E_FAIL); @@ -2119,8 +2109,7 @@ HRESULT nsDataObj::GetDownloadDetails(nsIURI **aSourceURI, nsAutoString srcFileName; nsCOMPtr fileNamePrimitive; - rv = mTransferable->GetTransferData(kFilePromiseDestFilename, getter_AddRefs(fileNamePrimitive)); - NS_ENSURE_SUCCESS(rv, E_FAIL); + mTransferable->GetTransferData(kFilePromiseDestFilename, getter_AddRefs(fileNamePrimitive)); nsCOMPtr srcFileNamePrimitive = do_QueryInterface(fileNamePrimitive); if (srcFileNamePrimitive) { srcFileNamePrimitive->GetData(srcFileName);