Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Unified Diff: chrome/browser/engagement/site_engagement_helper.cc

Issue 1427913002: Implement media playing engagement detection for the site engagement service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@user-input-event
Patch Set: Tests Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/engagement/site_engagement_helper.cc
diff --git a/chrome/browser/engagement/site_engagement_helper.cc b/chrome/browser/engagement/site_engagement_helper.cc
index b1ead5f5db1109f6fa474bb2fa5762cabfdf0a20..05f756a3c9158ef50b8312489f5f8480e9daba9d 100644
--- a/chrome/browser/engagement/site_engagement_helper.cc
+++ b/chrome/browser/engagement/site_engagement_helper.cc
@@ -14,15 +14,15 @@
namespace {
-int g_seconds_between_user_input_check = 10;
-int g_seconds_tracking_delay_after_navigation = 10;
-int g_seconds_tracking_delay_after_show = 5;
+int g_seconds_to_pause_engagement_detection = 10;
+int g_seconds_delay_after_navigation = 10;
+int g_seconds_delay_after_show = 5;
} // anonymous namespace
DEFINE_WEB_CONTENTS_USER_DATA_KEY(SiteEngagementHelper);
-SiteEngagementHelper::InputTracker::InputTracker(
+SiteEngagementHelper::EngagementTracker::EngagementTracker(
content::WebContents* web_contents,
SiteEngagementHelper* helper)
: WebContentsObserver(web_contents),
@@ -30,38 +30,46 @@ SiteEngagementHelper::InputTracker::InputTracker(
pause_timer_(new base::Timer(true, false)),
is_tracking_(false) {}
-SiteEngagementHelper::InputTracker::~InputTracker() {}
+SiteEngagementHelper::EngagementTracker::~EngagementTracker() {}
-void SiteEngagementHelper::InputTracker::Start(base::TimeDelta initial_delay) {
+void SiteEngagementHelper::EngagementTracker::Start(
+ base::TimeDelta initial_delay) {
StartTimer(initial_delay);
}
-void SiteEngagementHelper::InputTracker::Pause() {
+void SiteEngagementHelper::EngagementTracker::Pause() {
is_tracking_ = false;
- StartTimer(base::TimeDelta::FromSeconds(g_seconds_between_user_input_check));
+ StartTimer(
+ base::TimeDelta::FromSeconds(g_seconds_to_pause_engagement_detection));
}
-void SiteEngagementHelper::InputTracker::Stop() {
+void SiteEngagementHelper::EngagementTracker::Stop() {
is_tracking_ = false;
pause_timer_->Stop();
}
-void SiteEngagementHelper::InputTracker::SetPauseTimerForTesting(
+void SiteEngagementHelper::EngagementTracker::SetPauseTimerForTesting(
scoped_ptr<base::Timer> timer) {
pause_timer_ = timer.Pass();
}
-void SiteEngagementHelper::InputTracker::StartTimer(base::TimeDelta delay) {
+void SiteEngagementHelper::EngagementTracker::StartTimer(
+ base::TimeDelta delay) {
pause_timer_->Start(
FROM_HERE, delay,
- base::Bind(&SiteEngagementHelper::InputTracker::StartTracking,
+ base::Bind(&SiteEngagementHelper::EngagementTracker::StartTracking,
base::Unretained(this)));
}
-void SiteEngagementHelper::InputTracker::StartTracking() {
+void SiteEngagementHelper::EngagementTracker::StartTracking() {
is_tracking_ = true;
}
+SiteEngagementHelper::InputTracker::InputTracker(
+ content::WebContents* web_contents,
+ SiteEngagementHelper* helper)
+ : EngagementTracker(web_contents, helper) {}
+
// Record that there was some user input, and defer handling of the input event.
// Once the timer finishes running, the callbacks detecting user input will be
// registered again.
@@ -94,15 +102,50 @@ void SiteEngagementHelper::InputTracker::DidGetUserInteraction(
Pause();
}
+SiteEngagementHelper::MediaTracker::MediaTracker(
+ content::WebContents* web_contents,
+ SiteEngagementHelper* helper)
+ : EngagementTracker(web_contents, helper),
+ is_hidden_(false),
+ is_playing_(false) {}
+
+void SiteEngagementHelper::MediaTracker::StartTracking() {
+ SiteEngagementHelper::EngagementTracker::StartTracking();
+
+ if (is_playing_)
+ helper_->RecordMediaPlaying(is_hidden_);
+
+ Pause();
calamity 2015/11/03 04:49:45 Okay, now that this is checking on a set interval,
dominickn 2015/11/03 07:03:54 Acknowledged.
+}
+
+void SiteEngagementHelper::MediaTracker::MediaStartedPlaying() {
+ is_playing_ = true;
+}
+
+void SiteEngagementHelper::MediaTracker::MediaPaused() {
+ is_playing_ = false;
+}
+
+void SiteEngagementHelper::MediaTracker::WasShown() {
+ is_hidden_ = false;
+}
+
+void SiteEngagementHelper::MediaTracker::WasHidden() {
+ is_hidden_ = true;
+}
+
SiteEngagementHelper::~SiteEngagementHelper() {
content::WebContents* contents = web_contents();
- if (contents)
+ if (contents) {
input_tracker_.Stop();
+ media_tracker_.Stop();
+ }
}
SiteEngagementHelper::SiteEngagementHelper(content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
input_tracker_(web_contents, this),
+ media_tracker_(web_contents, this),
record_engagement_(false) {}
void SiteEngagementHelper::RecordUserInput(
@@ -121,10 +164,25 @@ void SiteEngagementHelper::RecordUserInput(
}
}
+void SiteEngagementHelper::RecordMediaPlaying(bool is_hidden) {
+ content::WebContents* contents = web_contents();
+ if (contents) {
+ Profile* profile =
+ Profile::FromBrowserContext(contents->GetBrowserContext());
+ SiteEngagementService* service =
+ SiteEngagementServiceFactory::GetForProfile(profile);
+
+ if (service) {
+ service->HandleMediaPlaying(contents->GetVisibleURL(), is_hidden);
+ }
calamity 2015/11/03 04:49:45 nit: remove curlies.
dominickn 2015/11/03 07:03:54 Done.
+ }
+}
+
void SiteEngagementHelper::DidNavigateMainFrame(
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) {
input_tracker_.Stop();
+ media_tracker_.Stop();
record_engagement_ = params.url.SchemeIsHTTPOrHTTPS();
@@ -140,15 +198,19 @@ void SiteEngagementHelper::DidNavigateMainFrame(
if (service)
service->HandleNavigation(params.url, params.transition);
- input_tracker_.Start(
- base::TimeDelta::FromSeconds(g_seconds_tracking_delay_after_navigation));
+ base::TimeDelta delay =
+ base::TimeDelta::FromSeconds(g_seconds_delay_after_navigation);
+ input_tracker_.Start(delay);
+ media_tracker_.Start(delay);
}
void SiteEngagementHelper::WasShown() {
// Ensure that the input callbacks are registered when we come into view.
if (record_engagement_) {
- input_tracker_.Start(
- base::TimeDelta::FromSeconds(g_seconds_tracking_delay_after_show));
+ base::TimeDelta delay =
+ base::TimeDelta::FromSeconds(g_seconds_delay_after_show);
+ input_tracker_.Start(delay);
+ media_tracker_.Start(delay);
}
}
@@ -159,15 +221,15 @@ void SiteEngagementHelper::WasHidden() {
// static
void SiteEngagementHelper::SetSecondsBetweenUserInputCheck(int seconds) {
- g_seconds_between_user_input_check = seconds;
+ g_seconds_to_pause_engagement_detection = seconds;
}
// static
void SiteEngagementHelper::SetSecondsTrackingDelayAfterNavigation(int seconds) {
- g_seconds_tracking_delay_after_navigation = seconds;
+ g_seconds_delay_after_navigation = seconds;
}
// static
void SiteEngagementHelper::SetSecondsTrackingDelayAfterShow(int seconds) {
- g_seconds_tracking_delay_after_show = seconds;
+ g_seconds_delay_after_show = seconds;
}

Powered by Google App Engine
This is Rietveld 408576698