Chromium Code Reviews| 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; |
| } |