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:
committed by
echen@mozilla.com
parent
6d12184693
commit
48eab8bb79
@@ -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;
|
||||
}
|
||||
|
||||
bool isText = flavor.EqualsLiteral(kTextMime);
|
||||
if (!(isText ? clipboard->HasText() : clipboard->HasHTML())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
if (!aFlavor.EqualsLiteral(kTextMime) && !aFlavor.EqualsLiteral(kHTMLMime)) {
|
||||
return nsCOMPtr<nsISupports>{};
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
bool isText = aFlavor.EqualsLiteral(kTextMime);
|
||||
if (!(isText ? clipboard->HasText() : clipboard->HasHTML())) {
|
||||
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))) {
|
||||
return nsCOMPtr<nsISupports>{};
|
||||
}
|
||||
|
||||
return nsCOMPtr<nsISupports>(std::move(dataWrapper));
|
||||
}
|
||||
|
||||
nsresult HeadlessClipboard::EmptyNativeClipboardData(
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user