fune/dom/geolocation/MLSFallback.h
Kagami Sascha Rosylight aa2b46d4e7 Bug 1905928 - Part 3: Add glean telemetry entries a=RyanVM
Each provider has different fallback behavior:
* Windows/macOS: Fallback only on error
* Gpsd/Portal: Fallback only on timeout
* Geoclue: Fallback on both

To meet all the behaviors MLSFallback got FallbackReason/ShutdownReason and report via Glean based on that.

Original Revision: https://phabricator.services.mozilla.com/D216085

Differential Revision: https://phabricator.services.mozilla.com/D216942
2024-07-19 13:37:04 +00:00

59 lines
1.9 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 "nsCOMPtr.h"
#include "nsITimer.h"
#include "nsINamed.h"
class nsIGeolocationUpdate;
class nsIGeolocationProvider;
/*
This class wraps the NetworkGeolocationProvider in a delayed startup.
It is for providing a fallback to MLS when:
1) using another provider as the primary provider, and
2) that primary provider may fail to return a result (i.e. the error returned
is indeterminate, or no error callback occurs)
The intent is that the primary provider is started, then MLSFallback
is started with sufficient delay that the primary provider will respond first
if successful (in the majority of cases).
MLS has an average response of 3s, so with the 2s default delay, a response can
be expected in 5s.
Telemetry is recommended to monitor that the primary provider is responding
first when expected to do so.
*/
class MLSFallback : public nsITimerCallback, public nsINamed {
public:
NS_DECL_ISUPPORTS
NS_DECL_NSITIMERCALLBACK
NS_DECL_NSINAMED
explicit MLSFallback(uint32_t delayMs = 2000);
enum class FallbackReason : uint8_t {
Error,
Timeout,
};
nsresult Startup(nsIGeolocationUpdate* aWatcher,
FallbackReason aReason = FallbackReason::Error);
enum class ShutdownReason : uint8_t {
ProviderResponded,
ProviderShutdown,
};
nsresult Shutdown(ShutdownReason aReason);
private:
nsresult CreateMLSFallbackProvider();
virtual ~MLSFallback();
nsCOMPtr<nsITimer> mHandoffTimer;
nsCOMPtr<nsIGeolocationProvider> mMLSFallbackProvider;
nsCOMPtr<nsIGeolocationUpdate> mUpdateWatcher;
const uint32_t mDelayMs;
};