diff --git a/widget/headless/HeadlessClipboard.cpp b/widget/headless/HeadlessClipboard.cpp index f335954b9f6f..d24f3990e2d1 100644 --- a/widget/headless/HeadlessClipboard.cpp +++ b/widget/headless/HeadlessClipboard.cpp @@ -66,51 +66,34 @@ HeadlessClipboard::SetNativeClipboardData(nsITransferable* aTransferable, return NS_OK; } -NS_IMETHODIMP -HeadlessClipboard::GetNativeClipboardData(nsITransferable* aTransferable, +mozilla::Result, nsresult> +HeadlessClipboard::GetNativeClipboardData(const nsACString& aFlavor, ClipboardType aWhichClipboard) { - MOZ_DIAGNOSTIC_ASSERT(aTransferable); MOZ_DIAGNOSTIC_ASSERT( nsIClipboard::IsClipboardTypeSupported(aWhichClipboard)); - nsTArray 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; - } - - bool isText = flavor.EqualsLiteral(kTextMime); - if (!(isText ? clipboard->HasText() : clipboard->HasHTML())) { - continue; - } - - nsCOMPtr dataWrapper = - do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID, &rv); - rv = dataWrapper->SetData(isText ? clipboard->GetText() - : clipboard->GetHTML()); - if (NS_WARN_IF(NS_FAILED(rv))) { - continue; - } - - nsCOMPtr 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; + if (!aFlavor.EqualsLiteral(kTextMime) && !aFlavor.EqualsLiteral(kHTMLMime)) { + return nsCOMPtr{}; } - return NS_OK; + bool isText = aFlavor.EqualsLiteral(kTextMime); + if (!(isText ? clipboard->HasText() : clipboard->HasHTML())) { + return nsCOMPtr{}; + } + + nsresult rv; + nsCOMPtr dataWrapper = + do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID, &rv); + rv = dataWrapper->SetData(isText ? clipboard->GetText() + : clipboard->GetHTML()); + if (NS_WARN_IF(NS_FAILED(rv))) { + return nsCOMPtr{}; + } + + return nsCOMPtr(std::move(dataWrapper)); } nsresult HeadlessClipboard::EmptyNativeClipboardData( diff --git a/widget/headless/HeadlessClipboard.h b/widget/headless/HeadlessClipboard.h index 7721f11e0f18..8f277c3b59f6 100644 --- a/widget/headless/HeadlessClipboard.h +++ b/widget/headless/HeadlessClipboard.h @@ -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, nsresult> GetNativeClipboardData( + const nsACString& aFlavor, ClipboardType aWhichClipboard) override; nsresult EmptyNativeClipboardData(ClipboardType aWhichClipboard) override; mozilla::Result HasNativeClipboardDataMatchingFlavors( const nsTArray& aFlavorList,