diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-15 03:34:42 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-15 03:34:42 +0000 |
commit | da4c7e7ed675c3bf405668739c3012d140856109 (patch) | |
tree | cdd868dba063fecba609a1d819de271f0d51b23e /dom/events/TextEvent.cpp | |
parent | Adding upstream version 125.0.3. (diff) | |
download | firefox-da4c7e7ed675c3bf405668739c3012d140856109.tar.xz firefox-da4c7e7ed675c3bf405668739c3012d140856109.zip |
Adding upstream version 126.0.upstream/126.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/events/TextEvent.cpp')
-rw-r--r-- | dom/events/TextEvent.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/dom/events/TextEvent.cpp b/dom/events/TextEvent.cpp new file mode 100644 index 0000000000..95ed15f8e2 --- /dev/null +++ b/dom/events/TextEvent.cpp @@ -0,0 +1,68 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/BasePrincipal.h" // for nsIPrincipal::IsSystemPrincipal() +#include "mozilla/EventForwards.h" +#include "mozilla/TextEvents.h" +#include "mozilla/dom/DataTransfer.h" +#include "mozilla/dom/TextEvent.h" +#include "nsGlobalWindowInner.h" +#include "nsIPrincipal.h" +#include "nsPresContext.h" + +namespace mozilla::dom { + +TextEvent::TextEvent(EventTarget* aOwner, nsPresContext* aPresContext, + InternalLegacyTextEvent* aEvent) + : UIEvent(aOwner, aPresContext, + aEvent + ? aEvent + : new InternalLegacyTextEvent(false, eVoidEvent, nullptr)) { + NS_ASSERTION(mEvent->mClass == eLegacyTextEventClass, "event type mismatch"); + mEventIsInternal = !aEvent; +} + +void TextEvent::InitTextEvent(const nsAString& typeArg, bool canBubbleArg, + bool cancelableArg, nsGlobalWindowInner* viewArg, + const nsAString& dataArg) { + if (NS_WARN_IF(mEvent->mFlags.mIsBeingDispatched)) { + return; + } + + UIEvent::InitUIEvent(typeArg, canBubbleArg, cancelableArg, viewArg, 0); + + static_cast<InternalLegacyTextEvent*>(mEvent)->mData = dataArg; +} + +void TextEvent::GetData(nsAString& aData, + nsIPrincipal& aSubjectPrincipal) const { + InternalLegacyTextEvent* textEvent = mEvent->AsLegacyTextEvent(); + MOZ_ASSERT(textEvent); + if (mEvent->IsTrusted() && !aSubjectPrincipal.IsSystemPrincipal() && + !StaticPrefs::dom_event_clipboardevents_enabled() && + ExposesClipboardDataOrDataTransfer(textEvent->mInputType)) { + aData.Truncate(); + return; + } + if (!textEvent->mDataTransfer) { + aData = textEvent->mData; + return; + } + textEvent->mDataTransfer->GetData(u"text/plain"_ns, aData, aSubjectPrincipal, + IgnoreErrors()); +} + +} // namespace mozilla::dom + +using namespace mozilla; +using namespace mozilla::dom; + +already_AddRefed<TextEvent> NS_NewDOMTextEvent( + EventTarget* aOwner, nsPresContext* aPresContext, + InternalLegacyTextEvent* aEvent) { + RefPtr<TextEvent> it = new TextEvent(aOwner, aPresContext, aEvent); + return it.forget(); +} |