--- a/dom/base/NodeIterator.cpp
+++ b/dom/base/NodeIterator.cpp
@@ -133,18 +133,18 @@ void NodeIterator::NodePointer::MoveBack
}
/*
* Factories, constructors and destructors
*/
NodeIterator::NodeIterator(nsINode *aRoot,
uint32_t aWhatToShow,
- const NodeFilterHolder &aFilter) :
- nsTraversal(aRoot, aWhatToShow, aFilter),
+ NodeFilterHolder aFilter) :
+ nsTraversal(aRoot, aWhatToShow, Move(aFilter)),
mPointer(mRoot, true)
{
aRoot->AddMutationObserver(this);
}
NodeIterator::~NodeIterator()
{
/* destructor code */
--- a/dom/base/NodeIterator.h
+++ b/dom/base/NodeIterator.h
@@ -27,17 +27,17 @@ class NodeIterator final : public nsIDOM
public nsStubMutationObserver
{
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_NSIDOMNODEITERATOR
NodeIterator(nsINode *aRoot,
uint32_t aWhatToShow,
- const NodeFilterHolder &aFilter);
+ NodeFilterHolder aFilter);
NS_DECL_NSIMUTATIONOBSERVER_CONTENTREMOVED
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(NodeIterator, nsIDOMNodeIterator)
// WebIDL API
nsINode* Root() const
{
--- a/dom/base/TreeWalker.cpp
+++ b/dom/base/TreeWalker.cpp
@@ -21,18 +21,18 @@ namespace mozilla {
namespace dom {
/*
* Factories, constructors and destructors
*/
TreeWalker::TreeWalker(nsINode *aRoot,
uint32_t aWhatToShow,
- const NodeFilterHolder &aFilter) :
- nsTraversal(aRoot, aWhatToShow, aFilter),
+ NodeFilterHolder aFilter) :
+ nsTraversal(aRoot, aWhatToShow, Move(aFilter)),
mCurrentNode(aRoot)
{
}
TreeWalker::~TreeWalker()
{
/* destructor code */
}
--- a/dom/base/TreeWalker.h
+++ b/dom/base/TreeWalker.h
@@ -28,17 +28,17 @@ class TreeWalker final : public nsIDOMTr
virtual ~TreeWalker();
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_NSIDOMTREEWALKER
TreeWalker(nsINode *aRoot,
uint32_t aWhatToShow,
- const NodeFilterHolder &aFilter);
+ NodeFilterHolder aFilter);
NS_DECL_CYCLE_COLLECTION_CLASS(TreeWalker)
// WebIDL API
nsINode* Root() const
{
return mRoot;
}
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -7027,39 +7027,38 @@ nsDocument::CreateNodeIterator(nsIDOMNod
if (!aRoot) {
return NS_ERROR_DOM_NOT_SUPPORTED_ERR;
}
nsCOMPtr<nsINode> root = do_QueryInterface(aRoot);
NS_ENSURE_TRUE(root, NS_ERROR_UNEXPECTED);
ErrorResult rv;
- NodeFilterHolder holder(aFilter);
- *_retval = nsIDocument::CreateNodeIterator(*root, aWhatToShow, holder,
+ *_retval = nsIDocument::CreateNodeIterator(*root, aWhatToShow,
+ NodeFilterHolder(aFilter),
rv).take();
return rv.StealNSResult();
}
already_AddRefed<NodeIterator>
nsIDocument::CreateNodeIterator(nsINode& aRoot, uint32_t aWhatToShow,
NodeFilter* aFilter,
ErrorResult& rv) const
{
- NodeFilterHolder holder(aFilter);
- return CreateNodeIterator(aRoot, aWhatToShow, holder, rv);
+ return CreateNodeIterator(aRoot, aWhatToShow, NodeFilterHolder(aFilter), rv);
}
already_AddRefed<NodeIterator>
nsIDocument::CreateNodeIterator(nsINode& aRoot, uint32_t aWhatToShow,
- const NodeFilterHolder& aFilter,
+ NodeFilterHolder aFilter,
ErrorResult& rv) const
{
nsINode* root = &aRoot;
RefPtr<NodeIterator> iterator = new NodeIterator(root, aWhatToShow,
- aFilter);
+ Move(aFilter));
return iterator.forget();
}
NS_IMETHODIMP
nsDocument::CreateTreeWalker(nsIDOMNode *aRoot,
uint32_t aWhatToShow,
nsIDOMNodeFilter *aFilter,
uint8_t aOptionalArgc,
@@ -7070,38 +7069,36 @@ nsDocument::CreateTreeWalker(nsIDOMNode
if (!aOptionalArgc) {
aWhatToShow = nsIDOMNodeFilter::SHOW_ALL;
}
nsCOMPtr<nsINode> root = do_QueryInterface(aRoot);
NS_ENSURE_TRUE(root, NS_ERROR_DOM_NOT_SUPPORTED_ERR);
ErrorResult rv;
- NodeFilterHolder holder(aFilter);
- *_retval = nsIDocument::CreateTreeWalker(*root, aWhatToShow, holder,
+ *_retval = nsIDocument::CreateTreeWalker(*root, aWhatToShow,
+ NodeFilterHolder(aFilter),
rv).take();
return rv.StealNSResult();
}
already_AddRefed<TreeWalker>
nsIDocument::CreateTreeWalker(nsINode& aRoot, uint32_t aWhatToShow,
NodeFilter* aFilter,
ErrorResult& rv) const
{
- NodeFilterHolder holder(aFilter);
- return CreateTreeWalker(aRoot, aWhatToShow, holder, rv);
+ return CreateTreeWalker(aRoot, aWhatToShow, NodeFilterHolder(aFilter), rv);
}
already_AddRefed<TreeWalker>
nsIDocument::CreateTreeWalker(nsINode& aRoot, uint32_t aWhatToShow,
- const NodeFilterHolder& aFilter,
- ErrorResult& rv) const
+ NodeFilterHolder aFilter, ErrorResult& rv) const
{
nsINode* root = &aRoot;
- RefPtr<TreeWalker> walker = new TreeWalker(root, aWhatToShow, aFilter);
+ RefPtr<TreeWalker> walker = new TreeWalker(root, aWhatToShow, Move(aFilter));
return walker.forget();
}
NS_IMETHODIMP
nsDocument::GetDefaultView(mozIDOMWindowProxy** aDefaultView)
{
*aDefaultView = nullptr;
--- a/dom/base/nsIDocument.h
+++ b/dom/base/nsIDocument.h
@@ -2544,24 +2544,24 @@ public:
CreateEvent(const nsAString& aEventType, mozilla::ErrorResult& rv) const;
already_AddRefed<nsRange> CreateRange(mozilla::ErrorResult& rv);
already_AddRefed<mozilla::dom::NodeIterator>
CreateNodeIterator(nsINode& aRoot, uint32_t aWhatToShow,
mozilla::dom::NodeFilter* aFilter,
mozilla::ErrorResult& rv) const;
already_AddRefed<mozilla::dom::NodeIterator>
CreateNodeIterator(nsINode& aRoot, uint32_t aWhatToShow,
- const mozilla::dom::NodeFilterHolder& aFilter,
+ mozilla::dom::NodeFilterHolder aFilter,
mozilla::ErrorResult& rv) const;
already_AddRefed<mozilla::dom::TreeWalker>
CreateTreeWalker(nsINode& aRoot, uint32_t aWhatToShow,
mozilla::dom::NodeFilter* aFilter, mozilla::ErrorResult& rv) const;
already_AddRefed<mozilla::dom::TreeWalker>
CreateTreeWalker(nsINode& aRoot, uint32_t aWhatToShow,
- const mozilla::dom::NodeFilterHolder& aFilter,
+ mozilla::dom::NodeFilterHolder aFilter,
mozilla::ErrorResult& rv) const;
// Deprecated WebIDL bits
already_AddRefed<mozilla::dom::CDATASection>
CreateCDATASection(const nsAString& aData, mozilla::ErrorResult& rv);
already_AddRefed<mozilla::dom::Attr>
CreateAttribute(const nsAString& aName, mozilla::ErrorResult& rv);
already_AddRefed<mozilla::dom::Attr>
--- a/dom/base/nsTraversal.cpp
+++ b/dom/base/nsTraversal.cpp
@@ -13,20 +13,20 @@
#include "nsGkAtoms.h"
using namespace mozilla;
using namespace mozilla::dom;
nsTraversal::nsTraversal(nsINode *aRoot,
uint32_t aWhatToShow,
- const NodeFilterHolder &aFilter) :
+ NodeFilterHolder aFilter) :
mRoot(aRoot),
mWhatToShow(aWhatToShow),
- mFilter(aFilter),
+ mFilter(Move(aFilter)),
mInAcceptNode(false)
{
NS_ASSERTION(aRoot, "invalid root in call to nsTraversal constructor");
}
nsTraversal::~nsTraversal()
{
/* destructor code */
--- a/dom/base/nsTraversal.h
+++ b/dom/base/nsTraversal.h
@@ -20,17 +20,17 @@
class nsINode;
class nsTraversal
{
public:
nsTraversal(nsINode *aRoot,
uint32_t aWhatToShow,
- const mozilla::dom::NodeFilterHolder &aFilter);
+ mozilla::dom::NodeFilterHolder aFilter);
virtual ~nsTraversal();
protected:
nsCOMPtr<nsINode> mRoot;
uint32_t mWhatToShow;
mozilla::dom::NodeFilterHolder mFilter;
bool mInAcceptNode;
--- a/dom/bindings/CallbackObject.h
+++ b/dom/bindings/CallbackObject.h
@@ -368,22 +368,24 @@ public:
}
explicit CallbackObjectHolder(XPCOMCallbackT* aCallback)
: mPtrBits(reinterpret_cast<uintptr_t>(aCallback) | XPCOMCallbackFlag)
{
NS_IF_ADDREF(aCallback);
}
- explicit CallbackObjectHolder(const CallbackObjectHolder& aOther)
+ CallbackObjectHolder(CallbackObjectHolder&& aOther)
: mPtrBits(aOther.mPtrBits)
{
- NS_IF_ADDREF(GetISupports());
+ aOther.mPtrBits = 0;
}
+ CallbackObjectHolder(const CallbackObjectHolder& aOther) = delete;
+
CallbackObjectHolder()
: mPtrBits(0)
{}
~CallbackObjectHolder()
{
UnlinkSelf();
}
@@ -397,34 +399,44 @@ public:
void operator=(XPCOMCallbackT* aCallback)
{
UnlinkSelf();
mPtrBits = reinterpret_cast<uintptr_t>(aCallback) | XPCOMCallbackFlag;
NS_IF_ADDREF(aCallback);
}
- void operator=(const CallbackObjectHolder& aOther)
+ void operator=(CallbackObjectHolder&& aOther)
{
UnlinkSelf();
mPtrBits = aOther.mPtrBits;
- NS_IF_ADDREF(GetISupports());
+ aOther.mPtrBits = 0;
}
+ void operator=(const CallbackObjectHolder& aOther) = delete;
+
nsISupports* GetISupports() const
{
return reinterpret_cast<nsISupports*>(mPtrBits & ~XPCOMCallbackFlag);
}
// Boolean conversion operator so people can use this in boolean tests
explicit operator bool() const
{
return GetISupports();
}
+ CallbackObjectHolder Clone() const
+ {
+ CallbackObjectHolder result;
+ result.mPtrBits = mPtrBits;
+ NS_IF_ADDREF(GetISupports());
+ return result;
+ }
+
// Even if HasWebIDLCallback returns true, GetWebIDLCallback() might still
// return null.
bool HasWebIDLCallback() const
{
return !(mPtrBits & XPCOMCallbackFlag);
}
WebIDLCallbackT* GetWebIDLCallback() const
--- a/dom/events/EventListenerManager.cpp
+++ b/dom/events/EventListenerManager.cpp
@@ -232,17 +232,17 @@ already_AddRefed<nsPIDOMWindowInner>
EventListenerManager::GetTargetAsInnerWindow() const
{
nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(mTarget);
return window.forget();
}
void
EventListenerManager::AddEventListenerInternal(
- const EventListenerHolder& aListenerHolder,
+ EventListenerHolder aListenerHolder,
EventMessage aEventMessage,
nsIAtom* aTypeAtom,
const nsAString& aTypeString,
const EventListenerFlags& aFlags,
bool aHandler,
bool aAllEvents)
{
MOZ_ASSERT(// Main thread
@@ -273,17 +273,16 @@ EventListenerManager::AddEventListenerIn
}
}
mNoListenerForEvent = eVoidEvent;
mNoListenerForEventAtom = nullptr;
listener = aAllEvents ? mListeners.InsertElementAt(0) :
mListeners.AppendElement();
- listener->mListener = aListenerHolder;
listener->mEventMessage = aEventMessage;
listener->mTypeString = aTypeString;
listener->mTypeAtom = aTypeAtom;
listener->mFlags = aFlags;
listener->mListenerIsHandler = aHandler;
listener->mHandlerIsString = false;
listener->mAllEvents = aAllEvents;
listener->mIsChrome = mIsMainThreadELM &&
@@ -296,16 +295,17 @@ EventListenerManager::AddEventListenerIn
listener->mListenerType = Listener::eJSEventListener;
} else if (aListenerHolder.HasWebIDLCallback()) {
listener->mListenerType = Listener::eWebIDLListener;
} else if ((wjs = do_QueryInterface(aListenerHolder.GetXPCOMCallback()))) {
listener->mListenerType = Listener::eWrappedJSListener;
} else {
listener->mListenerType = Listener::eNativeListener;
}
+ listener->mListener = Move(aListenerHolder);
if (aFlags.mInSystemGroup) {
mMayHaveSystemGroupListeners = true;
}
if (aFlags.mCapture) {
mMayHaveCapturingListeners = true;
}
@@ -585,17 +585,17 @@ EventListenerManager::DisableDevice(Even
default:
NS_WARNING("Disabling an unknown device sensor.");
break;
}
}
void
EventListenerManager::RemoveEventListenerInternal(
- const EventListenerHolder& aListenerHolder,
+ EventListenerHolder aListenerHolder,
EventMessage aEventMessage,
nsIAtom* aUserType,
const nsAString& aTypeString,
const EventListenerFlags& aFlags,
bool aAllEvents)
{
if (!aListenerHolder || !aEventMessage || mClearingListeners) {
return;
@@ -692,40 +692,42 @@ EventListenerManager::ListenerCanHandle(
}
}
MOZ_ASSERT(mIsMainThreadELM);
return aListener->mEventMessage == aEventMessage;
}
void
EventListenerManager::AddEventListenerByType(
- const EventListenerHolder& aListenerHolder,
+ EventListenerHolder aListenerHolder,
const nsAString& aType,
const EventListenerFlags& aFlags)
{
nsCOMPtr<nsIAtom> atom;
EventMessage message = mIsMainThreadELM ?
nsContentUtils::GetEventMessageAndAtomForListener(aType,
getter_AddRefs(atom)) :
eUnidentifiedEvent;
- AddEventListenerInternal(aListenerHolder, message, atom, aType, aFlags);
+ AddEventListenerInternal(Move(aListenerHolder),
+ message, atom, aType, aFlags);
}
void
EventListenerManager::RemoveEventListenerByType(
- const EventListenerHolder& aListenerHolder,
+ EventListenerHolder aListenerHolder,
const nsAString& aType,
const EventListenerFlags& aFlags)
{
nsCOMPtr<nsIAtom> atom;
EventMessage message = mIsMainThreadELM ?
nsContentUtils::GetEventMessageAndAtomForListener(aType,
getter_AddRefs(atom)) :
eUnidentifiedEvent;
- RemoveEventListenerInternal(aListenerHolder, message, atom, aType, aFlags);
+ RemoveEventListenerInternal(Move(aListenerHolder),
+ message, atom, aType, aFlags);
}
EventListenerManager::Listener*
EventListenerManager::FindEventHandler(EventMessage aEventMessage,
nsIAtom* aTypeAtom,
const nsAString& aTypeString)
{
// Run through the listeners for this type and see if a script
@@ -759,19 +761,18 @@ EventListenerManager::SetEventHandlerInt
// If we didn't find a script listener or no listeners existed
// create and add a new one.
EventListenerFlags flags;
flags.mListenerIsJSListener = true;
nsCOMPtr<JSEventHandler> jsEventHandler;
NS_NewJSEventHandler(mTarget, aName,
aTypedHandler, getter_AddRefs(jsEventHandler));
- EventListenerHolder listenerHolder(jsEventHandler);
- AddEventListenerInternal(listenerHolder, eventMessage, aName, aTypeString,
- flags, true);
+ AddEventListenerInternal(EventListenerHolder(jsEventHandler),
+ eventMessage, aName, aTypeString, flags, true);
listener = FindEventHandler(eventMessage, aName, aTypeString);
} else {
JSEventHandler* jsEventHandler = listener->GetJSEventHandler();
MOZ_ASSERT(jsEventHandler,
"How can we have an event handler with no JSEventHandler?");
bool same = jsEventHandler->GetTypedEventHandler() == aTypedHandler;
@@ -1087,17 +1088,18 @@ EventListenerManager::CompileEventHandle
}
nsresult
EventListenerManager::HandleEventSubType(Listener* aListener,
nsIDOMEvent* aDOMEvent,
EventTarget* aCurrentTarget)
{
nsresult result = NS_OK;
- EventListenerHolder listenerHolder(aListener->mListener); // strong ref
+ // strong ref
+ EventListenerHolder listenerHolder(aListener->mListener.Clone());
// If this is a script handler and we haven't yet
// compiled the event handler itself
if ((aListener->mListenerType == Listener::eJSEventListener) &&
aListener->mHandlerIsString) {
result = CompileEventHandlerInternal(aListener, nullptr, nullptr);
aListener = nullptr;
}
@@ -1297,101 +1299,99 @@ EventListenerManager::Disconnect()
{
mTarget = nullptr;
RemoveAllListeners();
}
void
EventListenerManager::AddEventListener(
const nsAString& aType,
- const EventListenerHolder& aListenerHolder,
+ EventListenerHolder aListenerHolder,
bool aUseCapture,
bool aWantsUntrusted)
{
EventListenerFlags flags;
flags.mCapture = aUseCapture;
flags.mAllowUntrustedEvents = aWantsUntrusted;
- return AddEventListenerByType(aListenerHolder, aType, flags);
+ return AddEventListenerByType(Move(aListenerHolder), aType, flags);
}
void
EventListenerManager::AddEventListener(
const nsAString& aType,
- const EventListenerHolder& aListenerHolder,
+ EventListenerHolder aListenerHolder,
const dom::AddEventListenerOptionsOrBoolean& aOptions,
bool aWantsUntrusted)
{
EventListenerFlags flags;
if (aOptions.IsBoolean()) {
flags.mCapture = aOptions.GetAsBoolean();
} else {
const auto& options = aOptions.GetAsAddEventListenerOptions();
flags.mCapture = options.mCapture;
flags.mInSystemGroup = options.mMozSystemGroup;
flags.mPassive = options.mPassive;
}
flags.mAllowUntrustedEvents = aWantsUntrusted;
- return AddEventListenerByType(aListenerHolder, aType, flags);
+ return AddEventListenerByType(Move(aListenerHolder), aType, flags);
}
void
EventListenerManager::RemoveEventListener(
const nsAString& aType,
- const EventListenerHolder& aListenerHolder,
+ EventListenerHolder aListenerHolder,
bool aUseCapture)
{
EventListenerFlags flags;
flags.mCapture = aUseCapture;
- RemoveEventListenerByType(aListenerHolder, aType, flags);
+ RemoveEventListenerByType(Move(aListenerHolder), aType, flags);
}
void
EventListenerManager::RemoveEventListener(
const nsAString& aType,
- const EventListenerHolder& aListenerHolder,
+ EventListenerHolder aListenerHolder,
const dom::EventListenerOptionsOrBoolean& aOptions)
{
EventListenerFlags flags;
if (aOptions.IsBoolean()) {
flags.mCapture = aOptions.GetAsBoolean();
} else {
const auto& options = aOptions.GetAsEventListenerOptions();
flags.mCapture = options.mCapture;
flags.mInSystemGroup = options.mMozSystemGroup;
}
- RemoveEventListenerByType(aListenerHolder, aType, flags);
+ RemoveEventListenerByType(Move(aListenerHolder), aType, flags);
}
void
EventListenerManager::AddListenerForAllEvents(nsIDOMEventListener* aDOMListener,
bool aUseCapture,
bool aWantsUntrusted,
bool aSystemEventGroup)
{
EventListenerFlags flags;
flags.mCapture = aUseCapture;
flags.mAllowUntrustedEvents = aWantsUntrusted;
flags.mInSystemGroup = aSystemEventGroup;
- EventListenerHolder listenerHolder(aDOMListener);
- AddEventListenerInternal(listenerHolder, eAllEvents, nullptr, EmptyString(),
- flags, false, true);
+ AddEventListenerInternal(EventListenerHolder(aDOMListener), eAllEvents,
+ nullptr, EmptyString(), flags, false, true);
}
void
EventListenerManager::RemoveListenerForAllEvents(
nsIDOMEventListener* aDOMListener,
bool aUseCapture,
bool aSystemEventGroup)
{
EventListenerFlags flags;
flags.mCapture = aUseCapture;
flags.mInSystemGroup = aSystemEventGroup;
- EventListenerHolder listenerHolder(aDOMListener);
- RemoveEventListenerInternal(listenerHolder, eAllEvents, nullptr,
- EmptyString(), flags, true);
+ RemoveEventListenerInternal(EventListenerHolder(aDOMListener), eAllEvents,
+ nullptr, EmptyString(), flags, true);
}
bool
EventListenerManager::HasMutationListeners()
{
if (mMayHaveMutationListeners) {
uint32_t count = mListeners.Length();
for (uint32_t i = 0; i < count; ++i) {
--- a/dom/events/EventListenerManager.h
+++ b/dom/events/EventListenerManager.h
@@ -240,40 +240,38 @@ public:
NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(EventListenerManager)
void AddEventListener(const nsAString& aType,
nsIDOMEventListener* aListener,
bool aUseCapture,
bool aWantsUntrusted)
{
- EventListenerHolder holder(aListener);
- AddEventListener(aType, holder, aUseCapture, aWantsUntrusted);
+ AddEventListener(aType, EventListenerHolder(aListener),
+ aUseCapture, aWantsUntrusted);
}
void AddEventListener(const nsAString& aType,
dom::EventListener* aListener,
const dom::AddEventListenerOptionsOrBoolean& aOptions,
bool aWantsUntrusted)
{
- EventListenerHolder holder(aListener);
- AddEventListener(aType, holder, aOptions, aWantsUntrusted);
+ AddEventListener(aType, EventListenerHolder(aListener),
+ aOptions, aWantsUntrusted);
}
void RemoveEventListener(const nsAString& aType,
nsIDOMEventListener* aListener,
bool aUseCapture)
{
- EventListenerHolder holder(aListener);
- RemoveEventListener(aType, holder, aUseCapture);
+ RemoveEventListener(aType, EventListenerHolder(aListener), aUseCapture);
}
void RemoveEventListener(const nsAString& aType,
dom::EventListener* aListener,
const dom::EventListenerOptionsOrBoolean& aOptions)
{
- EventListenerHolder holder(aListener);
- RemoveEventListener(aType, holder, aOptions);
+ RemoveEventListener(aType, EventListenerHolder(aListener), aOptions);
}
void AddListenerForAllEvents(nsIDOMEventListener* aListener,
bool aUseCapture,
bool aWantsUntrusted,
bool aSystemEventGroup);
void RemoveListenerForAllEvents(nsIDOMEventListener* aListener,
bool aUseCapture,
@@ -282,30 +280,28 @@ public:
/**
* Sets events listeners of all types.
* @param an event listener
*/
void AddEventListenerByType(nsIDOMEventListener *aListener,
const nsAString& type,
const EventListenerFlags& aFlags)
{
- EventListenerHolder holder(aListener);
- AddEventListenerByType(holder, type, aFlags);
+ AddEventListenerByType(EventListenerHolder(aListener), type, aFlags);
}
- void AddEventListenerByType(const EventListenerHolder& aListener,
+ void AddEventListenerByType(EventListenerHolder aListener,
const nsAString& type,
const EventListenerFlags& aFlags);
void RemoveEventListenerByType(nsIDOMEventListener *aListener,
const nsAString& type,
const EventListenerFlags& aFlags)
{
- EventListenerHolder holder(aListener);
- RemoveEventListenerByType(holder, type, aFlags);
+ RemoveEventListenerByType(EventListenerHolder(aListener), type, aFlags);
}
- void RemoveEventListenerByType(const EventListenerHolder& aListener,
+ void RemoveEventListenerByType(EventListenerHolder aListener,
const nsAString& type,
const EventListenerFlags& aFlags);
/**
* Sets the current "inline" event listener for aName to be a
* function compiled from aFunc if !aDeferCompilation. If
* aDeferCompilation, then we assume that we can get the string from
* mTarget later and compile lazily.
@@ -549,38 +545,38 @@ protected:
/**
* Helper method for implementing the various Get*EventHandler above. Will
* return null if we don't have an event handler for this event name.
*/
const TypedEventHandler* GetTypedEventHandler(nsIAtom* aEventName,
const nsAString& aTypeString);
void AddEventListener(const nsAString& aType,
- const EventListenerHolder& aListener,
+ EventListenerHolder aListener,
const dom::AddEventListenerOptionsOrBoolean& aOptions,
bool aWantsUntrusted);
void AddEventListener(const nsAString& aType,
- const EventListenerHolder& aListener,
+ EventListenerHolder aListener,
bool aUseCapture,
bool aWantsUntrusted);
void RemoveEventListener(const nsAString& aType,
- const EventListenerHolder& aListener,
+ EventListenerHolder aListener,
const dom::EventListenerOptionsOrBoolean& aOptions);
void RemoveEventListener(const nsAString& aType,
- const EventListenerHolder& aListener,
+ EventListenerHolder aListener,
bool aUseCapture);
- void AddEventListenerInternal(const EventListenerHolder& aListener,
+ void AddEventListenerInternal(EventListenerHolder aListener,
EventMessage aEventMessage,
nsIAtom* aTypeAtom,
const nsAString& aTypeString,
const EventListenerFlags& aFlags,
bool aHandler = false,
bool aAllEvents = false);
- void RemoveEventListenerInternal(const EventListenerHolder& aListener,
+ void RemoveEventListenerInternal(EventListenerHolder aListener,
EventMessage aEventMessage,
nsIAtom* aUserType,
const nsAString& aTypeString,
const EventListenerFlags& aFlags,
bool aAllEvents = false);
void RemoveAllListeners();
const EventTypeData* GetTypeDataForIID(const nsIID& aIID);
const EventTypeData* GetTypeDataForEventName(nsIAtom* aName);
--- a/dom/geolocation/nsGeolocation.cpp
+++ b/dom/geolocation/nsGeolocation.cpp
@@ -78,18 +78,18 @@ class nsGeolocationRequest final
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_NSICONTENTPERMISSIONREQUEST
NS_DECL_NSIGEOLOCATIONUPDATE
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsGeolocationRequest, nsIContentPermissionRequest)
nsGeolocationRequest(Geolocation* aLocator,
- const GeoPositionCallback& aCallback,
- const GeoPositionErrorCallback& aErrorCallback,
+ GeoPositionCallback aCallback,
+ GeoPositionErrorCallback aErrorCallback,
PositionOptions* aOptions,
uint8_t aProtocolType,
bool aWatchPositionRequest = false,
int32_t aWatchId = 0);
MOZ_DECLARE_WEAKREFERENCE_TYPENAME(nsGeolocationRequest)
void Shutdown();
@@ -342,25 +342,25 @@ PositionError::NotifyCallback(const GeoP
}
}
}
////////////////////////////////////////////////////
// nsGeolocationRequest
////////////////////////////////////////////////////
nsGeolocationRequest::nsGeolocationRequest(Geolocation* aLocator,
- const GeoPositionCallback& aCallback,
- const GeoPositionErrorCallback& aErrorCallback,
+ GeoPositionCallback aCallback,
+ GeoPositionErrorCallback aErrorCallback,
PositionOptions* aOptions,
uint8_t aProtocolType,
bool aWatchPositionRequest,
int32_t aWatchId)
: mIsWatchPositionRequest(aWatchPositionRequest),
- mCallback(aCallback),
- mErrorCallback(aErrorCallback),
+ mCallback(Move(aCallback)),
+ mErrorCallback(Move(aErrorCallback)),
mOptions(aOptions),
mLocator(aLocator),
mWatchId(aWatchId),
mShutdown(false),
mProtocolType(aProtocolType)
{
if (nsCOMPtr<nsPIDOMWindowInner> win =
do_QueryReferent(mLocator->GetOwner())) {
@@ -1385,57 +1385,53 @@ Geolocation::ClearPendingRequest(nsGeolo
}
void
Geolocation::GetCurrentPosition(PositionCallback& aCallback,
PositionErrorCallback* aErrorCallback,
const PositionOptions& aOptions,
ErrorResult& aRv)
{
- GeoPositionCallback successCallback(&aCallback);
- GeoPositionErrorCallback errorCallback(aErrorCallback);
-
- nsresult rv = GetCurrentPosition(successCallback, errorCallback,
+ nsresult rv = GetCurrentPosition(GeoPositionCallback(&aCallback),
+ GeoPositionErrorCallback(aErrorCallback),
CreatePositionOptionsCopy(aOptions));
if (NS_FAILED(rv)) {
aRv.Throw(rv);
}
return;
}
NS_IMETHODIMP
Geolocation::GetCurrentPosition(nsIDOMGeoPositionCallback* aCallback,
nsIDOMGeoPositionErrorCallback* aErrorCallback,
PositionOptions* aOptions)
{
NS_ENSURE_ARG_POINTER(aCallback);
- GeoPositionCallback successCallback(aCallback);
- GeoPositionErrorCallback errorCallback(aErrorCallback);
-
- return GetCurrentPosition(successCallback, errorCallback, aOptions);
+ return GetCurrentPosition(GeoPositionCallback(aCallback),
+ GeoPositionErrorCallback(aErrorCallback), aOptions);
}
nsresult
-Geolocation::GetCurrentPosition(GeoPositionCallback& callback,
- GeoPositionErrorCallback& errorCallback,
+Geolocation::GetCurrentPosition(GeoPositionCallback callback,
+ GeoPositionErrorCallback errorCallback,
PositionOptions *options)
{
if (mPendingCallbacks.Length() > MAX_GEO_REQUESTS_PER_WINDOW) {
return NS_ERROR_NOT_AVAILABLE;
}
// Count the number of requests per protocol/scheme.
Telemetry::Accumulate(Telemetry::GEOLOCATION_GETCURRENTPOSITION_SECURE_ORIGIN,
static_cast<uint8_t>(mProtocolType));
RefPtr<nsGeolocationRequest> request =
- new nsGeolocationRequest(this, callback, errorCallback, options,
+ new nsGeolocationRequest(this, Move(callback), Move(errorCallback), options,
static_cast<uint8_t>(mProtocolType), false);
if (!sGeoEnabled) {
nsCOMPtr<nsIRunnable> ev = new RequestAllowEvent(false, request);
NS_DispatchToMainThread(ev);
return NS_OK;
}
@@ -1474,20 +1470,18 @@ Geolocation::GetCurrentPositionReady(nsG
int32_t
Geolocation::WatchPosition(PositionCallback& aCallback,
PositionErrorCallback* aErrorCallback,
const PositionOptions& aOptions,
ErrorResult& aRv)
{
int32_t ret = 0;
- GeoPositionCallback successCallback(&aCallback);
- GeoPositionErrorCallback errorCallback(aErrorCallback);
-
- nsresult rv = WatchPosition(successCallback, errorCallback,
+ nsresult rv = WatchPosition(GeoPositionCallback(&aCallback),
+ GeoPositionErrorCallback(aErrorCallback),
CreatePositionOptionsCopy(aOptions), &ret);
if (NS_FAILED(rv)) {
aRv.Throw(rv);
}
return ret;
}
@@ -1495,42 +1489,42 @@ Geolocation::WatchPosition(PositionCallb
NS_IMETHODIMP
Geolocation::WatchPosition(nsIDOMGeoPositionCallback *aCallback,
nsIDOMGeoPositionErrorCallback *aErrorCallback,
PositionOptions *aOptions,
int32_t* aRv)
{
NS_ENSURE_ARG_POINTER(aCallback);
- GeoPositionCallback successCallback(aCallback);
- GeoPositionErrorCallback errorCallback(aErrorCallback);
-
- return WatchPosition(successCallback, errorCallback, aOptions, aRv);
+ return WatchPosition(GeoPositionCallback(aCallback),
+ GeoPositionErrorCallback(aErrorCallback),
+ aOptions, aRv);
}
nsresult
-Geolocation::WatchPosition(GeoPositionCallback& aCallback,
- GeoPositionErrorCallback& aErrorCallback,
+Geolocation::WatchPosition(GeoPositionCallback aCallback,
+ GeoPositionErrorCallback aErrorCallback,
PositionOptions* aOptions,
int32_t* aRv)
{
if (mWatchingCallbacks.Length() > MAX_GEO_REQUESTS_PER_WINDOW) {
return NS_ERROR_NOT_AVAILABLE;
}
// Count the number of requests per protocol/scheme.
Telemetry::Accumulate(Telemetry::GEOLOCATION_WATCHPOSITION_SECURE_ORIGIN,
static_cast<uint8_t>(mProtocolType));
// The watch ID:
*aRv = mLastWatchId++;
RefPtr<nsGeolocationRequest> request =
- new nsGeolocationRequest(this, aCallback, aErrorCallback, aOptions,
- static_cast<uint8_t>(mProtocolType), true, *aRv);
+ new nsGeolocationRequest(this, Move(aCallback), Move(aErrorCallback),
+ aOptions, static_cast<uint8_t>(mProtocolType),
+ true, *aRv);
if (!sGeoEnabled) {
nsCOMPtr<nsIRunnable> ev = new RequestAllowEvent(false, request);
NS_DispatchToMainThread(ev);
return NS_OK;
}
if (!mOwner && !nsContentUtils::LegacyIsCallerChromeOrNativeCode()) {
--- a/dom/geolocation/nsGeolocation.h
+++ b/dom/geolocation/nsGeolocation.h
@@ -184,18 +184,22 @@ public:
// Notification from the service:
void ServiceReady();
private:
~Geolocation();
- nsresult GetCurrentPosition(GeoPositionCallback& aCallback, GeoPositionErrorCallback& aErrorCallback, PositionOptions* aOptions);
- nsresult WatchPosition(GeoPositionCallback& aCallback, GeoPositionErrorCallback& aErrorCallback, PositionOptions* aOptions, int32_t* aRv);
+ nsresult GetCurrentPosition(GeoPositionCallback aCallback,
+ GeoPositionErrorCallback aErrorCallback,
+ PositionOptions* aOptions);
+ nsresult WatchPosition(GeoPositionCallback aCallback,
+ GeoPositionErrorCallback aErrorCallback,
+ PositionOptions* aOptions, int32_t* aRv);
bool RegisterRequestWithPrompt(nsGeolocationRequest* request);
// Methods for the service when it's ready to process requests:
nsresult GetCurrentPositionReady(nsGeolocationRequest* aRequest);
nsresult WatchPositionReady(nsGeolocationRequest* aRequest);
// Check if clearWatch is already called
--- a/editor/libeditor/TextEditRules.cpp
+++ b/editor/libeditor/TextEditRules.cpp
@@ -486,18 +486,18 @@ GetTextNode(Selection* selection,
nsresult res = editor->GetStartNodeAndOffset(selection, getter_AddRefs(selNode), &selOffset);
NS_ENSURE_SUCCESS(res, nullptr);
if (!editor->IsTextNode(selNode)) {
// Get an nsINode from the nsIDOMNode
nsCOMPtr<nsINode> node = do_QueryInterface(selNode);
// if node is null, return it to indicate there's no text
NS_ENSURE_TRUE(node, nullptr);
// This should be the root node, walk the tree looking for text nodes
- NodeFilterHolder filter;
- RefPtr<NodeIterator> iter = new NodeIterator(node, nsIDOMNodeFilter::SHOW_TEXT, filter);
+ RefPtr<NodeIterator> iter =
+ new NodeIterator(node, nsIDOMNodeFilter::SHOW_TEXT, NodeFilterHolder());
while (!editor->IsTextNode(selNode)) {
if (NS_FAILED(res = iter->NextNode(getter_AddRefs(selNode))) || !selNode) {
return nullptr;
}
}
}
return selNode.forget();
}