gecko-dev/dom/events/nsDOMEventTargetHelper.cpp
Robert O'Callahan 1dca717865 Bug 946065. Part 5: Move content/events to dom/ and flatten away 'src' directory. r=Ms2ger
--HG--
rename : content/events/src/DOMWheelEvent.cpp => dom/events/DOMWheelEvent.cpp
rename : content/events/src/DOMWheelEvent.h => dom/events/DOMWheelEvent.h
rename : content/events/src/EventTarget.cpp => dom/events/EventTarget.cpp
rename : content/events/public/EventTarget.h => dom/events/EventTarget.h
rename : content/events/public/MutationEvent.h => dom/events/MutationEvent.h
rename : content/events/src/PointerEvent.cpp => dom/events/PointerEvent.cpp
rename : content/events/src/PointerEvent.h => dom/events/PointerEvent.h
rename : content/events/src/SpeechRecognitionError.cpp => dom/events/SpeechRecognitionError.cpp
rename : content/events/src/SpeechRecognitionError.h => dom/events/SpeechRecognitionError.h
rename : content/events/src/TextComposition.cpp => dom/events/TextComposition.cpp
rename : content/events/src/TextComposition.h => dom/events/TextComposition.h
rename : content/events/src/Touch.cpp => dom/events/Touch.cpp
rename : content/events/src/Touch.h => dom/events/Touch.h
rename : content/events/crashtests/104310-1.html => dom/events/crashtests/104310-1.html
rename : content/events/crashtests/116206-1.html => dom/events/crashtests/116206-1.html
rename : content/events/crashtests/135345-1.html => dom/events/crashtests/135345-1.html
rename : content/events/crashtests/422009-1.xhtml => dom/events/crashtests/422009-1.xhtml
rename : content/events/crashtests/457776-1.html => dom/events/crashtests/457776-1.html
rename : content/events/crashtests/496308-1.html => dom/events/crashtests/496308-1.html
rename : content/events/crashtests/682637-1.html => dom/events/crashtests/682637-1.html
rename : content/events/crashtests/crashtests.list => dom/events/crashtests/crashtests.list
rename : content/events/crashtests/eventctor-nulldictionary.html => dom/events/crashtests/eventctor-nulldictionary.html
rename : content/events/crashtests/eventctor-nullstorage.html => dom/events/crashtests/eventctor-nullstorage.html
rename : content/events/crashtests/recursive-DOMNodeInserted.html => dom/events/crashtests/recursive-DOMNodeInserted.html
rename : content/events/crashtests/recursive-onload.html => dom/events/crashtests/recursive-onload.html
rename : content/events/src/moz.build => dom/events/moz.build
rename : content/events/src/nsAsyncDOMEvent.cpp => dom/events/nsAsyncDOMEvent.cpp
rename : content/events/public/nsAsyncDOMEvent.h => dom/events/nsAsyncDOMEvent.h
rename : content/events/src/nsContentEventHandler.cpp => dom/events/nsContentEventHandler.cpp
rename : content/events/src/nsContentEventHandler.h => dom/events/nsContentEventHandler.h
rename : content/events/src/nsDOMAnimationEvent.cpp => dom/events/nsDOMAnimationEvent.cpp
rename : content/events/src/nsDOMAnimationEvent.h => dom/events/nsDOMAnimationEvent.h
rename : content/events/src/nsDOMBeforeUnloadEvent.cpp => dom/events/nsDOMBeforeUnloadEvent.cpp
rename : content/events/src/nsDOMBeforeUnloadEvent.h => dom/events/nsDOMBeforeUnloadEvent.h
rename : content/events/src/nsDOMClipboardEvent.cpp => dom/events/nsDOMClipboardEvent.cpp
rename : content/events/src/nsDOMClipboardEvent.h => dom/events/nsDOMClipboardEvent.h
rename : content/events/src/nsDOMCommandEvent.cpp => dom/events/nsDOMCommandEvent.cpp
rename : content/events/src/nsDOMCommandEvent.h => dom/events/nsDOMCommandEvent.h
rename : content/events/src/nsDOMCompositionEvent.cpp => dom/events/nsDOMCompositionEvent.cpp
rename : content/events/src/nsDOMCompositionEvent.h => dom/events/nsDOMCompositionEvent.h
rename : content/events/src/nsDOMDataContainerEvent.cpp => dom/events/nsDOMDataContainerEvent.cpp
rename : content/events/src/nsDOMDataContainerEvent.h => dom/events/nsDOMDataContainerEvent.h
rename : content/events/src/nsDOMDataTransfer.cpp => dom/events/nsDOMDataTransfer.cpp
rename : content/events/src/nsDOMDataTransfer.h => dom/events/nsDOMDataTransfer.h
rename : content/events/src/nsDOMDeviceMotionEvent.cpp => dom/events/nsDOMDeviceMotionEvent.cpp
rename : content/events/src/nsDOMDeviceMotionEvent.h => dom/events/nsDOMDeviceMotionEvent.h
rename : content/events/src/nsDOMDragEvent.cpp => dom/events/nsDOMDragEvent.cpp
rename : content/events/src/nsDOMDragEvent.h => dom/events/nsDOMDragEvent.h
rename : content/events/src/nsDOMEvent.cpp => dom/events/nsDOMEvent.cpp
rename : content/events/src/nsDOMEvent.h => dom/events/nsDOMEvent.h
rename : content/events/src/nsDOMEventTargetHelper.cpp => dom/events/nsDOMEventTargetHelper.cpp
rename : content/events/src/nsDOMEventTargetHelper.h => dom/events/nsDOMEventTargetHelper.h
rename : content/events/src/nsDOMFocusEvent.cpp => dom/events/nsDOMFocusEvent.cpp
rename : content/events/src/nsDOMFocusEvent.h => dom/events/nsDOMFocusEvent.h
rename : content/events/public/nsDOMKeyNameList.h => dom/events/nsDOMKeyNameList.h
rename : content/events/src/nsDOMKeyboardEvent.cpp => dom/events/nsDOMKeyboardEvent.cpp
rename : content/events/src/nsDOMKeyboardEvent.h => dom/events/nsDOMKeyboardEvent.h
rename : content/events/src/nsDOMMessageEvent.cpp => dom/events/nsDOMMessageEvent.cpp
rename : content/events/src/nsDOMMessageEvent.h => dom/events/nsDOMMessageEvent.h
rename : content/events/src/nsDOMMouseEvent.cpp => dom/events/nsDOMMouseEvent.cpp
rename : content/events/src/nsDOMMouseEvent.h => dom/events/nsDOMMouseEvent.h
rename : content/events/src/nsDOMMouseScrollEvent.cpp => dom/events/nsDOMMouseScrollEvent.cpp
rename : content/events/src/nsDOMMouseScrollEvent.h => dom/events/nsDOMMouseScrollEvent.h
rename : content/events/src/nsDOMMutationEvent.cpp => dom/events/nsDOMMutationEvent.cpp
rename : content/events/src/nsDOMMutationEvent.h => dom/events/nsDOMMutationEvent.h
rename : content/events/src/nsDOMNotifyAudioAvailableEvent.cpp => dom/events/nsDOMNotifyAudioAvailableEvent.cpp
rename : content/events/src/nsDOMNotifyAudioAvailableEvent.h => dom/events/nsDOMNotifyAudioAvailableEvent.h
rename : content/events/src/nsDOMNotifyPaintEvent.cpp => dom/events/nsDOMNotifyPaintEvent.cpp
rename : content/events/src/nsDOMNotifyPaintEvent.h => dom/events/nsDOMNotifyPaintEvent.h
rename : content/events/src/nsDOMScrollAreaEvent.cpp => dom/events/nsDOMScrollAreaEvent.cpp
rename : content/events/src/nsDOMScrollAreaEvent.h => dom/events/nsDOMScrollAreaEvent.h
rename : content/events/src/nsDOMSimpleGestureEvent.cpp => dom/events/nsDOMSimpleGestureEvent.cpp
rename : content/events/src/nsDOMSimpleGestureEvent.h => dom/events/nsDOMSimpleGestureEvent.h
rename : content/events/src/nsDOMTextEvent.cpp => dom/events/nsDOMTextEvent.cpp
rename : content/events/src/nsDOMTextEvent.h => dom/events/nsDOMTextEvent.h
rename : content/events/src/nsDOMTouchEvent.cpp => dom/events/nsDOMTouchEvent.cpp
rename : content/events/src/nsDOMTouchEvent.h => dom/events/nsDOMTouchEvent.h
rename : content/events/src/nsDOMTransitionEvent.cpp => dom/events/nsDOMTransitionEvent.cpp
rename : content/events/src/nsDOMTransitionEvent.h => dom/events/nsDOMTransitionEvent.h
rename : content/events/src/nsDOMUIEvent.cpp => dom/events/nsDOMUIEvent.cpp
rename : content/events/src/nsDOMUIEvent.h => dom/events/nsDOMUIEvent.h
rename : content/events/src/nsDOMXULCommandEvent.cpp => dom/events/nsDOMXULCommandEvent.cpp
rename : content/events/src/nsDOMXULCommandEvent.h => dom/events/nsDOMXULCommandEvent.h
rename : content/events/src/nsEventDispatcher.cpp => dom/events/nsEventDispatcher.cpp
rename : content/events/public/nsEventDispatcher.h => dom/events/nsEventDispatcher.h
rename : content/events/src/nsEventListenerManager.cpp => dom/events/nsEventListenerManager.cpp
rename : content/events/src/nsEventListenerManager.h => dom/events/nsEventListenerManager.h
rename : content/events/src/nsEventListenerService.cpp => dom/events/nsEventListenerService.cpp
rename : content/events/src/nsEventListenerService.h => dom/events/nsEventListenerService.h
rename : content/events/public/nsEventNameList.h => dom/events/nsEventNameList.h
rename : content/events/src/nsEventStateManager.cpp => dom/events/nsEventStateManager.cpp
rename : content/events/src/nsEventStateManager.h => dom/events/nsEventStateManager.h
rename : content/events/public/nsEventStates.h => dom/events/nsEventStates.h
rename : content/events/public/nsIEventListenerService.idl => dom/events/nsIEventListenerService.idl
rename : dom/base/nsIJSEventListener.h => dom/events/nsIJSEventListener.h
rename : content/events/src/nsIMEStateManager.cpp => dom/events/nsIMEStateManager.cpp
rename : content/events/src/nsIMEStateManager.h => dom/events/nsIMEStateManager.h
rename : content/events/public/nsIPrivateTextEvent.h => dom/events/nsIPrivateTextEvent.h
rename : content/events/public/nsIPrivateTextRange.h => dom/events/nsIPrivateTextRange.h
rename : dom/src/events/nsJSEventListener.cpp => dom/events/nsJSEventListener.cpp
rename : dom/src/events/nsJSEventListener.h => dom/events/nsJSEventListener.h
rename : content/events/src/nsPaintRequest.cpp => dom/events/nsPaintRequest.cpp
rename : content/events/src/nsPaintRequest.h => dom/events/nsPaintRequest.h
rename : content/events/src/nsPrivateTextRange.cpp => dom/events/nsPrivateTextRange.cpp
rename : content/events/src/nsPrivateTextRange.h => dom/events/nsPrivateTextRange.h
rename : content/events/public/nsVKList.h => dom/events/nsVKList.h
rename : content/events/test/bug226361_iframe.xhtml => dom/events/test/bug226361_iframe.xhtml
rename : content/events/test/bug299673.js => dom/events/test/bug299673.js
rename : content/events/test/bug322588-popup.html => dom/events/test/bug322588-popup.html
rename : content/events/test/bug415498-doc1.html => dom/events/test/bug415498-doc1.html
rename : content/events/test/bug415498-doc2.html => dom/events/test/bug415498-doc2.html
rename : content/events/test/bug426082.html => dom/events/test/bug426082.html
rename : content/events/test/bug457672.html => dom/events/test/bug457672.html
rename : content/events/test/bug591249_iframe.xul => dom/events/test/bug591249_iframe.xul
rename : content/events/test/bug602962.xul => dom/events/test/bug602962.xul
rename : content/events/test/bug656379-1.html => dom/events/test/bug656379-1.html
rename : content/events/test/chrome.ini => dom/events/test/chrome.ini
rename : content/events/test/empty.js => dom/events/test/empty.js
rename : content/events/test/file_bug679494.html => dom/events/test/file_bug679494.html
rename : content/events/test/mochitest.ini => dom/events/test/mochitest.ini
rename : content/events/test/test_addEventListenerExtraArg.html => dom/events/test/test_addEventListenerExtraArg.html
rename : content/events/test/test_all_synthetic_events.html => dom/events/test/test_all_synthetic_events.html
rename : content/events/test/test_bug226361.xhtml => dom/events/test/test_bug226361.xhtml
rename : content/events/test/test_bug238987.html => dom/events/test/test_bug238987.html
rename : content/events/test/test_bug288392.html => dom/events/test/test_bug288392.html
rename : content/events/test/test_bug299673-1.html => dom/events/test/test_bug299673-1.html
rename : content/events/test/test_bug299673-2.html => dom/events/test/test_bug299673-2.html
rename : content/events/test/test_bug322588.html => dom/events/test/test_bug322588.html
rename : content/events/test/test_bug328885.html => dom/events/test/test_bug328885.html
rename : content/events/test/test_bug336682.js => dom/events/test/test_bug336682.js
rename : content/events/test/test_bug336682_1.html => dom/events/test/test_bug336682_1.html
rename : content/events/test/test_bug336682_2.xul => dom/events/test/test_bug336682_2.xul
rename : content/events/test/test_bug367781.html => dom/events/test/test_bug367781.html
rename : content/events/test/test_bug368835.html => dom/events/test/test_bug368835.html
rename : content/events/test/test_bug379120.html => dom/events/test/test_bug379120.html
rename : content/events/test/test_bug391568.xhtml => dom/events/test/test_bug391568.xhtml
rename : content/events/test/test_bug402089.html => dom/events/test/test_bug402089.html
rename : content/events/test/test_bug405632.html => dom/events/test/test_bug405632.html
rename : content/events/test/test_bug409604.html => dom/events/test/test_bug409604.html
rename : content/events/test/test_bug412567.html => dom/events/test/test_bug412567.html
rename : content/events/test/test_bug415498.xul => dom/events/test/test_bug415498.xul
rename : content/events/test/test_bug422132.html => dom/events/test/test_bug422132.html
rename : content/events/test/test_bug426082.html => dom/events/test/test_bug426082.html
rename : content/events/test/test_bug427537.html => dom/events/test/test_bug427537.html
rename : content/events/test/test_bug428988.html => dom/events/test/test_bug428988.html
rename : content/events/test/test_bug432698.html => dom/events/test/test_bug432698.html
rename : content/events/test/test_bug443985.html => dom/events/test/test_bug443985.html
rename : content/events/test/test_bug447736.html => dom/events/test/test_bug447736.html
rename : content/events/test/test_bug448602.html => dom/events/test/test_bug448602.html
rename : content/events/test/test_bug450876.html => dom/events/test/test_bug450876.html
rename : content/events/test/test_bug456273.html => dom/events/test/test_bug456273.html
rename : content/events/test/test_bug457672.html => dom/events/test/test_bug457672.html
rename : content/events/test/test_bug489671.html => dom/events/test/test_bug489671.html
rename : content/events/test/test_bug493251.html => dom/events/test/test_bug493251.html
rename : content/events/test/test_bug502818.html => dom/events/test/test_bug502818.html
rename : content/events/test/test_bug508479.html => dom/events/test/test_bug508479.html
rename : content/events/test/test_bug517851.html => dom/events/test/test_bug517851.html
rename : content/events/test/test_bug534833.html => dom/events/test/test_bug534833.html
rename : content/events/test/test_bug545268.html => dom/events/test/test_bug545268.html
rename : content/events/test/test_bug547996-1.html => dom/events/test/test_bug547996-1.html
rename : content/events/test/test_bug547996-2.xhtml => dom/events/test/test_bug547996-2.xhtml
rename : content/events/test/test_bug556493.html => dom/events/test/test_bug556493.html
rename : content/events/test/test_bug563329.html => dom/events/test/test_bug563329.html
rename : content/events/test/test_bug574663.html => dom/events/test/test_bug574663.html
rename : content/events/test/test_bug586961.xul => dom/events/test/test_bug586961.xul
rename : content/events/test/test_bug591249.xul => dom/events/test/test_bug591249.xul
rename : content/events/test/test_bug591815.html => dom/events/test/test_bug591815.html
rename : content/events/test/test_bug593959.html => dom/events/test/test_bug593959.html
rename : content/events/test/test_bug602962.xul => dom/events/test/test_bug602962.xul
rename : content/events/test/test_bug603008.html => dom/events/test/test_bug603008.html
rename : content/events/test/test_bug605242.html => dom/events/test/test_bug605242.html
rename : content/events/test/test_bug607464.html => dom/events/test/test_bug607464.html
rename : content/events/test/test_bug613634.html => dom/events/test/test_bug613634.html
rename : content/events/test/test_bug615597.html => dom/events/test/test_bug615597.html
rename : content/events/test/test_bug617528.xul => dom/events/test/test_bug617528.xul
rename : content/events/test/test_bug624127.html => dom/events/test/test_bug624127.html
rename : content/events/test/test_bug635465.html => dom/events/test/test_bug635465.html
rename : content/events/test/test_bug641477.html => dom/events/test/test_bug641477.html
rename : content/events/test/test_bug648573.html => dom/events/test/test_bug648573.html
rename : content/events/test/test_bug650493.html => dom/events/test/test_bug650493.html
rename : content/events/test/test_bug656379-1.html => dom/events/test/test_bug656379-1.html
rename : content/events/test/test_bug656379-2.html => dom/events/test/test_bug656379-2.html
rename : content/events/test/test_bug656954.html => dom/events/test/test_bug656954.html
rename : content/events/test/test_bug659071.html => dom/events/test/test_bug659071.html
rename : content/events/test/test_bug659350.html => dom/events/test/test_bug659350.html
rename : content/events/test/test_bug662678.html => dom/events/test/test_bug662678.html
rename : content/events/test/test_bug667612.html => dom/events/test/test_bug667612.html
rename : content/events/test/test_bug667919-1.html => dom/events/test/test_bug667919-1.html
rename : content/events/test/test_bug679494.xul => dom/events/test/test_bug679494.xul
rename : content/events/test/test_bug689564.html => dom/events/test/test_bug689564.html
rename : content/events/test/test_bug698929.html => dom/events/test/test_bug698929.html
rename : content/events/test/test_bug741666.html => dom/events/test/test_bug741666.html
rename : content/events/test/test_bug742376.html => dom/events/test/test_bug742376.html
rename : content/events/test/test_bug812744.html => dom/events/test/test_bug812744.html
rename : content/events/test/test_bug822898.html => dom/events/test/test_bug822898.html
rename : content/events/test/test_bug847597.html => dom/events/test/test_bug847597.html
rename : content/events/test/test_bug855741.html => dom/events/test/test_bug855741.html
rename : content/events/test/test_bug864040.html => dom/events/test/test_bug864040.html
rename : content/events/test/test_bug930374-chrome.html => dom/events/test/test_bug930374-chrome.html
rename : content/events/test/test_bug930374-content.html => dom/events/test/test_bug930374-content.html
rename : content/events/test/test_bug944011.html => dom/events/test/test_bug944011.html
rename : content/events/test/test_bug944847.html => dom/events/test/test_bug944847.html
rename : content/events/test/test_bug946632.html => dom/events/test/test_bug946632.html
rename : content/events/test/test_clickevent_on_input.html => dom/events/test/test_clickevent_on_input.html
rename : content/events/test/test_continuous_wheel_events.html => dom/events/test/test_continuous_wheel_events.html
rename : content/events/test/test_dblclick_explicit_original_target.html => dom/events/test/test_dblclick_explicit_original_target.html
rename : content/events/test/test_dom_keyboard_event.html => dom/events/test/test_dom_keyboard_event.html
rename : content/events/test/test_dom_mouse_event.html => dom/events/test/test_dom_mouse_event.html
rename : content/events/test/test_dom_wheel_event.html => dom/events/test/test_dom_wheel_event.html
rename : content/events/test/test_draggableprop.html => dom/events/test/test_draggableprop.html
rename : content/events/test/test_dragstart.html => dom/events/test/test_dragstart.html
rename : content/events/test/test_eventctors.html => dom/events/test/test_eventctors.html
rename : content/events/test/test_eventctors.xul => dom/events/test/test_eventctors.xul
rename : content/events/test/test_focus_disabled.html => dom/events/test/test_focus_disabled.html
rename : content/events/test/test_messageEvent.html => dom/events/test/test_messageEvent.html
rename : content/events/test/test_moz_mouse_pixel_scroll_event.html => dom/events/test/test_moz_mouse_pixel_scroll_event.html
rename : content/events/test/test_wheel_default_action.html => dom/events/test/test_wheel_default_action.html
rename : content/events/test/window_bug493251.html => dom/events/test/window_bug493251.html
rename : content/events/test/window_bug617528.xul => dom/events/test/window_bug617528.xul
rename : content/events/test/window_bug659071.html => dom/events/test/window_bug659071.html
rename : content/events/test/window_wheel_default_action.html => dom/events/test/window_wheel_default_action.html
extra : rebase_source : 5eb1db8f1791b8842ddc683e3c0ea13e4e3a933b
2014-01-10 16:03:25 +13:00

