blob: ea320b0aaa33491f34169537ace662c2cfd8bc5e [file] [log] [blame]
// Copyright 2017 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_INSTALLABLE_INSTALLABLE_METRICS_H_
#define COMPONENTS_WEBAPPS_BROWSER_INSTALLABLE_INSTALLABLE_METRICS_H_
#include "base/macros.h"
#include "base/time/time.h"
#include "content/public/browser/service_worker_context.h"
namespace content {
class WebContents;
}
namespace webapps {
// A Java counterpart will be generated for this enum.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.webapps
enum class InstallTrigger {
AMBIENT_BADGE,
API,
AUTOMATIC_PROMPT,
MENU,
CREATE_SHORTCUT,
};
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
// Sources for triggering webapp installation.
// NOTE: each enum entry which is reportable must be added to
// InstallableMetrics::IsReportableInstallSource().
// This enum backs a UMA histogram and must be treated as append-only.
// A Java counterpart will be generated for this enum.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.webapps
enum class WebappInstallSource {
// Menu item in a browser tab.
MENU_BROWSER_TAB = 0,
// Menu item in an Android Custom Tab.
MENU_CUSTOM_TAB = 1,
// Automatic prompt in a browser tab.
AUTOMATIC_PROMPT_BROWSER_TAB = 2,
// Automatic prompt in an Android Custom Tab.
AUTOMATIC_PROMPT_CUSTOM_TAB = 3,
// Developer-initiated API in a browser tab.
API_BROWSER_TAB = 4,
// Developer-initiated API in an Android Custom Tab.
API_CUSTOM_TAB = 5,
// Installation from a debug flow (e.g. via devtools).
DEVTOOLS = 6,
// Extensions management API (not reported).
MANAGEMENT_API = 7,
// PWA ambient badge in an Android Custom Tab.
AMBIENT_BADGE_BROWSER_TAB = 8,
// PWA ambient badge in browser Tab.
AMBIENT_BADGE_CUSTOM_TAB = 9,
// Installation via ARC on Chrome OS.
ARC = 10,
// An internal default-installed app on Chrome OS (i.e. triggered from code).
INTERNAL_DEFAULT = 11,
// An external default-installed app on Chrome OS (i.e. triggered from an
// external source file).
EXTERNAL_DEFAULT = 12,
// A policy-installed app on Chrome OS.
EXTERNAL_POLICY = 13,
// A system app installed on Chrome OS.
SYSTEM_DEFAULT = 14,
// Install icon in the Omnibox.
OMNIBOX_INSTALL_ICON = 15,
// Installed from sync (not reported by |TrackInstallEvent|).
SYNC = 16,
// Create shortcut item in menu
MENU_CREATE_SHORTCUT = 17,
// Add any new values above this one.
COUNT,
};
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
// Sources for triggering webapp uninstallation.
enum class WebappUninstallSource {
// Unknown surface, potentially in ChromeOS.
kUnknown = 0,
// Menu item from the 3-dot menu of a WebApp window.
kAppMenu = 1,
// Context menu for a WebApp in chrome://apps.
kAppsPage = 2,
// Via OS Settings or Controls.
kOsSettings = 3,
// Uninstalled from Sync.
kSync = 4,
// App management surface, currently ChromeOS-only.
kAppManagement = 5,
// Migration.
kMigration = 6,
// App List (Launcher in ChromeOS).
kAppList = 7,
// Shelf (in ChromeOS).
kShelf = 8,
// Internally managed pre-installed app management.
kInternalPreinstalled = 9,
// Externally managed pre-installed app management.
kExternalPreinstalled = 10,
// Enterprise policy app management.
kExternalPolicy = 11,
// System app management on ChromeOS.
kSystemPreinstalled = 12,
// Placeholder app management for preinstalled apps.
kPlaceholderReplacement = 13,
// Externally managed Arc apps.
kArc = 14,
// Add any new values above this one.
kMaxValue = kArc,
};
// This is the result of the promotability check that is recorded in the
// Webapp.CheckServiceWorker.Status histogram.
// Do not reorder or reuse any values in this enum. New values must be added to
// the end only.
enum class ServiceWorkerOfflineCapability {
kNoServiceWorker,
kServiceWorkerNoFetchHandler,
// Service worker with a fetch handler but no offline support.
kServiceWorkerNoOfflineSupport,
// Service worker with a fetch handler with offline support.
kServiceWorkerWithOfflineSupport,
// Note: kMaxValue is needed only for histograms.
kMaxValue = kServiceWorkerWithOfflineSupport,
};
class InstallableMetrics {
public:
// Records |source| in the Webapp.Install.InstallEvent histogram.
// IsReportableInstallSource(|source|) must be true.
static void TrackInstallEvent(WebappInstallSource source);
// Returns whether |source| is a value that may be passed to
// TrackInstallEvent.
static bool IsReportableInstallSource(WebappInstallSource source);
// Returns whether the install initiated by the user based on install source.
static bool IsUserInitiatedInstallSource(WebappInstallSource source);
// Returns the appropriate WebappInstallSource for |web_contents| when the
// install originates from |trigger|.
static WebappInstallSource GetInstallSource(
content::WebContents* web_contents,
InstallTrigger trigger);
// Records |time| in the Webapp.CheckServiceWorker.Time histogram.
static void RecordCheckServiceWorkerTime(base::TimeDelta time);
// Records |status| in the Webapp.CheckServiceWorker.Status histogram.
static void RecordCheckServiceWorkerStatus(
ServiceWorkerOfflineCapability status);
// Converts ServiceWorkerCapability to ServiceWorkerOfflineCapability.
static ServiceWorkerOfflineCapability ConvertFromServiceWorkerCapability(
content::ServiceWorkerCapability capability);
// Converts OfflineCapability to ServiceWorkerOfflineCapability.
static ServiceWorkerOfflineCapability ConvertFromOfflineCapability(
content::OfflineCapability capability);
// Records |source| in the Webapp.Install.UninstallEvent histogram.
static void TrackUninstallEvent(WebappUninstallSource source);
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(InstallableMetrics);
};
} // namespace webapps
#endif // COMPONENTS_WEBAPPS_BROWSER_INSTALLABLE_INSTALLABLE_METRICS_H_