From 33a761b6720d53cc05105d1de456e203017b7dca Mon Sep 17 00:00:00 2001 From: Hector Zhao Date: Wed, 14 Mar 2018 16:44:36 +0800 Subject: [PATCH] Bug 1340039 - Set contentPolicyType when copying image, and pass it between processes. r=smaug MozReview-Commit-ID: CJj1a1Lj699 --HG-- extra : rebase_source : 63a033a64101f71b0b06fe68d037352fd637523f --- dom/base/nsContentUtils.cpp | 2 ++ dom/base/nsContentUtils.h | 1 + dom/base/nsCopySupport.cpp | 1 + dom/events/EventStateManager.cpp | 5 ++++- dom/ipc/ContentParent.cpp | 2 ++ dom/ipc/ContentParent.h | 1 + dom/ipc/PBrowser.ipdl | 3 ++- dom/ipc/PContent.ipdl | 1 + dom/ipc/TabChild.cpp | 4 +++- dom/ipc/TabChild.h | 3 ++- dom/ipc/TabParent.cpp | 6 ++++-- dom/ipc/TabParent.h | 3 ++- widget/nsClipboardProxy.cpp | 5 ++++- 13 files changed, 29 insertions(+), 8 deletions(-) diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index 7c36d85b754a..3ad046d89e72 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -7977,6 +7977,7 @@ nsresult nsContentUtils::IPCTransferableToTransferable(const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, nsIPrincipal* aRequestingPrincipal, + const nsContentPolicyType& aContentPolicyType, nsITransferable* aTransferable, mozilla::dom::nsIContentParent* aContentParent, mozilla::dom::TabChild* aTabChild) @@ -8042,6 +8043,7 @@ nsContentUtils::IPCTransferableToTransferable(const IPCDataTransfer& aDataTransf aTransferable->SetIsPrivateData(aIsPrivateData); aTransferable->SetRequestingPrincipal(aRequestingPrincipal); + aTransferable->SetContentPolicyType(aContentPolicyType); return NS_OK; } diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h index 67367be344f8..5e91cda5c1fb 100644 --- a/dom/base/nsContentUtils.h +++ b/dom/base/nsContentUtils.h @@ -2838,6 +2838,7 @@ public: static nsresult IPCTransferableToTransferable(const mozilla::dom::IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, nsIPrincipal* aRequestingPrincipal, + const nsContentPolicyType& aContentPolicyType, nsITransferable* aTransferable, mozilla::dom::nsIContentParent* aContentParent, mozilla::dom::TabChild* aTabChild); diff --git a/dom/base/nsCopySupport.cpp b/dom/base/nsCopySupport.cpp index 9146c5b0dd08..eafb3e3b9a01 100644 --- a/dom/base/nsCopySupport.cpp +++ b/dom/base/nsCopySupport.cpp @@ -680,6 +680,7 @@ static nsresult AppendImagePromise(nsITransferable* aTransferable, NS_ENSURE_SUCCESS(rv, rv); aTransferable->SetRequestingPrincipal(node->NodePrincipal()); + aTransferable->SetContentPolicyType(nsIContentPolicy::TYPE_INTERNAL_IMAGE); // add the dataless file promise flavor return aTransferable->AddDataFlavor(kFilePromiseMime); diff --git a/dom/events/EventStateManager.cpp b/dom/events/EventStateManager.cpp index 0ff7bb80637a..b0885745fd2a 100644 --- a/dom/events/EventStateManager.cpp +++ b/dom/events/EventStateManager.cpp @@ -5466,8 +5466,11 @@ EventStateManager::DoContentCommandEvent(WidgetContentCommandEvent* aEvent) transferable->GetIsPrivateData(&isPrivateData); nsCOMPtr requestingPrincipal; transferable->GetRequestingPrincipal(getter_AddRefs(requestingPrincipal)); + nsContentPolicyType contentPolicyType = nsIContentPolicy::TYPE_OTHER; + transferable->GetContentPolicyType(&contentPolicyType); remote->SendPasteTransferable(ipcDataTransfer, isPrivateData, - IPC::Principal(requestingPrincipal)); + IPC::Principal(requestingPrincipal), + contentPolicyType); rv = NS_OK; } else { nsCOMPtr commandController = do_QueryInterface(controller); diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp index e361eb7b7a54..29f1c8da055e 100644 --- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -2602,6 +2602,7 @@ mozilla::ipc::IPCResult ContentParent::RecvSetClipboard(const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, const IPC::Principal& aRequestingPrincipal, + const uint32_t& aContentPolicyType, const int32_t& aWhichClipboard) { nsresult rv; @@ -2616,6 +2617,7 @@ ContentParent::RecvSetClipboard(const IPCDataTransfer& aDataTransfer, rv = nsContentUtils::IPCTransferableToTransferable(aDataTransfer, aIsPrivateData, aRequestingPrincipal, + aContentPolicyType, trans, this, nullptr); NS_ENSURE_SUCCESS(rv, IPC_OK()); diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h index 417a71dcc8d6..5367571bc448 100644 --- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h @@ -976,6 +976,7 @@ private: virtual mozilla::ipc::IPCResult RecvSetClipboard(const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, const IPC::Principal& aRequestingPrincipal, + const uint32_t& aContentPolicyType, const int32_t& aWhichClipboard) override; virtual mozilla::ipc::IPCResult RecvGetClipboard(nsTArray&& aTypes, diff --git a/dom/ipc/PBrowser.ipdl b/dom/ipc/PBrowser.ipdl index 3a7b21271fec..b1cf9efbe964 100644 --- a/dom/ipc/PBrowser.ipdl +++ b/dom/ipc/PBrowser.ipdl @@ -720,7 +720,8 @@ child: */ async PasteTransferable(IPCDataTransfer aDataTransfer, bool aIsPrivateData, - Principal aRequestingPrincipal); + Principal aRequestingPrincipal, + uint32_t aContentPolicyType); /** * Activate event forwarding from client to parent. diff --git a/dom/ipc/PContent.ipdl b/dom/ipc/PContent.ipdl index 1c36c8dcea43..5d077976569a 100644 --- a/dom/ipc/PContent.ipdl +++ b/dom/ipc/PContent.ipdl @@ -838,6 +838,7 @@ parent: async SetClipboard(IPCDataTransfer aDataTransfer, bool aIsPrivateData, Principal aRequestingPrincipal, + uint32_t aContentPolicyType, int32_t aWhichClipboard); // Given a list of supported types, returns the clipboard data for the diff --git a/dom/ipc/TabChild.cpp b/dom/ipc/TabChild.cpp index 9d5e81bea3d1..332c97bbccbd 100644 --- a/dom/ipc/TabChild.cpp +++ b/dom/ipc/TabChild.cpp @@ -2164,7 +2164,8 @@ TabChild::RecvNormalPrioritySelectionEvent(const WidgetSelectionEvent& aEvent) mozilla::ipc::IPCResult TabChild::RecvPasteTransferable(const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, - const IPC::Principal& aRequestingPrincipal) + const IPC::Principal& aRequestingPrincipal, + const uint32_t& aContentPolicyType) { nsresult rv; nsCOMPtr trans = @@ -2175,6 +2176,7 @@ TabChild::RecvPasteTransferable(const IPCDataTransfer& aDataTransfer, rv = nsContentUtils::IPCTransferableToTransferable(aDataTransfer, aIsPrivateData, aRequestingPrincipal, + aContentPolicyType, trans, nullptr, this); NS_ENSURE_SUCCESS(rv, IPC_OK()); diff --git a/dom/ipc/TabChild.h b/dom/ipc/TabChild.h index 23225aeeec4a..00d29379280e 100644 --- a/dom/ipc/TabChild.h +++ b/dom/ipc/TabChild.h @@ -455,7 +455,8 @@ public: virtual mozilla::ipc::IPCResult RecvPasteTransferable(const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, - const IPC::Principal& aRequestingPrincipal) override; + const IPC::Principal& aRequestingPrincipal, + const uint32_t& aContentPolicyType) override; virtual mozilla::ipc::IPCResult RecvActivateFrameEvent(const nsString& aType, const bool& aCapture) override; diff --git a/dom/ipc/TabParent.cpp b/dom/ipc/TabParent.cpp index 65b2c6ab33fd..53e96a64027a 100644 --- a/dom/ipc/TabParent.cpp +++ b/dom/ipc/TabParent.cpp @@ -2311,11 +2311,13 @@ TabParent::SendSelectionEvent(WidgetSelectionEvent& aEvent) bool TabParent::SendPasteTransferable(const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, - const IPC::Principal& aRequestingPrincipal) + const IPC::Principal& aRequestingPrincipal, + const uint32_t& aContentPolicyType) { return PBrowserParent::SendPasteTransferable(aDataTransfer, aIsPrivateData, - aRequestingPrincipal); + aRequestingPrincipal, + aContentPolicyType); } /*static*/ TabParent* diff --git a/dom/ipc/TabParent.h b/dom/ipc/TabParent.h index c31827499403..e3c2601ce0b4 100644 --- a/dom/ipc/TabParent.h +++ b/dom/ipc/TabParent.h @@ -497,7 +497,8 @@ public: bool SendPasteTransferable(const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData, - const IPC::Principal& aRequestingPrincipal); + const IPC::Principal& aRequestingPrincipal, + const uint32_t& aContentPolicyType); static TabParent* GetFrom(nsFrameLoader* aFrameLoader); diff --git a/widget/nsClipboardProxy.cpp b/widget/nsClipboardProxy.cpp index f7d863475b13..4fb90721c0b6 100644 --- a/widget/nsClipboardProxy.cpp +++ b/widget/nsClipboardProxy.cpp @@ -37,8 +37,11 @@ nsClipboardProxy::SetData(nsITransferable *aTransferable, aTransferable->GetIsPrivateData(&isPrivateData); nsCOMPtr requestingPrincipal; aTransferable->GetRequestingPrincipal(getter_AddRefs(requestingPrincipal)); + nsContentPolicyType contentPolicyType = nsIContentPolicy::TYPE_OTHER; + aTransferable->GetContentPolicyType(&contentPolicyType); child->SendSetClipboard(ipcDataTransfer, isPrivateData, - IPC::Principal(requestingPrincipal), aWhichClipboard); + IPC::Principal(requestingPrincipal), + contentPolicyType, aWhichClipboard); return NS_OK; }