Bug 1951225 - Part 2-2: Implement new GetNativeClipboardData() on headless widget; r=spohl

This doesn't change behavior.

Differential Revision: https://phabricator.services.mozilla.com/D240102
This commit is contained in:
Edgar Chen
2025-05-14 21:35:24 +00:00
committed by echen@mozilla.com
parent 6d12184693
commit 48eab8bb79
2 changed files with 21 additions and 38 deletions

View File

@@ -66,51 +66,34 @@ HeadlessClipboard::SetNativeClipboardData(nsITransferable* aTransferable,
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::GetNativeClipboardData(nsITransferable* aTransferable,
mozilla::Result<nsCOMPtr<nsISupports>, nsresult>
HeadlessClipboard::GetNativeClipboardData(const nsACString& aFlavor,
ClipboardType aWhichClipboard) {
MOZ_DIAGNOSTIC_ASSERT(aTransferable);
MOZ_DIAGNOSTIC_ASSERT(
nsIClipboard::IsClipboardTypeSupported(aWhichClipboard));
nsTArray<nsCString> flavors;
nsresult rv = aTransferable->FlavorsTransferableCanImport(flavors);
if (NS_FAILED(rv)) {
return NS_ERROR_FAILURE;
}
auto& clipboard = mClipboards[aWhichClipboard];
MOZ_ASSERT(clipboard);
for (const auto& flavor : flavors) {
if (!flavor.EqualsLiteral(kTextMime) && !flavor.EqualsLiteral(kHTMLMime)) {
continue;
if (!aFlavor.EqualsLiteral(kTextMime) && !aFlavor.EqualsLiteral(kHTMLMime)) {
return nsCOMPtr<nsISupports>{};
}
bool isText = flavor.EqualsLiteral(kTextMime);
bool isText = aFlavor.EqualsLiteral(kTextMime);
if (!(isText ? clipboard->HasText() : clipboard->HasHTML())) {
continue;
return nsCOMPtr<nsISupports>{};
}
nsresult rv;
nsCOMPtr<nsISupportsString> dataWrapper =
do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID, &rv);
rv = dataWrapper->SetData(isText ? clipboard->GetText()
: clipboard->GetHTML());
if (NS_WARN_IF(NS_FAILED(rv))) {
continue;
return nsCOMPtr<nsISupports>{};
}
nsCOMPtr<nsISupports> genericDataWrapper = do_QueryInterface(dataWrapper);
rv = aTransferable->SetTransferData(flavor.get(), genericDataWrapper);
if (NS_WARN_IF(NS_FAILED(rv))) {
continue;
}
// XXX Other platforms only fill the first available type, too.
break;
}
return NS_OK;
return nsCOMPtr<nsISupports>(std::move(dataWrapper));
}
nsresult HeadlessClipboard::EmptyNativeClipboardData(

View File

@@ -28,8 +28,8 @@ class HeadlessClipboard final : public nsBaseClipboard {
// Implement the native clipboard behavior.
NS_IMETHOD SetNativeClipboardData(nsITransferable* aTransferable,
ClipboardType aWhichClipboard) override;
NS_IMETHOD GetNativeClipboardData(nsITransferable* aTransferable,
ClipboardType aWhichClipboard) override;
mozilla::Result<nsCOMPtr<nsISupports>, nsresult> GetNativeClipboardData(
const nsACString& aFlavor, ClipboardType aWhichClipboard) override;
nsresult EmptyNativeClipboardData(ClipboardType aWhichClipboard) override;
mozilla::Result<bool, nsresult> HasNativeClipboardDataMatchingFlavors(
const nsTArray<nsCString>& aFlavorList,