blob: 3755a549f7f3a90d5db98b0ecb45caead2ceaa0a [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_WEBAPPS_BROWSER_PWA_INSTALL_PATH_TRACKER_H_
#define COMPONENTS_WEBAPPS_BROWSER_PWA_INSTALL_PATH_TRACKER_H_
#include "components/webapps/browser/installable/installable_metrics.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace webapps {
class PwaInstallPathTracker {
public:
PwaInstallPathTracker();
PwaInstallPathTracker& operator=(const PwaInstallPathTracker&) = delete;
PwaInstallPathTracker(const PwaInstallPathTracker&) = delete;
virtual ~PwaInstallPathTracker();
// Keeps track of what install path was used to install a PWA. Note that these
// values are persisted to logs. Entries should not be renumbered and numeric
// values should never be reused.
enum class InstallPathMetric {
// Unabled to determine install path.
kUnknownMetric = 0,
// The Ambient Badge was shown and used to trigger install via the install
// dialog.
kAmbientInfobar = 1,
// 'Install app' was selected in the App menu and used to trigger install
// via the Install dialog.
kAppMenuInstall = 2,
// The Install dialog was shown at the request of a website and was used to
// trigger install.
kApiInitiatedInstall = 3,
// The BottomSheet was shown ambiently (peeking) and used to trigger
// install. It may or may not have been expanded before installation
// started.
kAmbientBottomSheet = 4,
// The BottomSheet was shown expanded as a result of an App menu click and
// was used to trigger install.
kAppMenuBottomSheet = 5,
// The BottomSheet was shown expanded at the request of a website and was
// used to trigger install.
kApiInitiatedBottomSheet = 6,
// Same as kAmbientInfobar, except the InProduct Help was shown also.
kAmbientInfobarWithIph = 7,
// Same as kAppMenuInstall, except the InProduct Help was shown also.
kAppMenuInstallWithIph = 8,
// Same as kApiInstallInfobar, except the InProduct Help was shown also.
// Note that this is is added for completeness and is not expected to
// happen, because the IPH does not show when the ambient badge is deferred
// by the website.
kApiInitiatedInstallWithIph = 9,
// Same as kAmbientBottomSheet, except the InProduct Help was shown also.
kAmbientBottomSheetWithIph = 10,
// Same as kAppMenuBottomSheet, except the InProduct Help was shown also.
kAppMenuBottomSheetWithIph = 11,
// Same as kApiInitiatedBottomSheet, except the InProduct Help was shown
// also. Note that this is is added for completeness and is not expected to
// happen, because the IPH does not show when the bottom sheet is deferred
// by the website.
kApiInitiatedBottomSheetWithIph = 12,
// Keeps track of the last entry.
kMaxValue = kApiInitiatedBottomSheetWithIph,
};
// Tracks the route taken to an install of a PWA (whether the bottom sheet
// was shown or the infobar/install) and what triggered it (install source).
void TrackInstallPath(bool bottom_sheet, WebappInstallSource install_source);
// Tracks that the IPH has been shown.
void TrackIphWasShown();
// Resets the tracker (forgets previously recorder events).
void Reset();
// Gets the metric for the current install path, if available, or
// kUnknownMetric otherwise.
InstallPathMetric GetInstallPathMetric();
private:
// The source that initiated the install, for example: App menu, API or
// ambient badge.
WebappInstallSource install_source_ = WebappInstallSource::COUNT;
// Whether the bottom sheet install UI was shown or the infobar/install modal.
bool bottom_sheet_ = false;
// Whether the IPH has been shown to the user.
bool iph_was_shown_ = false;
};
} // namespace webapps
#endif // COMPONENTS_WEBAPPS_BROWSER_PWA_INSTALL_PATH_TRACKER_H_