Bug 1859954 - Use XP_DARWIN rather than XP_MACOS in PHC r=glandium
[gecko.git] / widget / ClipboardWriteRequestParent.cpp
blob0c3110787e825188a857421fbc8a42a8235bc67e
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "mozilla/ClipboardWriteRequestParent.h"
8 #include "mozilla/dom/ContentParent.h"
9 #include "mozilla/net/CookieJarSettings.h"
10 #include "nsComponentManagerUtils.h"
11 #include "nsIClipboard.h"
12 #include "nsITransferable.h"
13 #include "nsWidgetsCID.h"
15 static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID);
17 using mozilla::dom::ContentParent;
18 using mozilla::ipc::IPCResult;
20 namespace mozilla {
22 NS_IMPL_ISUPPORTS(ClipboardWriteRequestParent, nsIAsyncSetClipboardDataCallback)
24 ClipboardWriteRequestParent::ClipboardWriteRequestParent(
25 ContentParent* aManager)
26 : mManager(aManager) {}
28 ClipboardWriteRequestParent::~ClipboardWriteRequestParent() = default;
30 nsresult ClipboardWriteRequestParent::Init(const int32_t& aClipboardType) {
31 nsCOMPtr<nsIClipboard> clipboard(do_GetService(kCClipboardCID));
32 if (!clipboard) {
33 Unused << PClipboardWriteRequestParent::Send__delete__(this,
34 NS_ERROR_FAILURE);
35 return NS_ERROR_FAILURE;
38 nsresult rv = clipboard->AsyncSetData(aClipboardType, this,
39 getter_AddRefs(mAsyncSetClipboardData));
40 if (NS_FAILED(rv)) {
41 Unused << PClipboardWriteRequestParent::Send__delete__(this, rv);
42 return rv;
45 return NS_OK;
48 NS_IMETHODIMP ClipboardWriteRequestParent::OnComplete(nsresult aResult) {
49 nsCOMPtr<nsIAsyncSetClipboardData> clipboardData =
50 std::move(mAsyncSetClipboardData);
51 if (clipboardData) {
52 Unused << PClipboardWriteRequestParent::Send__delete__(this, aResult);
54 return NS_OK;
57 IPCResult ClipboardWriteRequestParent::RecvSetData(
58 const IPCTransferable& aTransferable) {
59 if (!mManager->ValidatePrincipal(
60 aTransferable.requestingPrincipal(),
61 {ContentParent::ValidatePrincipalOptions::AllowNullPtr})) {
62 ContentParent::LogAndAssertFailedPrincipalValidationInfo(
63 aTransferable.requestingPrincipal(), __func__);
66 if (!mAsyncSetClipboardData) {
67 return IPC_OK();
70 nsresult rv = NS_ERROR_FAILURE;
71 nsCOMPtr<nsITransferable> trans =
72 do_CreateInstance("@mozilla.org/widget/transferable;1", &rv);
73 if (NS_FAILED(rv)) {
74 mAsyncSetClipboardData->Abort(rv);
75 return IPC_OK();
78 trans->Init(nullptr);
79 rv = nsContentUtils::IPCTransferableToTransferable(
80 aTransferable, true /* aAddDataFlavor */, trans,
81 true /* aFilterUnknownFlavors */);
82 if (NS_FAILED(rv)) {
83 mAsyncSetClipboardData->Abort(rv);
84 return IPC_OK();
87 mAsyncSetClipboardData->SetData(trans, nullptr);
88 return IPC_OK();
91 IPCResult ClipboardWriteRequestParent::Recv__delete__(nsresult aReason) {
92 #ifndef FUZZING_SNAPSHOT
93 MOZ_DIAGNOSTIC_ASSERT(NS_FAILED(aReason));
94 #endif
95 nsCOMPtr<nsIAsyncSetClipboardData> clipboardData =
96 std::move(mAsyncSetClipboardData);
97 if (clipboardData) {
98 clipboardData->Abort(aReason);
100 return IPC_OK();
103 void ClipboardWriteRequestParent::ActorDestroy(ActorDestroyReason aReason) {
104 nsCOMPtr<nsIAsyncSetClipboardData> clipboardData =
105 std::move(mAsyncSetClipboardData);
106 if (clipboardData) {
107 clipboardData->Abort(NS_ERROR_ABORT);
111 } // namespace mozilla