summaryrefslogtreecommitdiffstats
path: root/dom/events/TextEvent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/events/TextEvent.cpp')
-rw-r--r--dom/events/TextEvent.cpp68
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();
+}