mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:18:48 +00:00
5231e1d799
- Bug 1151703 - Part 1: Add timeline tracing markers for HTML and XML parsing; r=smaug (f18723780)
- Bug 1151703 - Part 2: Show XML and HTML parsing markers in the performance tool; r=jsantell (d7a56c7af)
- Bug 1151703 - Part 3: Add a test for HTML parsing markers; r=jsantell (0e0cdaf79)
- Bug 1145247 - Add AutoTimelineMarker RAII class; r=smaug (03f8f0b68)
- Bug 1148650 - Strengthen assertion that RemoveScriptBlocker is called on the main thread. r=smaug (23c32f7e6)
- Bug 1154812. Fix location.pathname to return the right thing in workers. r=baku (1da68d18e)
- Bug 1039818 - Extract the implementation of nsIDOMWindowUtils::GetResolution into nsLayoutUtils. r=ehsan (16001c475)
- Bug 1039818 - Do not allow an older APZ repaint request to clobber a newer pres shell resolution in Layout. r=kats (928c128b8)
- Bug 1152479 - Extract the implementations of layout-related nsIDOMWindowUtils APIs used by APZ into nsLayoutUtils. r=ehsan (56dbd653e)
- Bug 1152479 - Do not use layout-related nsIDOMWindowUtils APIs from C++ APZ code. r=kats (73a316e28)
- Bug 1152479 - Assert IsCallerChrome() in some layout-related nsIDOMWindowUtils APIs. r=ehsan (d02bc426a)
- Bug 1155387: Add missing #include for imgIContainer.h to ContentParent.cpp. r=enndeakin (d2c53efea)
- Bug 1071562, e10s, support non-text types in clipboard (html, images, etc), r=smaug (9b13a7e62)
- Bug 1157193, fix null pointer check when dragging images, r=smaug (78198c3ce)
- Bug 1152479 - Extract the implementations of nsIDOMWindowUtils::Send{KeyEvent,MouseEvent} into nsContentUtils. r=ehsan (432b1cb4a)
- Bug 1152479 - In C++ APZ code, use nsContentUtils rather than nsIDOMWindowUtils to send key and mouse events. r=kats (8917cddda)
158 lines
4.8 KiB
C++
158 lines
4.8 KiB
C++
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "mozilla/dom/ContentChild.h"
|
|
#include "nsClipboardProxy.h"
|
|
#include "nsISupportsPrimitives.h"
|
|
#include "nsCOMPtr.h"
|
|
#include "nsComponentManagerUtils.h"
|
|
#include "nsXULAppAPI.h"
|
|
#include "nsContentUtils.h"
|
|
#include "nsStringStream.h"
|
|
|
|
using namespace mozilla;
|
|
using namespace mozilla::dom;
|
|
|
|
NS_IMPL_ISUPPORTS(nsClipboardProxy, nsIClipboard, nsIClipboardProxy)
|
|
|
|
nsClipboardProxy::nsClipboardProxy()
|
|
: mClipboardCaps(false, false)
|
|
{
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboardProxy::SetData(nsITransferable *aTransferable,
|
|
nsIClipboardOwner *anOwner, int32_t aWhichClipboard)
|
|
{
|
|
ContentChild* child = ContentChild::GetSingleton();
|
|
|
|
IPCDataTransfer ipcDataTransfer;
|
|
nsContentUtils::TransferableToIPCTransferable(aTransferable, &ipcDataTransfer,
|
|
child, nullptr);
|
|
|
|
bool isPrivateData = false;
|
|
aTransferable->GetIsPrivateData(&isPrivateData);
|
|
child->SendSetClipboard(ipcDataTransfer, isPrivateData, aWhichClipboard);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboardProxy::GetData(nsITransferable *aTransferable, int32_t aWhichClipboard)
|
|
{
|
|
nsTArray<nsCString> types;
|
|
|
|
nsCOMPtr<nsISupportsArray> flavorList;
|
|
aTransferable->FlavorsTransferableCanImport(getter_AddRefs(flavorList));
|
|
if (flavorList) {
|
|
uint32_t flavorCount = 0;
|
|
flavorList->Count(&flavorCount);
|
|
for (uint32_t j = 0; j < flavorCount; ++j) {
|
|
nsCOMPtr<nsISupportsCString> flavor = do_QueryElementAt(flavorList, j);
|
|
if (flavor) {
|
|
nsAutoCString flavorStr;
|
|
flavor->GetData(flavorStr);
|
|
if (flavorStr.Length()) {
|
|
types.AppendElement(flavorStr);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
nsresult rv;
|
|
IPCDataTransfer dataTransfer;
|
|
ContentChild::GetSingleton()->SendGetClipboard(types, aWhichClipboard, &dataTransfer);
|
|
|
|
auto& items = dataTransfer.items();
|
|
for (uint32_t j = 0; j < items.Length(); ++j) {
|
|
const IPCDataTransferItem& item = items[j];
|
|
|
|
if (item.data().type() == IPCDataTransferData::TnsString) {
|
|
nsCOMPtr<nsISupportsString> dataWrapper =
|
|
do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID, &rv);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
nsString data = item.data().get_nsString();
|
|
rv = dataWrapper->SetData(data);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper,
|
|
data.Length() * sizeof(char16_t));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
} else if (item.data().type() == IPCDataTransferData::TnsCString) {
|
|
// If this is an image, convert it into an nsIInputStream.
|
|
nsCString flavor = item.flavor();
|
|
if (flavor.EqualsLiteral(kJPEGImageMime) ||
|
|
flavor.EqualsLiteral(kJPGImageMime) ||
|
|
flavor.EqualsLiteral(kPNGImageMime) ||
|
|
flavor.EqualsLiteral(kGIFImageMime)) {
|
|
nsCOMPtr<nsIInputStream> stream;
|
|
NS_NewCStringInputStream(getter_AddRefs(stream), item.data().get_nsCString());
|
|
|
|
rv = aTransferable->SetTransferData(flavor.get(), stream, sizeof(nsISupports*));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
} else if (flavor.EqualsLiteral(kNativeHTMLMime)) {
|
|
nsCOMPtr<nsISupportsCString> dataWrapper =
|
|
do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID, &rv);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
nsCString data = item.data().get_nsCString();
|
|
rv = dataWrapper->SetData(data);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper,
|
|
data.Length());
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
}
|
|
}
|
|
}
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboardProxy::EmptyClipboard(int32_t aWhichClipboard)
|
|
{
|
|
ContentChild::GetSingleton()->SendEmptyClipboard(aWhichClipboard);
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboardProxy::HasDataMatchingFlavors(const char **aFlavorList,
|
|
uint32_t aLength, int32_t aWhichClipboard,
|
|
bool *aHasType)
|
|
{
|
|
*aHasType = false;
|
|
|
|
nsTArray<nsCString> types;
|
|
for (uint32_t j = 0; j < aLength; ++j) {
|
|
types.AppendElement(nsDependentCString(aFlavorList[j]));
|
|
}
|
|
|
|
ContentChild::GetSingleton()->SendClipboardHasType(types, aWhichClipboard, aHasType);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboardProxy::SupportsSelectionClipboard(bool *aIsSupported)
|
|
{
|
|
*aIsSupported = mClipboardCaps.supportsSelectionClipboard();
|
|
return NS_OK;
|
|
}
|
|
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboardProxy::SupportsFindClipboard(bool *aIsSupported)
|
|
{
|
|
*aIsSupported = mClipboardCaps.supportsFindClipboard();
|
|
return NS_OK;
|
|
}
|
|
|
|
void
|
|
nsClipboardProxy::SetCapabilities(const ClipboardCapabilities& aClipboardCaps)
|
|
{
|
|
mClipboardCaps = aClipboardCaps;
|
|
}
|