blob: 1c2eebb269b8714f8882df9be26b4a6b1571c3c1 [file] [log] [blame]
// Copyright (c) 2015 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/android/metrics/launch_metrics.h"
#include "base/android/jni_string.h"
#include "base/metrics/histogram_macros.h"
#include "base/metrics/user_metrics.h"
#include "base/time/time.h"
#include "chrome/browser/android/shortcut_info.h"
#include "chrome/browser/banners/app_banner_settings_helper.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/engagement/site_engagement_service.h"
#include "chrome/browser/prefs/pref_metrics_service.h"
#include "chrome/browser/profiles/profile.h"
#include "components/rappor/rappor_utils.h"
#include "content/public/browser/web_contents.h"
#include "jni/LaunchMetrics_jni.h"
#include "url/gurl.h"
using base::android::JavaParamRef;
namespace metrics {
enum HomeScreenLaunch {
HOME_SCREEN_LAUNCH_STANDALONE = 0,
HOME_SCREEN_LAUNCH_SHORTCUT = 1,
HOME_SCREEN_LAUNCH_COUNT = 2
};
bool RegisterLaunchMetrics(JNIEnv* env) {
return RegisterNativesImpl(env);
}
static void RecordLaunch(JNIEnv* env,
const JavaParamRef<jclass>& caller,
jboolean standalone,
const JavaParamRef<jstring>& jurl,
int source,
const JavaParamRef<jobject>& jweb_contents) {
GURL url(base::android::ConvertJavaStringToUTF8(env, jurl));
content::WebContents* web_contents =
content::WebContents::FromJavaWebContents(jweb_contents);
if (web_contents && source == ShortcutInfo::SOURCE_APP_BANNER) {
// What a user has installed on the Home screen can become disconnected from
// what Chrome believes is on the Home screen if the user clears their data.
// Use the launch as a signal that the shortcut still exists.
AppBannerSettingsHelper::RecordBannerEvent(
web_contents, url, url.spec(),
AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
base::Time::Now());
// Tell the Site Engagement Service about this launch as sites recently
// launched from a shortcut receive a boost to their engagement.
SiteEngagementService* service = SiteEngagementService::Get(
Profile::FromBrowserContext(web_contents->GetBrowserContext()));
service->SetLastShortcutLaunchTime(url);
}
std::string rappor_metric_source;
if (source == ShortcutInfo::SOURCE_ADD_TO_HOMESCREEN)
rappor_metric_source = "Launch.HomeScreenSource.AddToHomeScreen";
else if (source == ShortcutInfo::SOURCE_APP_BANNER)
rappor_metric_source = "Launch.HomeScreenSource.AppBanner";
else if (source == ShortcutInfo::SOURCE_BOOKMARK_NAVIGATOR_WIDGET)
rappor_metric_source = "Launch.HomeScreenSource.BookmarkNavigatorWidget";
else if (source == ShortcutInfo::SOURCE_BOOKMARK_SHORTCUT_WIDGET)
rappor_metric_source = "Launch.HomeScreenSource.BookmarkShortcutWidget";
else
rappor_metric_source = "Launch.HomeScreenSource.Unknown";
UMA_HISTOGRAM_ENUMERATION("Launch.HomeScreenSource", source,
ShortcutInfo::SOURCE_COUNT);
rappor::SampleDomainAndRegistryFromGURL(g_browser_process->rappor_service(),
rappor_metric_source, url);
int action = standalone ? HOME_SCREEN_LAUNCH_STANDALONE
: HOME_SCREEN_LAUNCH_SHORTCUT;
std::string rappor_metric_action = standalone ? "Launch.HomeScreen.Standalone"
: "Launch.HomeScreen.Shortcut";
UMA_HISTOGRAM_ENUMERATION("Launch.HomeScreen", action,
HOME_SCREEN_LAUNCH_COUNT);
rappor::SampleDomainAndRegistryFromGURL(g_browser_process->rappor_service(),
rappor_metric_action, url);
}
static void RecordHomePageLaunchMetrics(
JNIEnv* env,
const JavaParamRef<jclass>& caller,
jboolean show_home_button,
jboolean homepage_is_ntp,
const JavaParamRef<jstring>& jhomepage_url) {
GURL homepage_url(base::android::ConvertJavaStringToUTF8(env, jhomepage_url));
PrefMetricsService::RecordHomePageLaunchMetrics(
show_home_button,
homepage_is_ntp,
homepage_url);
}
}; // namespace metrics