blob: 3bc84fea0be1668eaa897d732155850b6cf00132 [file] [log] [blame]
// Copyright 2013 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.
#include "chrome/browser/ui/bookmarks/bookmark_stats.h"
#include "chrome/browser/profiles/profile.h"
#include "base/metrics/histogram_macros.h"
#include "base/metrics/user_metrics.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/bookmarks/browser/bookmark_node_data.h"
using bookmarks::BookmarkNode;
namespace {
bool IsBookmarkBarLocation(BookmarkLaunchLocation location) {
return location == BOOKMARK_LAUNCH_LOCATION_ATTACHED_BAR ||
location == BOOKMARK_LAUNCH_LOCATION_BAR_SUBFOLDER;
}
auto GetMetricProfile(const Profile* profile) {
DCHECK(profile);
DCHECK(profile->IsRegularProfile() || profile->IsIncognitoProfile());
return profile->IsRegularProfile()
? profile_metrics::BrowserProfileType::kRegular
: profile_metrics::BrowserProfileType::kIncognito;
}
} // namespace
void RecordBookmarkLaunch(BookmarkLaunchLocation location,
profile_metrics::BrowserProfileType profile_type) {
if (IsBookmarkBarLocation(location)) {
base::RecordAction(base::UserMetricsAction("ClickedBookmarkBarURLButton"));
} else if (location == BOOKMARK_LAUNCH_LOCATION_APP_MENU) {
base::RecordAction(
base::UserMetricsAction("WrenchMenu_Bookmarks_LaunchURL"));
} else if (location == BOOKMARK_LAUNCH_LOCATION_TOP_MENU) {
base::RecordAction(base::UserMetricsAction("TopMenu_Bookmarks_LaunchURL"));
}
UMA_HISTOGRAM_ENUMERATION("Bookmarks.LaunchLocation", location,
BOOKMARK_LAUNCH_LOCATION_LIMIT);
UMA_HISTOGRAM_ENUMERATION("Bookmarks.UsageCountPerProfileType", profile_type);
}
void RecordBookmarkFolderLaunch(BookmarkLaunchLocation location) {
if (IsBookmarkBarLocation(location)) {
base::RecordAction(
base::UserMetricsAction("MiddleClickedBookmarkBarFolder"));
}
}
void RecordBookmarkFolderOpen(BookmarkLaunchLocation location) {
if (IsBookmarkBarLocation(location))
base::RecordAction(base::UserMetricsAction("ClickedBookmarkBarFolder"));
}
void RecordBookmarkAppsPageOpen(BookmarkLaunchLocation location) {
if (IsBookmarkBarLocation(location)) {
base::RecordAction(
base::UserMetricsAction("ClickedBookmarkBarAppsShortcutButton"));
}
}
void RecordBookmarkEdited(BookmarkLaunchLocation location) {
UMA_HISTOGRAM_ENUMERATION("Bookmarks.EditLocation", location,
BOOKMARK_LAUNCH_LOCATION_LIMIT);
}
void RecordBookmarkRemoved(BookmarkLaunchLocation location) {
UMA_HISTOGRAM_ENUMERATION("Bookmarks.RemovedLocation", location,
BOOKMARK_LAUNCH_LOCATION_LIMIT);
}
void RecordBookmarksAdded(const Profile* profile) {
profile_metrics::BrowserProfileType profile_type = GetMetricProfile(profile);
UMA_HISTOGRAM_ENUMERATION("Bookmarks.AddedPerProfileType", profile_type);
}
void RecordBookmarkAllTabsWithTabsCount(const Profile* profile, int count) {
profile_metrics::BrowserProfileType profile_type = GetMetricProfile(profile);
if (profile_type == profile_metrics::BrowserProfileType::kRegular) {
UMA_HISTOGRAM_COUNTS_100("Bookmarks.BookmarkAllTabsWithTabsCount.Regular",
count);
} else {
UMA_HISTOGRAM_COUNTS_100("Bookmarks.BookmarkAllTabsWithTabsCount.Incognito",
count);
}
}
void RecordBookmarkDropped(const bookmarks::BookmarkNodeData& data,
const bookmarks::BookmarkNode* parent_node,
bool is_reorder) {
enum class DropType : int {
kDropURLOntoBar = 0,
kDropURLIntoFolder = 1,
kDropBookmarkOntoBar = 2,
kDropBookmarkIntoFolder = 3,
kDropFolderOntoBar = 4,
kDropFolderIntoFolder = 5,
kReorderBookmarkOnBar = 6,
kReorderBookmarkInFolder = 7,
kReorderFolderOnBar = 8,
kReorderSubfolderInFolder = 9,
kMaxValue = kReorderSubfolderInFolder
};
// Note that `has_single_url()` is true for individual existing bookmarks as
// well as raw URLs, so we have to check the ID as well.
DropType drop_type;
if (data.has_single_url() && data.elements[0].id() == 0) {
drop_type = parent_node->is_permanent_node() ? DropType::kDropURLOntoBar
: DropType::kDropURLIntoFolder;
} else if (is_reorder) {
if (data.has_single_url()) {
drop_type = parent_node->is_permanent_node()
? DropType::kReorderBookmarkOnBar
: DropType::kReorderBookmarkInFolder;
} else {
drop_type = parent_node->is_permanent_node()
? DropType::kReorderFolderOnBar
: DropType::kReorderSubfolderInFolder;
}
} else {
if (data.has_single_url()) {
drop_type = parent_node->is_permanent_node()
? DropType::kDropBookmarkOntoBar
: DropType::kDropBookmarkIntoFolder;
} else {
drop_type = parent_node->is_permanent_node()
? DropType::kDropFolderOntoBar
: DropType::kDropFolderIntoFolder;
}
}
UMA_HISTOGRAM_ENUMERATION("Bookmarks.BookmarksBar.DragDropType", drop_type);
}