summaryrefslogtreecommitdiffstats
path: root/dom/events/Clipboard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/events/Clipboard.cpp')
-rw-r--r--dom/events/Clipboard.cpp37
1 files changed, 22 insertions, 15 deletions
diff --git a/dom/events/Clipboard.cpp b/dom/events/Clipboard.cpp
index b797f93961..3574d08365 100644
--- a/dom/events/Clipboard.cpp
+++ b/dom/events/Clipboard.cpp
@@ -59,6 +59,19 @@ bool Clipboard::IsTestingPrefEnabledOrHasReadPermission(
nsGkAtoms::clipboardRead);
}
+// Mandatory data types defined in
+// https://w3c.github.io/clipboard-apis/#mandatory-data-types-x. The types
+// should be in the same order as kNonPlainTextExternalFormats in
+// DataTransfer.
+static const nsLiteralCString kMandatoryDataTypes[] = {
+ nsLiteralCString(kHTMLMime), nsLiteralCString(kTextMime),
+ nsLiteralCString(kPNGImageMime)};
+
+// static
+Span<const nsLiteralCString> Clipboard::MandatoryDataTypes() {
+ return Span<const nsLiteralCString>(kMandatoryDataTypes);
+}
+
namespace {
/**
@@ -87,16 +100,6 @@ class ClipboardGetCallback : public nsIAsyncClipboardGetCallback {
RefPtr<Promise> mPromise;
};
-static nsTArray<nsCString> MandatoryDataTypesAsCStrings() {
- // Mandatory data types defined in
- // https://w3c.github.io/clipboard-apis/#mandatory-data-types-x. The types
- // should be in the same order as kNonPlainTextExternalFormats in
- // DataTransfer.
- return nsTArray<nsCString>{nsLiteralCString(kHTMLMime),
- nsLiteralCString(kTextMime),
- nsLiteralCString(kPNGImageMime)};
-}
-
class ClipboardGetCallbackForRead final : public ClipboardGetCallback {
public:
explicit ClipboardGetCallbackForRead(nsIGlobalObject* aGlobal,
@@ -122,7 +125,7 @@ class ClipboardGetCallbackForRead final : public ClipboardGetCallback {
AutoTArray<RefPtr<ClipboardItem::ItemEntry>, 3> entries;
// We might reuse the request from DataTransfer created for paste event,
// which could contain more types that are not in the mandatory list.
- for (const auto& format : MandatoryDataTypesAsCStrings()) {
+ for (const auto& format : kMandatoryDataTypes) {
if (flavorList.Contains(format)) {
auto entry = MakeRefPtr<ClipboardItem::ItemEntry>(
mGlobal, NS_ConvertUTF8toUTF16(format));
@@ -287,10 +290,13 @@ void Clipboard::RequestRead(Promise* aPromise, ReadRequestType aType,
return;
}
+ AutoTArray<nsCString, ArrayLength(kMandatoryDataTypes)> types;
+ types.AppendElements(Span<const nsLiteralCString>(kMandatoryDataTypes));
+
callback = MakeRefPtr<ClipboardGetCallbackForRead>(global, std::move(p));
- rv = clipboardService->AsyncGetData(
- MandatoryDataTypesAsCStrings(), nsIClipboard::kGlobalClipboard,
- owner->GetWindowContext(), &aPrincipal, callback);
+ rv = clipboardService->AsyncGetData(types, nsIClipboard::kGlobalClipboard,
+ owner->GetWindowContext(),
+ &aPrincipal, callback);
break;
}
case ReadRequestType::eReadText: {
@@ -731,7 +737,8 @@ already_AddRefed<Promise> Clipboard::Write(
RefPtr<ClipboardWriteCallback> callback =
MakeRefPtr<ClipboardWriteCallback>(p, aData[0]);
nsresult rv = clipboard->AsyncSetData(nsIClipboard::kGlobalClipboard,
- callback, getter_AddRefs(request));
+ owner->GetWindowContext(), callback,
+ getter_AddRefs(request));
if (NS_FAILED(rv)) {
p->MaybeReject(rv);
return p.forget();