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

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

Issue 1373363005: Add a delay to Site Engagement tracking after navigation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months 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 9f78d8d2a0b0ea43c84168e66ca34da56c97d157..5e5b65eb20f2a512bc6efcf99020991f9a1c8a3f 100644
--- a/chrome/browser/engagement/site_engagement_helper.cc
+++ b/chrome/browser/engagement/site_engagement_helper.cc
@@ -15,7 +15,7 @@
namespace {
-double g_seconds_between_user_input_check = 10;
+int kSecondsBetweenUserInputCheck = 10;
} // anonymous namespace
@@ -79,7 +79,7 @@ void SiteEngagementHelper::InputTracker::PauseTracking(
StopTracking(host);
pause_timer_->Start(
FROM_HERE,
- base::TimeDelta::FromSeconds(g_seconds_between_user_input_check),
+ base::TimeDelta::FromSeconds(kSecondsBetweenUserInputCheck),
base::Bind(&SiteEngagementHelper::InputTracker::ResumeTracking,
base::Unretained(this)));
}
@@ -100,7 +100,11 @@ void SiteEngagementHelper::InputTracker::StopTracking(
}
}
-void SiteEngagementHelper::InputTracker::SetTimerForTesting(
+bool SiteEngagementHelper::InputTracker::IsTracking() {
+ return callbacks_added_;
+}
+
+void SiteEngagementHelper::InputTracker::SetPauseTimerForTesting(
scoped_ptr<base::Timer> timer) {
pause_timer_ = timer.Pass();
}
@@ -113,8 +117,9 @@ SiteEngagementHelper::~SiteEngagementHelper() {
SiteEngagementHelper::SiteEngagementHelper(content::WebContents* contents)
: content::WebContentsObserver(contents),
+ navigation_timer_(new base::Timer(true, false)),
input_tracker_(this),
- record_engagement_(false) { }
+ record_engagement_(false) {}
void SiteEngagementHelper::RecordUserInput() {
TRACE_EVENT0("SiteEngagement", "RecordUserInput");
@@ -131,20 +136,17 @@ void SiteEngagementHelper::RecordUserInput() {
}
}
-bool SiteEngagementHelper::ShouldRecordEngagement() {
- return record_engagement_;
-}
-
void SiteEngagementHelper::DidNavigateMainFrame(
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) {
content::WebContents* contents = web_contents();
input_tracker_.StopTracking(contents->GetRenderViewHost());
+ navigation_timer_->Stop();
- // Ignore all schemes except HTTP and HTTPS.
- record_engagement_ = params.url.SchemeIsHTTPOrHTTPS();
+ record_engagement_ = false;
- if (!ShouldRecordEngagement())
+ // Ignore all schemes except HTTP and HTTPS.
+ if (!params.url.SchemeIsHTTPOrHTTPS())
return;
Profile* profile =
@@ -155,7 +157,11 @@ void SiteEngagementHelper::DidNavigateMainFrame(
if (service)
service->HandleNavigation(params.url, params.transition);
- input_tracker_.StartTracking(contents->GetRenderViewHost());
+ // Input tracking commences after a delay.
+ navigation_timer_->Start(
+ FROM_HERE, base::TimeDelta::FromSeconds(kSecondsBetweenUserInputCheck),
+ base::Bind(&SiteEngagementHelper::OnNavigationTimerFired,
+ base::Unretained(this)));
}
void SiteEngagementHelper::RenderViewHostChanged(
@@ -163,29 +169,38 @@ void SiteEngagementHelper::RenderViewHostChanged(
content::RenderViewHost* new_host) {
// On changing the render view host, we need to re-register the callbacks
// listening for user input.
- if (ShouldRecordEngagement()) {
+ if (input_tracker_.IsTracking()) {
if (old_host)
input_tracker_.StopTracking(old_host);
+
input_tracker_.StartTracking(new_host);
}
}
+void SiteEngagementHelper::SetNavigationTimerForTesting(
+ scoped_ptr<base::Timer> timer) {
+ navigation_timer_ = timer.Pass();
+}
+
+void SiteEngagementHelper::OnNavigationTimerFired() {
+ record_engagement_ = true;
+ if (visible_)
+ input_tracker_.StartTracking(web_contents()->GetRenderViewHost());
+}
+
void SiteEngagementHelper::WasShown() {
+ visible_ = true;
// Ensure that the input callbacks are registered when we come into view.
- if (ShouldRecordEngagement())
+ if (record_engagement_)
input_tracker_.StartTracking(web_contents()->GetRenderViewHost());
dominickn 2015/10/06 00:04:41 Is it correct that WasShown() should immediately t
calamity 2015/10/06 03:39:55 Agreed.
}
void SiteEngagementHelper::WasHidden() {
+ visible_ = false;
// Ensure that the input callbacks are not registered when hidden.
- if (ShouldRecordEngagement()) {
+ if (input_tracker_.IsTracking()) {
content::WebContents* contents = web_contents();
if (contents)
input_tracker_.StopTracking(contents->GetRenderViewHost());
}
}
-
-// static
dominickn 2015/10/06 00:04:41 Is there a particular reason for removing this fun
calamity 2015/10/06 03:39:55 Yeah, ok.
-void SiteEngagementHelper::SetSecondsBetweenUserInputCheck(double seconds) {
- g_seconds_between_user_input_check = seconds;
-}

Powered by Google App Engine
This is Rietveld 408576698