commit 2d1199914dec299fb4ce98be7c1befdd55da1754
parent 3727483b1cee8a341badbb1f895e989132a74ca9
Author: Edgar Chen <echen@mozilla.com>
Date: Mon, 1 Dec 2025 21:52:13 +0000
Bug 2001847 - Get rid of nsClipboard::TransferableFromPasteboard(); r=mac-reviewers,mstange
Differential Revision: https://phabricator.services.mozilla.com/D273731
Diffstat:
3 files changed, 27 insertions(+), 39 deletions(-)
diff --git a/widget/cocoa/nsClipboard.h b/widget/cocoa/nsClipboard.h
@@ -37,8 +37,6 @@ class nsClipboard final : public nsBaseClipboard {
NSString** aPasteboardType);
static bool IsImageType(const nsACString& aMIMEType);
static NSString* WrapHtmlForSystemPasteboard(NSString* aString);
- static nsresult TransferableFromPasteboard(nsITransferable* aTransferable,
- NSPasteboard* pboard);
static mozilla::Result<nsCOMPtr<nsISupports>, nsresult> GetDataFromPasteboard(
const nsACString& aFlavor, NSPasteboard* aPasteboard);
mozilla::Result<int32_t, nsresult> GetNativeClipboardSequenceNumber(
diff --git a/widget/cocoa/nsClipboard.mm b/widget/cocoa/nsClipboard.mm
@@ -170,38 +170,6 @@ nsClipboard::SetNativeClipboardData(nsITransferable* aTransferable,
NS_OBJC_END_TRY_BLOCK_RETURN(NS_ERROR_FAILURE);
}
-nsresult nsClipboard::TransferableFromPasteboard(
- nsITransferable* aTransferable, NSPasteboard* cocoaPasteboard) {
- NS_OBJC_BEGIN_TRY_BLOCK_RETURN;
-
- // get flavor list that includes all acceptable flavors (including ones
- // obtained through conversion)
- nsTArray<nsCString> flavors;
- nsresult rv = aTransferable->FlavorsTransferableCanImport(flavors);
- if (NS_FAILED(rv)) {
- return NS_ERROR_FAILURE;
- }
-
- for (uint32_t i = 0; i < flavors.Length(); i++) {
- nsCString& flavorStr = flavors[i];
-
- auto dataOrError = GetDataFromPasteboard(flavorStr, cocoaPasteboard);
- if (dataOrError.isErr()) {
- continue;
- }
-
- if (auto data = dataOrError.inspect()) {
- aTransferable->SetTransferData(flavorStr.get(), data);
- // XXX Maybe try to fill in more types? Is there a point?
- break;
- }
- }
-
- return NS_OK;
-
- NS_OBJC_END_TRY_BLOCK_RETURN(NS_ERROR_FAILURE);
-}
-
mozilla::Result<nsCOMPtr<nsISupports>, nsresult>
nsClipboard::GetDataFromPasteboard(const nsACString& aFlavor,
NSPasteboard* aPasteboard) {
diff --git a/widget/cocoa/nsCocoaWindow.mm b/widget/cocoa/nsCocoaWindow.mm
@@ -4170,17 +4170,39 @@ static NSURL* GetPasteLocation(NSPasteboard* aPasteboard, bool aUseFallback) {
// Called if the service wants us to replace the current selection.
- (BOOL)readSelectionFromPasteboard:(NSPasteboard*)pboard {
- nsresult rv;
+ nsresult rv = NS_OK;
nsCOMPtr<nsITransferable> trans =
do_CreateInstance("@mozilla.org/widget/transferable;1", &rv);
- if (NS_FAILED(rv)) return NO;
- trans->Init(nullptr);
+ if (NS_FAILED(rv)) {
+ return NO;
+ }
+ trans->Init(nullptr);
trans->AddDataFlavor(kTextMime);
trans->AddDataFlavor(kHTMLMime);
- rv = nsClipboard::TransferableFromPasteboard(trans, pboard);
- if (NS_FAILED(rv)) return NO;
+ // Try to get text/plain data first.
+ bool hasTextData = false;
+ auto textDataOrError =
+ nsClipboard::GetDataFromPasteboard(nsLiteralCString(kTextMime), pboard);
+ if (!textDataOrError.isErr()) {
+ if (auto data = textDataOrError.inspect()) {
+ trans->SetTransferData(kTextMime, data);
+ hasTextData = true;
+ }
+ }
+
+ // If there is no text/plain data, try to get text/html data.
+ // XXX: this is legacy behavior, should we alway get text/html data instead?
+ if (!hasTextData) {
+ auto htmlDataOrError =
+ nsClipboard::GetDataFromPasteboard(nsLiteralCString(kHTMLMime), pboard);
+ if (!htmlDataOrError.isErr()) {
+ if (auto data = htmlDataOrError.inspect()) {
+ trans->SetTransferData(kHTMLMime, data);
+ }
+ }
+ }
NS_ENSURE_TRUE(mGeckoChild, false);