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; |
} |