// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_SHARESHEET_SHARESHEET_METRICS_H_
#define CHROME_BROWSER_SHARESHEET_SHARESHEET_METRICS_H_
#include <string>
#include "base/containers/flat_set.h"
#include "chromeos/components/sharesheet/constants.h"
#include "components/services/app_service/public/cpp/intent.h"
namespace sharesheet {
extern const char kSharesheetUserActionResultHistogram[];
extern const char kSharesheetAppCountAllResultHistogram[];
extern const char kSharesheetAppCountArcResultHistogram[];
extern const char kSharesheetAppCountWebResultHistogram[];
extern const char kSharesheetLaunchSourceResultHistogram[];
extern const char kSharesheetFileCountResultHistogram[];
extern const char kSharesheetMimeTypeResultHistogram[];
extern const char kSharesheetCopyToClipboardMimeTypeResultHistogram[];
class SharesheetMetrics {
public:
// The action taken by a user after the sharesheet is invoked.
// This enum is for recording histograms and must be treated as append-only.
enum class UserAction {
kCancelledThroughClickingOut =
0, // User cancelled sharesheet by clicking outside the bubble.
kArc, // Opened an ARC app.
kNearbyAction, // User selected the nearby share action.
kCancelledThroughEscPress, // User cancelled sharesheet by pressing esc on
// keyboard.
kWeb, // Opened a web app.
kDriveAction, // User selected the drive share action.
kCopyAction, // User selected the copy share action.
kMaxValue = kCopyAction,
};
// The mime type that is being shared.
// This enum is for recording histograms and must be treated as append-only.
enum class MimeType {
kUnknown = 0,
kText = 1,
kUrl = 2,
kTextFile = 3,
kImageFile = 4,
kVideoFile = 5,
kAudioFile = 6,
kPdfFile = 7,
kMaxValue = kPdfFile
};
SharesheetMetrics();
static void RecordSharesheetActionMetrics(const UserAction action);
// Records number of each target type that appear in the Sharesheet
// when it is invoked.
static void RecordSharesheetAppCount(const int app_count);
static void RecordSharesheetArcAppCount(const int app_count);
static void RecordSharesheetWebAppCount(const int app_count);
static void RecordSharesheetLaunchSource(const LaunchSource source);
static void RecordSharesheetFilesSharedCount(const int file_count);
static void RecordSharesheetMimeType(const MimeType mime_type);
static void RecordCopyToClipboardShareActionMimeType(
const MimeType mime_type);
// Utility Functions
static MimeType ConvertMimeTypeForMetrics(std::string mime_type);
static base::flat_set<MimeType> GetMimeTypesFromIntentForMetrics(
const apps::IntentPtr& intent);
};
} // namespace sharesheet
#endif // CHROME_BROWSER_SHARESHEET_SHARESHEET_METRICS_H_