Bug 1340039 - Set contentPolicyType when copying image, and pass it between processes. r=smaug

MozReview-Commit-ID: CJj1a1Lj699

--HG--
extra : rebase_source : 63a033a64101f71b0b06fe68d037352fd637523f
This commit is contained in:
Hector Zhao 2018-03-14 16:44:36 +08:00
parent 80e97e4bf5
commit 33a761b672
13 changed files with 29 additions and 8 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -5466,8 +5466,11 @@ EventStateManager::DoContentCommandEvent(WidgetContentCommandEvent* aEvent)
transferable->GetIsPrivateData(&isPrivateData);
nsCOMPtr<nsIPrincipal> 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<nsICommandController> commandController = do_QueryInterface(controller);

View File

@ -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());

View File

@ -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<nsCString>&& aTypes,

View File

@ -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.

View File

@ -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

View File

@ -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<nsITransferable> 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());

View File

@ -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;

View File

@ -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*

View File

@ -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);

View File

@ -37,8 +37,11 @@ nsClipboardProxy::SetData(nsITransferable *aTransferable,
aTransferable->GetIsPrivateData(&isPrivateData);
nsCOMPtr<nsIPrincipal> 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;
}