зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 6 changesets (bug 1493292) for bustage on /nsTransferable.cpp. CLOSED TREE
Backed out changeset f198bf91320b (bug 1493292) Backed out changeset 6487aa307123 (bug 1493292) Backed out changeset f2cabd69c568 (bug 1493292) Backed out changeset 71430fceb4a3 (bug 1493292) Backed out changeset 3a9b6d65d8c7 (bug 1493292) Backed out changeset 55769869037c (bug 1493292)
This commit is contained in:
Родитель
2e8ddc13d2
Коммит
df7483024d
|
@ -731,12 +731,13 @@ function getTextFromClipboard() {
|
|||
Services.clipboard.getData(trans, Services.clipboard.kGlobalClipboard);
|
||||
|
||||
var str = {};
|
||||
trans.getTransferData("text/unicode", str);
|
||||
var strLength = {};
|
||||
trans.getTransferData("text/unicode", str, strLength);
|
||||
|
||||
if (str)
|
||||
str = str.value.QueryInterface(Ci.nsISupportsString);
|
||||
if (str)
|
||||
return str.data;
|
||||
return str.data.substring(0, strLength.value / 2);
|
||||
|
||||
return "";
|
||||
}
|
||||
|
|
|
@ -2504,11 +2504,12 @@ function readFromClipboard() {
|
|||
Services.clipboard.getData(trans, Services.clipboard.kGlobalClipboard);
|
||||
|
||||
var data = {};
|
||||
trans.getTransferData("text/unicode", data);
|
||||
var dataLen = {};
|
||||
trans.getTransferData("text/unicode", data, dataLen);
|
||||
|
||||
if (data) {
|
||||
data = data.value.QueryInterface(Ci.nsISupportsString);
|
||||
url = data.data;
|
||||
url = data.data.substring(0, dataLen.value / 2);
|
||||
}
|
||||
} catch (ex) {
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -2618,7 +2618,8 @@ dump(`callFromJSON: < ${JSON.stringify(call)}\n`);
|
|||
Services.clipboard.getData(
|
||||
trans, Services.clipboard.kGlobalClipboard);
|
||||
let str = {};
|
||||
trans.getTransferData("text/unicode", str);
|
||||
let strLength = {};
|
||||
trans.getTransferData("text/unicode", str, strLength);
|
||||
let pasteText = str.value.QueryInterface(Ci.nsISupportsString).data;
|
||||
return new String_PP_Var(pasteText);
|
||||
}
|
||||
|
|
|
@ -165,9 +165,11 @@ async function getImageSizeFromClipboard() {
|
|||
|
||||
clip.getData(trans, clipid.kGlobalClipboard);
|
||||
const data = {};
|
||||
trans.getTransferData(flavor, data);
|
||||
const dataLength = {};
|
||||
trans.getTransferData(flavor, data, dataLength);
|
||||
|
||||
ok(data.value, "screenshot exists");
|
||||
ok(dataLength.value > 0, "screenshot has length");
|
||||
|
||||
let image = data.value;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -230,10 +230,12 @@ CheckAndGetExtensionForMime(const nsCString& aExtension,
|
|||
NS_IMETHODIMP
|
||||
nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable,
|
||||
const char *aFlavor,
|
||||
nsISupports **aData)
|
||||
nsISupports **aData,
|
||||
uint32_t *aDataLen)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aData);
|
||||
NS_ENSURE_ARG_POINTER(aData && aDataLen);
|
||||
*aData = nullptr;
|
||||
*aDataLen = 0;
|
||||
|
||||
nsresult rv = NS_ERROR_NOT_IMPLEMENTED;
|
||||
|
||||
|
@ -241,7 +243,9 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable,
|
|||
// get the URI from the kFilePromiseURLMime flavor
|
||||
NS_ENSURE_ARG(aTransferable);
|
||||
nsCOMPtr<nsISupports> tmp;
|
||||
aTransferable->GetTransferData(kFilePromiseURLMime, getter_AddRefs(tmp));
|
||||
uint32_t dataSize = 0;
|
||||
aTransferable->GetTransferData(kFilePromiseURLMime,
|
||||
getter_AddRefs(tmp), &dataSize);
|
||||
nsCOMPtr<nsISupportsString> supportsString =
|
||||
do_QueryInterface(tmp);
|
||||
if (!supportsString)
|
||||
|
@ -257,7 +261,7 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable,
|
|||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
aTransferable->GetTransferData(kFilePromiseDestFilename,
|
||||
getter_AddRefs(tmp));
|
||||
getter_AddRefs(tmp), &dataSize);
|
||||
supportsString = do_QueryInterface(tmp);
|
||||
if (!supportsString)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
@ -276,7 +280,7 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable,
|
|||
// content processes.
|
||||
if (XRE_IsParentProcess()) {
|
||||
aTransferable->GetTransferData(kImageRequestMime,
|
||||
getter_AddRefs(tmp));
|
||||
getter_AddRefs(tmp), &dataSize);
|
||||
supportsString = do_QueryInterface(tmp);
|
||||
if (!supportsString)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
@ -324,8 +328,9 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable,
|
|||
// get the target directory from the kFilePromiseDirectoryMime
|
||||
// flavor
|
||||
nsCOMPtr<nsISupports> dirPrimitive;
|
||||
dataSize = 0;
|
||||
aTransferable->GetTransferData(kFilePromiseDirectoryMime,
|
||||
getter_AddRefs(dirPrimitive));
|
||||
getter_AddRefs(dirPrimitive), &dataSize);
|
||||
nsCOMPtr<nsIFile> destDirectory = do_QueryInterface(dirPrimitive);
|
||||
if (!destDirectory)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
@ -343,6 +348,7 @@ nsContentAreaDragDropDataProvider::GetFlavorData(nsITransferable *aTransferable,
|
|||
// send back an nsIFile
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
CallQueryInterface(file, aData);
|
||||
*aDataLen = sizeof(nsIFile*);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -788,22 +794,27 @@ DragDataProducer::Produce(DataTransfer* aDataTransfer,
|
|||
|
||||
nsCOMPtr<nsISupports> supports;
|
||||
nsCOMPtr<nsISupportsString> data;
|
||||
rv = transferable->GetTransferData(kHTMLMime, getter_AddRefs(supports));
|
||||
uint32_t dataSize;
|
||||
rv = transferable->GetTransferData(kHTMLMime, getter_AddRefs(supports),
|
||||
&dataSize);
|
||||
data = do_QueryInterface(supports);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
data->GetData(mHtmlString);
|
||||
}
|
||||
rv = transferable->GetTransferData(kHTMLContext, getter_AddRefs(supports));
|
||||
rv = transferable->GetTransferData(kHTMLContext, getter_AddRefs(supports),
|
||||
&dataSize);
|
||||
data = do_QueryInterface(supports);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
data->GetData(mContextString);
|
||||
}
|
||||
rv = transferable->GetTransferData(kHTMLInfo, getter_AddRefs(supports));
|
||||
rv = transferable->GetTransferData(kHTMLInfo, getter_AddRefs(supports),
|
||||
&dataSize);
|
||||
data = do_QueryInterface(supports);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
data->GetData(mInfoString);
|
||||
}
|
||||
rv = transferable->GetTransferData(kUnicodeMime, getter_AddRefs(supports));
|
||||
rv = transferable->GetTransferData(kUnicodeMime, getter_AddRefs(supports),
|
||||
&dataSize);
|
||||
data = do_QueryInterface(supports);
|
||||
NS_ENSURE_SUCCESS(rv, rv); // require plain text at a minimum
|
||||
data->GetData(mTitleString);
|
||||
|
|
|
@ -7755,7 +7755,8 @@ nsContentUtils::IPCTransferableToTransferable(const IPCDataTransfer& aDataTransf
|
|||
rv = dataWrapper->SetData(text);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper);
|
||||
rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper,
|
||||
text.Length() * sizeof(char16_t));
|
||||
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
} else if (item.data().type() == IPCDataTransferData::TShmem) {
|
||||
|
@ -7765,7 +7766,7 @@ nsContentUtils::IPCTransferableToTransferable(const IPCDataTransfer& aDataTransf
|
|||
getter_AddRefs(imageContainer));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
aTransferable->SetTransferData(item.flavor().get(), imageContainer);
|
||||
aTransferable->SetTransferData(item.flavor().get(), imageContainer, sizeof(nsISupports*));
|
||||
} else {
|
||||
nsCOMPtr<nsISupportsCString> dataWrapper =
|
||||
do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID, &rv);
|
||||
|
@ -7778,7 +7779,7 @@ nsContentUtils::IPCTransferableToTransferable(const IPCDataTransfer& aDataTransf
|
|||
rv = dataWrapper->SetData(text);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper);
|
||||
rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper, text.Length());
|
||||
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
@ -7993,7 +7994,8 @@ nsContentUtils::TransferableToIPCTransferable(nsITransferable* aTransferable,
|
|||
}
|
||||
|
||||
nsCOMPtr<nsISupports> data;
|
||||
aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(data));
|
||||
uint32_t dataLen = 0;
|
||||
aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(data), &dataLen);
|
||||
|
||||
nsCOMPtr<nsISupportsString> text = do_QueryInterface(data);
|
||||
nsCOMPtr<nsISupportsCString> ctext = do_QueryInterface(data);
|
||||
|
|
|
@ -415,7 +415,8 @@ nsCopySupport::ImageCopy(nsIImageLoadingContent* aImageElement,
|
|||
#endif
|
||||
|
||||
// copy the image data onto the transferable
|
||||
rv = trans->SetTransferData(kNativeImageMime, image);
|
||||
rv = trans->SetTransferData(kNativeImageMime, image,
|
||||
sizeof(nsISupports*));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
|
@ -453,7 +454,8 @@ static nsresult AppendString(nsITransferable *aTransferable,
|
|||
rv = aTransferable->AddDataFlavor(aFlavor);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return aTransferable->SetTransferData(aFlavor, data);
|
||||
return aTransferable->SetTransferData(aFlavor, data,
|
||||
aString.Length() * sizeof(char16_t));
|
||||
}
|
||||
|
||||
static nsresult AppendDOMNode(nsITransferable *aTransferable,
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -60,7 +60,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=816298
|
|||
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) {
|
||||
|
|
|
@ -32,7 +32,7 @@ function testCopyImage () {
|
|||
transferable.addDataFlavor(mime);
|
||||
clipboard.getData(transferable, 1);
|
||||
var data = SpecialPowers.createBlankObject();
|
||||
transferable.getTransferData(mime, data);
|
||||
transferable.getTransferData(mime, data, {});
|
||||
return data;
|
||||
}
|
||||
|
||||
|
|
|
@ -1076,7 +1076,8 @@ DataTransfer::GetTransferable(uint32_t aIndex, nsILoadContext* aLoadContext)
|
|||
strSupports->SetData(str);
|
||||
|
||||
nsresult rv = transferable->SetTransferData(kCustomTypesMime,
|
||||
strSupports);
|
||||
strSupports,
|
||||
totalCustomLength);
|
||||
if (NS_FAILED(rv)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -1116,7 +1117,8 @@ DataTransfer::GetTransferable(uint32_t aIndex, nsILoadContext* aLoadContext)
|
|||
continue;
|
||||
}
|
||||
|
||||
nsresult rv = transferable->SetTransferData(format, convertedData);
|
||||
nsresult rv = transferable->SetTransferData(format, convertedData,
|
||||
lengthInBytes);
|
||||
if (NS_FAILED(rv)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -179,8 +179,9 @@ DataTransferItem::FillInExternalData()
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t length = 0;
|
||||
nsCOMPtr<nsISupports> data;
|
||||
nsresult rv = trans->GetTransferData(format, getter_AddRefs(data));
|
||||
nsresult rv = trans->GetTransferData(format, getter_AddRefs(data), &length);
|
||||
if (NS_WARN_IF(NS_FAILED(rv) || !data)) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1585,6 +1585,7 @@ HTMLEditor::PasteInternal(int32_t aClipboardType,
|
|||
bool bHavePrivateHTMLFlavor = HavePrivateHTMLFlavor(clipboard);
|
||||
if (bHavePrivateHTMLFlavor) {
|
||||
nsCOMPtr<nsISupports> contextDataObj, infoDataObj;
|
||||
uint32_t contextLen, infoLen;
|
||||
nsCOMPtr<nsISupportsString> textDataObj;
|
||||
|
||||
nsCOMPtr<nsITransferable> contextTransferable =
|
||||
|
@ -1596,7 +1597,8 @@ HTMLEditor::PasteInternal(int32_t aClipboardType,
|
|||
contextTransferable->AddDataFlavor(kHTMLContext);
|
||||
clipboard->GetData(contextTransferable, aClipboardType);
|
||||
contextTransferable->GetTransferData(kHTMLContext,
|
||||
getter_AddRefs(contextDataObj));
|
||||
getter_AddRefs(contextDataObj),
|
||||
&contextLen);
|
||||
|
||||
nsCOMPtr<nsITransferable> infoTransferable =
|
||||
do_CreateInstance("@mozilla.org/widget/transferable;1");
|
||||
|
@ -1607,16 +1609,23 @@ HTMLEditor::PasteInternal(int32_t aClipboardType,
|
|||
infoTransferable->AddDataFlavor(kHTMLInfo);
|
||||
clipboard->GetData(infoTransferable, aClipboardType);
|
||||
infoTransferable->GetTransferData(kHTMLInfo,
|
||||
getter_AddRefs(infoDataObj));
|
||||
getter_AddRefs(infoDataObj),
|
||||
&infoLen);
|
||||
|
||||
if (contextDataObj) {
|
||||
nsAutoString text;
|
||||
textDataObj = do_QueryInterface(contextDataObj);
|
||||
textDataObj->GetData(contextStr);
|
||||
textDataObj->GetData(text);
|
||||
MOZ_ASSERT(text.Length() <= contextLen / 2);
|
||||
contextStr.Assign(text.get(), contextLen / 2);
|
||||
}
|
||||
|
||||
if (infoDataObj) {
|
||||
nsAutoString text;
|
||||
textDataObj = do_QueryInterface(infoDataObj);
|
||||
textDataObj->GetData(infoStr);
|
||||
textDataObj->GetData(text);
|
||||
MOZ_ASSERT(text.Length() <= infoLen / 2);
|
||||
infoStr.Assign(text.get(), infoLen / 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1785,8 +1794,10 @@ HTMLEditor::CanPasteTransferable(nsITransferable* aTransferable)
|
|||
|
||||
for (size_t i = 0; i < length; i++, flavors++) {
|
||||
nsCOMPtr<nsISupports> data;
|
||||
uint32_t dataLen;
|
||||
nsresult rv = aTransferable->GetTransferData(*flavors,
|
||||
getter_AddRefs(data));
|
||||
getter_AddRefs(data),
|
||||
&dataLen);
|
||||
if (NS_SUCCEEDED(rv) && data) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -465,8 +465,10 @@ TextEditor::CanPasteTransferable(nsITransferable* aTransferable)
|
|||
}
|
||||
|
||||
nsCOMPtr<nsISupports> data;
|
||||
uint32_t dataLen;
|
||||
nsresult rv = aTransferable->GetTransferData(kUnicodeMime,
|
||||
getter_AddRefs(data));
|
||||
getter_AddRefs(data),
|
||||
&dataLen);
|
||||
if (NS_SUCCEEDED(rv) && data) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ function copyCF_HTML(cfhtml, success, failure) {
|
|||
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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -611,7 +611,8 @@ function GetClipboardSearchString(aLoadContext) {
|
|||
Clipboard.getData(trans, Ci.nsIClipboard.kFindClipboard);
|
||||
|
||||
let data = {};
|
||||
trans.getTransferData("text/unicode", data);
|
||||
let dataLen = {};
|
||||
trans.getTransferData("text/unicode", data, dataLen);
|
||||
if (data.value) {
|
||||
data = data.value.QueryInterface(Ci.nsISupportsString);
|
||||
searchString = data.toString();
|
||||
|
|
|
@ -91,7 +91,8 @@ function convertHTMLToPlainText(html) {
|
|||
input.data = html.replace(/\n/g, "<br>");
|
||||
|
||||
var output = {};
|
||||
converter.convert("text/html", input, "text/unicode", output);
|
||||
converter.convert("text/html", input, input.data.length, "text/unicode",
|
||||
output, {});
|
||||
|
||||
if (output.value instanceof Ci.nsISupportsString)
|
||||
return output.value.data.replace(/\r\n/g, "\n");
|
||||
|
|
|
@ -33,7 +33,9 @@ nsClipboard::SetData(nsITransferable *aTransferable,
|
|||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
|
||||
nsCOMPtr<nsISupports> tmp;
|
||||
nsresult rv = aTransferable->GetTransferData(kUnicodeMime, getter_AddRefs(tmp));
|
||||
uint32_t len;
|
||||
nsresult rv = aTransferable->GetTransferData(kUnicodeMime, getter_AddRefs(tmp),
|
||||
&len);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsISupportsString> supportsString = do_QueryInterface(tmp);
|
||||
// No support for non-text data
|
||||
|
@ -71,7 +73,8 @@ nsClipboard::GetData(nsITransferable *aTransferable, int32_t aWhichClipboard)
|
|||
|
||||
nsCOMPtr<nsISupports> nsisupportsDataWrapper =
|
||||
do_QueryInterface(dataWrapper);
|
||||
rv = aTransferable->SetTransferData(kUnicodeMime, nsisupportsDataWrapper);
|
||||
rv = aTransferable->SetTransferData(kUnicodeMime, nsisupportsDataWrapper,
|
||||
buffer.Length() * sizeof(char16_t));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return NS_OK;
|
||||
|
|
|
@ -6251,13 +6251,15 @@ provideDataForType:(NSString*)aType
|
|||
continue;
|
||||
}
|
||||
|
||||
item->SetTransferData(kFilePromiseDirectoryMime, macLocalFile);
|
||||
item->SetTransferData(kFilePromiseDirectoryMime, macLocalFile,
|
||||
sizeof(nsIFile*));
|
||||
|
||||
// Now request the kFilePromiseMime data, which will invoke the data
|
||||
// provider. If successful, the file will have been created.
|
||||
nsCOMPtr<nsISupports> fileDataPrimitive;
|
||||
uint32_t dataSize = 0;
|
||||
item->GetTransferData(kFilePromiseMime,
|
||||
getter_AddRefs(fileDataPrimitive));
|
||||
getter_AddRefs(fileDataPrimitive), &dataSize);
|
||||
}
|
||||
CFRelease(urlRef);
|
||||
CFRelease(pboardRef);
|
||||
|
|
|
@ -239,7 +239,7 @@ nsClipboard::TransferableFromPasteboard(nsITransferable *aTransferable, NSPasteb
|
|||
nsCOMPtr<nsISupports> genericDataWrapper;
|
||||
nsPrimitiveHelpers::CreatePrimitiveForData(flavorStr, clipboardDataPtrNoBOM, dataLength,
|
||||
getter_AddRefs(genericDataWrapper));
|
||||
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper);
|
||||
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper, dataLength);
|
||||
free(clipboardDataPtr);
|
||||
break;
|
||||
}
|
||||
|
@ -269,7 +269,7 @@ nsClipboard::TransferableFromPasteboard(nsITransferable *aTransferable, NSPasteb
|
|||
nsPrimitiveHelpers::CreatePrimitiveForData(flavorStr, clipboardDataPtr, dataLength,
|
||||
getter_AddRefs(genericDataWrapper));
|
||||
|
||||
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper);
|
||||
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper, dataLength);
|
||||
free(clipboardDataPtr);
|
||||
}
|
||||
else if (flavorStr.EqualsLiteral(kJPEGImageMime) ||
|
||||
|
@ -336,7 +336,7 @@ nsClipboard::TransferableFromPasteboard(nsITransferable *aTransferable, NSPasteb
|
|||
NS_NewByteInputStream(getter_AddRefs(byteStream), (const char*)[encodedData bytes],
|
||||
[encodedData length], NS_ASSIGNMENT_COPY);
|
||||
|
||||
aTransferable->SetTransferData(flavorStr.get(), byteStream);
|
||||
aTransferable->SetTransferData(flavorStr.get(), byteStream, sizeof(nsIInputStream*));
|
||||
}
|
||||
|
||||
if (dest)
|
||||
|
@ -389,9 +389,10 @@ nsClipboard::GetNativeClipboardData(nsITransferable* aTransferable, int32_t aWhi
|
|||
nsCString& flavorStr = flavors[i];
|
||||
|
||||
nsCOMPtr<nsISupports> dataSupports;
|
||||
rv = mTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(dataSupports));
|
||||
uint32_t dataSize = 0;
|
||||
rv = mTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(dataSupports), &dataSize);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
aTransferable->SetTransferData(flavorStr.get(), dataSupports);
|
||||
aTransferable->SetTransferData(flavorStr.get(), dataSupports, dataSize);
|
||||
return NS_OK; // maybe try to fill in more types? Is there a point?
|
||||
}
|
||||
}
|
||||
|
@ -516,8 +517,9 @@ nsClipboard::PasteboardDictFromTransferable(nsITransferable* aTransferable)
|
|||
NSString *pboardType = nil;
|
||||
|
||||
if (nsClipboard::IsStringType(flavorStr, &pboardType)) {
|
||||
uint32_t dataSize = 0;
|
||||
nsCOMPtr<nsISupports> genericDataWrapper;
|
||||
rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericDataWrapper));
|
||||
rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericDataWrapper), &dataSize);
|
||||
if (NS_FAILED(rv)) {
|
||||
[pboardType release];
|
||||
continue;
|
||||
|
@ -540,8 +542,9 @@ nsClipboard::PasteboardDictFromTransferable(nsITransferable* aTransferable)
|
|||
[pasteboardOutputDict setObject:nativeString forKey:pboardType];
|
||||
}
|
||||
else if (flavorStr.EqualsLiteral(kCustomTypesMime)) {
|
||||
uint32_t dataSize = 0;
|
||||
nsCOMPtr<nsISupports> genericDataWrapper;
|
||||
rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericDataWrapper));
|
||||
rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericDataWrapper), &dataSize);
|
||||
if (NS_FAILED(rv)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -561,8 +564,9 @@ nsClipboard::PasteboardDictFromTransferable(nsITransferable* aTransferable)
|
|||
else if (flavorStr.EqualsLiteral(kPNGImageMime) || flavorStr.EqualsLiteral(kJPEGImageMime) ||
|
||||
flavorStr.EqualsLiteral(kJPGImageMime) || flavorStr.EqualsLiteral(kGIFImageMime) ||
|
||||
flavorStr.EqualsLiteral(kNativeImageMime)) {
|
||||
uint32_t dataSize = 0;
|
||||
nsCOMPtr<nsISupports> transferSupports;
|
||||
aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(transferSupports));
|
||||
aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(transferSupports), &dataSize);
|
||||
|
||||
nsCOMPtr<imgIContainer> image(do_QueryInterface(transferSupports));
|
||||
if (!image) {
|
||||
|
@ -609,8 +613,9 @@ nsClipboard::PasteboardDictFromTransferable(nsITransferable* aTransferable)
|
|||
CFRelease(tiffData);
|
||||
}
|
||||
else if (flavorStr.EqualsLiteral(kFileMime)) {
|
||||
uint32_t len = 0;
|
||||
nsCOMPtr<nsISupports> genericFile;
|
||||
rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericFile));
|
||||
rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericFile), &len);
|
||||
if (NS_FAILED(rv)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -646,8 +651,9 @@ nsClipboard::PasteboardDictFromTransferable(nsITransferable* aTransferable)
|
|||
forKey:urlPromiseContent];
|
||||
}
|
||||
else if (flavorStr.EqualsLiteral(kURLMime)) {
|
||||
uint32_t len = 0;
|
||||
nsCOMPtr<nsISupports> genericURL;
|
||||
rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericURL));
|
||||
rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(genericURL), &len);
|
||||
nsCOMPtr<nsISupportsString> urlObject(do_QueryInterface(genericURL));
|
||||
|
||||
nsAutoString url;
|
||||
|
@ -663,7 +669,7 @@ nsClipboard::PasteboardDictFromTransferable(nsITransferable* aTransferable)
|
|||
|
||||
nsAutoString urlTitle;
|
||||
urlObject->GetData(urlTitle);
|
||||
urlTitle.Mid(urlTitle, newlinePos + 1, urlTitle.Length() - (newlinePos + 1));
|
||||
urlTitle.Mid(urlTitle, newlinePos + 1, len - (newlinePos + 1));
|
||||
|
||||
nativeTitle =
|
||||
[NSString stringWithCharacters:
|
||||
|
|
|
@ -393,9 +393,10 @@ nsDragService::GetData(nsITransferable* aTransferable, uint32_t aItemIndex)
|
|||
nsCString& flavorStr = flavors[i];
|
||||
|
||||
nsCOMPtr<nsISupports> dataSupports;
|
||||
rv = currentTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(dataSupports));
|
||||
uint32_t dataSize = 0;
|
||||
rv = currentTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(dataSupports), &dataSize);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
aTransferable->SetTransferData(flavorStr.get(), dataSupports);
|
||||
aTransferable->SetTransferData(flavorStr.get(), dataSupports, dataSize);
|
||||
return NS_OK; // maybe try to fill in more types? Is there a point?
|
||||
}
|
||||
}
|
||||
|
@ -442,7 +443,7 @@ nsDragService::GetData(nsITransferable* aTransferable, uint32_t aItemIndex)
|
|||
if (NS_FAILED(rv))
|
||||
continue;
|
||||
|
||||
aTransferable->SetTransferData(flavorStr.get(), file);
|
||||
aTransferable->SetTransferData(flavorStr.get(), file, dataLength);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -469,7 +470,7 @@ nsDragService::GetData(nsITransferable* aTransferable, uint32_t aItemIndex)
|
|||
nsPrimitiveHelpers::CreatePrimitiveForData(flavorStr, clipboardDataPtr, dataLength,
|
||||
getter_AddRefs(genericDataWrapper));
|
||||
|
||||
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper);
|
||||
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper, sizeof(nsIInputStream*));
|
||||
free(clipboardDataPtr);
|
||||
break;
|
||||
}
|
||||
|
@ -535,7 +536,7 @@ nsDragService::GetData(nsITransferable* aTransferable, uint32_t aItemIndex)
|
|||
nsCOMPtr<nsISupports> genericDataWrapper;
|
||||
nsPrimitiveHelpers::CreatePrimitiveForData(flavorStr, clipboardDataPtrNoBOM, dataLength,
|
||||
getter_AddRefs(genericDataWrapper));
|
||||
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper);
|
||||
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper, dataLength);
|
||||
free(clipboardDataPtr);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -236,7 +236,8 @@ nsClipboard::SetTransferableData(nsITransferable* aTransferable,
|
|||
aClipboardData,
|
||||
aClipboardDataLength,
|
||||
getter_AddRefs(wrapper));
|
||||
aTransferable->SetTransferData(aFlavor.get(), wrapper);
|
||||
aTransferable->SetTransferData(aFlavor.get(),
|
||||
wrapper, aClipboardDataLength);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -277,7 +278,8 @@ nsClipboard::GetData(nsITransferable *aTransferable, int32_t aWhichClipboard)
|
|||
clipboardData,
|
||||
clipboardDataLength,
|
||||
NS_ASSIGNMENT_COPY);
|
||||
aTransferable->SetTransferData(flavorStr.get(), byteStream);
|
||||
aTransferable->SetTransferData(flavorStr.get(), byteStream,
|
||||
sizeof(nsIInputStream*));
|
||||
|
||||
mContext->ReleaseClipboardData(clipboardData);
|
||||
return NS_OK;
|
||||
|
@ -473,6 +475,7 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard,
|
|||
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsISupports> item;
|
||||
uint32_t len;
|
||||
|
||||
GdkAtom selectionTarget = gtk_selection_data_get_target(aSelectionData);
|
||||
|
||||
|
@ -481,7 +484,8 @@ 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));
|
||||
rv = trans->GetTransferData("text/unicode", getter_AddRefs(item),
|
||||
&len);
|
||||
if (!item || NS_FAILED(rv))
|
||||
return;
|
||||
|
||||
|
@ -507,7 +511,7 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard,
|
|||
nsCOMPtr<nsISupports> imageItem;
|
||||
nsCOMPtr<imgIContainer> image;
|
||||
for (uint32_t i = 0; i < ArrayLength(imageMimeTypes); i++) {
|
||||
rv = trans->GetTransferData(imageMimeTypes[i], getter_AddRefs(imageItem));
|
||||
rv = trans->GetTransferData(imageMimeTypes[i], getter_AddRefs(imageItem), &len);
|
||||
image = do_QueryInterface(imageItem);
|
||||
if (image) {
|
||||
break;
|
||||
|
@ -528,7 +532,7 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard,
|
|||
}
|
||||
|
||||
if (selectionTarget == gdk_atom_intern(kHTMLMime, FALSE)) {
|
||||
rv = trans->GetTransferData(kHTMLMime, getter_AddRefs(item));
|
||||
rv = trans->GetTransferData(kHTMLMime, getter_AddRefs(item), &len);
|
||||
if (!item || NS_FAILED(rv)) {
|
||||
return;
|
||||
}
|
||||
|
@ -558,7 +562,7 @@ nsClipboard::SelectionGetEvent(GtkClipboard *aClipboard,
|
|||
if (!target_name)
|
||||
return;
|
||||
|
||||
rv = trans->GetTransferData(target_name, getter_AddRefs(item));
|
||||
rv = trans->GetTransferData(target_name, getter_AddRefs(item), &len);
|
||||
// nothing found?
|
||||
if (!item || NS_FAILED(rv)) {
|
||||
g_free(target_name);
|
||||
|
|
|
@ -709,17 +709,20 @@ nsDragService::GetData(nsITransferable * aTransferable,
|
|||
continue;
|
||||
|
||||
nsCOMPtr<nsISupports> 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));
|
||||
getter_AddRefs(data),
|
||||
&tmpDataLen);
|
||||
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);
|
||||
rv = aTransferable->SetTransferData(flavorStr.get(), data,
|
||||
tmpDataLen);
|
||||
if (NS_FAILED(rv)) {
|
||||
MOZ_LOG(sDragLm,
|
||||
LogLevel::Debug,
|
||||
|
@ -786,7 +789,8 @@ nsDragService::GetData(nsITransferable * aTransferable,
|
|||
// and calls text-specific operations.
|
||||
// Make a secret hideout here for nsIFile
|
||||
// objects and return early.
|
||||
aTransferable->SetTransferData(flavorStr.get(), file);
|
||||
aTransferable->SetTransferData(flavorStr.get(), file,
|
||||
convertedTextLen);
|
||||
g_free(convertedText);
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -939,7 +943,8 @@ nsDragService::GetData(nsITransferable * aTransferable,
|
|||
mTargetDragData, mTargetDragDataLen,
|
||||
getter_AddRefs(genericDataWrapper));
|
||||
aTransferable->SetTransferData(flavorStr.get(),
|
||||
genericDataWrapper);
|
||||
genericDataWrapper,
|
||||
mTargetDragDataLen);
|
||||
// we found one, get out of this loop!
|
||||
MOZ_LOG(sDragLm, LogLevel::Debug, ("dataFound and converted!\n"));
|
||||
break;
|
||||
|
@ -1485,7 +1490,9 @@ CreateURIList(nsIArray* aItems, nsACString& aURIList)
|
|||
}
|
||||
|
||||
nsCOMPtr<nsISupports> data;
|
||||
nsresult rv = item->GetTransferData(kURLMime, getter_AddRefs(data));
|
||||
uint32_t len = 0;
|
||||
nsresult rv = item->GetTransferData(kURLMime, getter_AddRefs(data),
|
||||
&len);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
nsCOMPtr<nsISupportsString> string = do_QueryInterface(data);
|
||||
|
||||
|
@ -1508,7 +1515,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));
|
||||
rv = item->GetTransferData(kFileMime, getter_AddRefs(data), &len);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
if (nsCOMPtr<nsIFile> file = do_QueryInterface(data)) {
|
||||
nsCOMPtr<nsIURI> fileURI;
|
||||
|
@ -1648,7 +1655,8 @@ nsDragService::SourceDataGet(GtkWidget *aWidget,
|
|||
nsCOMPtr<nsIFile> directory;
|
||||
file->GetParent(getter_AddRefs(directory));
|
||||
|
||||
item->SetTransferData(kFilePromiseDirectoryMime, directory);
|
||||
item->SetTransferData(kFilePromiseDirectoryMime, directory,
|
||||
sizeof(nsIFile*));
|
||||
|
||||
nsCOMPtr<nsISupportsString> filenamePrimitive =
|
||||
do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID);
|
||||
|
@ -1659,7 +1667,8 @@ nsDragService::SourceDataGet(GtkWidget *aWidget,
|
|||
file->GetLeafName(leafName);
|
||||
filenamePrimitive->SetData(leafName);
|
||||
|
||||
item->SetTransferData(kFilePromiseDestFilename, filenamePrimitive);
|
||||
item->SetTransferData(kFilePromiseDestFilename, filenamePrimitive,
|
||||
leafName.Length() * sizeof(PRUnichar));
|
||||
|
||||
// Request a different type in GetTransferData.
|
||||
actualFlavor = kFilePromiseMime;
|
||||
|
@ -1668,8 +1677,10 @@ nsDragService::SourceDataGet(GtkWidget *aWidget,
|
|||
}
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsISupports> data;
|
||||
uint32_t len;
|
||||
rv = item->GetTransferData(actualFlavor,
|
||||
getter_AddRefs(data));
|
||||
getter_AddRefs(data),
|
||||
&len);
|
||||
|
||||
if (strcmp(actualFlavor, kFilePromiseMime) == 0) {
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
|
@ -1739,8 +1750,9 @@ nsDragService::SourceBeginDrag(GdkDragContext *aContext)
|
|||
for (uint32_t i = 0; i < flavors.Length(); ++i) {
|
||||
if (flavors[i].EqualsLiteral(kFilePromiseDestFilename)) {
|
||||
nsCOMPtr<nsISupports> data;
|
||||
uint32_t dataSize = 0;
|
||||
transferable->GetTransferData(kFilePromiseDestFilename,
|
||||
getter_AddRefs(data));
|
||||
getter_AddRefs(data), &dataSize);
|
||||
nsCOMPtr<nsISupportsString> fileName = do_QueryInterface(data);
|
||||
if (!fileName)
|
||||
return;
|
||||
|
|
|
@ -32,8 +32,10 @@ HeadlessClipboard::SetData(nsITransferable *aTransferable,
|
|||
|
||||
// Only support plain text for now.
|
||||
nsCOMPtr<nsISupports> clip;
|
||||
uint32_t len;
|
||||
nsresult rv = aTransferable->GetTransferData(kUnicodeMime,
|
||||
getter_AddRefs(clip));
|
||||
getter_AddRefs(clip),
|
||||
&len);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
|
@ -64,7 +66,8 @@ HeadlessClipboard::GetData(nsITransferable *aTransferable,
|
|||
return rv;
|
||||
}
|
||||
nsCOMPtr<nsISupports> genericDataWrapper = do_QueryInterface(dataWrapper);
|
||||
rv = aTransferable->SetTransferData(kUnicodeMime, genericDataWrapper);
|
||||
uint32_t len = mClipboard->GetText().Length() * sizeof(char16_t);
|
||||
rv = aTransferable->SetTransferData(kUnicodeMime, genericDataWrapper, len);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
|
|
@ -16,11 +16,12 @@ function getString(clipboard) {
|
|||
|
||||
try {
|
||||
var data = {};
|
||||
trans.getTransferData("text/unicode", data);
|
||||
var dataLen = {};
|
||||
trans.getTransferData("text/unicode", data, dataLen);
|
||||
|
||||
if (data) {
|
||||
data = data.value.QueryInterface(Ci.nsISupportsString);
|
||||
str = data.data;
|
||||
str = data.data.substring(0, dataLen.value / 2);
|
||||
}
|
||||
} catch (ex) {
|
||||
// If the clipboard is empty getTransferData will throw.
|
||||
|
|
|
@ -97,7 +97,8 @@ nsClipboardHelper::CopyStringToClipboard(const nsAString& aString,
|
|||
NS_ENSURE_TRUE(genericData, NS_ERROR_FAILURE);
|
||||
|
||||
// set the transfer data
|
||||
rv = trans->SetTransferData(kUnicodeMime, genericData);
|
||||
rv = trans->SetTransferData(kUnicodeMime, genericData,
|
||||
aString.Length() * 2);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// put the transferable on the clipboard
|
||||
|
|
|
@ -67,7 +67,8 @@ nsClipboardProxy::GetData(nsITransferable *aTransferable, int32_t aWhichClipboar
|
|||
rv = dataWrapper->SetData(data);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper);
|
||||
rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper,
|
||||
data.Length() * sizeof(char16_t));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
} else if (item.data().type() == IPCDataTransferData::TShmem) {
|
||||
// If this is an image, convert it into an nsIInputStream.
|
||||
|
@ -82,7 +83,7 @@ nsClipboardProxy::GetData(nsITransferable *aTransferable, int32_t aWhichClipboar
|
|||
NS_NewCStringInputStream(getter_AddRefs(stream),
|
||||
nsDependentCSubstring(data.get<char>(), data.Size<char>()));
|
||||
|
||||
rv = aTransferable->SetTransferData(flavor.get(), stream);
|
||||
rv = aTransferable->SetTransferData(flavor.get(), stream, sizeof(nsISupports*));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
} else if (flavor.EqualsLiteral(kNativeHTMLMime) ||
|
||||
flavor.EqualsLiteral(kRTFMime) ||
|
||||
|
@ -94,7 +95,8 @@ nsClipboardProxy::GetData(nsITransferable *aTransferable, int32_t aWhichClipboar
|
|||
rv = dataWrapper->SetData(nsDependentCSubstring(data.get<char>(), data.Size<char>()));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper);
|
||||
rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper,
|
||||
data.Size<char>());
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
|
|
|
@ -102,14 +102,15 @@ nsHTMLFormatConverter::CanConvert(const char *aFromDataFlavor, const char *aToDa
|
|||
//XXX unicode out of the string. Lame lame lame.
|
||||
//
|
||||
NS_IMETHODIMP
|
||||
nsHTMLFormatConverter::Convert(const char *aFromDataFlavor, nsISupports *aFromData,
|
||||
const char *aToDataFlavor, nsISupports **aToData)
|
||||
nsHTMLFormatConverter::Convert(const char *aFromDataFlavor, nsISupports *aFromData, uint32_t aDataLen,
|
||||
const char *aToDataFlavor, nsISupports **aToData, uint32_t *aDataToLen)
|
||||
{
|
||||
if ( !aToData )
|
||||
if ( !aToData || !aDataToLen )
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
*aToData = nullptr;
|
||||
*aDataToLen = 0;
|
||||
|
||||
if ( !nsCRT::strcmp(aFromDataFlavor, kHTMLMime) ) {
|
||||
nsAutoCString toFlavor ( aToDataFlavor );
|
||||
|
@ -131,12 +132,16 @@ nsHTMLFormatConverter::Convert(const char *aFromDataFlavor, nsISupports *aFromDa
|
|||
if (toFlavor.Equals(kHTMLMime)) {
|
||||
int32_t dataLen = dataStr.Length() * 2;
|
||||
nsPrimitiveHelpers::CreatePrimitiveForData ( toFlavor, dataStr.get(), dataLen, aToData );
|
||||
if ( *aToData )
|
||||
*aDataToLen = dataLen;
|
||||
} else {
|
||||
nsAutoString outStr;
|
||||
res = ConvertFromHTMLToUnicode(dataStr, outStr);
|
||||
if (NS_SUCCEEDED(res)) {
|
||||
int32_t dataLen = outStr.Length() * 2;
|
||||
nsPrimitiveHelpers::CreatePrimitiveForData ( toFlavor, outStr.get(), dataLen, aToData );
|
||||
if ( *aToData )
|
||||
*aDataToLen = dataLen;
|
||||
}
|
||||
}
|
||||
} // else if HTML or Unicode
|
||||
|
@ -145,6 +150,8 @@ nsHTMLFormatConverter::Convert(const char *aFromDataFlavor, nsISupports *aFromDa
|
|||
if ( NS_SUCCEEDED(ConvertFromHTMLToAOLMail(dataStr, outStr)) ) {
|
||||
int32_t dataLen = outStr.Length() * 2;
|
||||
nsPrimitiveHelpers::CreatePrimitiveForData ( toFlavor, outStr.get(), dataLen, aToData );
|
||||
if ( *aToData )
|
||||
*aDataToLen = dataLen;
|
||||
}
|
||||
} // else if AOL mail
|
||||
else {
|
||||
|
|
|
@ -39,8 +39,8 @@ interface nsIFormatConverter : nsISupports
|
|||
* @param aFromFormatConverter flavor to convert to (destination own the memory)
|
||||
* @returns returns NS_OK if it was converted
|
||||
*/
|
||||
void convert ( in string aFromDataFlavor, in nsISupports aFromData,
|
||||
in string aToDataFlavor, out nsISupports aToData ) ;
|
||||
void convert ( in string aFromDataFlavor, in nsISupports aFromData, in unsigned long aDataLen,
|
||||
in string aToDataFlavor, out nsISupports aToData, out unsigned long aDataToLen ) ;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -86,8 +86,9 @@ interface nsIFlavorDataProvider : nsISupports
|
|||
* @param aTransferable (in parameter) the transferable we're being called for.
|
||||
* @param aFlavor (in parameter) the flavor of data to retrieve
|
||||
* @param aData the data. Some variant of class in nsISupportsPrimitives.idl
|
||||
* @param aDataLen the length of the data
|
||||
*/
|
||||
void getFlavorData(in nsITransferable aTransferable, in string aFlavor, out nsISupports aData);
|
||||
void getFlavorData(in nsITransferable aTransferable, in string aFlavor, out nsISupports aData, out unsigned long aDataLen);
|
||||
};
|
||||
|
||||
|
||||
|
@ -131,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);
|
||||
void getTransferData ( in string aFlavor, out nsISupports aData, out unsigned long aDataLen ) ;
|
||||
|
||||
/**
|
||||
* Returns the best flavor in the transferable, given those that have
|
||||
|
@ -162,7 +163,7 @@ interface nsITransferable : nsISupports
|
|||
* an nsIFile, or an nsIFlavorDataProvider (see above)
|
||||
* @param aDataLen the length of the data, or 0 if passing a nsIFlavorDataProvider
|
||||
*/
|
||||
void setTransferData(in string aFlavor, in nsISupports aData);
|
||||
void setTransferData ( in string aFlavor, in nsISupports aData, in unsigned long aDataLen ) ;
|
||||
|
||||
/**
|
||||
* Add the data flavor, indicating that this transferable
|
||||
|
|
|
@ -42,6 +42,7 @@ NS_IMPL_ISUPPORTS(nsTransferable, nsITransferable)
|
|||
|
||||
DataStruct::DataStruct(DataStruct&& aRHS)
|
||||
: mData(aRHS.mData.forget())
|
||||
, mDataLen(aRHS.mDataLen)
|
||||
, mCacheFD(aRHS.mCacheFD)
|
||||
, mFlavor(aRHS.mFlavor)
|
||||
{
|
||||
|
@ -57,31 +58,22 @@ DataStruct::~DataStruct()
|
|||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
void
|
||||
DataStruct::SetData(nsISupports* aData, bool aIsPrivateData)
|
||||
DataStruct::SetData(nsISupports* aData, uint32_t aDataLen, bool aIsPrivateData)
|
||||
{
|
||||
// Now, check to see if we consider the data to be "too large"
|
||||
// as well as ensuring that private browsing mode is disabled.
|
||||
// File IO is not allowed in content processes.
|
||||
if (!aIsPrivateData && XRE_IsParentProcess()) {
|
||||
void* data = nullptr;
|
||||
uint32_t dataLen = 0;
|
||||
nsPrimitiveHelpers::CreateDataFromPrimitive(mFlavor, aData, &data, &dataLen);
|
||||
|
||||
if (dataLen > kLargeDatasetSize) {
|
||||
// Too large, cache it to disk instead of memory.
|
||||
if (NS_SUCCEEDED(WriteCache(data, dataLen))) {
|
||||
free(data);
|
||||
// Clear previously set small data.
|
||||
mData = nullptr;
|
||||
return;
|
||||
}
|
||||
|
||||
NS_WARNING("Oh no, couldn't write data to the cache file");
|
||||
// as well as ensuring that private browsing mode is disabled
|
||||
if (aDataLen > kLargeDatasetSize && !aIsPrivateData &&
|
||||
// File IO is not allowed in content processes.
|
||||
XRE_IsParentProcess()) {
|
||||
// if so, cache it to disk instead of memory
|
||||
if (NS_SUCCEEDED(WriteCache(aData, aDataLen))) {
|
||||
// Clear previously set small data.
|
||||
mData = nullptr;
|
||||
mDataLen = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
free(data);
|
||||
NS_WARNING("Oh no, couldn't write data to the cache file");
|
||||
}
|
||||
|
||||
if (mCacheFD) {
|
||||
|
@ -91,23 +83,25 @@ DataStruct::SetData(nsISupports* aData, bool aIsPrivateData)
|
|||
}
|
||||
|
||||
mData = aData;
|
||||
mDataLen = aDataLen;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void
|
||||
DataStruct::GetData(nsISupports** aData)
|
||||
DataStruct::GetData(nsISupports** aData, uint32_t* aDataLen)
|
||||
{
|
||||
// check here to see if the data is cached on disk
|
||||
if (mCacheFD) {
|
||||
// if so, read it in and pass it back
|
||||
// ReadCache creates memory and copies the data into it.
|
||||
if (NS_SUCCEEDED(ReadCache(aData))) {
|
||||
if (NS_SUCCEEDED(ReadCache(aData, aDataLen))) {
|
||||
return;
|
||||
}
|
||||
|
||||
// oh shit, something went horribly wrong here.
|
||||
NS_WARNING("Oh no, couldn't read data in from the cache file");
|
||||
*aData = nullptr;
|
||||
*aDataLen = 0;
|
||||
PR_Close(mCacheFD);
|
||||
mCacheFD = nullptr;
|
||||
return;
|
||||
|
@ -115,16 +109,13 @@ DataStruct::GetData(nsISupports** aData)
|
|||
|
||||
nsCOMPtr<nsISupports> data = mData;
|
||||
data.forget(aData);
|
||||
*aDataLen = mDataLen;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
nsresult
|
||||
DataStruct::WriteCache(void* aData, uint32_t aDataLen)
|
||||
DataStruct::WriteCache(nsISupports* aData, uint32_t aDataLen)
|
||||
{
|
||||
MOZ_ASSERT(aData && aDataLen);
|
||||
MOZ_ASSERT(aDataLen <= std::numeric_limits<int32_t>::max(),
|
||||
"too large size for PR_Write");
|
||||
|
||||
nsresult rv;
|
||||
if (!mCacheFD) {
|
||||
rv = NS_OpenAnonymousTemporaryFile(&mCacheFD);
|
||||
|
@ -135,12 +126,17 @@ DataStruct::WriteCache(void* aData, uint32_t aDataLen)
|
|||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
// Write out the contents of the clipboard to the file.
|
||||
int32_t written = PR_Write(mCacheFD, aData, aDataLen);
|
||||
if (written == aDataLen) {
|
||||
return NS_OK;
|
||||
// write out the contents of the clipboard to the file
|
||||
void* buff = nullptr;
|
||||
uint32_t dataLen = 0;
|
||||
nsPrimitiveHelpers::CreateDataFromPrimitive(mFlavor, aData, &buff, &dataLen);
|
||||
if (buff) {
|
||||
int32_t written = PR_Write(mCacheFD, buff, dataLen);
|
||||
free(buff);
|
||||
if (written) {
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
PR_Close(mCacheFD);
|
||||
mCacheFD = nullptr;
|
||||
return NS_ERROR_FAILURE;
|
||||
|
@ -148,7 +144,7 @@ DataStruct::WriteCache(void* aData, uint32_t aDataLen)
|
|||
|
||||
//-------------------------------------------------------------------------
|
||||
nsresult
|
||||
DataStruct::ReadCache(nsISupports** aData)
|
||||
DataStruct::ReadCache(nsISupports** aData, uint32_t* aDataLen)
|
||||
{
|
||||
if (!mCacheFD) {
|
||||
return NS_ERROR_FAILURE;
|
||||
|
@ -175,6 +171,7 @@ DataStruct::ReadCache(nsISupports** aData)
|
|||
|
||||
nsPrimitiveHelpers::CreatePrimitiveForData(
|
||||
mFlavor, data.get(), fileSize, aData);
|
||||
*aDataLen = fileSize;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -254,24 +251,27 @@ nsTransferable::FindDataFlavor(const char* aFlavor)
|
|||
//
|
||||
NS_IMETHODIMP
|
||||
nsTransferable::GetTransferData(const char* aFlavor,
|
||||
nsISupports** aData)
|
||||
nsISupports** aData,
|
||||
uint32_t* aDataLen)
|
||||
{
|
||||
MOZ_ASSERT(mInitialized);
|
||||
|
||||
*aData = nullptr;
|
||||
*aDataLen = 0;
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
// First look and see if the data is present in one of the intrinsic flavors.
|
||||
if (Maybe<size_t> index = FindDataFlavor(aFlavor)) {
|
||||
nsCOMPtr<nsISupports> dataBytes;
|
||||
mDataArray[index.value()].GetData(getter_AddRefs(dataBytes));
|
||||
uint32_t len;
|
||||
mDataArray[index.value()].GetData(getter_AddRefs(dataBytes), &len);
|
||||
|
||||
// Do we have a (lazy) data provider?
|
||||
if (nsCOMPtr<nsIFlavorDataProvider> dataProvider =
|
||||
do_QueryInterface(dataBytes)) {
|
||||
rv = dataProvider->GetFlavorData(this, aFlavor,
|
||||
getter_AddRefs(dataBytes));
|
||||
getter_AddRefs(dataBytes), &len);
|
||||
if (NS_FAILED(rv)) {
|
||||
dataBytes = nullptr;
|
||||
// The provider failed, fall into the converter code below.
|
||||
|
@ -279,6 +279,7 @@ nsTransferable::GetTransferData(const char* aFlavor,
|
|||
}
|
||||
|
||||
if (dataBytes) {
|
||||
*aDataLen = len;
|
||||
dataBytes.forget(aData);
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -294,21 +295,22 @@ nsTransferable::GetTransferData(const char* aFlavor,
|
|||
mFormatConv->CanConvert(data.GetFlavor().get(), aFlavor, &canConvert);
|
||||
if (canConvert) {
|
||||
nsCOMPtr<nsISupports> dataBytes;
|
||||
data.GetData(getter_AddRefs(dataBytes));
|
||||
uint32_t len;
|
||||
data.GetData(getter_AddRefs(dataBytes), &len);
|
||||
|
||||
// Do we have a (lazy) data provider?
|
||||
if (nsCOMPtr<nsIFlavorDataProvider> dataProvider =
|
||||
do_QueryInterface(dataBytes)) {
|
||||
rv = dataProvider->GetFlavorData(this, aFlavor,
|
||||
getter_AddRefs(dataBytes));
|
||||
getter_AddRefs(dataBytes), &len);
|
||||
if (NS_FAILED(rv)) {
|
||||
// Give up.
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
return mFormatConv->Convert(data.GetFlavor().get(), dataBytes, aFlavor,
|
||||
aData);
|
||||
return mFormatConv->Convert(data.GetFlavor().get(), dataBytes, len,
|
||||
aFlavor, aData, aDataLen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -332,7 +334,8 @@ nsTransferable::GetAnyTransferData(nsACString& aFlavor,
|
|||
DataStruct& data = mDataArray.ElementAt(i);
|
||||
if (data.IsDataAvailable()) {
|
||||
aFlavor.Assign(data.GetFlavor());
|
||||
data.GetData(aData);
|
||||
uint32_t dataLen;
|
||||
data.GetData(aData, &dataLen);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
@ -347,14 +350,15 @@ nsTransferable::GetAnyTransferData(nsACString& aFlavor,
|
|||
//
|
||||
NS_IMETHODIMP
|
||||
nsTransferable::SetTransferData(const char* aFlavor,
|
||||
nsISupports* aData)
|
||||
nsISupports* aData,
|
||||
uint32_t aDataLen)
|
||||
{
|
||||
MOZ_ASSERT(mInitialized);
|
||||
|
||||
// first check our intrinsic flavors to see if one has been registered.
|
||||
if (Maybe<size_t> index = FindDataFlavor(aFlavor)) {
|
||||
DataStruct& data = mDataArray.ElementAt(index.value());
|
||||
data.SetData(aData, mPrivateData);
|
||||
data.SetData(aData, aDataLen, mPrivateData);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -367,11 +371,14 @@ nsTransferable::SetTransferData(const char* aFlavor,
|
|||
|
||||
if (canConvert) {
|
||||
nsCOMPtr<nsISupports> ConvertedData;
|
||||
uint32_t ConvertedLen;
|
||||
mFormatConv->Convert(aFlavor,
|
||||
aData,
|
||||
aDataLen,
|
||||
data.GetFlavor().get(),
|
||||
getter_AddRefs(ConvertedData));
|
||||
data.SetData(ConvertedData, mPrivateData);
|
||||
getter_AddRefs(ConvertedData),
|
||||
&ConvertedLen);
|
||||
data.SetData(ConvertedData, ConvertedLen, mPrivateData);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
@ -380,7 +387,7 @@ nsTransferable::SetTransferData(const char* aFlavor,
|
|||
// Can't set data neither directly nor through converter. Just add this flavor
|
||||
// and try again
|
||||
if (NS_SUCCEEDED(AddDataFlavor(aFlavor))) {
|
||||
return SetTransferData(aFlavor, aData);
|
||||
return SetTransferData(aFlavor, aData, aDataLen);
|
||||
}
|
||||
|
||||
return NS_ERROR_FAILURE;
|
||||
|
|
|
@ -25,15 +25,15 @@ class nsIMutableArray;
|
|||
struct DataStruct
|
||||
{
|
||||
explicit DataStruct ( const char* aFlavor )
|
||||
: mCacheFD(nullptr), mFlavor(aFlavor) { }
|
||||
: mDataLen(0), mCacheFD(nullptr), mFlavor(aFlavor) { }
|
||||
DataStruct(DataStruct&& aRHS);
|
||||
~DataStruct();
|
||||
|
||||
|
||||
const nsCString& GetFlavor() const { return mFlavor; }
|
||||
void SetData(nsISupports* inData, bool aIsPrivateData);
|
||||
void GetData(nsISupports** outData);
|
||||
bool IsDataAvailable() const { return mData || mCacheFD; }
|
||||
|
||||
void SetData( nsISupports* inData, uint32_t inDataLen, bool aIsPrivateData );
|
||||
void GetData( nsISupports** outData, uint32_t *outDataLen );
|
||||
bool IsDataAvailable() const { return mData ? mDataLen > 0 : mCacheFD != nullptr; }
|
||||
|
||||
protected:
|
||||
|
||||
enum {
|
||||
|
@ -41,12 +41,13 @@ protected:
|
|||
// keep it around in memory.
|
||||
kLargeDatasetSize = 1000000 // 1 million bytes
|
||||
};
|
||||
|
||||
nsresult WriteCache(void* aData, uint32_t aDataLen);
|
||||
nsresult ReadCache(nsISupports** aData);
|
||||
|
||||
// mData OR mCacheFD should be used, not both.
|
||||
|
||||
nsresult WriteCache(nsISupports* aData, uint32_t aDataLen );
|
||||
nsresult ReadCache(nsISupports** aData, uint32_t* aDataLen );
|
||||
|
||||
// mData + mDataLen OR mCacheFD should be used, not both.
|
||||
nsCOMPtr<nsISupports> mData; // OWNER - some varient of primitive wrapper
|
||||
uint32_t mDataLen;
|
||||
PRFileDesc* mCacheFD;
|
||||
const nsCString mFlavor;
|
||||
|
||||
|
|
|
@ -66,11 +66,12 @@ function readFromClipboard()
|
|||
trans.addDataFlavor('text/html');
|
||||
clip.getData(trans,clipid.kGlobalClipboard);
|
||||
var str = new Object();
|
||||
trans.getTransferData("text/html",str);
|
||||
var strLength = new Object();
|
||||
trans.getTransferData("text/html",str,strLength);
|
||||
if (str)
|
||||
str = str.value.QueryInterface(Ci.nsISupportsString);
|
||||
if (str)
|
||||
pastetext = str.data;
|
||||
pastetext = str.data.substring(0,strLength.value / 2);
|
||||
return pastetext;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=565392
|
|||
var transferable = Cc['@mozilla.org/widget/transferable;1']
|
||||
.createInstance(Ci.nsITransferable);
|
||||
transferable.init(getLoadContext());
|
||||
transferable.setTransferData("application/x-moz-file", file);
|
||||
transferable.setTransferData("application/x-moz-file", file, 0);
|
||||
return transferable;
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=565392
|
|||
transferable.addDataFlavor(mime);
|
||||
clipboard.getData(transferable, 1);
|
||||
var data = {};
|
||||
transferable.getTransferData(mime, data);
|
||||
transferable.getTransferData(mime, data, {}) ;
|
||||
return data;
|
||||
}
|
||||
|
||||
|
|
|
@ -37,15 +37,16 @@ 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);
|
||||
trans.getTransferData('text/unicode', str, length);
|
||||
} catch (e) {
|
||||
str = '';
|
||||
}
|
||||
if (str) {
|
||||
str = str.value.QueryInterface(Ci.nsISupportsString);
|
||||
if (str) {
|
||||
str = str.data;
|
||||
str = str.data.substring(0, length.value / 2);
|
||||
}
|
||||
}
|
||||
return str;
|
||||
|
|
|
@ -30,11 +30,13 @@
|
|||
|
||||
function checkTransferableText(transferable, expectedString, description) {
|
||||
var data = {};
|
||||
transferable.getTransferData("text/unicode", data);
|
||||
var dataLen = {};
|
||||
transferable.getTransferData("text/unicode", data, dataLen);
|
||||
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);
|
||||
|
|
|
@ -730,7 +730,7 @@ nsresult nsClipboard::GetDataFromDataObject(IDataObject * aDataObject,
|
|||
}
|
||||
|
||||
NS_ASSERTION ( genericDataWrapper, "About to put null data into the transferable" );
|
||||
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper);
|
||||
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper, dataLen);
|
||||
res = NS_OK;
|
||||
|
||||
// we found one, get out of the loop
|
||||
|
|
|
@ -898,8 +898,9 @@ nsDataObj::GetDib(const nsACString& inFlavor,
|
|||
STGMEDIUM & aSTG)
|
||||
{
|
||||
ULONG result = E_FAIL;
|
||||
uint32_t len = 0;
|
||||
nsCOMPtr<nsISupports> genericDataWrapper;
|
||||
mTransferable->GetTransferData(PromiseFlatCString(inFlavor).get(), getter_AddRefs(genericDataWrapper));
|
||||
mTransferable->GetTransferData(PromiseFlatCString(inFlavor).get(), getter_AddRefs(genericDataWrapper), &len);
|
||||
nsCOMPtr<imgIContainer> image ( do_QueryInterface(genericDataWrapper) );
|
||||
if ( image ) {
|
||||
nsCOMPtr<imgITools> imgTools = do_CreateInstance("@mozilla.org/image/tools;1");
|
||||
|
@ -1363,6 +1364,7 @@ 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;
|
||||
|
@ -1374,11 +1376,9 @@ HRESULT nsDataObj::GetText(const nsACString & aDataFlavor, FORMATETC& aFE, STGME
|
|||
|
||||
// NOTE: CreateDataFromPrimitive creates new memory, that needs to be deleted
|
||||
nsCOMPtr<nsISupports> genericDataWrapper;
|
||||
mTransferable->GetTransferData(flavorStr, getter_AddRefs(genericDataWrapper));
|
||||
if ( !genericDataWrapper )
|
||||
mTransferable->GetTransferData(flavorStr, getter_AddRefs(genericDataWrapper), &len);
|
||||
if ( !len )
|
||||
return E_FAIL;
|
||||
|
||||
uint32_t len;
|
||||
nsPrimitiveHelpers::CreateDataFromPrimitive(
|
||||
nsDependentCString(flavorStr), genericDataWrapper, &data, &len);
|
||||
if ( !data )
|
||||
|
@ -1482,9 +1482,11 @@ HRESULT nsDataObj::GetFile(FORMATETC& aFE, STGMEDIUM& aSTG)
|
|||
HRESULT nsDataObj::DropFile(FORMATETC& aFE, STGMEDIUM& aSTG)
|
||||
{
|
||||
nsresult rv;
|
||||
uint32_t len = 0;
|
||||
nsCOMPtr<nsISupports> genericDataWrapper;
|
||||
|
||||
mTransferable->GetTransferData(kFileMime, getter_AddRefs(genericDataWrapper));
|
||||
mTransferable->GetTransferData(kFileMime, getter_AddRefs(genericDataWrapper),
|
||||
&len);
|
||||
nsCOMPtr<nsIFile> file ( do_QueryInterface(genericDataWrapper) );
|
||||
if (!file)
|
||||
return E_FAIL;
|
||||
|
@ -1535,9 +1537,10 @@ HRESULT nsDataObj::DropImage(FORMATETC& aFE, STGMEDIUM& aSTG)
|
|||
{
|
||||
nsresult rv;
|
||||
if (!mCachedTempFile) {
|
||||
uint32_t len = 0;
|
||||
nsCOMPtr<nsISupports> genericDataWrapper;
|
||||
|
||||
mTransferable->GetTransferData(kNativeImageMime, getter_AddRefs(genericDataWrapper));
|
||||
mTransferable->GetTransferData(kNativeImageMime, getter_AddRefs(genericDataWrapper), &len);
|
||||
nsCOMPtr<imgIContainer> image(do_QueryInterface(genericDataWrapper));
|
||||
if (!image)
|
||||
return E_FAIL;
|
||||
|
@ -1838,8 +1841,9 @@ nsDataObj :: ExtractShortcutURL ( nsString & outURL )
|
|||
NS_ASSERTION ( mTransferable, "We don't have a good transferable" );
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
uint32_t len = 0;
|
||||
nsCOMPtr<nsISupports> genericURL;
|
||||
if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLMime, getter_AddRefs(genericURL)))) {
|
||||
if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLMime, getter_AddRefs(genericURL), &len)) ) {
|
||||
nsCOMPtr<nsISupportsString> urlObject ( do_QueryInterface(genericURL) );
|
||||
if ( urlObject ) {
|
||||
nsAutoString url;
|
||||
|
@ -1855,8 +1859,8 @@ nsDataObj :: ExtractShortcutURL ( nsString & outURL )
|
|||
rv = NS_OK;
|
||||
}
|
||||
}
|
||||
} else if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLDataMime, getter_AddRefs(genericURL))) ||
|
||||
NS_SUCCEEDED(mTransferable->GetTransferData(kURLPrivateMime, getter_AddRefs(genericURL))) ) {
|
||||
} else if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLDataMime, getter_AddRefs(genericURL), &len)) ||
|
||||
NS_SUCCEEDED(mTransferable->GetTransferData(kURLPrivateMime, getter_AddRefs(genericURL), &len)) ) {
|
||||
nsCOMPtr<nsISupportsString> urlObject ( do_QueryInterface(genericURL) );
|
||||
if ( urlObject ) {
|
||||
nsAutoString url;
|
||||
|
@ -1888,8 +1892,9 @@ 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<nsISupports> genericURL;
|
||||
if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLMime, getter_AddRefs(genericURL)) )) {
|
||||
if ( NS_SUCCEEDED(mTransferable->GetTransferData(kURLMime, getter_AddRefs(genericURL), &len)) ) {
|
||||
nsCOMPtr<nsISupportsString> urlObject ( do_QueryInterface(genericURL) );
|
||||
if ( urlObject ) {
|
||||
nsAutoString url;
|
||||
|
@ -1900,7 +1905,7 @@ nsDataObj :: ExtractShortcutTitle ( nsString & outTitle )
|
|||
int32_t lineIndex = url.FindChar ( '\n' );
|
||||
NS_ASSERTION ( lineIndex != -1, "Format for url flavor is <url> <linefeed> <page title>" );
|
||||
if ( lineIndex != -1 ) {
|
||||
url.Mid ( outTitle, lineIndex + 1, url.Length() - (lineIndex + 1) );
|
||||
url.Mid ( outTitle, lineIndex + 1, (len/2) - (lineIndex + 1) );
|
||||
rv = NS_OK;
|
||||
}
|
||||
}
|
||||
|
@ -2096,7 +2101,8 @@ HRESULT nsDataObj::GetDownloadDetails(nsIURI **aSourceURI,
|
|||
|
||||
// get the URI from the kFilePromiseURLMime flavor
|
||||
nsCOMPtr<nsISupports> urlPrimitive;
|
||||
mTransferable->GetTransferData(kFilePromiseURLMime, getter_AddRefs(urlPrimitive));
|
||||
uint32_t dataSize = 0;
|
||||
mTransferable->GetTransferData(kFilePromiseURLMime, getter_AddRefs(urlPrimitive), &dataSize);
|
||||
nsCOMPtr<nsISupportsString> srcUrlPrimitive = do_QueryInterface(urlPrimitive);
|
||||
NS_ENSURE_TRUE(srcUrlPrimitive, E_FAIL);
|
||||
|
||||
|
@ -2109,7 +2115,7 @@ HRESULT nsDataObj::GetDownloadDetails(nsIURI **aSourceURI,
|
|||
|
||||
nsAutoString srcFileName;
|
||||
nsCOMPtr<nsISupports> fileNamePrimitive;
|
||||
mTransferable->GetTransferData(kFilePromiseDestFilename, getter_AddRefs(fileNamePrimitive));
|
||||
mTransferable->GetTransferData(kFilePromiseDestFilename, getter_AddRefs(fileNamePrimitive), &dataSize);
|
||||
nsCOMPtr<nsISupportsString> srcFileNamePrimitive = do_QueryInterface(fileNamePrimitive);
|
||||
if (srcFileNamePrimitive) {
|
||||
srcFileNamePrimitive->GetData(srcFileName);
|
||||
|
|
Загрузка…
Ссылка в новой задаче