From f812ae425903dc90481ea86a52811c726257fdd1 Mon Sep 17 00:00:00 2001 From: Severin Rudie Date: Wed, 23 Oct 2019 10:21:46 -0700 Subject: [PATCH] For #3676: fix duplicate uri events on first load (#6128) --- .../fenix/browser/UriOpenedObserver.kt | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt b/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt index ba839864d..d6ca725cf 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt @@ -30,14 +30,33 @@ class UriOpenedObserver( sessionManager.register(this, owner) } + /** + * Currently, [Session.Observer.onLoadingStateChanged] is called multiple times the first + * time a new session loads a page. This is inflating our telemetry numbers, so we need to + * handle it, but we will be able to remove this code when [onLoadingStateChanged] has + * been fixed. + * + * See Fenix #3676 + * See AC https://github.com/mozilla-mobile/android-components/issues/4795 + * TODO remove this class after AC #4795 has been fixed + */ + private class TemporaryFix { + var eventSentFor: String? = null + + fun shouldSendEvent(newUrl: String): Boolean = eventSentFor != newUrl + } + @VisibleForTesting internal val singleSessionObserver = object : Session.Observer { private var urlLoading: String? = null + private val temporaryFix = TemporaryFix() + override fun onLoadingStateChanged(session: Session, loading: Boolean) { if (loading) { urlLoading = session.url - } else if (urlLoading != null && !session.private) { + } else if (urlLoading != null && !session.private && temporaryFix.shouldSendEvent(session.url)) { + temporaryFix.eventSentFor = session.url metrics.track(Event.UriOpened) } }