From 52b7d573b538348a6f142d0db4804878b5894d1e Mon Sep 17 00:00:00 2001 From: Masayuki Nakano Date: Wed, 14 Nov 2018 15:38:56 +0000 Subject: [PATCH] Bug 1506434 - Add telemetry probe to collect how percentage users meet web apps which listens "text" event r=smaug "text" event is Mozilla specific event, not in any standards. The event follows "compositionupdate" event and editor modifies composition string when receives the event in the system group. So, we'd like to stop dispatching this unnecessary event but we need to get actual usage in the web. Differential Revision: https://phabricator.services.mozilla.com/D11600 --HG-- extra : moz-landing-system : lando --- dom/base/nsGlobalWindowInner.cpp | 7 +++++++ dom/base/nsPIDOMWindow.h | 13 +++++++++++++ dom/events/EventListenerManager.cpp | 8 ++++++++ toolkit/components/telemetry/Histograms.json | 9 +++++++++ 4 files changed, 37 insertions(+) diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp index e1dd0d42a938..b30a24bc2278 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp @@ -1103,6 +1103,8 @@ nsGlobalWindowInner::~nsGlobalWindowInner() Telemetry::Accumulate(Telemetry::INNERWINDOWS_WITH_MUTATION_LISTENERS, mMutationBits ? 1 : 0); + Telemetry::Accumulate(Telemetry::INNERWINDOWS_WITH_TEXT_EVENT_LISTENERS, + mMayHaveTextEventListenerInDefaultGroup ? 1 : 0); // An inner window is destroyed, pull it out of the outer window's // list if inner windows. @@ -1721,9 +1723,13 @@ nsGlobalWindowInner::InnerSetNewDocument(JSContext* aCx, nsIDocument* aDocument) Telemetry::Accumulate(Telemetry::INNERWINDOWS_WITH_MUTATION_LISTENERS, mMutationBits ? 1 : 0); + Telemetry::Accumulate(Telemetry::INNERWINDOWS_WITH_TEXT_EVENT_LISTENERS, + mMayHaveTextEventListenerInDefaultGroup ? 1 : 0); // Clear our mutation bitfield. mMutationBits = 0; + + mMayHaveTextEventListenerInDefaultGroup = false; } nsresult @@ -8066,6 +8072,7 @@ nsPIDOMWindowInner::nsPIDOMWindowInner(nsPIDOMWindowOuter *aOuterWindow) mMayHaveSelectionChangeEventListener(false), mMayHaveMouseEnterLeaveEventListener(false), mMayHavePointerEnterLeaveEventListener(false), + mMayHaveTextEventListenerInDefaultGroup(false), mAudioCaptured(false), mOuterWindow(aOuterWindow), // Make sure no actual window ends up with mWindowID == 0 diff --git a/dom/base/nsPIDOMWindow.h b/dom/base/nsPIDOMWindow.h index f2a865c03c50..ceb6a30e62c8 100644 --- a/dom/base/nsPIDOMWindow.h +++ b/dom/base/nsPIDOMWindow.h @@ -256,6 +256,16 @@ public: mMayHavePointerEnterLeaveEventListener = true; } + /** + * Call this to indiate that some node (this window, its document, + * or content in that document) has a text event listener in the default + * group. + */ + void SetHasTextEventListenerInDefaultGroup() + { + mMayHaveTextEventListenerInDefaultGroup = true; + } + // Sets the event for window.event. Does NOT take ownership, so // the caller is responsible for clearing the event before the // event gets deallocated. Pass nullptr to set window.event to @@ -661,6 +671,9 @@ protected: bool mMayHaveSelectionChangeEventListener; bool mMayHaveMouseEnterLeaveEventListener; bool mMayHavePointerEnterLeaveEventListener; + // Only for telemetry probe so that you can remove this after the + // telemetry stops working. + bool mMayHaveTextEventListenerInDefaultGroup; bool mAudioCaptured; diff --git a/dom/events/EventListenerManager.cpp b/dom/events/EventListenerManager.cpp index 3e14b65f7308..5863f66b97c2 100644 --- a/dom/events/EventListenerManager.cpp +++ b/dom/events/EventListenerManager.cpp @@ -424,6 +424,14 @@ EventListenerManager::AddEventListenerInternal( doc->SetDocumentAndPageUseCounter(eUseCounter_custom_onfinish); } } + } else if (aTypeAtom == nsGkAtoms::ontext) { + // Ignore event listeners in the system group since editor needs to + // listen "text" events in the system group. + if (!aFlags.mInSystemGroup) { + if (nsPIDOMWindowInner* window = GetInnerWindowForTarget()) { + window->SetHasTextEventListenerInDefaultGroup(); + } + } } if (IsApzAwareListener(listener)) { diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index 87ecbb27c3d8..fe1fcd68e752 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -6783,6 +6783,15 @@ "kind": "boolean", "description": "Deleted or to-be-reused innerwindow which has had mutation event listeners." }, + "INNERWINDOWS_WITH_TEXT_EVENT_LISTENERS": { + "record_in_processes": ["content"], + "alert_emails": ["mnakano@mozilla.com"], + "bug_numbers": [1506434,1288640], + "expires_in_version": "67", + "kind": "boolean", + "releaseChannelCollection": "opt-out", + "description": "Deleted or to-be-reused innerwindow which has had text event listeners in the default group." + }, "CHARSET_OVERRIDE_SITUATION": { "record_in_processes": ["main", "content"], "expires_in_version": "never",