From 6923e488e21fff4b065104c0f9ae88d64a0d91ef Mon Sep 17 00:00:00 2001 From: Tom Schuster Date: Tue, 20 Nov 2018 16:59:56 +0000 Subject: [PATCH] Bug 1493292 - Remove aDataLen parameters from nsITransferable.getTransferData. r=smaug Depends on D11200 Differential Revision: https://phabricator.services.mozilla.com/D11201 --- accessible/tests/mochitest/common.js | 5 ++- browser/base/content/browser.js | 5 ++- .../browser_page_action_menu_clipboard.js | 2 +- .../components/places/content/controller.js | 2 +- .../mortar/host/common/ppapi-runtime.jsm | 3 +- ...ser_jsterm_screenshot_command_clipboard.js | 4 +-- devtools/shared/platform/clipboard.js | 2 +- dom/base/nsContentAreaDragDrop.cpp | 24 +++++-------- dom/base/nsContentUtils.cpp | 3 +- dom/base/test/copypaste.js | 2 +- dom/base/test/test_bug166235.html | 2 +- dom/base/test/test_copyimage.html | 2 +- dom/events/DataTransferItem.cpp | 3 +- editor/libeditor/HTMLEditorDataTransfer.cpp | 21 +++--------- editor/libeditor/TextEditorDataTransfer.cpp | 4 +-- .../tests/test_CF_HTML_clipboard.html | 2 +- .../specialpowers/content/specialpowersAPI.js | 2 +- toolkit/modules/Finder.jsm | 3 +- widget/android/nsClipboard.cpp | 4 +-- widget/cocoa/nsChildView.mm | 3 +- widget/cocoa/nsClipboard.mm | 22 +++++------- widget/cocoa/nsDragService.mm | 5 ++- widget/gtk/nsClipboard.cpp | 14 ++++---- widget/gtk/nsDragService.cpp | 20 ++++------- widget/headless/HeadlessClipboard.cpp | 4 +-- .../headless/tests/test_headless_clipboard.js | 5 ++- widget/nsITransferable.idl | 2 +- widget/nsTransferable.cpp | 8 ++--- widget/tests/test_bug466599.xul | 5 ++- widget/tests/test_bug565392.html | 2 +- widget/tests/test_clipboard.xul | 5 ++- widget/tests/test_transferable_overflow.xul | 4 +-- widget/windows/nsDataObj.cpp | 34 ++++++++----------- 33 files changed, 84 insertions(+), 144 deletions(-) diff --git a/accessible/tests/mochitest/common.js b/accessible/tests/mochitest/common.js index 052e4edcd0bfb..578b4319fe969 100644 --- a/accessible/tests/mochitest/common.js +++ b/accessible/tests/mochitest/common.js @@ -731,13 +731,12 @@ function getTextFromClipboard() { Services.clipboard.getData(trans, Services.clipboard.kGlobalClipboard); var str = {}; - var strLength = {}; - trans.getTransferData("text/unicode", str, strLength); + trans.getTransferData("text/unicode", str); if (str) str = str.value.QueryInterface(Ci.nsISupportsString); if (str) - return str.data.substring(0, strLength.value / 2); + return str.data; return ""; } diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 9a64d2e2318c6..c4956756f1fa3 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -2504,12 +2504,11 @@ function readFromClipboard() { Services.clipboard.getData(trans, Services.clipboard.kGlobalClipboard); var data = {}; - var dataLen = {}; - trans.getTransferData("text/unicode", data, dataLen); + trans.getTransferData("text/unicode", data); if (data) { data = data.value.QueryInterface(Ci.nsISupportsString); - url = data.data.substring(0, dataLen.value / 2); + url = data.data; } } catch (ex) { } diff --git a/browser/base/content/test/urlbar/browser_page_action_menu_clipboard.js b/browser/base/content/test/urlbar/browser_page_action_menu_clipboard.js index 45991181b41dc..f12e17817156b 100644 --- a/browser/base/content/test/urlbar/browser_page_action_menu_clipboard.js +++ b/browser/base/content/test/urlbar/browser_page_action_menu_clipboard.js @@ -28,7 +28,7 @@ add_task(async function copyURL() { transferable.addDataFlavor(flavor); Services.clipboard.getData(transferable, Services.clipboard.kGlobalClipboard); let strObj = {}; - transferable.getTransferData(flavor, strObj, {}); + transferable.getTransferData(flavor, strObj); Assert.ok(!!strObj.value); strObj.value.QueryInterface(Ci.nsISupportsString); Assert.equal(strObj.value.data, gBrowser.selectedBrowser.currentURI.spec); diff --git a/browser/components/places/content/controller.js b/browser/components/places/content/controller.js index 3fed393502292..2be1cf989c4d9 100644 --- a/browser/components/places/content/controller.js +++ b/browser/components/places/content/controller.js @@ -965,7 +965,7 @@ PlacesController.prototype = { xferable.init(null); xferable.addDataFlavor(PlacesUtils.TYPE_X_MOZ_PLACE_ACTION); this.clipboard.getData(xferable, Ci.nsIClipboard.kGlobalClipboard); - xferable.getTransferData(PlacesUtils.TYPE_X_MOZ_PLACE_ACTION, action, {}); + xferable.getTransferData(PlacesUtils.TYPE_X_MOZ_PLACE_ACTION, action); [action, actionOwner] = action.value.QueryInterface(Ci.nsISupportsString).data.split(","); } catch (ex) { diff --git a/browser/extensions/mortar/host/common/ppapi-runtime.jsm b/browser/extensions/mortar/host/common/ppapi-runtime.jsm index a266beb9c9749..4834eb975c980 100644 --- a/browser/extensions/mortar/host/common/ppapi-runtime.jsm +++ b/browser/extensions/mortar/host/common/ppapi-runtime.jsm @@ -2618,8 +2618,7 @@ dump(`callFromJSON: < ${JSON.stringify(call)}\n`); Services.clipboard.getData( trans, Services.clipboard.kGlobalClipboard); let str = {}; - let strLength = {}; - trans.getTransferData("text/unicode", str, strLength); + trans.getTransferData("text/unicode", str); let pasteText = str.value.QueryInterface(Ci.nsISupportsString).data; return new String_PP_Var(pasteText); } diff --git a/devtools/client/webconsole/test/mochitest/browser_jsterm_screenshot_command_clipboard.js b/devtools/client/webconsole/test/mochitest/browser_jsterm_screenshot_command_clipboard.js index f10dccea975ff..a9941c4388aa5 100644 --- a/devtools/client/webconsole/test/mochitest/browser_jsterm_screenshot_command_clipboard.js +++ b/devtools/client/webconsole/test/mochitest/browser_jsterm_screenshot_command_clipboard.js @@ -165,11 +165,9 @@ async function getImageSizeFromClipboard() { clip.getData(trans, clipid.kGlobalClipboard); const data = {}; - const dataLength = {}; - trans.getTransferData(flavor, data, dataLength); + trans.getTransferData(flavor, data); ok(data.value, "screenshot exists"); - ok(dataLength.value > 0, "screenshot has length"); let image = data.value; diff --git a/devtools/shared/platform/clipboard.js b/devtools/shared/platform/clipboard.js index 9efca642165a7..9e882e018ebe3 100644 --- a/devtools/shared/platform/clipboard.js +++ b/devtools/shared/platform/clipboard.js @@ -42,7 +42,7 @@ function getText() { const data = {}; try { - xferable.getTransferData(flavor, data, {}); + xferable.getTransferData(flavor, data); } catch (e) { // Clipboard doesn't contain data in flavor, return null. return null; diff --git a/dom/base/nsContentAreaDragDrop.cpp b/dom/base/nsContentAreaDragDrop.cpp index 898927e93ea07..722064e34e9af 100644 --- a/dom/base/nsContentAreaDragDrop.cpp +++ b/dom/base/nsContentAreaDragDrop.cpp @@ -243,9 +243,7 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable, // get the URI from the kFilePromiseURLMime flavor NS_ENSURE_ARG(aTransferable); nsCOMPtr tmp; - uint32_t dataSize = 0; - aTransferable->GetTransferData(kFilePromiseURLMime, - getter_AddRefs(tmp), &dataSize); + aTransferable->GetTransferData(kFilePromiseURLMime, getter_AddRefs(tmp)); nsCOMPtr supportsString = do_QueryInterface(tmp); if (!supportsString) @@ -261,7 +259,7 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable, NS_ENSURE_SUCCESS(rv, rv); aTransferable->GetTransferData(kFilePromiseDestFilename, - getter_AddRefs(tmp), &dataSize); + getter_AddRefs(tmp)); supportsString = do_QueryInterface(tmp); if (!supportsString) return NS_ERROR_FAILURE; @@ -280,7 +278,7 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable, // content processes. if (XRE_IsParentProcess()) { aTransferable->GetTransferData(kImageRequestMime, - getter_AddRefs(tmp), &dataSize); + getter_AddRefs(tmp)); supportsString = do_QueryInterface(tmp); if (!supportsString) return NS_ERROR_FAILURE; @@ -328,9 +326,8 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable, // get the target directory from the kFilePromiseDirectoryMime // flavor nsCOMPtr dirPrimitive; - dataSize = 0; aTransferable->GetTransferData(kFilePromiseDirectoryMime, - getter_AddRefs(dirPrimitive), &dataSize); + getter_AddRefs(dirPrimitive)); nsCOMPtr destDirectory = do_QueryInterface(dirPrimitive); if (!destDirectory) return NS_ERROR_FAILURE; @@ -794,27 +791,22 @@ DragDataProducer::Produce(DataTransfer* aDataTransfer, nsCOMPtr supports; nsCOMPtr data; - uint32_t dataSize; - rv = transferable->GetTransferData(kHTMLMime, getter_AddRefs(supports), - &dataSize); + rv = transferable->GetTransferData(kHTMLMime, getter_AddRefs(supports)); data = do_QueryInterface(supports); if (NS_SUCCEEDED(rv)) { data->GetData(mHtmlString); } - rv = transferable->GetTransferData(kHTMLContext, getter_AddRefs(supports), - &dataSize); + rv = transferable->GetTransferData(kHTMLContext, getter_AddRefs(supports)); data = do_QueryInterface(supports); if (NS_SUCCEEDED(rv)) { data->GetData(mContextString); } - rv = transferable->GetTransferData(kHTMLInfo, getter_AddRefs(supports), - &dataSize); + rv = transferable->GetTransferData(kHTMLInfo, getter_AddRefs(supports)); data = do_QueryInterface(supports); if (NS_SUCCEEDED(rv)) { data->GetData(mInfoString); } - rv = transferable->GetTransferData(kUnicodeMime, getter_AddRefs(supports), - &dataSize); + rv = transferable->GetTransferData(kUnicodeMime, getter_AddRefs(supports)); data = do_QueryInterface(supports); NS_ENSURE_SUCCESS(rv, rv); // require plain text at a minimum data->GetData(mTitleString); diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index 94b431ea6e97b..1659d260d3b0f 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -7994,8 +7994,7 @@ nsContentUtils::TransferableToIPCTransferable(nsITransferable* aTransferable, } nsCOMPtr data; - uint32_t dataLen = 0; - aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(data), &dataLen); + aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(data)); nsCOMPtr text = do_QueryInterface(data); nsCOMPtr ctext = do_QueryInterface(data); diff --git a/dom/base/test/copypaste.js b/dom/base/test/copypaste.js index 585c5e447fcc8..b44b0fbb86a2e 100644 --- a/dom/base/test/copypaste.js +++ b/dom/base/test/copypaste.js @@ -85,7 +85,7 @@ async function testCopyPaste (isXHTML) { transferable.addDataFlavor(mime); clipboard.getData(transferable, 1); var data = SpecialPowers.createBlankObject(); - transferable.getTransferData(mime, data, {}) ; + transferable.getTransferData(mime, data) ; return data; } function testHtmlClipboardValue(mime, expected) { diff --git a/dom/base/test/test_bug166235.html b/dom/base/test/test_bug166235.html index 9211edf059d24..033caab6b1c16 100644 --- a/dom/base/test/test_bug166235.html +++ b/dom/base/test/test_bug166235.html @@ -60,7 +60,7 @@ transferable.addDataFlavor(mime); clipboard.getData(transferable, 1); var data = SpecialPowers.createBlankObject(); - transferable.getTransferData(mime, data, {}) ; + transferable.getTransferData(mime, data) ; return SpecialPowers.wrap(data); } function testHtmlClipboardValue(mime, expected, test) { diff --git a/dom/base/test/test_copyimage.html b/dom/base/test/test_copyimage.html index 8e05b3f5c5d35..0c808eb26bb3f 100644 --- a/dom/base/test/test_copyimage.html +++ b/dom/base/test/test_copyimage.html @@ -32,7 +32,7 @@ transferable.addDataFlavor(mime); clipboard.getData(transferable, 1); var data = SpecialPowers.createBlankObject(); - transferable.getTransferData(mime, data, {}); + transferable.getTransferData(mime, data); return data; } diff --git a/dom/events/DataTransferItem.cpp b/dom/events/DataTransferItem.cpp index f32240df1cf66..72c79f3340be5 100644 --- a/dom/events/DataTransferItem.cpp +++ b/dom/events/DataTransferItem.cpp @@ -179,9 +179,8 @@ DataTransferItem::FillInExternalData() } } - uint32_t length = 0; nsCOMPtr data; - nsresult rv = trans->GetTransferData(format, getter_AddRefs(data), &length); + nsresult rv = trans->GetTransferData(format, getter_AddRefs(data)); if (NS_WARN_IF(NS_FAILED(rv) || !data)) { return; } diff --git a/editor/libeditor/HTMLEditorDataTransfer.cpp b/editor/libeditor/HTMLEditorDataTransfer.cpp index 3a9ed53bf6317..1260e68cecffa 100644 --- a/editor/libeditor/HTMLEditorDataTransfer.cpp +++ b/editor/libeditor/HTMLEditorDataTransfer.cpp @@ -1585,7 +1585,6 @@ HTMLEditor::PasteInternal(int32_t aClipboardType, bool bHavePrivateHTMLFlavor = HavePrivateHTMLFlavor(clipboard); if (bHavePrivateHTMLFlavor) { nsCOMPtr contextDataObj, infoDataObj; - uint32_t contextLen, infoLen; nsCOMPtr textDataObj; nsCOMPtr contextTransferable = @@ -1597,8 +1596,7 @@ HTMLEditor::PasteInternal(int32_t aClipboardType, contextTransferable->AddDataFlavor(kHTMLContext); clipboard->GetData(contextTransferable, aClipboardType); contextTransferable->GetTransferData(kHTMLContext, - getter_AddRefs(contextDataObj), - &contextLen); + getter_AddRefs(contextDataObj)); nsCOMPtr infoTransferable = do_CreateInstance("@mozilla.org/widget/transferable;1"); @@ -1609,23 +1607,16 @@ HTMLEditor::PasteInternal(int32_t aClipboardType, infoTransferable->AddDataFlavor(kHTMLInfo); clipboard->GetData(infoTransferable, aClipboardType); infoTransferable->GetTransferData(kHTMLInfo, - getter_AddRefs(infoDataObj), - &infoLen); + getter_AddRefs(infoDataObj)); if (contextDataObj) { - nsAutoString text; textDataObj = do_QueryInterface(contextDataObj); - textDataObj->GetData(text); - MOZ_ASSERT(text.Length() <= contextLen / 2); - contextStr.Assign(text.get(), contextLen / 2); + textDataObj->GetData(contextStr); } if (infoDataObj) { - nsAutoString text; textDataObj = do_QueryInterface(infoDataObj); - textDataObj->GetData(text); - MOZ_ASSERT(text.Length() <= infoLen / 2); - infoStr.Assign(text.get(), infoLen / 2); + textDataObj->GetData(infoStr); } } @@ -1794,10 +1785,8 @@ HTMLEditor::CanPasteTransferable(nsITransferable* aTransferable) for (size_t i = 0; i < length; i++, flavors++) { nsCOMPtr data; - uint32_t dataLen; nsresult rv = aTransferable->GetTransferData(*flavors, - getter_AddRefs(data), - &dataLen); + getter_AddRefs(data)); if (NS_SUCCEEDED(rv) && data) { return true; } diff --git a/editor/libeditor/TextEditorDataTransfer.cpp b/editor/libeditor/TextEditorDataTransfer.cpp index da3ce9ea259fe..0c6b763be3526 100644 --- a/editor/libeditor/TextEditorDataTransfer.cpp +++ b/editor/libeditor/TextEditorDataTransfer.cpp @@ -465,10 +465,8 @@ TextEditor::CanPasteTransferable(nsITransferable* aTransferable) } nsCOMPtr data; - uint32_t dataLen; nsresult rv = aTransferable->GetTransferData(kUnicodeMime, - getter_AddRefs(data), - &dataLen); + getter_AddRefs(data)); if (NS_SUCCEEDED(rv) && data) { return true; } diff --git a/editor/libeditor/tests/test_CF_HTML_clipboard.html b/editor/libeditor/tests/test_CF_HTML_clipboard.html index 9624b61fbcf07..bf33e2f4ab25a 100644 --- a/editor/libeditor/tests/test_CF_HTML_clipboard.html +++ b/editor/libeditor/tests/test_CF_HTML_clipboard.html @@ -55,7 +55,7 @@ cb.getData(trans, cb.kGlobalClipboard); var data = SpecialPowers.createBlankObject(); try { - trans.getTransferData(CF_HTML, data, {}); + trans.getTransferData(CF_HTML, data); data = SpecialPowers.wrap(data).value.QueryInterface(Ci.nsISupportsCString).data; } catch (e) { setTimeout(function() { copyCF_HTML_worker(successFn, failureFn); }, 100); diff --git a/testing/specialpowers/content/specialpowersAPI.js b/testing/specialpowers/content/specialpowersAPI.js index d6069e07d3c8b..82dba854d1000 100644 --- a/testing/specialpowers/content/specialpowersAPI.js +++ b/testing/specialpowers/content/specialpowersAPI.js @@ -1794,7 +1794,7 @@ SpecialPowersAPI.prototype = { Services.clipboard.getData(xferable, whichClipboard); var data = {}; try { - xferable.getTransferData(flavor, data, {}); + xferable.getTransferData(flavor, data); } catch (e) {} data = data.value || null; if (data == null) diff --git a/toolkit/modules/Finder.jsm b/toolkit/modules/Finder.jsm index 58a3a2319d5e8..a08188f267fbf 100644 --- a/toolkit/modules/Finder.jsm +++ b/toolkit/modules/Finder.jsm @@ -611,8 +611,7 @@ function GetClipboardSearchString(aLoadContext) { Clipboard.getData(trans, Ci.nsIClipboard.kFindClipboard); let data = {}; - let dataLen = {}; - trans.getTransferData("text/unicode", data, dataLen); + trans.getTransferData("text/unicode", data); if (data.value) { data = data.value.QueryInterface(Ci.nsISupportsString); searchString = data.toString(); diff --git a/widget/android/nsClipboard.cpp b/widget/android/nsClipboard.cpp index 98c052cc6422e..ca76412e7eedf 100644 --- a/widget/android/nsClipboard.cpp +++ b/widget/android/nsClipboard.cpp @@ -33,9 +33,7 @@ nsClipboard::SetData(nsITransferable *aTransferable, return NS_ERROR_NOT_IMPLEMENTED; nsCOMPtr tmp; - uint32_t len; - nsresult rv = aTransferable->GetTransferData(kUnicodeMime, getter_AddRefs(tmp), - &len); + nsresult rv = aTransferable->GetTransferData(kUnicodeMime, getter_AddRefs(tmp)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr supportsString = do_QueryInterface(tmp); // No support for non-text data diff --git a/widget/cocoa/nsChildView.mm b/widget/cocoa/nsChildView.mm index aa408e9913a5f..3f69ea0a71efd 100644 --- a/widget/cocoa/nsChildView.mm +++ b/widget/cocoa/nsChildView.mm @@ -6257,9 +6257,8 @@ - (void)pasteboard:(NSPasteboard*)aPasteboard // Now request the kFilePromiseMime data, which will invoke the data // provider. If successful, the file will have been created. nsCOMPtr fileDataPrimitive; - uint32_t dataSize = 0; item->GetTransferData(kFilePromiseMime, - getter_AddRefs(fileDataPrimitive), &dataSize); + getter_AddRefs(fileDataPrimitive)); } CFRelease(urlRef); CFRelease(pboardRef); diff --git a/widget/cocoa/nsClipboard.mm b/widget/cocoa/nsClipboard.mm index 7b494b2032a18..a21f3b92f6314 100644 --- a/widget/cocoa/nsClipboard.mm +++ b/widget/cocoa/nsClipboard.mm @@ -389,10 +389,9 @@ + (NSString*)stringFromPboardType:(NSString*)aType nsCString& flavorStr = flavors[i]; nsCOMPtr dataSupports; - uint32_t dataSize = 0; - rv = mTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(dataSupports), &dataSize); + rv = mTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(dataSupports)); if (NS_SUCCEEDED(rv)) { - aTransferable->SetTransferData(flavorStr.get(), dataSupports, dataSize); + aTransferable->SetTransferData(flavorStr.get(), dataSupports, 0); return NS_OK; // maybe try to fill in more types? Is there a point? } } @@ -517,9 +516,8 @@ + (NSString*)stringFromPboardType:(NSString*)aType NSString *pboardType = nil; if (nsClipboard::IsStringType(flavorStr, &pboardType)) { - uint32_t dataSize = 0; nsCOMPtr genericDataWrapper; - rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericDataWrapper), &dataSize); + rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericDataWrapper)); if (NS_FAILED(rv)) { [pboardType release]; continue; @@ -542,9 +540,8 @@ + (NSString*)stringFromPboardType:(NSString*)aType [pasteboardOutputDict setObject:nativeString forKey:pboardType]; } else if (flavorStr.EqualsLiteral(kCustomTypesMime)) { - uint32_t dataSize = 0; nsCOMPtr genericDataWrapper; - rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericDataWrapper), &dataSize); + rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericDataWrapper)); if (NS_FAILED(rv)) { continue; } @@ -564,9 +561,8 @@ + (NSString*)stringFromPboardType:(NSString*)aType else if (flavorStr.EqualsLiteral(kPNGImageMime) || flavorStr.EqualsLiteral(kJPEGImageMime) || flavorStr.EqualsLiteral(kJPGImageMime) || flavorStr.EqualsLiteral(kGIFImageMime) || flavorStr.EqualsLiteral(kNativeImageMime)) { - uint32_t dataSize = 0; nsCOMPtr transferSupports; - aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(transferSupports), &dataSize); + aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(transferSupports)); nsCOMPtr image(do_QueryInterface(transferSupports)); if (!image) { @@ -613,9 +609,8 @@ + (NSString*)stringFromPboardType:(NSString*)aType CFRelease(tiffData); } else if (flavorStr.EqualsLiteral(kFileMime)) { - uint32_t len = 0; nsCOMPtr genericFile; - rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericFile), &len); + rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericFile)); if (NS_FAILED(rv)) { continue; } @@ -651,9 +646,8 @@ + (NSString*)stringFromPboardType:(NSString*)aType forKey:urlPromiseContent]; } else if (flavorStr.EqualsLiteral(kURLMime)) { - uint32_t len = 0; nsCOMPtr genericURL; - rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericURL), &len); + rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericURL)); nsCOMPtr urlObject(do_QueryInterface(genericURL)); nsAutoString url; @@ -669,7 +663,7 @@ + (NSString*)stringFromPboardType:(NSString*)aType nsAutoString urlTitle; urlObject->GetData(urlTitle); - urlTitle.Mid(urlTitle, newlinePos + 1, len - (newlinePos + 1)); + urlTitle.Mid(urlTitle, newlinePos + 1, urlTitle.Length() - (newlinePos + 1)); nativeTitle = [NSString stringWithCharacters: diff --git a/widget/cocoa/nsDragService.mm b/widget/cocoa/nsDragService.mm index 288f74eabb42d..0452d6767006d 100644 --- a/widget/cocoa/nsDragService.mm +++ b/widget/cocoa/nsDragService.mm @@ -393,10 +393,9 @@ nsCString& flavorStr = flavors[i]; nsCOMPtr dataSupports; - uint32_t dataSize = 0; - rv = currentTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(dataSupports), &dataSize); + rv = currentTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(dataSupports)); if (NS_SUCCEEDED(rv)) { - aTransferable->SetTransferData(flavorStr.get(), dataSupports, dataSize); + aTransferable->SetTransferData(flavorStr.get(), dataSupports, 0); return NS_OK; // maybe try to fill in more types? Is there a point? } } diff --git a/widget/gtk/nsClipboard.cpp b/widget/gtk/nsClipboard.cpp index 4303a126e5eda..ae07f630be2ae 100644 --- a/widget/gtk/nsClipboard.cpp +++ b/widget/gtk/nsClipboard.cpp @@ -475,7 +475,6 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard, nsresult rv; nsCOMPtr item; - uint32_t len; GdkAtom selectionTarget = gtk_selection_data_get_target(aSelectionData); @@ -484,8 +483,7 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard, // Try to convert our internal type into a text string. Get // the transferable for this clipboard and try to get the // text/unicode type for it. - rv = trans->GetTransferData("text/unicode", getter_AddRefs(item), - &len); + rv = trans->GetTransferData("text/unicode", getter_AddRefs(item)); if (!item || NS_FAILED(rv)) return; @@ -511,7 +509,11 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard, nsCOMPtr imageItem; nsCOMPtr image; for (uint32_t i = 0; i < ArrayLength(imageMimeTypes); i++) { - rv = trans->GetTransferData(imageMimeTypes[i], getter_AddRefs(imageItem), &len); + rv = trans->GetTransferData(imageMimeTypes[i], getter_AddRefs(imageItem)); + if (NS_FAILED(rv)) { + continue; + } + image = do_QueryInterface(imageItem); if (image) { break; @@ -532,7 +534,7 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard, } if (selectionTarget == gdk_atom_intern(kHTMLMime, FALSE)) { - rv = trans->GetTransferData(kHTMLMime, getter_AddRefs(item), &len); + rv = trans->GetTransferData(kHTMLMime, getter_AddRefs(item)); if (!item || NS_FAILED(rv)) { return; } @@ -562,7 +564,7 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard, if (!target_name) return; - rv = trans->GetTransferData(target_name, getter_AddRefs(item), &len); + rv = trans->GetTransferData(target_name, getter_AddRefs(item)); // nothing found? if (!item || NS_FAILED(rv)) { g_free(target_name); diff --git a/widget/gtk/nsDragService.cpp b/widget/gtk/nsDragService.cpp index e8405fbf7b1ef..1ce649416aae2 100644 --- a/widget/gtk/nsDragService.cpp +++ b/widget/gtk/nsDragService.cpp @@ -709,20 +709,17 @@ nsDragService::GetData(nsITransferable * aTransferable, continue; nsCOMPtr data; - uint32_t tmpDataLen = 0; MOZ_LOG(sDragLm, LogLevel::Debug, ("trying to get transfer data for %s\n", flavorStr.get())); rv = item->GetTransferData(flavorStr.get(), - getter_AddRefs(data), - &tmpDataLen); + getter_AddRefs(data)); if (NS_FAILED(rv)) { MOZ_LOG(sDragLm, LogLevel::Debug, ("failed.\n")); continue; } MOZ_LOG(sDragLm, LogLevel::Debug, ("succeeded.\n")); - rv = aTransferable->SetTransferData(flavorStr.get(), data, - tmpDataLen); + rv = aTransferable->SetTransferData(flavorStr.get(), data, 0); if (NS_FAILED(rv)) { MOZ_LOG(sDragLm, LogLevel::Debug, @@ -1490,9 +1487,7 @@ CreateURIList(nsIArray* aItems, nsACString& aURIList) } nsCOMPtr data; - uint32_t len = 0; - nsresult rv = item->GetTransferData(kURLMime, getter_AddRefs(data), - &len); + nsresult rv = item->GetTransferData(kURLMime, getter_AddRefs(data)); if (NS_SUCCEEDED(rv)) { nsCOMPtr string = do_QueryInterface(data); @@ -1515,7 +1510,7 @@ CreateURIList(nsIArray* aItems, nsACString& aURIList) // There is no URI available. If there is a file available, create // a URI from the file. - rv = item->GetTransferData(kFileMime, getter_AddRefs(data), &len); + rv = item->GetTransferData(kFileMime, getter_AddRefs(data)); if (NS_SUCCEEDED(rv)) { if (nsCOMPtr file = do_QueryInterface(data)) { nsCOMPtr fileURI; @@ -1677,10 +1672,8 @@ nsDragService::SourceDataGet(GtkWidget *aWidget, } nsresult rv; nsCOMPtr data; - uint32_t len; rv = item->GetTransferData(actualFlavor, - getter_AddRefs(data), - &len); + getter_AddRefs(data)); if (strcmp(actualFlavor, kFilePromiseMime) == 0) { if (NS_SUCCEEDED(rv)) { @@ -1750,9 +1743,8 @@ nsDragService::SourceBeginDrag(GdkDragContext *aContext) for (uint32_t i = 0; i < flavors.Length(); ++i) { if (flavors[i].EqualsLiteral(kFilePromiseDestFilename)) { nsCOMPtr data; - uint32_t dataSize = 0; transferable->GetTransferData(kFilePromiseDestFilename, - getter_AddRefs(data), &dataSize); + getter_AddRefs(data)); nsCOMPtr fileName = do_QueryInterface(data); if (!fileName) return; diff --git a/widget/headless/HeadlessClipboard.cpp b/widget/headless/HeadlessClipboard.cpp index f459c47b1d968..b3ba9207ac38b 100644 --- a/widget/headless/HeadlessClipboard.cpp +++ b/widget/headless/HeadlessClipboard.cpp @@ -32,10 +32,8 @@ HeadlessClipboard::SetData(nsITransferable *aTransferable, // Only support plain text for now. nsCOMPtr clip; - uint32_t len; nsresult rv = aTransferable->GetTransferData(kUnicodeMime, - getter_AddRefs(clip), - &len); + getter_AddRefs(clip)); if (NS_FAILED(rv)) { return rv; } diff --git a/widget/headless/tests/test_headless_clipboard.js b/widget/headless/tests/test_headless_clipboard.js index cd08e50f77e65..290113a963cff 100644 --- a/widget/headless/tests/test_headless_clipboard.js +++ b/widget/headless/tests/test_headless_clipboard.js @@ -16,12 +16,11 @@ function getString(clipboard) { try { var data = {}; - var dataLen = {}; - trans.getTransferData("text/unicode", data, dataLen); + trans.getTransferData("text/unicode", data); if (data) { data = data.value.QueryInterface(Ci.nsISupportsString); - str = data.data.substring(0, dataLen.value / 2); + str = data.data; } } catch (ex) { // If the clipboard is empty getTransferData will throw. diff --git a/widget/nsITransferable.idl b/widget/nsITransferable.idl index 43294c77ae92a..d0cd69ca4bdf4 100644 --- a/widget/nsITransferable.idl +++ b/widget/nsITransferable.idl @@ -132,7 +132,7 @@ interface nsITransferable : nsISupports * @param aData the data. Some variant of class in nsISupportsPrimitives.idl * @param aDataLen the length of the data */ - void getTransferData ( in string aFlavor, out nsISupports aData, out unsigned long aDataLen ) ; + void getTransferData(in string aFlavor, out nsISupports aData); /** * Returns the best flavor in the transferable, given those that have diff --git a/widget/nsTransferable.cpp b/widget/nsTransferable.cpp index 011ad6e5a7b55..e0d8c2a902bd0 100644 --- a/widget/nsTransferable.cpp +++ b/widget/nsTransferable.cpp @@ -260,13 +260,11 @@ nsTransferable::FindDataFlavor(const char* aFlavor) // NS_IMETHODIMP nsTransferable::GetTransferData(const char* aFlavor, - nsISupports** aData, - uint32_t* aDataLen) + nsISupports** aData) { MOZ_ASSERT(mInitialized); *aData = nullptr; - *aDataLen = 0; nsresult rv = NS_OK; @@ -288,7 +286,6 @@ nsTransferable::GetTransferData(const char* aFlavor, } if (dataBytes) { - *aDataLen = len; dataBytes.forget(aData); return NS_OK; } @@ -318,8 +315,9 @@ nsTransferable::GetTransferData(const char* aFlavor, } } + uint32_t dataLen; return mFormatConv->Convert(data.GetFlavor().get(), dataBytes, len, - aFlavor, aData, aDataLen); + aFlavor, aData, &dataLen); } } } diff --git a/widget/tests/test_bug466599.xul b/widget/tests/test_bug466599.xul index a90fa5ebba370..e2b4e6535c3f1 100644 --- a/widget/tests/test_bug466599.xul +++ b/widget/tests/test_bug466599.xul @@ -66,12 +66,11 @@ function readFromClipboard() trans.addDataFlavor('text/html'); clip.getData(trans,clipid.kGlobalClipboard); var str = new Object(); - var strLength = new Object(); - trans.getTransferData("text/html",str,strLength); + trans.getTransferData("text/html",str); if (str) str = str.value.QueryInterface(Ci.nsISupportsString); if (str) - pastetext = str.data.substring(0,strLength.value / 2); + pastetext = str.data; return pastetext; } diff --git a/widget/tests/test_bug565392.html b/widget/tests/test_bug565392.html index b27aa7307514b..90ca245cddf2d 100644 --- a/widget/tests/test_bug565392.html +++ b/widget/tests/test_bug565392.html @@ -48,7 +48,7 @@ transferable.addDataFlavor(mime); clipboard.getData(transferable, 1); var data = {}; - transferable.getTransferData(mime, data, {}) ; + transferable.getTransferData(mime, data); return data; } diff --git a/widget/tests/test_clipboard.xul b/widget/tests/test_clipboard.xul index 1f51791bb943b..25083f9e1d208 100644 --- a/widget/tests/test_clipboard.xul +++ b/widget/tests/test_clipboard.xul @@ -37,16 +37,15 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=948065 trans.addDataFlavor("text/unicode"); clipboard.getData(trans, Ci.nsIClipboard.kGlobalClipboard); let str = {}; - let length = {}; try { - trans.getTransferData('text/unicode', str, length); + trans.getTransferData('text/unicode', str); } catch (e) { str = ''; } if (str) { str = str.value.QueryInterface(Ci.nsISupportsString); if (str) { - str = str.data.substring(0, length.value / 2); + str = str.data; } } return str; diff --git a/widget/tests/test_transferable_overflow.xul b/widget/tests/test_transferable_overflow.xul index ba86b92d3a2f5..7abfd9c93b425 100644 --- a/widget/tests/test_transferable_overflow.xul +++ b/widget/tests/test_transferable_overflow.xul @@ -30,13 +30,11 @@ function checkTransferableText(transferable, expectedString, description) { var data = {}; - var dataLen = {}; - transferable.getTransferData("text/unicode", data, dataLen); + transferable.getTransferData("text/unicode", data); var actualValue = data.value.QueryInterface(Ci.nsISupportsString).data; // Use ok + shortenString instead of is(...) to avoid dumping millions of characters in the output. ok(actualValue === expectedString, description + ": text should match. " + "Expected " + shortenString(expectedString) + ", got " + shortenString(actualValue)); - is(dataLen.value, expectedString.length * 2, description + ": text length should match"); function shortenString(str) { return str && str.length > 30 ? str.slice(0, 10) + "..." + str.slice(-10) : String(str); diff --git a/widget/windows/nsDataObj.cpp b/widget/windows/nsDataObj.cpp index 46161deeb146c..367329021e645 100644 --- a/widget/windows/nsDataObj.cpp +++ b/widget/windows/nsDataObj.cpp @@ -898,9 +898,8 @@ nsDataObj::GetDib(const nsACString& inFlavor, STGMEDIUM & aSTG) { ULONG result = E_FAIL; - uint32_t len = 0; nsCOMPtr genericDataWrapper; - mTransferable->GetTransferData(PromiseFlatCString(inFlavor).get(), getter_AddRefs(genericDataWrapper), &len); + mTransferable->GetTransferData(PromiseFlatCString(inFlavor).get(), getter_AddRefs(genericDataWrapper)); nsCOMPtr image ( do_QueryInterface(genericDataWrapper) ); if ( image ) { nsCOMPtr imgTools = do_CreateInstance("@mozilla.org/image/tools;1"); @@ -1364,7 +1363,6 @@ HRESULT nsDataObj::GetPreferredDropEffect ( FORMATETC& aFE, STGMEDIUM& aSTG ) HRESULT nsDataObj::GetText(const nsACString & aDataFlavor, FORMATETC& aFE, STGMEDIUM& aSTG) { void* data = nullptr; - uint32_t len; // if someone asks for text/plain, look up text/unicode instead in the transferable. const char* flavorStr; @@ -1376,9 +1374,11 @@ HRESULT nsDataObj::GetText(const nsACString & aDataFlavor, FORMATETC& aFE, STGME // NOTE: CreateDataFromPrimitive creates new memory, that needs to be deleted nsCOMPtr genericDataWrapper; - mTransferable->GetTransferData(flavorStr, getter_AddRefs(genericDataWrapper), &len); - if ( !len ) + mTransferable->GetTransferData(flavorStr, getter_AddRefs(genericDataWrapper)); + if ( !genericDataWrapper ) return E_FAIL; + + uint32_t len; nsPrimitiveHelpers::CreateDataFromPrimitive( nsDependentCString(flavorStr), genericDataWrapper, &data, &len); if ( !data ) @@ -1482,11 +1482,9 @@ HRESULT nsDataObj::GetFile(FORMATETC& aFE, STGMEDIUM& aSTG) HRESULT nsDataObj::DropFile(FORMATETC& aFE, STGMEDIUM& aSTG) { nsresult rv; - uint32_t len = 0; nsCOMPtr genericDataWrapper; - mTransferable->GetTransferData(kFileMime, getter_AddRefs(genericDataWrapper), - &len); + mTransferable->GetTransferData(kFileMime, getter_AddRefs(genericDataWrapper)); nsCOMPtr file ( do_QueryInterface(genericDataWrapper) ); if (!file) return E_FAIL; @@ -1537,10 +1535,9 @@ HRESULT nsDataObj::DropImage(FORMATETC& aFE, STGMEDIUM& aSTG) { nsresult rv; if (!mCachedTempFile) { - uint32_t len = 0; nsCOMPtr genericDataWrapper; - mTransferable->GetTransferData(kNativeImageMime, getter_AddRefs(genericDataWrapper), &len); + mTransferable->GetTransferData(kNativeImageMime, getter_AddRefs(genericDataWrapper)); nsCOMPtr image(do_QueryInterface(genericDataWrapper)); if (!image) return E_FAIL; @@ -1841,9 +1838,8 @@ nsDataObj :: ExtractShortcutURL ( nsString & outURL ) NS_ASSERTION ( mTransferable, "We don't have a good transferable" ); nsresult rv = NS_ERROR_FAILURE; - uint32_t len = 0; nsCOMPtr genericURL; - if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLMime, getter_AddRefs(genericURL), &len)) ) { + if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLMime, getter_AddRefs(genericURL)))) { nsCOMPtr urlObject ( do_QueryInterface(genericURL) ); if ( urlObject ) { nsAutoString url; @@ -1859,8 +1855,8 @@ nsDataObj :: ExtractShortcutURL ( nsString & outURL ) rv = NS_OK; } } - } else if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLDataMime, getter_AddRefs(genericURL), &len)) || - NS_SUCCEEDED(mTransferable->GetTransferData(kURLPrivateMime, getter_AddRefs(genericURL), &len)) ) { + } else if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLDataMime, getter_AddRefs(genericURL))) || + NS_SUCCEEDED(mTransferable->GetTransferData(kURLPrivateMime, getter_AddRefs(genericURL))) ) { nsCOMPtr urlObject ( do_QueryInterface(genericURL) ); if ( urlObject ) { nsAutoString url; @@ -1892,9 +1888,8 @@ nsDataObj :: ExtractShortcutTitle ( nsString & outTitle ) NS_ASSERTION ( mTransferable, "We'd don't have a good transferable" ); nsresult rv = NS_ERROR_FAILURE; - uint32_t len = 0; nsCOMPtr genericURL; - if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLMime, getter_AddRefs(genericURL), &len)) ) { + if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLMime, getter_AddRefs(genericURL)) )) { nsCOMPtr urlObject ( do_QueryInterface(genericURL) ); if ( urlObject ) { nsAutoString url; @@ -1905,7 +1900,7 @@ nsDataObj :: ExtractShortcutTitle ( nsString & outTitle ) int32_t lineIndex = url.FindChar ( '\n' ); NS_ASSERTION ( lineIndex != -1, "Format for url flavor is " ); if ( lineIndex != -1 ) { - url.Mid ( outTitle, lineIndex + 1, (len/2) - (lineIndex + 1) ); + url.Mid ( outTitle, lineIndex + 1, url.Length() - (lineIndex + 1) ); rv = NS_OK; } } @@ -2101,8 +2096,7 @@ HRESULT nsDataObj::GetDownloadDetails(nsIURI **aSourceURI, // get the URI from the kFilePromiseURLMime flavor nsCOMPtr urlPrimitive; - uint32_t dataSize = 0; - mTransferable->GetTransferData(kFilePromiseURLMime, getter_AddRefs(urlPrimitive), &dataSize); + mTransferable->GetTransferData(kFilePromiseURLMime, getter_AddRefs(urlPrimitive)); nsCOMPtr srcUrlPrimitive = do_QueryInterface(urlPrimitive); NS_ENSURE_TRUE(srcUrlPrimitive, E_FAIL); @@ -2115,7 +2109,7 @@ HRESULT nsDataObj::GetDownloadDetails(nsIURI **aSourceURI, nsAutoString srcFileName; nsCOMPtr fileNamePrimitive; - mTransferable->GetTransferData(kFilePromiseDestFilename, getter_AddRefs(fileNamePrimitive), &dataSize); + mTransferable->GetTransferData(kFilePromiseDestFilename, getter_AddRefs(fileNamePrimitive)); nsCOMPtr srcFileNamePrimitive = do_QueryInterface(fileNamePrimitive); if (srcFileNamePrimitive) { srcFileNamePrimitive->GetData(srcFileName);