Files
Daisuke Akatsuka 31e276101e Bug 1874203: Introduce nsIClipboard.getDataIfSmallerThan() r=mak,win-reviewers,geckoview-reviewers,nalexander,gstoll
Add a `getDataIfSmallerThan()` API to `nsIClipboard`. This API allows data to be retrieved only if the size of clipboard's contents is smaller than the specified threshold. The parameters are `aTransferable`, `aWhichClipboard` and `aRequestingWindowContext`, similar to [nsIClipboard.getData()](https://searchfox.org/firefox-main/rev/7709f0a26aeb3c39a5fd86e794425530f0d0b528/widget/nsIClipboard.idl#165-181). In addition, it takes `aThreshold`, which defines the threshold value. (Currently, it only targets plain/text content and checks its character count.)

The reason I want to add this is for use in the urlbar and places modules.
For example, we currently want to change the context menu items based on the clipboard's content. However, when the content is very large, it takes a significant amount of time to retrieve and parse it. [1]
Additionally, while there is a feature to suggest URLs when the clipboard contains a URL[2], we cannot enable this feature by default due to the same reason.
To resolve them, adds the above API, we want to make very large content ignorable.

[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1874203
[2] https://bugzilla.mozilla.org/show_bug.cgi?id=1842230

Differential Revision: https://phabricator.services.mozilla.com/D280552
2026-05-25 03:19:09 +00:00

40 lines
1.3 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/. */
#ifndef NS_CLIPBOARD_H
#define NS_CLIPBOARD_H
#include "nsBaseClipboard.h"
class nsClipboard final : public nsBaseClipboard {
private:
~nsClipboard();
public:
nsClipboard();
NS_DECL_ISUPPORTS_INHERITED
static nsresult GetTextFromTransferable(nsITransferable* aTransferable,
nsString& aText, nsString& aHTML);
mozilla::Result<int32_t, nsresult> GetNativeClipboardSequenceNumber(
ClipboardType aWhichClipboard) override;
protected:
// Implement the native clipboard behavior.
NS_IMETHOD SetNativeClipboardData(nsITransferable* aTransferable,
ClipboardType aWhichClipboard) override;
virtual mozilla::Result<nsCOMPtr<nsISupports>, nsresult>
GetNativeClipboardData(const nsACString& aFlavor,
ClipboardType aWhichClipboard,
uint64_t aThreshold = 0) override;
nsresult EmptyNativeClipboardData(ClipboardType aWhichClipboard) override;
mozilla::Result<bool, nsresult> HasNativeClipboardDataMatchingFlavors(
const nsTArray<nsCString>& aFlavorList,
ClipboardType aWhichClipboard) override;
};
#endif