377 lines
11 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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 "nsDOMEventTargetHelper.h"
#include "nsContentUtils.h"
#include "nsEventDispatcher.h"
#include "nsIDocument.h"
#include "prprf.h"
#include "nsGlobalWindow.h"
#include "ScriptSettings.h"
#include "mozilla/Likely.h"
using namespace mozilla;
using namespace mozilla::dom;
NS_IMPL_CYCLE_COLLECTION_CLASS(nsDOMEventTargetHelper)
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(nsDOMEventTargetHelper)
NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER
NS_IMPL_CYCLE_COLLECTION_TRACE_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(nsDOMEventTargetHelper)
if (MOZ_UNLIKELY(cb.WantDebugInfo())) {
char name[512];
nsAutoString uri;
if (tmp->mOwnerWindow && tmp->mOwnerWindow->GetExtantDoc()) {
tmp->mOwnerWindow->GetExtantDoc()->GetDocumentURI(uri);
}
PR_snprintf(name, sizeof(name), "nsDOMEventTargetHelper %s",
NS_ConvertUTF16toUTF8(uri).get());
cb.DescribeRefCountedNode(tmp->mRefCnt.get(), name);
} else {
NS_IMPL_CYCLE_COLLECTION_DESCRIBE(nsDOMEventTargetHelper, tmp->mRefCnt.get())
}
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mListenerManager)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDOMEventTargetHelper)
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
NS_IMPL_CYCLE_COLLECTION_UNLINK(mListenerManager)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(nsDOMEventTargetHelper)
if (tmp->IsBlack()) {
if (tmp->mListenerManager) {
tmp->mListenerManager->MarkForCC();
}
return true;
}
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_BEGIN(nsDOMEventTargetHelper)
return tmp->IsBlackAndDoesNotNeedTracing(tmp);
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_END
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_BEGIN(nsDOMEventTargetHelper)
return tmp->IsBlack();
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_END
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMEventTargetHelper)
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_ENTRY(nsIDOMEventTarget)
NS_INTERFACE_MAP_ENTRY(mozilla::dom::EventTarget)
NS_INTERFACE_MAP_ENTRY(nsDOMEventTargetHelper)
NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDOMEventTargetHelper)
NS_IMPL_CYCLE_COLLECTING_RELEASE_WITH_LAST_RELEASE(nsDOMEventTargetHelper,
LastRelease())
NS_IMPL_DOMTARGET_DEFAULTS(nsDOMEventTargetHelper)
nsDOMEventTargetHelper::~nsDOMEventTargetHelper()
{
if (nsPIDOMWindow* owner = GetOwner()) {
static_cast<nsGlobalWindow*>(owner)->RemoveEventTargetObject(this);
}
if (mListenerManager) {
mListenerManager->Disconnect();
}
ReleaseWrapper(this);
}
void
nsDOMEventTargetHelper::BindToOwner(nsPIDOMWindow* aOwner)
{
MOZ_ASSERT(!aOwner || aOwner->IsInnerWindow());
nsCOMPtr<nsIGlobalObject> glob = do_QueryInterface(aOwner);
BindToOwner(glob);
}
void
nsDOMEventTargetHelper::BindToOwner(nsIGlobalObject* aOwner)
{
if (mParentObject) {
if (mOwnerWindow) {
static_cast<nsGlobalWindow*>(mOwnerWindow)->RemoveEventTargetObject(this);
mOwnerWindow = nullptr;
}
mParentObject = nullptr;
mHasOrHasHadOwnerWindow = false;
}
if (aOwner) {
mParentObject = aOwner;
// Let's cache the result of this QI for fast access and off main thread usage
mOwnerWindow = nsCOMPtr<nsPIDOMWindow>(do_QueryInterface(aOwner)).get();
if (mOwnerWindow) {
mHasOrHasHadOwnerWindow = true;
static_cast<nsGlobalWindow*>(mOwnerWindow)->AddEventTargetObject(this);
}
}
}
void
nsDOMEventTargetHelper::BindToOwner(nsDOMEventTargetHelper* aOther)
{
if (mOwnerWindow) {
static_cast<nsGlobalWindow*>(mOwnerWindow)->RemoveEventTargetObject(this);
mOwnerWindow = nullptr;
mParentObject = nullptr;
mHasOrHasHadOwnerWindow = false;
}
if (aOther) {
mHasOrHasHadOwnerWindow = aOther->HasOrHasHadOwner();
if (aOther->GetParentObject()) {
mParentObject = aOther->GetParentObject();
// Let's cache the result of this QI for fast access and off main thread usage
mOwnerWindow = nsCOMPtr<nsPIDOMWindow>(do_QueryInterface(mParentObject)).get();
if (mOwnerWindow) {
mHasOrHasHadOwnerWindow = true;
static_cast<nsGlobalWindow*>(mOwnerWindow)->AddEventTargetObject(this);
}
}
}
}
void
nsDOMEventTargetHelper::DisconnectFromOwner()
{
mOwnerWindow = nullptr;
mParentObject = nullptr;
// Event listeners can't be handled anymore, so we can release them here.
if (mListenerManager) {
mListenerManager->Disconnect();
mListenerManager = nullptr;
}
}
NS_IMETHODIMP
nsDOMEventTargetHelper::RemoveEventListener(const nsAString& aType,
nsIDOMEventListener* aListener,
bool aUseCapture)
{
nsEventListenerManager* elm = GetExistingListenerManager();
if (elm) {
elm->RemoveEventListener(aType, aListener, aUseCapture);
}
return NS_OK;
}
NS_IMPL_REMOVE_SYSTEM_EVENT_LISTENER(nsDOMEventTargetHelper)
NS_IMETHODIMP
nsDOMEventTargetHelper::AddEventListener(const nsAString& aType,
nsIDOMEventListener *aListener,
bool aUseCapture,
bool aWantsUntrusted,
uint8_t aOptionalArgc)
{
NS_ASSERTION(!aWantsUntrusted || aOptionalArgc > 1,
"Won't check if this is chrome, you want to set "
"aWantsUntrusted to false or make the aWantsUntrusted "
"explicit by making aOptionalArgc non-zero.");
if (aOptionalArgc < 2) {
nsresult rv = WantsUntrusted(&aWantsUntrusted);
NS_ENSURE_SUCCESS(rv, rv);
}
nsEventListenerManager* elm = GetOrCreateListenerManager();
NS_ENSURE_STATE(elm);
elm->AddEventListener(aType, aListener, aUseCapture, aWantsUntrusted);
return NS_OK;
}
void
nsDOMEventTargetHelper::AddEventListener(const nsAString& aType,
EventListener* aListener,
bool aUseCapture,
const Nullable<bool>& aWantsUntrusted,
ErrorResult& aRv)
{
bool wantsUntrusted;
if (aWantsUntrusted.IsNull()) {
nsresult rv = WantsUntrusted(&wantsUntrusted);
if (NS_FAILED(rv)) {
aRv.Throw(rv);
return;
}
} else {
wantsUntrusted = aWantsUntrusted.Value();
}
nsEventListenerManager* elm = GetOrCreateListenerManager();
if (!elm) {
aRv.Throw(NS_ERROR_UNEXPECTED);
return;
}
elm->AddEventListener(aType, aListener, aUseCapture, wantsUntrusted);
}
NS_IMETHODIMP
nsDOMEventTargetHelper::AddSystemEventListener(const nsAString& aType,
nsIDOMEventListener *aListener,
bool aUseCapture,
bool aWantsUntrusted,
uint8_t aOptionalArgc)
{
NS_ASSERTION(!aWantsUntrusted || aOptionalArgc > 1,
"Won't check if this is chrome, you want to set "
"aWantsUntrusted to false or make the aWantsUntrusted "
"explicit by making aOptionalArgc non-zero.");
if (aOptionalArgc < 2) {
nsresult rv = WantsUntrusted(&aWantsUntrusted);
NS_ENSURE_SUCCESS(rv, rv);
}
return NS_AddSystemEventListener(this, aType, aListener, aUseCapture,
aWantsUntrusted);
}
NS_IMETHODIMP
nsDOMEventTargetHelper::DispatchEvent(nsIDOMEvent* aEvent, bool* aRetVal)
{
nsEventStatus status = nsEventStatus_eIgnore;
nsresult rv =
nsEventDispatcher::DispatchDOMEvent(this, nullptr, aEvent, nullptr, &status);
*aRetVal = (status != nsEventStatus_eConsumeNoDefault);
return rv;
}
nsresult
nsDOMEventTargetHelper::DispatchTrustedEvent(const nsAString& aEventName)
{
nsCOMPtr<nsIDOMEvent> event;
NS_NewDOMEvent(getter_AddRefs(event), this, nullptr, nullptr);
nsresult rv = event->InitEvent(aEventName, false, false);
NS_ENSURE_SUCCESS(rv, rv);
return DispatchTrustedEvent(event);
}
nsresult
nsDOMEventTargetHelper::DispatchTrustedEvent(nsIDOMEvent* event)
{
event->SetTrusted(true);
bool dummy;
return DispatchEvent(event, &dummy);
}
nsresult
nsDOMEventTargetHelper::SetEventHandler(nsIAtom* aType,
JSContext* aCx,
const JS::Value& aValue)
{
nsRefPtr<EventHandlerNonNull> handler;
JS::Rooted<JSObject*> callable(aCx);
if (aValue.isObject() &&
JS_ObjectIsCallable(aCx, callable = &aValue.toObject())) {
handler = new EventHandlerNonNull(callable, mozilla::dom::GetIncumbentGlobal());
}
SetEventHandler(aType, EmptyString(), handler);
return NS_OK;
}
void
nsDOMEventTargetHelper::GetEventHandler(nsIAtom* aType,
JSContext* aCx,
JS::Value* aValue)
{
EventHandlerNonNull* handler = GetEventHandler(aType, EmptyString());
if (handler) {
*aValue = JS::ObjectValue(*handler->Callable());
} else {
*aValue = JS::NullValue();
}
}
nsresult
nsDOMEventTargetHelper::PreHandleEvent(nsEventChainPreVisitor& aVisitor)
{
aVisitor.mCanHandle = true;
aVisitor.mParentTarget = nullptr;
return NS_OK;
}
nsresult
nsDOMEventTargetHelper::PostHandleEvent(nsEventChainPostVisitor& aVisitor)
{
return NS_OK;
}
nsresult
nsDOMEventTargetHelper::DispatchDOMEvent(WidgetEvent* aEvent,
nsIDOMEvent* aDOMEvent,
nsPresContext* aPresContext,
nsEventStatus* aEventStatus)
{
return
nsEventDispatcher::DispatchDOMEvent(this, aEvent, aDOMEvent, aPresContext,
aEventStatus);
}
nsEventListenerManager*
nsDOMEventTargetHelper::GetOrCreateListenerManager()
{
if (!mListenerManager) {
mListenerManager = new nsEventListenerManager(this);
}
return mListenerManager;
}
nsEventListenerManager*
nsDOMEventTargetHelper::GetExistingListenerManager() const
{
return mListenerManager;
}
nsIScriptContext*
nsDOMEventTargetHelper::GetContextForEventHandlers(nsresult* aRv)
{
*aRv = CheckInnerWindowCorrectness();
if (NS_FAILED(*aRv)) {
return nullptr;
}
nsPIDOMWindow* owner = GetOwner();
return owner ? static_cast<nsGlobalWindow*>(owner)->GetContextInternal()
: nullptr;
}
nsresult
nsDOMEventTargetHelper::WantsUntrusted(bool* aRetVal)
{
nsresult rv;
nsIScriptContext* context = GetContextForEventHandlers(&rv);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIDocument> doc =
nsContentUtils::GetDocumentFromScriptContext(context);
// We can let listeners on workers to always handle all the events.
*aRetVal = (doc && !nsContentUtils::IsChromeDoc(doc)) || !NS_IsMainThread();
return rv;
}
void
nsDOMEventTargetHelper::EventListenerAdded(nsIAtom* aType)
{
mozilla::ErrorResult rv;
EventListenerWasAdded(Substring(nsDependentAtomString(aType), 2), rv);
}
void
nsDOMEventTargetHelper::EventListenerRemoved(nsIAtom* aType)
{
mozilla::ErrorResult rv;
EventListenerWasRemoved(Substring(nsDependentAtomString(aType), 2), rv);
}