Files
palemoon27/dom/events/DataContainerEvent.cpp
T
roytam1 c171030101 import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1182979 - Part 1: Use nsTHashtable::Iterator in PluginInstanceChild. r=jimm (a3105fe02)
- Bug 1182979 - Part 2: Use nsTHashtable::Iterator in PluginScriptableObjectChild. r=jimm (301bd8d3c)
- Bug 1182979 - Part 3: Use nsTHashtable::Iterator in GMPTimerParent. r=cpearce (e35ef2491)
- Bug 1182979 - Part 4: Use nsTHashtable::Iterator in MediaShutdownManager. r=cpearce (22dcbe9cd)
- Bug 1186780: Replace EnumerateRead with new iterators in cycle collection code. r=mccr8 (263c26445)
- Bug 1182980 - Part 1: Use nsTHashtable::Iterator in FragmentOrElement. r=khuey (ca3c5dfb5)
- Bug 1182980 - Part 2: Use nsTHashtable::Iterator in nsRange. r=khuey (5b43675ac)
- Bug 1182980 - Part 3: Use nsTHashtable::Iterator in nsWindowRoot. r=khuey (f4d8b2a4b)
- Bug 1182980 - Part 4: Use nsTHashtable::Iterator in nsWindowMemoryReporter::UnlinkGhostWindows. r=khuey (b01946afe)
- Bug 1182980 - Part 5: Use nsTHashtable::Iterator in nsWindowMemoryReporter::CollectReports. r=khuey (336538295)
- Bug 1182980 - Part 6: Use nsTHashtable::Iterator in ShadowRoot. r=khuey (d59bf3da0)
- Bug 1182980 - Part 7: Use nsTHashtable::Iterator in nsIdentifierMapEntry::FireChangeCallbacks. r=khuey (53f3868d3)
- Bug 1182980 - Part 8: Use nsTHashtable::Iterator in nsIDocument::EnumerateActivityObservers. r=khuey (868eef2c2)
- Bug 1182980 - Part 9: Use nsTHashtable::Iterator in rest of nsDocument. r=khuey (797b75fb8)
- Bug 1182980 - Part 10: Use nsTHashtable::Iterator in DisconnectEventTargetObjects. r=khuey (37aee02c8)
- Bug 1182980 - Part 11: Use nsTHashtable::Iterator in nsGlobalWindow::AddSizeOfIncludingThis. r=khuey (a75ffd411)
2021-08-08 20:35:54 +08:00

102 lines
2.9 KiB
C++

/* -*- 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/dom/DataContainerEvent.h"
#include "nsContentUtils.h"
#include "nsIDocument.h"
#include "nsIXPConnect.h"
namespace mozilla {
namespace dom {
DataContainerEvent::DataContainerEvent(EventTarget* aOwner,
nsPresContext* aPresContext,
WidgetEvent* aEvent)
: Event(aOwner, aPresContext, aEvent)
{
nsCOMPtr<nsPIDOMWindow> win = do_QueryInterface(mOwner);
if (win) {
if (nsIDocument* doc = win->GetExtantDoc()) {
doc->WarnOnceAbout(nsIDocument::eDataContainerEvent);
}
}
}
NS_IMPL_CYCLE_COLLECTION_CLASS(DataContainerEvent)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(DataContainerEvent, Event)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mData)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(DataContainerEvent, Event)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mData)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_ADDREF_INHERITED(DataContainerEvent, Event)
NS_IMPL_RELEASE_INHERITED(DataContainerEvent, Event)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(DataContainerEvent)
NS_INTERFACE_MAP_ENTRY(nsIDOMDataContainerEvent)
NS_INTERFACE_MAP_END_INHERITING(Event)
NS_IMETHODIMP
DataContainerEvent::GetData(const nsAString& aKey, nsIVariant** aData)
{
NS_ENSURE_ARG_POINTER(aData);
mData.Get(aKey, aData);
return NS_OK;
}
NS_IMETHODIMP
DataContainerEvent::SetData(const nsAString& aKey, nsIVariant* aData)
{
NS_ENSURE_ARG(aData);
// Make sure this event isn't already being dispatched.
NS_ENSURE_STATE(!mEvent->mFlags.mIsBeingDispatched);
mData.Put(aKey, aData);
return NS_OK;
}
void
DataContainerEvent::SetData(JSContext* aCx, const nsAString& aKey,
JS::Handle<JS::Value> aVal,
ErrorResult& aRv)
{
if (!nsContentUtils::XPConnect()) {
aRv = NS_ERROR_FAILURE;
return;
}
nsCOMPtr<nsIVariant> val;
nsresult rv =
nsContentUtils::XPConnect()->JSToVariant(aCx, aVal, getter_AddRefs(val));
if (NS_FAILED(rv)) {
aRv = rv;
return;
}
aRv = SetData(aKey, val);
}
} // namespace dom
} // namespace mozilla
using namespace mozilla;
using namespace mozilla::dom;
nsresult
NS_NewDOMDataContainerEvent(nsIDOMEvent** aInstancePtrResult,
EventTarget* aOwner,
nsPresContext* aPresContext,
WidgetEvent* aEvent)
{
DataContainerEvent* it = new DataContainerEvent(aOwner, aPresContext, aEvent);
NS_ADDREF(it);
*aInstancePtrResult = static_cast<Event*>(it);
return NS_OK;
}