gecko-dev/dom/events/EventTarget.cpp
Ryan Hunt c38e071dbe Bug 1385071 - Add another method to EventTarget for detecting only non-passive key listeners. r=smaug
This is for adding a pref that will allow web content to have key listeners
and use keyboard APZ, if they are marked passive. This commit also reworks
the function names and comments to make them more accurate.

MozReview-Commit-ID: LGDaVQOK1CS

--HG--
extra : rebase_source : a6bb4b7fff3488dea62b9114aa164814c74561a4
2017-07-27 19:46:44 -04:00

93 lines
2.7 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/EventListenerManager.h"
#include "mozilla/dom/EventTarget.h"
#include "mozilla/dom/EventTargetBinding.h"
#include "nsThreadUtils.h"
namespace mozilla {
namespace dom {
void
EventTarget::RemoveEventListener(const nsAString& aType,
EventListener* aListener,
const EventListenerOptionsOrBoolean& aOptions,
ErrorResult& aRv)
{
EventListenerManager* elm = GetExistingListenerManager();
if (elm) {
elm->RemoveEventListener(aType, aListener, aOptions);
}
}
EventHandlerNonNull*
EventTarget::GetEventHandler(nsIAtom* aType, const nsAString& aTypeString)
{
EventListenerManager* elm = GetExistingListenerManager();
return elm ? elm->GetEventHandler(aType, aTypeString) : nullptr;
}
void
EventTarget::SetEventHandler(const nsAString& aType,
EventHandlerNonNull* aHandler,
ErrorResult& aRv)
{
if (!StringBeginsWith(aType, NS_LITERAL_STRING("on"))) {
aRv.Throw(NS_ERROR_INVALID_ARG);
return;
}
if (NS_IsMainThread()) {
nsCOMPtr<nsIAtom> type = NS_Atomize(aType);
SetEventHandler(type, EmptyString(), aHandler);
return;
}
SetEventHandler(nullptr,
Substring(aType, 2), // Remove "on"
aHandler);
}
void
EventTarget::SetEventHandler(nsIAtom* aType, const nsAString& aTypeString,
EventHandlerNonNull* aHandler)
{
GetOrCreateListenerManager()->SetEventHandler(aType, aTypeString, aHandler);
}
bool
EventTarget::HasNonSystemGroupListenersForUntrustedKeyEvents() const
{
EventListenerManager* elm = GetExistingListenerManager();
return elm && elm->HasNonSystemGroupListenersForUntrustedKeyEvents();
}
bool
EventTarget::HasNonPassiveNonSystemGroupListenersForUntrustedKeyEvents() const
{
EventListenerManager* elm = GetExistingListenerManager();
return elm && elm->HasNonPassiveNonSystemGroupListenersForUntrustedKeyEvents();
}
bool
EventTarget::IsApzAware() const
{
EventListenerManager* elm = GetExistingListenerManager();
return elm && elm->HasApzAwareListeners();
}
bool
EventTarget::DispatchEvent(Event& aEvent,
CallerType aCallerType,
ErrorResult& aRv)
{
bool result = false;
aRv = DispatchEvent(&aEvent, &result);
return !aEvent.DefaultPrevented(aCallerType);
}
} // namespace dom
} // namespace mozilla