Bug 1809713 - Make nsIClipboard ClipboardType an enum. r=nika

Differential Revision: https://phabricator.services.mozilla.com/D213742
This commit is contained in:
Tom Schuster
2024-07-24 14:36:29 +00:00
parent aece10d4e4
commit 9ce1ed9cf1
7 changed files with 67 additions and 41 deletions

View File

@@ -3114,7 +3114,8 @@ void ContentParent::OnVarChanged(const GfxVarUpdate& aVar) {
} }
mozilla::ipc::IPCResult ContentParent::RecvSetClipboard( mozilla::ipc::IPCResult ContentParent::RecvSetClipboard(
const IPCTransferable& aTransferable, const int32_t& aWhichClipboard, const IPCTransferable& aTransferable,
const nsIClipboard::ClipboardType& aWhichClipboard,
const MaybeDiscarded<WindowContext>& aRequestingWindowContext) { const MaybeDiscarded<WindowContext>& aRequestingWindowContext) {
// aRequestingPrincipal is allowed to be nullptr here. // aRequestingPrincipal is allowed to be nullptr here.
@@ -3174,7 +3175,8 @@ ContentParent::CreateClipboardTransferable(const nsTArray<nsCString>& aTypes) {
} }
mozilla::ipc::IPCResult ContentParent::RecvGetClipboard( mozilla::ipc::IPCResult ContentParent::RecvGetClipboard(
nsTArray<nsCString>&& aTypes, const int32_t& aWhichClipboard, nsTArray<nsCString>&& aTypes,
const nsIClipboard::ClipboardType& aWhichClipboard,
const MaybeDiscarded<WindowContext>& aRequestingWindowContext, const MaybeDiscarded<WindowContext>& aRequestingWindowContext,
IPCTransferableDataOrError* aTransferableDataOrError) { IPCTransferableDataOrError* aTransferableDataOrError) {
nsresult rv; nsresult rv;
@@ -3223,7 +3225,7 @@ mozilla::ipc::IPCResult ContentParent::RecvGetClipboard(
} }
mozilla::ipc::IPCResult ContentParent::RecvEmptyClipboard( mozilla::ipc::IPCResult ContentParent::RecvEmptyClipboard(
const int32_t& aWhichClipboard) { const nsIClipboard::ClipboardType& aWhichClipboard) {
nsresult rv; nsresult rv;
nsCOMPtr<nsIClipboard> clipboard(do_GetService(kCClipboardCID, &rv)); nsCOMPtr<nsIClipboard> clipboard(do_GetService(kCClipboardCID, &rv));
NS_ENSURE_SUCCESS(rv, IPC_OK()); NS_ENSURE_SUCCESS(rv, IPC_OK());
@@ -3234,8 +3236,8 @@ mozilla::ipc::IPCResult ContentParent::RecvEmptyClipboard(
} }
mozilla::ipc::IPCResult ContentParent::RecvClipboardHasType( mozilla::ipc::IPCResult ContentParent::RecvClipboardHasType(
nsTArray<nsCString>&& aTypes, const int32_t& aWhichClipboard, nsTArray<nsCString>&& aTypes,
bool* aHasType) { const nsIClipboard::ClipboardType& aWhichClipboard, bool* aHasType) {
nsresult rv; nsresult rv;
nsCOMPtr<nsIClipboard> clipboard(do_GetService(kCClipboardCID, &rv)); nsCOMPtr<nsIClipboard> clipboard(do_GetService(kCClipboardCID, &rv));
NS_ENSURE_SUCCESS(rv, IPC_OK()); NS_ENSURE_SUCCESS(rv, IPC_OK());
@@ -3313,7 +3315,8 @@ NS_IMPL_ISUPPORTS(ClipboardGetCallback, nsIClipboardGetDataSnapshotCallback)
} // namespace } // namespace
mozilla::ipc::IPCResult ContentParent::RecvGetClipboardDataSnapshot( mozilla::ipc::IPCResult ContentParent::RecvGetClipboardDataSnapshot(
nsTArray<nsCString>&& aTypes, const int32_t& aWhichClipboard, nsTArray<nsCString>&& aTypes,
const nsIClipboard::ClipboardType& aWhichClipboard,
const MaybeDiscarded<WindowContext>& aRequestingWindowContext, const MaybeDiscarded<WindowContext>& aRequestingWindowContext,
mozilla::NotNull<nsIPrincipal*> aRequestingPrincipal, mozilla::NotNull<nsIPrincipal*> aRequestingPrincipal,
GetClipboardDataSnapshotResolver&& aResolver) { GetClipboardDataSnapshotResolver&& aResolver) {
@@ -3356,7 +3359,8 @@ mozilla::ipc::IPCResult ContentParent::RecvGetClipboardDataSnapshot(
} }
mozilla::ipc::IPCResult ContentParent::RecvGetClipboardDataSnapshotSync( mozilla::ipc::IPCResult ContentParent::RecvGetClipboardDataSnapshotSync(
nsTArray<nsCString>&& aTypes, const int32_t& aWhichClipboard, nsTArray<nsCString>&& aTypes,
const nsIClipboard::ClipboardType& aWhichClipboard,
const MaybeDiscarded<WindowContext>& aRequestingWindowContext, const MaybeDiscarded<WindowContext>& aRequestingWindowContext,
ClipboardReadRequestOrError* aRequestOrError) { ClipboardReadRequestOrError* aRequestOrError) {
// If the requesting context has been discarded, cancel the paste. // If the requesting context has been discarded, cancel the paste.
@@ -3399,7 +3403,7 @@ mozilla::ipc::IPCResult ContentParent::RecvGetClipboardDataSnapshotSync(
already_AddRefed<PClipboardWriteRequestParent> already_AddRefed<PClipboardWriteRequestParent>
ContentParent::AllocPClipboardWriteRequestParent( ContentParent::AllocPClipboardWriteRequestParent(
const int32_t& aClipboardType, const nsIClipboard::ClipboardType& aClipboardType,
const MaybeDiscarded<WindowContext>& aSettingWindowContext) { const MaybeDiscarded<WindowContext>& aSettingWindowContext) {
WindowContext* settingWindowContext = nullptr; WindowContext* settingWindowContext = nullptr;
if (!aSettingWindowContext.IsDiscarded()) { if (!aSettingWindowContext.IsDiscarded()) {

View File

@@ -942,34 +942,39 @@ class ContentParent final : public PContentParent,
const MaybeDiscarded<BrowsingContext>& aContext); const MaybeDiscarded<BrowsingContext>& aContext);
mozilla::ipc::IPCResult RecvSetClipboard( mozilla::ipc::IPCResult RecvSetClipboard(
const IPCTransferable& aTransferable, const int32_t& aWhichClipboard, const IPCTransferable& aTransferable,
const nsIClipboard::ClipboardType& aWhichClipboard,
const MaybeDiscarded<WindowContext>& aRequestingWindowContext); const MaybeDiscarded<WindowContext>& aRequestingWindowContext);
mozilla::ipc::IPCResult RecvGetClipboard( mozilla::ipc::IPCResult RecvGetClipboard(
nsTArray<nsCString>&& aTypes, const int32_t& aWhichClipboard, nsTArray<nsCString>&& aTypes,
const nsIClipboard::ClipboardType& aWhichClipboard,
const MaybeDiscarded<WindowContext>& aRequestingWindowContext, const MaybeDiscarded<WindowContext>& aRequestingWindowContext,
IPCTransferableDataOrError* aTransferableDataOrError); IPCTransferableDataOrError* aTransferableDataOrError);
mozilla::ipc::IPCResult RecvEmptyClipboard(const int32_t& aWhichClipboard); mozilla::ipc::IPCResult RecvEmptyClipboard(
const nsIClipboard::ClipboardType& aWhichClipboard);
mozilla::ipc::IPCResult RecvClipboardHasType(nsTArray<nsCString>&& aTypes, mozilla::ipc::IPCResult RecvClipboardHasType(
const int32_t& aWhichClipboard, nsTArray<nsCString>&& aTypes,
bool* aHasType); const nsIClipboard::ClipboardType& aWhichClipboard, bool* aHasType);
mozilla::ipc::IPCResult RecvGetClipboardDataSnapshot( mozilla::ipc::IPCResult RecvGetClipboardDataSnapshot(
nsTArray<nsCString>&& aTypes, const int32_t& aWhichClipboard, nsTArray<nsCString>&& aTypes,
const nsIClipboard::ClipboardType& aWhichClipboard,
const MaybeDiscarded<WindowContext>& aRequestingWindowContext, const MaybeDiscarded<WindowContext>& aRequestingWindowContext,
mozilla::NotNull<nsIPrincipal*> aRequestingPrincipal, mozilla::NotNull<nsIPrincipal*> aRequestingPrincipal,
GetClipboardDataSnapshotResolver&& aResolver); GetClipboardDataSnapshotResolver&& aResolver);
mozilla::ipc::IPCResult RecvGetClipboardDataSnapshotSync( mozilla::ipc::IPCResult RecvGetClipboardDataSnapshotSync(
nsTArray<nsCString>&& aTypes, const int32_t& aWhichClipboard, nsTArray<nsCString>&& aTypes,
const nsIClipboard::ClipboardType& aWhichClipboard,
const MaybeDiscarded<WindowContext>& aRequestingWindowContext, const MaybeDiscarded<WindowContext>& aRequestingWindowContext,
ClipboardReadRequestOrError* aRequestOrError); ClipboardReadRequestOrError* aRequestOrError);
already_AddRefed<PClipboardWriteRequestParent> already_AddRefed<PClipboardWriteRequestParent>
AllocPClipboardWriteRequestParent( AllocPClipboardWriteRequestParent(
const int32_t& aClipboardType, const nsIClipboard::ClipboardType& aClipboardType,
const MaybeDiscarded<WindowContext>& aSettingWindowContext); const MaybeDiscarded<WindowContext>& aSettingWindowContext);
mozilla::ipc::IPCResult RecvGetIconForExtension(const nsACString& aFileExt, mozilla::ipc::IPCResult RecvGetIconForExtension(const nsACString& aFileExt,

View File

@@ -84,6 +84,7 @@ include "mozilla/ipc/ByteBufUtils.h";
include "mozilla/ipc/TransportSecurityInfoUtils.h"; include "mozilla/ipc/TransportSecurityInfoUtils.h";
include "mozilla/ipc/URIUtils.h"; include "mozilla/ipc/URIUtils.h";
include "mozilla/net/NeckoMessageUtils.h"; include "mozilla/net/NeckoMessageUtils.h";
include "mozilla/widget/WidgetMessageUtils.h";
include "mozilla/PermissionDelegateIPCUtils.h"; include "mozilla/PermissionDelegateIPCUtils.h";
[RefCounted] using class nsIDOMGeoPosition from "nsGeoPositionIPCSerialiser.h"; [RefCounted] using class nsIDOMGeoPosition from "nsGeoPositionIPCSerialiser.h";
@@ -163,6 +164,7 @@ using mozilla::PerfStats::MetricMask from "mozilla/PerfStats.h";
using nsIDNSService::ResolverMode from "nsIDNSService.h"; using nsIDNSService::ResolverMode from "nsIDNSService.h";
using mozilla::dom::UserActivation::Modifiers from "mozilla/dom/UserActivation.h"; using mozilla::dom::UserActivation::Modifiers from "mozilla/dom/UserActivation.h";
using mozilla::dom::PrivateAttributionImpressionType from "mozilla/dom/PrivateAttributionIPCUtils.h"; using mozilla::dom::PrivateAttributionImpressionType from "mozilla/dom/PrivateAttributionIPCUtils.h";
using nsIClipboard::ClipboardType from "nsIClipboard.h";
union ChromeRegistryItem union ChromeRegistryItem
{ {
@@ -1210,32 +1212,32 @@ parent:
// Places the items within dataTransfer on the clipboard. // Places the items within dataTransfer on the clipboard.
async SetClipboard(IPCTransferable aTransferable, async SetClipboard(IPCTransferable aTransferable,
int32_t aWhichClipboard, MaybeDiscardedWindowContext aRequestingWindowContext); ClipboardType aWhichClipboard, MaybeDiscardedWindowContext aRequestingWindowContext);
// Given a list of supported types, returns the clipboard data for the // Given a list of supported types, returns the clipboard data for the
// first type that matches. // first type that matches.
// aRequestingWindowContext is the window that is requesting the clipboard, // aRequestingWindowContext is the window that is requesting the clipboard,
// which is used for content analysis. // which is used for content analysis.
sync GetClipboard(nsCString[] aTypes, int32_t aWhichClipboard, sync GetClipboard(nsCString[] aTypes, ClipboardType aWhichClipboard,
MaybeDiscardedWindowContext aRequestingWindowContext) MaybeDiscardedWindowContext aRequestingWindowContext)
returns (IPCTransferableDataOrError transferableDataOrError); returns (IPCTransferableDataOrError transferableDataOrError);
// Requests getting data from clipboard. // Requests getting data from clipboard.
async GetClipboardDataSnapshot(nsCString[] aTypes, int32_t aWhichClipboard, async GetClipboardDataSnapshot(nsCString[] aTypes, ClipboardType aWhichClipboard,
MaybeDiscardedWindowContext aRequestingWindowContext, MaybeDiscardedWindowContext aRequestingWindowContext,
nsIPrincipal aRequestingPrincipal) nsIPrincipal aRequestingPrincipal)
returns (ClipboardReadRequestOrError aClipboardReadRequestOrError); returns (ClipboardReadRequestOrError aClipboardReadRequestOrError);
// Requests getting data from clipboard. // Requests getting data from clipboard.
sync GetClipboardDataSnapshotSync(nsCString[] aTypes, int32_t aWhichClipboard, sync GetClipboardDataSnapshotSync(nsCString[] aTypes, ClipboardType aWhichClipboard,
MaybeDiscardedWindowContext aRequestingWindowContext) MaybeDiscardedWindowContext aRequestingWindowContext)
returns (ClipboardReadRequestOrError aClipboardReadRequestOrError); returns (ClipboardReadRequestOrError aClipboardReadRequestOrError);
// Clears the clipboard. // Clears the clipboard.
async EmptyClipboard(int32_t aWhichClipboard); async EmptyClipboard(ClipboardType aWhichClipboard);
// Returns true if data of one of the specified types is on the clipboard. // Returns true if data of one of the specified types is on the clipboard.
sync ClipboardHasType(nsCString[] aTypes, int32_t aWhichClipboard) sync ClipboardHasType(nsCString[] aTypes, ClipboardType aWhichClipboard)
returns (bool hasType); returns (bool hasType);
/** /**
@@ -1248,7 +1250,7 @@ parent:
* to possibly bypass Content Analysis if a set clipboard and get clipboard * to possibly bypass Content Analysis if a set clipboard and get clipboard
* operation are done on the same page. * operation are done on the same page.
*/ */
async PClipboardWriteRequest(int32_t aClipboardType, MaybeDiscardedWindowContext aSettingWindowContext); async PClipboardWriteRequest(ClipboardType aClipboardType, MaybeDiscardedWindowContext aSettingWindowContext);
sync GetIconForExtension(nsCString aFileExt, uint32_t aIconSize) sync GetIconForExtension(nsCString aFileExt, uint32_t aIconSize)
returns (uint8_t[] bits); returns (uint8_t[] bits);

View File

@@ -8,6 +8,7 @@
#define mozilla_AutoCopyListener_h #define mozilla_AutoCopyListener_h
#include "mozilla/Attributes.h" #include "mozilla/Attributes.h"
#include "mozilla/Maybe.h"
#include "mozilla/dom/Selection.h" #include "mozilla/dom/Selection.h"
#include "mozilla/StaticPrefs_clipboard.h" #include "mozilla/StaticPrefs_clipboard.h"
#include "nsIClipboard.h" #include "nsIClipboard.h"

View File

@@ -11,6 +11,7 @@
#include "mozilla/GfxMessageUtils.h" #include "mozilla/GfxMessageUtils.h"
#include "mozilla/LookAndFeel.h" #include "mozilla/LookAndFeel.h"
#include "mozilla/widget/ThemeChangeKind.h" #include "mozilla/widget/ThemeChangeKind.h"
#include "nsIClipboard.h"
#include "nsIWidget.h" #include "nsIWidget.h"
#include "nsStyleConsts.h" #include "nsStyleConsts.h"
@@ -71,6 +72,12 @@ struct ParamTraits<mozilla::DimensionKind>
DEFINE_IPC_SERIALIZER_WITH_FIELDS(mozilla::DimensionRequest, mDimensionKind, mX, DEFINE_IPC_SERIALIZER_WITH_FIELDS(mozilla::DimensionRequest, mDimensionKind, mX,
mY, mWidth, mHeight); mY, mWidth, mHeight);
template <>
struct ParamTraits<nsIClipboard::ClipboardType>
: public ContiguousEnumSerializerInclusive<
nsIClipboard::ClipboardType, nsIClipboard::kSelectionClipboard,
nsIClipboard::kSelectionCache> {};
} // namespace IPC } // namespace IPC
#endif // WidgetMessageUtils_h #endif // WidgetMessageUtils_h

View File

@@ -47,7 +47,8 @@ nsClipboardProxy::SetData(nsITransferable* aTransferable,
IPCTransferable ipcTransferable; IPCTransferable ipcTransferable;
nsContentUtils::TransferableToIPCTransferable(aTransferable, &ipcTransferable, nsContentUtils::TransferableToIPCTransferable(aTransferable, &ipcTransferable,
false, nullptr); false, nullptr);
child->SendSetClipboard(std::move(ipcTransferable), aWhichClipboard, child->SendSetClipboard(std::move(ipcTransferable),
nsIClipboard::ClipboardType(aWhichClipboard),
aWindowContext); aWindowContext);
return NS_OK; return NS_OK;
} }
@@ -59,7 +60,8 @@ NS_IMETHODIMP nsClipboardProxy::AsyncSetData(
RefPtr<ClipboardWriteRequestChild> request = RefPtr<ClipboardWriteRequestChild> request =
MakeRefPtr<ClipboardWriteRequestChild>(aCallback); MakeRefPtr<ClipboardWriteRequestChild>(aCallback);
ContentChild::GetSingleton()->SendPClipboardWriteRequestConstructor( ContentChild::GetSingleton()->SendPClipboardWriteRequestConstructor(
request, aWhichClipboard, aSettingWindowContext); request, nsIClipboard::ClipboardType(aWhichClipboard),
aSettingWindowContext);
request.forget(_retval); request.forget(_retval);
return NS_OK; return NS_OK;
} }
@@ -84,14 +86,15 @@ nsClipboardProxy::GetData(nsITransferable* aTransferable,
if (!contentAnalysis) { if (!contentAnalysis) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
if (!contentAnalysis->SendGetClipboard(types, aWhichClipboard, if (!contentAnalysis->SendGetClipboard(
aWindowContext->InnerWindowId(), types, nsIClipboard::ClipboardType(aWhichClipboard),
&transferableOrError)) { aWindowContext->InnerWindowId(), &transferableOrError)) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
} else { } else {
if (!ContentChild::GetSingleton()->SendGetClipboard( if (!ContentChild::GetSingleton()->SendGetClipboard(
types, aWhichClipboard, aWindowContext, &transferableOrError)) { types, nsIClipboard::ClipboardType(aWhichClipboard), aWindowContext,
&transferableOrError)) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
}; };
} }
@@ -243,9 +246,9 @@ NS_IMETHODIMP nsClipboardProxy::GetDataSnapshot(
} }
ContentChild::GetSingleton() ContentChild::GetSingleton()
->SendGetClipboardDataSnapshot(aFlavorList, aWhichClipboard, ->SendGetClipboardDataSnapshot(
aRequestingWindowContext, aFlavorList, nsIClipboard::ClipboardType(aWhichClipboard),
WrapNotNull(aRequestingPrincipal)) aRequestingWindowContext, WrapNotNull(aRequestingPrincipal))
->Then( ->Then(
GetMainThreadSerialEventTarget(), __func__, GetMainThreadSerialEventTarget(), __func__,
/* resolve */ /* resolve */
@@ -287,7 +290,8 @@ NS_IMETHODIMP nsClipboardProxy::GetDataSnapshotSync(
ContentChild* contentChild = ContentChild::GetSingleton(); ContentChild* contentChild = ContentChild::GetSingleton();
ClipboardReadRequestOrError requestOrError; ClipboardReadRequestOrError requestOrError;
contentChild->SendGetClipboardDataSnapshotSync( contentChild->SendGetClipboardDataSnapshotSync(
aFlavorList, aWhichClipboard, aRequestingWindowContext, &requestOrError); aFlavorList, nsIClipboard::ClipboardType(aWhichClipboard),
aRequestingWindowContext, &requestOrError);
auto result = CreateClipboardDataSnapshotProxy(std::move(requestOrError)); auto result = CreateClipboardDataSnapshotProxy(std::move(requestOrError));
if (result.isErr()) { if (result.isErr()) {
return result.unwrapErr(); return result.unwrapErr();
@@ -299,7 +303,8 @@ NS_IMETHODIMP nsClipboardProxy::GetDataSnapshotSync(
NS_IMETHODIMP NS_IMETHODIMP
nsClipboardProxy::EmptyClipboard(int32_t aWhichClipboard) { nsClipboardProxy::EmptyClipboard(int32_t aWhichClipboard) {
ContentChild::GetSingleton()->SendEmptyClipboard(aWhichClipboard); ContentChild::GetSingleton()->SendEmptyClipboard(
nsIClipboard::ClipboardType(aWhichClipboard));
return NS_OK; return NS_OK;
} }
@@ -309,8 +314,8 @@ nsClipboardProxy::HasDataMatchingFlavors(const nsTArray<nsCString>& aFlavorList,
bool* aHasType) { bool* aHasType) {
*aHasType = false; *aHasType = false;
ContentChild::GetSingleton()->SendClipboardHasType(aFlavorList, ContentChild::GetSingleton()->SendClipboardHasType(
aWhichClipboard, aHasType); aFlavorList, nsIClipboard::ClipboardType(aWhichClipboard), aHasType);
return NS_OK; return NS_OK;
} }

View File

@@ -99,11 +99,13 @@ interface nsIClipboardGetDataSnapshotCallback : nsISupports
[scriptable, builtinclass, uuid(ceaa0047-647f-4b8e-ad1c-aff9fa62aa51)] [scriptable, builtinclass, uuid(ceaa0047-647f-4b8e-ad1c-aff9fa62aa51)]
interface nsIClipboard : nsISupports interface nsIClipboard : nsISupports
{ {
const long kSelectionClipboard = 0; cenum ClipboardType : 32 {
const long kGlobalClipboard = 1; kSelectionClipboard = 0,
const long kFindClipboard = 2; kGlobalClipboard = 1,
kFindClipboard = 2,
// Used to cache current selection on (nsClipboard) for macOS service menu. // Used to cache current selection on (nsClipboard) for macOS service menu.
const long kSelectionCache = 3; kSelectionCache = 3,
};
%{ C++ %{ C++
static const uint32_t kClipboardTypeCount = kSelectionCache + 1; static const uint32_t kClipboardTypeCount = kSelectionCache + 1;