mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
51ab56ef96
Backed out changeset 53513a959cf0 (bug 913985) Backed out changeset d23d1e678417 (bug 913985) Backed out changeset a9c9187b4f4a (bug 913985) Backed out changeset c6b02e4a3e35 (bug 913985) Backed out changeset 895dae322e3c (bug 913985) Backed out changeset 3d97e6a53313 (bug 913985) Backed out changeset 892bb017f8ba (bug 913985) --HG-- rename : build/annotationProcessors/AnnotationInfo.java => build/annotationProcessors/MethodWithAnnotationInfo.java rename : build/annotationProcessors/utils/AlphabeticAnnotatableEntityComparator.java => build/annotationProcessors/utils/AlphabeticMethodComparator.java rename : build/annotationProcessors/utils/GeneratableElementIterator.java => build/annotationProcessors/utils/GeneratableEntryPointIterator.java rename : mobile/android/base/mozglue/generatorannotations/WrapElementForJNI.java => mobile/android/base/mozglue/GeneratableAndroidBridgeTarget.java rename : mobile/android/base/mozglue/generatorannotations/OptionalGeneratedParameter.java => mobile/android/base/mozglue/OptionalGeneratedParameter.java
137 lines
4.0 KiB
C++
137 lines
4.0 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 "nsClipboard.h"
|
|
#include "nsISupportsPrimitives.h"
|
|
#include "AndroidBridge.h"
|
|
#include "nsCOMPtr.h"
|
|
#include "nsComponentManagerUtils.h"
|
|
#include "nsXULAppAPI.h"
|
|
|
|
using namespace mozilla;
|
|
using mozilla::dom::ContentChild;
|
|
|
|
NS_IMPL_ISUPPORTS1(nsClipboard, nsIClipboard)
|
|
|
|
/* The Android clipboard only supports text and doesn't support mime types
|
|
* so we assume all clipboard data is text/unicode for now. Documentation
|
|
* indicates that support for other data types is planned for future
|
|
* releases.
|
|
*/
|
|
|
|
nsClipboard::nsClipboard()
|
|
{
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboard::SetData(nsITransferable *aTransferable,
|
|
nsIClipboardOwner *anOwner, int32_t aWhichClipboard)
|
|
{
|
|
if (aWhichClipboard != kGlobalClipboard)
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
nsCOMPtr<nsISupports> tmp;
|
|
uint32_t len;
|
|
nsresult rv = aTransferable->GetTransferData(kUnicodeMime, getter_AddRefs(tmp),
|
|
&len);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
nsCOMPtr<nsISupportsString> supportsString = do_QueryInterface(tmp);
|
|
// No support for non-text data
|
|
NS_ENSURE_TRUE(supportsString, NS_ERROR_NOT_IMPLEMENTED);
|
|
nsAutoString buffer;
|
|
supportsString->GetData(buffer);
|
|
|
|
if (XRE_GetProcessType() == GeckoProcessType_Default) {
|
|
if (AndroidBridge::Bridge())
|
|
AndroidBridge::Bridge()->SetClipboardText(buffer);
|
|
else
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
} else {
|
|
bool isPrivateData = false;
|
|
aTransferable->GetIsPrivateData(&isPrivateData);
|
|
ContentChild::GetSingleton()->SendSetClipboardText(buffer, isPrivateData,
|
|
aWhichClipboard);
|
|
}
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboard::GetData(nsITransferable *aTransferable, int32_t aWhichClipboard)
|
|
{
|
|
if (aWhichClipboard != kGlobalClipboard)
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
nsAutoString buffer;
|
|
if (XRE_GetProcessType() == GeckoProcessType_Default) {
|
|
if (!AndroidBridge::Bridge())
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
if (!AndroidBridge::Bridge()->GetClipboardText(buffer))
|
|
return NS_ERROR_UNEXPECTED;
|
|
} else {
|
|
ContentChild::GetSingleton()->SendGetClipboardText(aWhichClipboard, &buffer);
|
|
}
|
|
|
|
nsresult rv;
|
|
nsCOMPtr<nsISupportsString> dataWrapper =
|
|
do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID, &rv);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
rv = dataWrapper->SetData(buffer);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
// If our data flavor has already been added, this will fail. But we don't care
|
|
aTransferable->AddDataFlavor(kUnicodeMime);
|
|
|
|
nsCOMPtr<nsISupports> nsisupportsDataWrapper =
|
|
do_QueryInterface(dataWrapper);
|
|
rv = aTransferable->SetTransferData(kUnicodeMime, nsisupportsDataWrapper,
|
|
buffer.Length() * sizeof(PRUnichar));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboard::EmptyClipboard(int32_t aWhichClipboard)
|
|
{
|
|
if (aWhichClipboard != kGlobalClipboard)
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
if (XRE_GetProcessType() == GeckoProcessType_Default) {
|
|
if (AndroidBridge::Bridge())
|
|
AndroidBridge::Bridge()->EmptyClipboard();
|
|
} else {
|
|
ContentChild::GetSingleton()->SendEmptyClipboard();
|
|
}
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboard::HasDataMatchingFlavors(const char **aFlavorList,
|
|
uint32_t aLength, int32_t aWhichClipboard,
|
|
bool *aHasText)
|
|
{
|
|
*aHasText = false;
|
|
if (aWhichClipboard != kGlobalClipboard)
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
if (XRE_GetProcessType() == GeckoProcessType_Default) {
|
|
if (AndroidBridge::Bridge())
|
|
*aHasText = AndroidBridge::Bridge()->ClipboardHasText();
|
|
} else {
|
|
ContentChild::GetSingleton()->SendClipboardHasText(aHasText);
|
|
}
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsClipboard::SupportsSelectionClipboard(bool *aIsSupported)
|
|
{
|
|
*aIsSupported = false;
|
|
return NS_OK;
|
|
}
|
|
|