author | Jim Chen <nchen@mozilla.com> |
Sat, 10 Jan 2015 12:41:57 -0500 | |
changeset 223128 | d3e8e73bafdebd002ffc69a9684c93ac3718ecbe |
parent 223127 | 6cbf0b1ec001b3a26f1c83347b70cef858311adf |
child 223129 | 00c219a74edefbeb1b9187aab91a3927ec4e119c |
push id | 28082 |
push user | cbook@mozilla.com |
push date | Mon, 12 Jan 2015 10:44:52 +0000 |
treeherder | mozilla-central@643589c3ef94 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | smaug |
bugs | 1112212 |
milestone | 37.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
dom/events/EventListenerManager.cpp | file | annotate | diff | comparison | revisions | |
dom/events/EventListenerManager.h | file | annotate | diff | comparison | revisions |
--- a/dom/events/EventListenerManager.cpp +++ b/dom/events/EventListenerManager.cpp @@ -96,16 +96,18 @@ EventListenerManager::EventListenerManag : mMayHavePaintEventListener(false) , mMayHaveMutationListeners(false) , mMayHaveCapturingListeners(false) , mMayHaveSystemGroupListeners(false) , mMayHaveTouchEventListener(false) , mMayHaveScrollWheelEventListener(false) , mMayHaveMouseEnterLeaveEventListener(false) , mMayHavePointerEnterLeaveEventListener(false) + , mMayHaveKeyEventListener(false) + , mMayHaveInputOrCompositionEventListener(false) , mClearingListeners(false) , mIsMainThreadELM(NS_IsMainThread()) , mNoListenerForEvent(0) , mTarget(aTarget) { NS_ASSERTION(aTarget, "unexpected null pointer"); if (mIsMainThreadELM) { @@ -381,17 +383,31 @@ EventListenerManager::AddEventListenerIn #ifdef MOZ_GAMEPAD } else if (aType >= NS_GAMEPAD_START && aType <= NS_GAMEPAD_END) { nsPIDOMWindow* window = GetInnerWindowForTarget(); if (window) { window->SetHasGamepadEventListener(); } #endif + } else if (aTypeAtom == nsGkAtoms::onkeydown || + aTypeAtom == nsGkAtoms::onkeypress || + aTypeAtom == nsGkAtoms::onkeyup) { + if (!aFlags.mInSystemGroup) { + mMayHaveKeyEventListener = true; + } + } else if (aTypeAtom == nsGkAtoms::oncompositionend || + aTypeAtom == nsGkAtoms::oncompositionstart || + aTypeAtom == nsGkAtoms::oncompositionupdate || + aTypeAtom == nsGkAtoms::oninput) { + if (!aFlags.mInSystemGroup) { + mMayHaveInputOrCompositionEventListener = true; + } } + if (aTypeAtom && mTarget) { mTarget->EventListenerAdded(aTypeAtom); } } bool EventListenerManager::IsDeviceType(uint32_t aType) {
--- a/dom/events/EventListenerManager.h +++ b/dom/events/EventListenerManager.h @@ -398,16 +398,29 @@ public: * Returns true if there may be a scroll wheel listener registered, * false if there definitely isn't. */ bool MayHaveScrollWheelEventListener() { return mMayHaveScrollWheelEventListener; } bool MayHaveMouseEnterLeaveEventListener() { return mMayHaveMouseEnterLeaveEventListener; } bool MayHavePointerEnterLeaveEventListener() { return mMayHavePointerEnterLeaveEventListener; } + /** + * Returns true if there may be a key event listener (keydown, keypress, + * or keyup) registered, or false if there definitely isn't. + */ + bool MayHaveKeyEventListener() { return mMayHaveKeyEventListener; } + + /** + * Returns true if there may be an advanced input event listener (input, + * compositionstart, compositionupdate, or compositionend) registered, + * or false if there definitely isn't. + */ + bool MayHaveInputOrCompositionEventListener() { return mMayHaveInputOrCompositionEventListener; } + size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const; uint32_t ListenerCount() const { return mListeners.Length(); } void MarkForCC(); @@ -548,19 +561,21 @@ protected: uint32_t mMayHavePaintEventListener : 1; uint32_t mMayHaveMutationListeners : 1; uint32_t mMayHaveCapturingListeners : 1; uint32_t mMayHaveSystemGroupListeners : 1; uint32_t mMayHaveTouchEventListener : 1; uint32_t mMayHaveScrollWheelEventListener : 1; uint32_t mMayHaveMouseEnterLeaveEventListener : 1; uint32_t mMayHavePointerEnterLeaveEventListener : 1; + uint32_t mMayHaveKeyEventListener : 1; + uint32_t mMayHaveInputOrCompositionEventListener : 1; uint32_t mClearingListeners : 1; uint32_t mIsMainThreadELM : 1; - uint32_t mNoListenerForEvent : 23; + uint32_t mNoListenerForEvent : 20; nsAutoTObserverArray<Listener, 2> mListeners; dom::EventTarget* mTarget; // WEAK nsCOMPtr<nsIAtom> mNoListenerForEventAtom; friend class ELMCreationDetector; static uint32_t sMainThreadCreatedCount; };