tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mwidget/cocoa/nsClipboard.h | 2--
Mwidget/cocoa/nsClipboard.mm | 32--------------------------------
Mwidget/cocoa/nsCocoaWindow.mm | 32+++++++++++++++++++++++++++-----
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);